def test_with_bad_colour(self): """Test it rejects a bogus colour.""" client = app.test_client() data = json.dumps({"colour": [400, -35, 127], "mode": "sweep"}) response = client.post("/desk/light", headers=headers, data=data) self.assertEqual(response.status_code, 422) self.assertEqual( json.loads(response.data), {"error": "`[400, -35, 127]` is not a valid RGB colour"}, )
def test_with_no_colour(self): """Test it rejects a payload with no colour.""" client = app.test_client() data = json.dumps({}) response = client.post("/desk/light", headers=headers, data=data) self.assertEqual(response.status_code, 422) self.assertEqual( json.loads(response.data), {"error": "`colour` must be supplied"}, )
def test_get_no_colour(self): """Test it's OK when there's no colour recorded.""" app.redis.delete("colours/desk") client = app.test_client() response = client.get("/desk/colour") self.assertEqual(response.status_code, 404) self.assertEqual( json.loads(response.data), {"error": "no data for that"}, )
def test_with_no_data(self): """Test it rejects an empty payload.""" client = app.test_client() data = None response = client.post( "/desk/light", headers=headers, data=data, ) self.assertEqual(response.status_code, 422) self.assertEqual(json.loads(response.data), {"error": "no data"})
def test_no_mode(self): """Test it rejects a payload with no mode.""" client = app.test_client() response = client.post( "/desk/light", headers=headers, data=json.dumps({"colour": [123, 123, 0]}), ) self.assertEqual(response.status_code, 422) self.assertEqual(response.get_json(), {"error": "`mode` must be supplied"})
def test_easy_sweep(self): """Test the simple case.""" client = app.test_client() data = json.dumps({"colour": [123, 123, 0], "mode": "sweep"}) response = client.post("/desk/light", headers=headers, data=data) worker.poll() self.assertEqual(response.status_code, 200) self.assertEqual( json.loads(response.data), {"colour": [123, 123, 0], "status": "OK"} )
def test_with_bad_delay(self): """Test it rejects a bogus `delay` parameter.""" client = app.test_client() data = json.dumps({ "colour": [10, 20, 30], "mode": "sweep", "delay": "two days" }) response = client.post("/desk/light", headers=headers, data=data) self.assertEqual(response.status_code, 422) self.assertEqual( json.loads(response.data), {"error": "`two days` is not a valid delay interval"}, )
def test_with_bad_direction(self): """Test it rejects a bogus `direction` parameter.""" client = app.test_client() data = json.dumps({ "colour": [10, 20, 30], "mode": "sweep", "direction": "up" }) response = client.post("/desk/light", headers=headers, data=data) self.assertEqual(response.status_code, 422) self.assertEqual( json.loads(response.data), {"error": "`direction` must be one of [forwards, backwards]"}, )
def test_bad_mode(self): """Test it rejects an unknown mode.""" client = app.test_client() response = client.post( "/desk/light", headers=headers, data=json.dumps({ "colour": [123, 123, 0], "mode": "phony-mode" }), ) self.assertEqual(response.status_code, 422) self.assertEqual(response.get_json(), {"error": "`phony-mode` is not a recognised mode"})
def test_get_colour(self): """Test it records and returns the colour.""" client = app.test_client() data = json.dumps({"colour": [12, 34, 56], "mode": "sweep"}) client.post("/desk/light", headers=headers, data=data) response = client.get("/desk/colour") self.assertEqual(response.status_code, 200) self.assertEqual( json.loads(response.data), { "colour": [12, 34, 56], "status": "OK" }, )
def test_with_parameters(self): """Test with params.""" client = app.test_client() data = json.dumps({ "colour": [10, 20, 30], "mode": "spot-fill", "delay": 0.1 }) response = client.post("/desk/light", headers=headers, data=data) worker.poll() self.assertEqual(response.status_code, 200) self.assertEqual(json.loads(response.data), { "colour": [10, 20, 30], "status": "OK" })
def test_with_non_number_caterpillar_length(self): """Test it rejects a non-numeric `caterpillar-length` parameter.""" client = app.test_client() data = json.dumps({ "colour": [10, 20, 30], "mode": "caterpillar", "caterpillar-length": "seven", }) response = client.post("/desk/light", headers=headers, data=data) self.assertEqual(response.status_code, 422) self.assertEqual( json.loads(response.data), { "error": ("`caterpillar-length` must be something " "that can be cast to an `int`") }, )
def test_with_out_of_range_caterpillar_length(self): """Test it rejects an out-of-range `caterpillar-length` parameter.""" client = app.test_client() data = json.dumps({ "colour": [10, 20, 30], "mode": "caterpillar", "caterpillar-length": 21, }) response = client.post("/desk/light", headers=headers, data=data) self.assertEqual(response.status_code, 422) self.assertEqual( json.loads(response.data), { "error": ("`caterpillar-length` must be a number between 1 and 2") }, )
def test_with_parameters(self): """Test with params.""" client = app.test_client() data = json.dumps({ "colour": [10, 20, 30], "mode": "caterpillar", "direction": "backwards", "caterpillar-length": 1, }) response = client.post("/desk/light", headers=headers, data=data) worker.poll() self.assertEqual(response.status_code, 200) self.assertEqual(json.loads(response.data), { "colour": [10, 20, 30], "status": "OK" })
def test_turning_off(self): """Test turning it off.""" client = app.test_client() worker = Worker() # preload the queue data = json.dumps({"colour": [123, 123, 0], "mode": "spot-fill"}) for _ in range(100): client.post("/desk/light", headers=headers, data=data) response = client.post("/desk/off", headers=headers) worker.poll() self.assertEqual(response.status_code, 200) self.assertEqual(json.loads(response.data), { "colour": [0, 0, 0], "status": "OK" })
# -*- coding: utf-8 -*- import unittest import json from webserver import app app = app.test_client() class FunctionalTest(unittest.TestCase): def parse(self, response_data): """ Try to load JSON. Returns None if no JSON can be decoded """ try: data = json.loads(response_data) except ValueError: log.debug('No JSON object could be decoded : %s', response_data) data = None return data def __open(self, url, method, user=None, data=None): """ Open a HTTP Request for testing """ params = dict() params['method'] = method if data is not None: params['data'] = json.dumps(data) params['content_type'] = "application/json"
def client(): test_client = app.test_client() return test_client
# -*- coding: utf-8 -*- import unittest import json from webserver import app app = app.test_client() class FunctionalTest(unittest.TestCase): def parse(self, response_data): """ Try to load JSON. Returns None if no JSON can be decoded """ try: data = json.loads(response_data) except ValueError: log.debug("No JSON object could be decoded : %s", response_data) data = None return data def __open(self, url, method, user=None, data=None): """ Open a HTTP Request for testing """ params = dict() params["method"] = method if data is not None: params["data"] = json.dumps(data) params["content_type"] = "application/json"
def client(): test_client = app.test_client() create(test_client) login(test_client) return test_client
def client(app): return app.test_client()
def test_root(self): """Test '/'.""" client = app.test_client() response = client.get("/", headers=headers) self.assertEqual(response.get_json(), {"status": "OK"})
def setUp(self): self.app = app.test_client() self.app.testing = True
def test_root_html(self): """Test '/'.""" client = app.test_client() response = client.get("/", headers={"Accept": "text/html"}) self.assertEqual(response.data.decode().split("\n")[0], "<!DOCTYPE HTML>")