diff --git a/doorcontrol/hid/tests/__init__.py b/doorcontrol/hid/tests/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/doorcontrol/hid/tests/test_DoorController.py b/doorcontrol/hid/tests/test_DoorController.py deleted file mode 100644 index c7aa6b9..0000000 --- a/doorcontrol/hid/tests/test_DoorController.py +++ /dev/null @@ -1,292 +0,0 @@ -from unittest.mock import patch - -import pytest -import responses -from lxml.etree import Element - -from ..DoorController import ROOT, DoorController, E, E_corp, RemoteError - - -# https://stackoverflow.com/questions/7905380/testing-equivalence-of-xml-etree-elementtree -def assert_elements_equal(e1: Element, e2: Element) -> None: - assert e1.tag == e2.tag - assert e1.text == e2.text - assert e1.tail == e2.tail - assert e1.attrib == e2.attrib - assert len(e1) == len(e2) - - for c1, c2 in zip(e1, e2, strict=True): - assert_elements_equal(c1, c2) - - -@pytest.fixture -def door_controller(): - return DoorController("127.0.0.1", "test", "test", name="Test", access="Test") - - -@responses.activate -def test_doXMLRequest_bytes(door_controller: DoorController) -> None: - responses.add( - responses.GET, - "https://127.0.0.1/cgi-bin/vertx_xml.cgi", - body='', - content_type="text/xml", - ) - - ret = door_controller.doXMLRequest( - b"" - ) - - assert ( - responses.calls[0].request.params["/cgi-bin/vertx_xml.cgi?XML"] - == '' - ) - - assert_elements_equal(ret, ROOT(E_corp.Banana())) - - -@responses.activate -def test_doXMLRequest_xml(door_controller: DoorController) -> None: - responses.add( - responses.GET, - "https://127.0.0.1/cgi-bin/vertx_xml.cgi", - body='', - content_type="text/xml", - ) - - ret = door_controller.doXMLRequest(ROOT(E.TEST())) - - assert ( - responses.calls[0].request.params["/cgi-bin/vertx_xml.cgi?XML"] - == '' - ) - - assert_elements_equal(ret, ROOT(E_corp.Banana())) - - -@responses.activate -def test_doXMLRequest_HTTPError(door_controller: DoorController) -> None: - responses.add( - responses.GET, - "https://127.0.0.1/cgi-bin/vertx_xml.cgi", - body="whatever", - status=403, - ) - - with pytest.raises(RemoteError) as excinfo: - door_controller.doXMLRequest(ROOT(E.TEST())) - - assert excinfo.value.args[0] == "Door Updating Error: 403 Forbidden\nwhatever" - - -@responses.activate -def test_doXMLRequest_XMLerror(door_controller: DoorController) -> None: - body = '' - responses.add( - responses.GET, - "https://127.0.0.1/cgi-bin/vertx_xml.cgi", - body=body, - status=200, - ) - - with pytest.raises(RemoteError) as excinfo: - door_controller.doXMLRequest(ROOT(E.TEST())) - - assert excinfo.value.args[0] == "Door Updating Error: 200 OK\n" + body - - -# def doImport(self, params=None, files=None): -# def doCSVImport(self, csv): - - -def test_get_scheduleMap(door_controller: DoorController) -> None: - with patch.object(door_controller, "doXMLRequest") as mockXMLRequest: - mockXMLRequest.return_value = E_corp.VertXMessage( - E_corp.Schedules( - {"action": "RL"}, - E_corp.Schedule({"scheduleID": "1", "scheduleName": "Test1"}), - E_corp.Schedule({"scheduleID": "2", "scheduleName": "Test2"}), - E_corp.Schedule({"scheduleID": "3", "scheduleName": "Test3"}), - ) - ) - - ret = door_controller.get_scheduleMap() - assert ret == {"Test1": "1", "Test2": "2", "Test3": "3"} - - -# TODO: these two methods might want to be reworked: they are a bit clunky -# def get_schedules(self): -# def set_schedules(self, schedules): - - -def test_set_cardholder_schedules(door_controller: DoorController) -> None: - with patch.object(door_controller, "doXMLRequest") as mockXMLRequest: - door_controller._scheduleMap = {"Test1": "1", "Test2": "2", "Test3": "3"} - # TODO: should replace with a captured output - mockXMLRequest.return_value = ROOT() - - ret = door_controller.set_cardholder_schedules("123", ["Test1", "Test3"]) - - assert_elements_equal( - door_controller.doXMLRequest.call_args[0][0], - ROOT( - E.RoleSet( - {"action": "UD", "roleSetID": "123"}, - E.Roles( - E.Role({"roleID": "123", "scheduleID": "1", "resourceID": "0"}), - E.Role({"roleID": "123", "scheduleID": "3", "resourceID": "0"}), - ), - ) - ), - ) - - assert_elements_equal(ret, ROOT()) - - -def test_get_cardFormats(door_controller): - with patch.object(door_controller, "doXMLRequest") as mockXMLRequest: - mockXMLRequest.return_value = E_corp.VertXMessage( - E_corp.CardFormats( - {"action": "RL"}, - E_corp.CardFormat( - { - "formatID": "1", - "formatName": "H10301 26-Bit", - "isTemplate": "true", - "templateID": "1", - } - ), - # irrelevant templates omitted - E_corp.CardFormat( - { - "formatID": "6", - "formatName": "A901146A-123", - "isTemplate": "false", - "templateID": "1", - }, - E_corp.FixedField({"value": "123"}), - ), - E_corp.CardFormat( - { - "formatID": "7", - "formatName": "A901146A-456", - "isTemplate": "false", - "templateID": "1", - }, - E_corp.FixedField({"value": "456"}), - ), - ) - ) - - ret = door_controller.get_cardFormats() - - assert ret == {"123": "6", "456": "7"} - - -def test_set_cardFormat(door_controller): - with patch.object(door_controller, "doXMLRequest") as mockXMLRequest: - # TODO: should replace with a captured output - mockXMLRequest.return_value = ROOT() - - ret = door_controller.set_cardFormat("testname", 3, 123) - - assert_elements_equal( - door_controller.doXMLRequest.call_args[0][0], - ROOT( - E.CardFormats( - {"action": "AD"}, - E.CardFormat( - {"formatName": "testname", "templateID": "3"}, - E.FixedField({"value": "123"}), - ), - ) - ), - ) - - assert_elements_equal(ret, ROOT()) - - -def test_get_records_no_morerecords(door_controller): - """Test for when all the records fit in one 'page'""" - with patch.object(door_controller, "doXMLRequest") as mockXMLRequest: - mockXMLRequest.return_value = E_corp.VertXMessage( - E_corp.TestElements( - { - "action": "RL", - "recordOffset": "0", - "recordCount": "2", - "moreRecords": "false", - }, - E_corp.TestElement({"asdf": "a"}), - E_corp.TestElement({"qwer": "b"}), - ) - ) - - ret = door_controller.get_records(E.TestElements, 12, {"blah": "test"}) - - assert_elements_equal( - door_controller.doXMLRequest.call_args[0][0], - ROOT( - E.TestElements( - { - "action": "LR", - # TODO: should really be 12, but isn't for bug workaround - "recordCount": "13", - "recordOffset": "0", - "blah": "test", - }, - ) - ), - ) - - assert_elements_equal(ret[0], E_corp.TestElement({"asdf": "a"})) - assert_elements_equal(ret[1], E_corp.TestElement({"qwer": "b"})) - - -# def test_get_records_morerecords(door_controller): -# """Test for when all the records span multiple 'pages'""" -# pass - -# def test_get_records_morerecords_bad_last_record(door_controller): -# """Test for bug in which last record of each 'page' is missing data""" -# pass - -# def test_get_records_stopFunction(door_controller): -# pass - - -# def test_get_cardholders(door_controller): - -# door_controller = DoorController( -# "172.18.51.11", -# "admin", -# "PVic6ydFS/", -# name="Test", -# access="Test", -# cert="../../hidglobal.com.pem", -# ) - -# with patch.object(door_controller, "doXMLRequest") as mockXMLRequest: -# mockXMLRequest.return_value = E_corp.VertXMessage( -# E_corp.Cardholders( -# {"action": "RL"}, -# E_corp.Cardholder({"scheduleID": "1", "scheduleName": "Test1"}), -# E_corp.Cardholder({"scheduleID": "2", "scheduleName": "Test2"}), -# E_corp.Cardholder({"scheduleID": "3", "scheduleName": "Test3"}), -# ) -# ) - -# for x in [0]: -# ret = door_controller.get_cardholders() -# assert ret == {"Test1": "1", "Test2": "2", "Test3": "3"} - - -# def add_cardholder(self, attribs): -# def update_cardholder(self, cardholderID, attribs): -# def get_credentials(self): -# def add_credentials(self, credentials, cardholderID=None): -# def assign_credential(self, credential, cardholderID=None): -# def get_events(self, threshold): - -# def get_lock(self): -# def set_lock(self, lock=True):