import unittest
import docker
import aiohttp
import asyncio
import server
import time


class TestServer(unittest.IsolatedAsyncioTestCase):
    async def testStart(self):
        self.container.stop()
        time.sleep(5)
        async with self.session.post('http://localhost:8080/mc_test/start') as resp:
            assert(resp.status == 200)
     
    async def testStop(self):
        async with self.session.post('http://localhost:8080/mc_test/stop') as resp:
            assert(resp.status == 200)
    

    async def testStatus(self):
        async with self.session.post('http://localhost:8080/mc_test/status') as resp:
            assert(resp.status == 200)

    async def testCommand(self):
        async with self.session.post('http://localhost:8080/mc_test/command/c2F5IEhlbGxv') as resp:
            assert(resp.status == 200)

    async def testLogs(self):
        pass

    async def asyncSetUp(self):
        self.client = docker.from_env()
        self.container = self.client.containers.run("mc",detach=True, name="mc_test")
        self.session = aiohttp.ClientSession()
        #self.req = make_mocked_request('POST', '/{server}/start', match_info={"server": "mc_test"})
       
        
    async def asyncTearDown(self):

        self.container.stop()
        self.container.remove(force=True)
        await self.session.close()
        self.client.close()

async def fetch(session, url):
    async with session.get(url) as response:
        return await response.text()


async def startServer(command):
    return await command()



if __name__ == "__main__":
    unittest.main()