from unittest import TestCase from flask import Flask from werkzeug.datastructures import MultiDict from rfcartography import create_app from rfcartography.index_parser import RFC, NotIssued, STD, BCP, FYI, DocType from rfcartography.rfcartographer import RFCartographer class TestDetailsPages(TestCase): def setUp(self): """create an app object for testing purposes""" self.app:Flask = create_app() self.app.config.update({"TESTING": True}) rfc42: RFC = RFC(42) rfc23: NotIssued = NotIssued(23) std42: STD = STD(42) bcp42: BCP = BCP(42) fyi42: FYI = FYI(42) index: dict[DocType: dict[int, Document]] = {DocType.RFC: {42: rfc42, 23: rfc23}, DocType.STD: {42: std42}, DocType.BCP: {42: bcp42}, DocType.FYI: {42: fyi42}, DocType.NIC: {}, DocType.IEN: {}, DocType.RTR: {}} self.app.cartographer = RFCartographer(index) return def test_search_page(self): """testing the start page""" client: FlaskClient = self.app.test_client() response: TestResponse = client.get('/') self.assertEqual(response.status, '200 OK') def test_no_search_result(self): """testing searching for not existing RFCs""" client: FlaskClient = self.app.test_client() response: TestResponse = client.get('/map?type=rfc&num=666') self.assertEqual(response.status, '404 NOT FOUND') def test_quicksearch_validation(self): """testing the validation of user input in the quick search""" client: FlaskClient = self.app.test_client() # valid type and valid number shall be accepted response = client.get('/map?type=rfc&num=42') self.assertEqual(response.status, '200 OK') # number with leading 0s shall be accepted response = client.get('/map?type=rfc&num=0042') self.assertEqual(response.status, '200 OK') # number with letters shall be rejected response = client.get('/map?type=rfc&num=42a') self.assertEqual(response.status, '400 BAD REQUEST') # invalid type shall be rejected response = client.get('/map?type=test&num=42') self.assertEqual(response.status, '400 BAD REQUEST') # missing type shall be rejected response = client.get('/map?num=42') self.assertEqual(response.status, '400 BAD REQUEST') # missing num shall be rejected response = client.get('/map?type=test') self.assertEqual(response.status, '400 BAD REQUEST') return def test_advanced_search_validation(self): """testing the validation of user input in the advanced search""" client: FlaskClient = self.app.test_client() # valid requests shall be accepted response: TestResponse = client.get('/map?type=rfc&num=42&depth=23&nodes_enabled=rfc&nodes_enabled=std&nodes_enabled=bcp&nodes_enabled=fyi&nodes_enabled=nic&nodes_enabled=ien&nodes_enabled=rtr&rfc_color=%232072b1&std_color=%23c21a7e&bcp_color=%236d388d&fyi_color=%238bbd3e&nic_color=%23efe50b&ien_color=%23f28f20&rtr_color=%23e32326&obsoletes_style=dashed&obsoleted_by_style=dashed&updates_style=dashdot&updated_by_style=dashdot&is_also_style=solid&see_also_style=dotted&obsoletes_color=%23303c50&obsoleted_by_color=%23303c50&updates_color=%23607d8d&updated_by_color=%23607d8d&is_also_color=%23132e41&see_also_color=%23008e90') self.assertEqual(response.status, '200 OK') # invalid type values shall be rejected response = client.get('/map?type=invalid&num=42&depth=23&nodes_enabled=rfc&nodes_enabled=std&nodes_enabled=bcp&nodes_enabled=fyi&nodes_enabled=nic&nodes_enabled=ien&nodes_enabled=rtr&rfc_color=%232072b1&std_color=%23c21a7e&bcp_color=%236d388d&fyi_color=%238bbd3e&nic_color=%23efe50b&ien_color=%23f28f20&rtr_color=%23e32326&obsoletes_style=dashed&obsoleted_by_style=dashed&updates_style=dashdot&updated_by_style=dashdot&is_also_style=solid&see_also_style=dotted&obsoletes_color=%23303c50&obsoleted_by_color=%23303c50&updates_color=%23607d8d&updated_by_color=%23607d8d&is_also_color=%23132e41&see_also_color=%23008e90') self.assertEqual(response.status, '400 BAD REQUEST') # invalid num values shall be rejected response = client.get('/map?type=rfc&num=invalid&depth=23&nodes_enabled=rfc&nodes_enabled=std&nodes_enabled=bcp&nodes_enabled=fyi&nodes_enabled=nic&nodes_enabled=ien&nodes_enabled=rtr&rfc_color=%232072b1&std_color=%23c21a7e&bcp_color=%236d388d&fyi_color=%238bbd3e&nic_color=%23efe50b&ien_color=%23f28f20&rtr_color=%23e32326&obsoletes_style=dashed&obsoleted_by_style=dashed&updates_style=dashdot&updated_by_style=dashdot&is_also_style=solid&see_also_style=dotted&obsoletes_color=%23303c50&obsoleted_by_color=%23303c50&updates_color=%23607d8d&updated_by_color=%23607d8d&is_also_color=%23132e41&see_also_color=%23008e90') self.assertEqual(response.status, '400 BAD REQUEST') # num values with leading 0s shall be accepted response = client.get('/map?type=rfc&num=0042&depth=23&nodes_enabled=rfc&nodes_enabled=std&nodes_enabled=bcp&nodes_enabled=fyi&nodes_enabled=nic&nodes_enabled=ien&nodes_enabled=rtr&rfc_color=%232072b1&std_color=%23c21a7e&bcp_color=%236d388d&fyi_color=%238bbd3e&nic_color=%23efe50b&ien_color=%23f28f20&rtr_color=%23e32326&obsoletes_style=dashed&obsoleted_by_style=dashed&updates_style=dashdot&updated_by_style=dashdot&is_also_style=solid&see_also_style=dotted&obsoletes_color=%23303c50&obsoleted_by_color=%23303c50&updates_color=%23607d8d&updated_by_color=%23607d8d&is_also_color=%23132e41&see_also_color=%23008e90') self.assertEqual(response.status, '200 OK') # invalid color values shall be rejected response = client.get('/map?type=rfc&num=42&depth=23&nodes_enabled=rfc&nodes_enabled=std&nodes_enabled=bcp&nodes_enabled=fyi&nodes_enabled=nic&nodes_enabled=ien&nodes_enabled=rtr&rfc_color=%232072b1&std_color=%23c21a7e&bcp_color=%236d388d&fyi_color=invalid&nic_color=%23efe50b&ien_color=%23f28f20&rtr_color=%23e32326&obsoletes_style=dashed&obsoleted_by_style=dashed&updates_style=dashdot&updated_by_style=dashdot&is_also_style=solid&see_also_style=dotted&obsoletes_color=%23303c50&obsoleted_by_color=%23303c50&updates_color=%23607d8d&updated_by_color=%23607d8d&is_also_color=%23132e41&see_also_color=%23008e90') # invalid color values shall be rejected response = client.get('/map?type=rfc&num=42&depth=23&nodes_enabled=rfc&nodes_enabled=std&nodes_enabled=bcp&nodes_enabled=fyi&nodes_enabled=nic&nodes_enabled=ien&nodes_enabled=rtr&rfc_color=%232072b1&std_color=%23c21a7e&bcp_color=%236d388d&fyi_color=%238bbd3e&nic_color=%23efe50b&ien_color=%23f28f20&rtr_color=%23e32326&obsoletes_style=dashed&obsoleted_by_style=dashed&updates_style=dashdot&updated_by_style=dashdot&is_also_style=solid&see_also_style=dotted&obsoletes_color=%23fail00&obsoleted_by_color=%23303c50&updates_color=%23607d8d&updated_by_color=%23607d8d&is_also_color=%23132e41&see_also_color=%23008e90') self.assertEqual(response.status, '400 BAD REQUEST') # invalid line style values shall be rejected response = client.get('/map?type=rfc&num=42&depth=23&nodes_enabled=rfc&nodes_enabled=std&nodes_enabled=bcp&nodes_enabled=fyi&nodes_enabled=nic&nodes_enabled=ien&nodes_enabled=rtr&rfc_color=%232072b1&std_color=%23c21a7e&bcp_color=%236d388d&fyi_color=%238bbd3e&nic_color=%23efe50b&ien_color=%23f28f20&rtr_color=%23e32326&obsoletes_style=dashed&obsoleted_by_style=dashed&updates_style=dashdot&updated_by_style=dashdot&is_also_style=solid&see_also_style=invalid&obsoletes_color=%23303c50&obsoleted_by_color=%23303c50&updates_color=%23607d8d&updated_by_color=%23607d8d&is_also_color=%23132e41&see_also_color=%23008e90') self.assertEqual(response.status, '400 BAD REQUEST') # invalid DocType shall be rejected response = client.get('/map?type=rfc&num=42&depth=23&nodes_enabled=rfc&nodes_enabled=std&nodes_enabled=bcp&nodes_enabled=fyi&nodes_enabled=nic&nodes_enabled=invalid&nodes_enabled=rtr&rfc_color=%232072b1&std_color=%23c21a7e&bcp_color=%236d388d&fyi_color=%238bbd3e&nic_color=%23efe50b&ien_color=%23f28f20&rtr_color=%23e32326&obsoletes_style=dashed&obsoleted_by_style=dashed&updates_style=dashdot&updated_by_style=dashdot&is_also_style=solid&see_also_style=dotted&obsoletes_color=%23303c50&obsoleted_by_color=%23303c50&updates_color=%23607d8d&updated_by_color=%23607d8d&is_also_color=%23132e41&see_also_color=%23008e90') self.assertEqual(response.status, '400 BAD REQUEST') return