From 4e4ebb92089572a651703f7d5561da897c8b5ba4 Mon Sep 17 00:00:00 2001 From: Code for IATI bot <57559326+codeforIATIbot@users.noreply.github.com> Date: Sun, 17 Sep 2023 12:27:49 +0000 Subject: [PATCH] Github actions build: 3895 --- _data/2023-09-17.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_data/2023-09-17.json b/_data/2023-09-17.json index 58df5b12..09d6bdda 100644 --- a/_data/2023-09-17.json +++ b/_data/2023-09-17.json @@ -1 +1 @@ -{"created_at": "2023-09-17 06:20:16.848976", "build": null, "status": "unhealthy", "report": {"aidstream": {"desc": "AidStream (aidstream.org)", "results": {"TestAidstream.test_load_aidstream_datasets[Aidstream hosted dataset 1]": {"desc": "Test that aidstream sample datasets are live.", "args": ["Aidstream hosted dataset 1"], "outcome": "passed", "error_msg": ""}, "TestAidstream.test_load_aidstream_datasets[Aidstream hosted dataset 2]": {"desc": "Test that aidstream sample datasets are live.", "args": ["Aidstream hosted dataset 2"], "outcome": "passed", "error_msg": ""}, "TestAidstream.test_load_aidstream_datasets[Aidstream hosted dataset 3]": {"desc": "Test that aidstream sample datasets are live.", "args": ["Aidstream hosted dataset 3"], "outcome": "passed", "error_msg": ""}, "TestAidstream.test_200_response[Aidstream homepage]": {"desc": "Confirm each request has a 200 (success) status code.", "args": ["Aidstream homepage"], "outcome": "passed", "error_msg": ""}, "TestAidstream.test_200_response[Aidstream hosted dataset 1]": {"desc": "Confirm each request has a 200 (success) status code.", "args": ["Aidstream hosted dataset 1"], "outcome": "passed", "error_msg": ""}, "TestAidstream.test_200_response[Aidstream hosted dataset 2]": {"desc": "Confirm each request has a 200 (success) status code.", "args": ["Aidstream hosted dataset 2"], "outcome": "passed", "error_msg": ""}, "TestAidstream.test_200_response[Aidstream hosted dataset 3]": {"desc": "Confirm each request has a 200 (success) status code.", "args": ["Aidstream hosted dataset 3"], "outcome": "passed", "error_msg": ""}, "TestAidstream.test_non_tiny_response[Aidstream homepage]": {"desc": "Confirm each request has response content that is not tiny.", "args": ["Aidstream homepage"], "outcome": "passed", "error_msg": ""}, "TestAidstream.test_non_tiny_response[Aidstream hosted dataset 1]": {"desc": "Confirm each request has response content that is not tiny.", "args": ["Aidstream hosted dataset 1"], "outcome": "passed", "error_msg": ""}, "TestAidstream.test_non_tiny_response[Aidstream hosted dataset 2]": {"desc": "Confirm each request has response content that is not tiny.", "args": ["Aidstream hosted dataset 2"], "outcome": "passed", "error_msg": ""}, "TestAidstream.test_non_tiny_response[Aidstream hosted dataset 3]": {"desc": "Confirm each request has response content that is not tiny.", "args": ["Aidstream hosted dataset 3"], "outcome": "passed", "error_msg": ""}}, "status": "healthy"}, "archive_reference": {"desc": "Archive reference (archivereference.iatistandard.org)", "results": {"TestArchiveReference.test_locate_links[IATI Standard Homepage]": {"desc": "Tests that each page contains links to the defined URLs.", "args": ["IATI Standard Homepage"], "outcome": "failed", "error_msg": "self = \nloaded_request = \n\n def test_locate_links(self, loaded_request):\n \"\"\"\n Tests that each page contains links to the defined URLs.\n \"\"\"\n> result = utility.get_links_from_page(loaded_request)\n\ntests/test_archive_reference.py:38: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \ntests/utility/utility.py:26: in get_links_from_page\n return locate_xpath_result(request, \"//a[@href]/@href\")\ntests/utility/utility.py:15: in locate_xpath_result\n tree = etree.fromstring(request.content, parser)\nsrc/lxml/etree.pyx:3234: in lxml.etree.fromstring\n ???\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\n> ???\nE ValueError: can only parse strings\n\nsrc/lxml/parser.pxi:1875: ValueError"}, "TestArchiveReference.test_locate_links[IATI Standard - Summary Page]": {"desc": "Tests that each page contains links to the defined URLs.", "args": ["IATI Standard - Summary Page"], "outcome": "failed", "error_msg": "self = \nloaded_request = \n\n def test_locate_links(self, loaded_request):\n \"\"\"\n Tests that each page contains links to the defined URLs.\n \"\"\"\n> result = utility.get_links_from_page(loaded_request)\n\ntests/test_archive_reference.py:38: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \ntests/utility/utility.py:26: in get_links_from_page\n return locate_xpath_result(request, \"//a[@href]/@href\")\ntests/utility/utility.py:15: in locate_xpath_result\n tree = etree.fromstring(request.content, parser)\nsrc/lxml/etree.pyx:3234: in lxml.etree.fromstring\n ???\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\n> ???\nE ValueError: can only parse strings\n\nsrc/lxml/parser.pxi:1875: ValueError"}, "TestArchiveReference.test_locate_links[IATI Standard - Schema Page]": {"desc": "Tests that each page contains links to the defined URLs.", "args": ["IATI Standard - Schema Page"], "outcome": "failed", "error_msg": "self = \nloaded_request = \n\n def test_locate_links(self, loaded_request):\n \"\"\"\n Tests that each page contains links to the defined URLs.\n \"\"\"\n> result = utility.get_links_from_page(loaded_request)\n\ntests/test_archive_reference.py:38: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \ntests/utility/utility.py:26: in get_links_from_page\n return locate_xpath_result(request, \"//a[@href]/@href\")\ntests/utility/utility.py:15: in locate_xpath_result\n tree = etree.fromstring(request.content, parser)\nsrc/lxml/etree.pyx:3234: in lxml.etree.fromstring\n ???\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\n> ???\nE ValueError: can only parse strings\n\nsrc/lxml/parser.pxi:1875: ValueError"}, "TestArchiveReference.test_locate_links[IATI Standard - Old Schema Version, Developer Docs]": {"desc": "Tests that each page contains links to the defined URLs.", "args": ["IATI Standard - Old Schema Version, Developer Docs"], "outcome": "failed", "error_msg": "self = \nloaded_request = \n\n def test_locate_links(self, loaded_request):\n \"\"\"\n Tests that each page contains links to the defined URLs.\n \"\"\"\n> result = utility.get_links_from_page(loaded_request)\n\ntests/test_archive_reference.py:38: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \ntests/utility/utility.py:26: in get_links_from_page\n return locate_xpath_result(request, \"//a[@href]/@href\")\ntests/utility/utility.py:15: in locate_xpath_result\n tree = etree.fromstring(request.content, parser)\nsrc/lxml/etree.pyx:3234: in lxml.etree.fromstring\n ???\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\n> ???\nE ValueError: can only parse strings\n\nsrc/lxml/parser.pxi:1875: ValueError"}, "TestArchiveReference.test_locate_links[IATI Standard - Misc Developer Docs Page]": {"desc": "Tests that each page contains links to the defined URLs.", "args": ["IATI Standard - Misc Developer Docs Page"], "outcome": "failed", "error_msg": "self = \nloaded_request = \n\n def test_locate_links(self, loaded_request):\n \"\"\"\n Tests that each page contains links to the defined URLs.\n \"\"\"\n> result = utility.get_links_from_page(loaded_request)\n\ntests/test_archive_reference.py:38: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \ntests/utility/utility.py:26: in get_links_from_page\n return locate_xpath_result(request, \"//a[@href]/@href\")\ntests/utility/utility.py:15: in locate_xpath_result\n tree = etree.fromstring(request.content, parser)\nsrc/lxml/etree.pyx:3234: in lxml.etree.fromstring\n ???\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\n> ???\nE ValueError: can only parse strings\n\nsrc/lxml/parser.pxi:1875: ValueError"}, "TestArchiveReference.test_locate_links[IATI Standard - Activity Standard Docs Page]": {"desc": "Tests that each page contains links to the defined URLs.", "args": ["IATI Standard - Activity Standard Docs Page"], "outcome": "failed", "error_msg": "self = \nloaded_request = \n\n def test_locate_links(self, loaded_request):\n \"\"\"\n Tests that each page contains links to the defined URLs.\n \"\"\"\n> result = utility.get_links_from_page(loaded_request)\n\ntests/test_archive_reference.py:38: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \ntests/utility/utility.py:26: in get_links_from_page\n return locate_xpath_result(request, \"//a[@href]/@href\")\ntests/utility/utility.py:15: in locate_xpath_result\n tree = etree.fromstring(request.content, parser)\nsrc/lxml/etree.pyx:3234: in lxml.etree.fromstring\n ???\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\n> ???\nE ValueError: can only parse strings\n\nsrc/lxml/parser.pxi:1875: ValueError"}, "TestArchiveReference.test_locate_links[IATI Standard - Schema Version Homepage]": {"desc": "Tests that each page contains links to the defined URLs.", "args": ["IATI Standard - Schema Version Homepage"], "outcome": "failed", "error_msg": "self = \nloaded_request = \n\n def test_locate_links(self, loaded_request):\n \"\"\"\n Tests that each page contains links to the defined URLs.\n \"\"\"\n> result = utility.get_links_from_page(loaded_request)\n\ntests/test_archive_reference.py:38: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \ntests/utility/utility.py:26: in get_links_from_page\n return locate_xpath_result(request, \"//a[@href]/@href\")\ntests/utility/utility.py:15: in locate_xpath_result\n tree = etree.fromstring(request.content, parser)\nsrc/lxml/etree.pyx:3234: in lxml.etree.fromstring\n ???\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\n> ???\nE ValueError: can only parse strings\n\nsrc/lxml/parser.pxi:1875: ValueError"}, "TestArchiveReference.test_footer_license_information[IATI Standard Homepage]": {"desc": "Tests that the footer contains license information.\nThis should include information about each text and icon licensing.", "args": ["IATI Standard Homepage"], "outcome": "failed", "error_msg": "self = \nloaded_request = \n\n def test_footer_license_information(self, loaded_request):\n \"\"\"\n Tests that the footer contains license information.\n This should include information about each text and icon licensing.\n \"\"\"\n footer_xpath = '//*[@id=\"footer-credits\"]/span'\n \n> result = utility.get_text_from_xpath(loaded_request, footer_xpath)\n\ntests/test_archive_reference.py:53: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \ntests/utility/utility.py:34: in get_text_from_xpath\n return locate_xpath_result(request, xpath + \"/text()\")\ntests/utility/utility.py:15: in locate_xpath_result\n tree = etree.fromstring(request.content, parser)\nsrc/lxml/etree.pyx:3234: in lxml.etree.fromstring\n ???\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\n> ???\nE ValueError: can only parse strings\n\nsrc/lxml/parser.pxi:1875: ValueError"}, "TestArchiveReference.test_footer_license_information[IATI Standard - Summary Page]": {"desc": "Tests that the footer contains license information.\nThis should include information about each text and icon licensing.", "args": ["IATI Standard - Summary Page"], "outcome": "failed", "error_msg": "self = \nloaded_request = \n\n def test_footer_license_information(self, loaded_request):\n \"\"\"\n Tests that the footer contains license information.\n This should include information about each text and icon licensing.\n \"\"\"\n footer_xpath = '//*[@id=\"footer-credits\"]/span'\n \n> result = utility.get_text_from_xpath(loaded_request, footer_xpath)\n\ntests/test_archive_reference.py:53: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \ntests/utility/utility.py:34: in get_text_from_xpath\n return locate_xpath_result(request, xpath + \"/text()\")\ntests/utility/utility.py:15: in locate_xpath_result\n tree = etree.fromstring(request.content, parser)\nsrc/lxml/etree.pyx:3234: in lxml.etree.fromstring\n ???\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\n> ???\nE ValueError: can only parse strings\n\nsrc/lxml/parser.pxi:1875: ValueError"}, "TestArchiveReference.test_footer_license_information[IATI Standard - Schema Page]": {"desc": "Tests that the footer contains license information.\nThis should include information about each text and icon licensing.", "args": ["IATI Standard - Schema Page"], "outcome": "failed", "error_msg": "self = \nloaded_request = \n\n def test_footer_license_information(self, loaded_request):\n \"\"\"\n Tests that the footer contains license information.\n This should include information about each text and icon licensing.\n \"\"\"\n footer_xpath = '//*[@id=\"footer-credits\"]/span'\n \n> result = utility.get_text_from_xpath(loaded_request, footer_xpath)\n\ntests/test_archive_reference.py:53: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \ntests/utility/utility.py:34: in get_text_from_xpath\n return locate_xpath_result(request, xpath + \"/text()\")\ntests/utility/utility.py:15: in locate_xpath_result\n tree = etree.fromstring(request.content, parser)\nsrc/lxml/etree.pyx:3234: in lxml.etree.fromstring\n ???\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\n> ???\nE ValueError: can only parse strings\n\nsrc/lxml/parser.pxi:1875: ValueError"}, "TestArchiveReference.test_footer_license_information[IATI Standard - Old Schema Version, Developer Docs]": {"desc": "Tests that the footer contains license information.\nThis should include information about each text and icon licensing.", "args": ["IATI Standard - Old Schema Version, Developer Docs"], "outcome": "failed", "error_msg": "self = \nloaded_request = \n\n def test_footer_license_information(self, loaded_request):\n \"\"\"\n Tests that the footer contains license information.\n This should include information about each text and icon licensing.\n \"\"\"\n footer_xpath = '//*[@id=\"footer-credits\"]/span'\n \n> result = utility.get_text_from_xpath(loaded_request, footer_xpath)\n\ntests/test_archive_reference.py:53: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \ntests/utility/utility.py:34: in get_text_from_xpath\n return locate_xpath_result(request, xpath + \"/text()\")\ntests/utility/utility.py:15: in locate_xpath_result\n tree = etree.fromstring(request.content, parser)\nsrc/lxml/etree.pyx:3234: in lxml.etree.fromstring\n ???\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\n> ???\nE ValueError: can only parse strings\n\nsrc/lxml/parser.pxi:1875: ValueError"}, "TestArchiveReference.test_footer_license_information[IATI Standard - Misc Developer Docs Page]": {"desc": "Tests that the footer contains license information.\nThis should include information about each text and icon licensing.", "args": ["IATI Standard - Misc Developer Docs Page"], "outcome": "failed", "error_msg": "self = \nloaded_request = \n\n def test_footer_license_information(self, loaded_request):\n \"\"\"\n Tests that the footer contains license information.\n This should include information about each text and icon licensing.\n \"\"\"\n footer_xpath = '//*[@id=\"footer-credits\"]/span'\n \n> result = utility.get_text_from_xpath(loaded_request, footer_xpath)\n\ntests/test_archive_reference.py:53: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \ntests/utility/utility.py:34: in get_text_from_xpath\n return locate_xpath_result(request, xpath + \"/text()\")\ntests/utility/utility.py:15: in locate_xpath_result\n tree = etree.fromstring(request.content, parser)\nsrc/lxml/etree.pyx:3234: in lxml.etree.fromstring\n ???\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\n> ???\nE ValueError: can only parse strings\n\nsrc/lxml/parser.pxi:1875: ValueError"}, "TestArchiveReference.test_footer_license_information[IATI Standard - Activity Standard Docs Page]": {"desc": "Tests that the footer contains license information.\nThis should include information about each text and icon licensing.", "args": ["IATI Standard - Activity Standard Docs Page"], "outcome": "failed", "error_msg": "self = \nloaded_request = \n\n def test_footer_license_information(self, loaded_request):\n \"\"\"\n Tests that the footer contains license information.\n This should include information about each text and icon licensing.\n \"\"\"\n footer_xpath = '//*[@id=\"footer-credits\"]/span'\n \n> result = utility.get_text_from_xpath(loaded_request, footer_xpath)\n\ntests/test_archive_reference.py:53: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \ntests/utility/utility.py:34: in get_text_from_xpath\n return locate_xpath_result(request, xpath + \"/text()\")\ntests/utility/utility.py:15: in locate_xpath_result\n tree = etree.fromstring(request.content, parser)\nsrc/lxml/etree.pyx:3234: in lxml.etree.fromstring\n ???\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\n> ???\nE ValueError: can only parse strings\n\nsrc/lxml/parser.pxi:1875: ValueError"}, "TestArchiveReference.test_footer_license_information[IATI Standard - Schema Version Homepage]": {"desc": "Tests that the footer contains license information.\nThis should include information about each text and icon licensing.", "args": ["IATI Standard - Schema Version Homepage"], "outcome": "failed", "error_msg": "self = \nloaded_request = \n\n def test_footer_license_information(self, loaded_request):\n \"\"\"\n Tests that the footer contains license information.\n This should include information about each text and icon licensing.\n \"\"\"\n footer_xpath = '//*[@id=\"footer-credits\"]/span'\n \n> result = utility.get_text_from_xpath(loaded_request, footer_xpath)\n\ntests/test_archive_reference.py:53: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \ntests/utility/utility.py:34: in get_text_from_xpath\n return locate_xpath_result(request, xpath + \"/text()\")\ntests/utility/utility.py:15: in locate_xpath_result\n tree = etree.fromstring(request.content, parser)\nsrc/lxml/etree.pyx:3234: in lxml.etree.fromstring\n ???\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\n> ???\nE ValueError: can only parse strings\n\nsrc/lxml/parser.pxi:1875: ValueError"}, "TestArchiveReference.test_locate_text[IATI Standard Homepage]": {"desc": "Tests that each page contains the text\n'technical publishing framework' in the heading.", "args": ["IATI Standard Homepage"], "outcome": "failed", "error_msg": "self = \ntarget_request = 'IATI Standard Homepage'\n\n @pytest.mark.parametrize(\"target_request\", [\"IATI Standard Homepage\"])\n def test_locate_text(self, target_request):\n \"\"\"\n Tests that each page contains the text\n 'technical publishing framework' in the heading.\n \"\"\"\n req = self.loaded_request_from_test_name(target_request)\n text_to_find = \"technical publishing framework\"\n xpath_to_locate = '//*[@id=\"home-strapline\"]/h1'\n \n> result = utility.get_text_from_xpath(req, xpath_to_locate)\n\ntests/test_archive_reference.py:67: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \ntests/utility/utility.py:34: in get_text_from_xpath\n return locate_xpath_result(request, xpath + \"/text()\")\ntests/utility/utility.py:15: in locate_xpath_result\n tree = etree.fromstring(request.content, parser)\nsrc/lxml/etree.pyx:3234: in lxml.etree.fromstring\n ???\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\n> ???\nE ValueError: can only parse strings\n\nsrc/lxml/parser.pxi:1875: ValueError"}, "TestArchiveReference.test_200_response[IATI Standard Homepage]": {"desc": "Confirm each request has a 200 (success) status code.", "args": ["IATI Standard Homepage"], "outcome": "failed", "error_msg": "self = \nloaded_request = \n\n def test_200_response(self, loaded_request):\n \"\"\"\n Confirm each request has a 200 (success) status code.\n \"\"\"\n> assert loaded_request.status_code == 200\nE AssertionError\n\ntests/web_test_base.py:63: AssertionError"}, "TestArchiveReference.test_200_response[IATI Standard - Summary Page]": {"desc": "Confirm each request has a 200 (success) status code.", "args": ["IATI Standard - Summary Page"], "outcome": "failed", "error_msg": "self = \nloaded_request = \n\n def test_200_response(self, loaded_request):\n \"\"\"\n Confirm each request has a 200 (success) status code.\n \"\"\"\n> assert loaded_request.status_code == 200\nE AssertionError\n\ntests/web_test_base.py:63: AssertionError"}, "TestArchiveReference.test_200_response[IATI Standard - Schema Page]": {"desc": "Confirm each request has a 200 (success) status code.", "args": ["IATI Standard - Schema Page"], "outcome": "failed", "error_msg": "self = \nloaded_request = \n\n def test_200_response(self, loaded_request):\n \"\"\"\n Confirm each request has a 200 (success) status code.\n \"\"\"\n> assert loaded_request.status_code == 200\nE AssertionError\n\ntests/web_test_base.py:63: AssertionError"}, "TestArchiveReference.test_200_response[IATI Standard - Old Schema Version, Developer Docs]": {"desc": "Confirm each request has a 200 (success) status code.", "args": ["IATI Standard - Old Schema Version, Developer Docs"], "outcome": "failed", "error_msg": "self = \nloaded_request = \n\n def test_200_response(self, loaded_request):\n \"\"\"\n Confirm each request has a 200 (success) status code.\n \"\"\"\n> assert loaded_request.status_code == 200\nE AssertionError\n\ntests/web_test_base.py:63: AssertionError"}, "TestArchiveReference.test_200_response[IATI Standard - Misc Developer Docs Page]": {"desc": "Confirm each request has a 200 (success) status code.", "args": ["IATI Standard - Misc Developer Docs Page"], "outcome": "failed", "error_msg": "self = \nloaded_request = \n\n def test_200_response(self, loaded_request):\n \"\"\"\n Confirm each request has a 200 (success) status code.\n \"\"\"\n> assert loaded_request.status_code == 200\nE AssertionError\n\ntests/web_test_base.py:63: AssertionError"}, "TestArchiveReference.test_200_response[IATI Standard - Activity Standard Docs Page]": {"desc": "Confirm each request has a 200 (success) status code.", "args": ["IATI Standard - Activity Standard Docs Page"], "outcome": "failed", "error_msg": "self = \nloaded_request = \n\n def test_200_response(self, loaded_request):\n \"\"\"\n Confirm each request has a 200 (success) status code.\n \"\"\"\n> assert loaded_request.status_code == 200\nE AssertionError\n\ntests/web_test_base.py:63: AssertionError"}, "TestArchiveReference.test_200_response[IATI Standard - Schema Version Homepage]": {"desc": "Confirm each request has a 200 (success) status code.", "args": ["IATI Standard - Schema Version Homepage"], "outcome": "failed", "error_msg": "self = \nloaded_request = \n\n def test_200_response(self, loaded_request):\n \"\"\"\n Confirm each request has a 200 (success) status code.\n \"\"\"\n> assert loaded_request.status_code == 200\nE AssertionError\n\ntests/web_test_base.py:63: AssertionError"}, "TestArchiveReference.test_non_tiny_response[IATI Standard Homepage]": {"desc": "Confirm each request has response content that is not tiny.", "args": ["IATI Standard Homepage"], "outcome": "failed", "error_msg": "self = \nrequest_to_load = 'IATI Standard Homepage'\n\n def test_non_tiny_response(self, request_to_load):\n \"\"\"\n Confirm each request has response content that is not tiny.\n \"\"\"\n min_response_size = self.requests_to_load[request_to_load].get('min_response_size', 4000)\n response = self.loaded_request_from_test_name(request_to_load)\n \n> assert len(response.content) >= min_response_size\nE TypeError: object of type 'NoneType' has no len()\n\ntests/web_test_base.py:72: TypeError"}, "TestArchiveReference.test_non_tiny_response[IATI Standard - Summary Page]": {"desc": "Confirm each request has response content that is not tiny.", "args": ["IATI Standard - Summary Page"], "outcome": "failed", "error_msg": "self = \nrequest_to_load = 'IATI Standard - Summary Page'\n\n def test_non_tiny_response(self, request_to_load):\n \"\"\"\n Confirm each request has response content that is not tiny.\n \"\"\"\n min_response_size = self.requests_to_load[request_to_load].get('min_response_size', 4000)\n response = self.loaded_request_from_test_name(request_to_load)\n \n> assert len(response.content) >= min_response_size\nE TypeError: object of type 'NoneType' has no len()\n\ntests/web_test_base.py:72: TypeError"}, "TestArchiveReference.test_non_tiny_response[IATI Standard - Schema Page]": {"desc": "Confirm each request has response content that is not tiny.", "args": ["IATI Standard - Schema Page"], "outcome": "failed", "error_msg": "self = \nrequest_to_load = 'IATI Standard - Schema Page'\n\n def test_non_tiny_response(self, request_to_load):\n \"\"\"\n Confirm each request has response content that is not tiny.\n \"\"\"\n min_response_size = self.requests_to_load[request_to_load].get('min_response_size', 4000)\n response = self.loaded_request_from_test_name(request_to_load)\n \n> assert len(response.content) >= min_response_size\nE TypeError: object of type 'NoneType' has no len()\n\ntests/web_test_base.py:72: TypeError"}, "TestArchiveReference.test_non_tiny_response[IATI Standard - Old Schema Version, Developer Docs]": {"desc": "Confirm each request has response content that is not tiny.", "args": ["IATI Standard - Old Schema Version, Developer Docs"], "outcome": "failed", "error_msg": "self = \nrequest_to_load = 'IATI Standard - Old Schema Version, Developer Docs'\n\n def test_non_tiny_response(self, request_to_load):\n \"\"\"\n Confirm each request has response content that is not tiny.\n \"\"\"\n min_response_size = self.requests_to_load[request_to_load].get('min_response_size', 4000)\n response = self.loaded_request_from_test_name(request_to_load)\n \n> assert len(response.content) >= min_response_size\nE TypeError: object of type 'NoneType' has no len()\n\ntests/web_test_base.py:72: TypeError"}, "TestArchiveReference.test_non_tiny_response[IATI Standard - Misc Developer Docs Page]": {"desc": "Confirm each request has response content that is not tiny.", "args": ["IATI Standard - Misc Developer Docs Page"], "outcome": "failed", "error_msg": "self = \nrequest_to_load = 'IATI Standard - Misc Developer Docs Page'\n\n def test_non_tiny_response(self, request_to_load):\n \"\"\"\n Confirm each request has response content that is not tiny.\n \"\"\"\n min_response_size = self.requests_to_load[request_to_load].get('min_response_size', 4000)\n response = self.loaded_request_from_test_name(request_to_load)\n \n> assert len(response.content) >= min_response_size\nE TypeError: object of type 'NoneType' has no len()\n\ntests/web_test_base.py:72: TypeError"}, "TestArchiveReference.test_non_tiny_response[IATI Standard - Activity Standard Docs Page]": {"desc": "Confirm each request has response content that is not tiny.", "args": ["IATI Standard - Activity Standard Docs Page"], "outcome": "failed", "error_msg": "self = \nrequest_to_load = 'IATI Standard - Activity Standard Docs Page'\n\n def test_non_tiny_response(self, request_to_load):\n \"\"\"\n Confirm each request has response content that is not tiny.\n \"\"\"\n min_response_size = self.requests_to_load[request_to_load].get('min_response_size', 4000)\n response = self.loaded_request_from_test_name(request_to_load)\n \n> assert len(response.content) >= min_response_size\nE TypeError: object of type 'NoneType' has no len()\n\ntests/web_test_base.py:72: TypeError"}, "TestArchiveReference.test_non_tiny_response[IATI Standard - Schema Version Homepage]": {"desc": "Confirm each request has response content that is not tiny.", "args": ["IATI Standard - Schema Version Homepage"], "outcome": "failed", "error_msg": "self = \nrequest_to_load = 'IATI Standard - Schema Version Homepage'\n\n def test_non_tiny_response(self, request_to_load):\n \"\"\"\n Confirm each request has response content that is not tiny.\n \"\"\"\n min_response_size = self.requests_to_load[request_to_load].get('min_response_size', 4000)\n response = self.loaded_request_from_test_name(request_to_load)\n \n> assert len(response.content) >= min_response_size\nE TypeError: object of type 'NoneType' has no len()\n\ntests/web_test_base.py:72: TypeError"}}, "status": "unhealthy"}, "d_portal": {"desc": "D-Portal (d-portal.org)", "results": {"TestDPortal.test_200_response[D-Portal Homepage]": {"desc": "Confirm each request has a 200 (success) status code.", "args": ["D-Portal Homepage"], "outcome": "passed", "error_msg": ""}, "TestDPortal.test_non_tiny_response[D-Portal Homepage]": {"desc": "Confirm each request has response content that is not tiny.", "args": ["D-Portal Homepage"], "outcome": "passed", "error_msg": ""}}, "status": "healthy"}, "dashboard": {"desc": "Dashboard (dashboard.iatistandard.org)", "results": {"TestIATIDashboard.test_contains_links[Dashboard Homepage]": {"desc": "Test that each page contains links to the defined URLs.", "args": ["Dashboard Homepage"], "outcome": "passed", "error_msg": ""}, "TestIATIDashboard.test_contains_links[Page Generated Late in Process]": {"desc": "Test that each page contains links to the defined URLs.", "args": ["Page Generated Late in Process"], "outcome": "passed", "error_msg": ""}, "TestIATIDashboard.test_recently_generated[Dashboard Homepage]": {"desc": "Tests that the dashboard was generated in the past 7 days.", "args": ["Dashboard Homepage"], "outcome": "passed", "error_msg": ""}, "TestIATIDashboard.test_recently_generated[Page Generated Late in Process]": {"desc": "Tests that the dashboard was generated in the past 7 days.", "args": ["Page Generated Late in Process"], "outcome": "passed", "error_msg": ""}, "TestIATIDashboard.test_200_response[Dashboard Homepage]": {"desc": "Confirm each request has a 200 (success) status code.", "args": ["Dashboard Homepage"], "outcome": "passed", "error_msg": ""}, "TestIATIDashboard.test_200_response[Page Generated Late in Process]": {"desc": "Confirm each request has a 200 (success) status code.", "args": ["Page Generated Late in Process"], "outcome": "passed", "error_msg": ""}, "TestIATIDashboard.test_non_tiny_response[Dashboard Homepage]": {"desc": "Confirm each request has response content that is not tiny.", "args": ["Dashboard Homepage"], "outcome": "passed", "error_msg": ""}, "TestIATIDashboard.test_non_tiny_response[Page Generated Late in Process]": {"desc": "Confirm each request has response content that is not tiny.", "args": ["Page Generated Late in Process"], "outcome": "passed", "error_msg": ""}}, "status": "healthy"}, "global_consistency": {"desc": "Consistency of various top level figures across IATI websites.", "results": {"TestGlobalConsistency.test_dash_activity_count_above_min": {"desc": "Test to ensure the dashboard unique activity count is above a specified minimum value (85,000).", "args": [], "outcome": "passed", "error_msg": ""}, "TestGlobalConsistency.test_activity_count_dash_value_consistency": {"desc": "Test to ensure activity counts are consistent within the dashboard.", "args": [], "outcome": "passed", "error_msg": ""}, "TestGlobalConsistency.test_unique_vs_total_dash_activity_values": {"desc": "Test to ensure unique activity counts within the dashboard are not higher\nthan the overall activity counts.", "args": [], "outcome": "passed", "error_msg": ""}, "TestGlobalConsistency.test_activity_count_consistency_iatistandard_homepage": {"desc": "Test to ensure the activity count is consistent, within a 3% margin of error,\nbetween the registry and the IATI Standard homepage.", "args": [], "outcome": "passed", "error_msg": ""}, "TestGlobalConsistency.test_activity_file_count_above_min": {"desc": "Test to ensure the unique activity file count is above a specified minimum value (4,700).\nThis checks both the dashboard and registry.", "args": [], "outcome": "passed", "error_msg": ""}, "TestGlobalConsistency.test_activity_file_count_dash_values": {"desc": "Test to ensure activity file counts are consistent within the dashboard.", "args": [], "outcome": "passed", "error_msg": ""}, "TestGlobalConsistency.test_activity_file_count_consistency": {"desc": "Test to ensure the activity file count is consistent, within a margin of error,\nbetween the registry and dashboard.", "args": [], "outcome": "passed", "error_msg": ""}, "TestGlobalConsistency.test_org_file_count_above_min": {"desc": "Test to ensure the organisation file count is above a specified minimum value (450).\nThis checks both the dashboard and registry.", "args": [], "outcome": "passed", "error_msg": ""}, "TestGlobalConsistency.test_org_file_count_dash_values": {"desc": "Test to ensure organisation file counts are consistent within the dashboard.", "args": [], "outcome": "passed", "error_msg": ""}, "TestGlobalConsistency.test_organisation_dataset_count_consistency": {"desc": "Test to ensure the activity file count is consistent, within a margin of error,\nbetween the registry and dashboard.", "args": [], "outcome": "passed", "error_msg": ""}, "TestGlobalConsistency.test_publisher_count_above_min": {"desc": "Test to ensure the publisher count is above a specified minimum value (630).\nThis checks both the dashboard and registry.", "args": [], "outcome": "passed", "error_msg": ""}, "TestGlobalConsistency.test_publisher_count_dash_values": {"desc": "Test to ensure organisation file counts are consistent within the dashboard.", "args": [], "outcome": "passed", "error_msg": ""}, "TestGlobalConsistency.test_publisher_count_consistency_dashboard": {"desc": "Test to ensure the publisher count is consistent, within a margin of error,\nbetween the registry and dashboard.", "args": [], "outcome": "passed", "error_msg": ""}, "TestGlobalConsistency.test_publisher_count_consistency_iatistandard_homepage": {"desc": "Test to ensure the publisher count is consistent, within a margin of error,\nbetween the registry and the IATI Standard homepage.", "args": [], "outcome": "passed", "error_msg": ""}, "TestGlobalConsistency.test_200_response[IATI Registry - Homepage]": {"desc": "Confirm each request has a 200 (success) status code.", "args": ["IATI Registry - Homepage"], "outcome": "passed", "error_msg": ""}, "TestGlobalConsistency.test_200_response[IATI Registry - Activity Dataset Page]": {"desc": "Confirm each request has a 200 (success) status code.", "args": ["IATI Registry - Activity Dataset Page"], "outcome": "passed", "error_msg": ""}, "TestGlobalConsistency.test_200_response[IATI Registry - Organisation Dataset Page]": {"desc": "Confirm each request has a 200 (success) status code.", "args": ["IATI Registry - Organisation Dataset Page"], "outcome": "passed", "error_msg": ""}, "TestGlobalConsistency.test_200_response[IATI Standard - Homepage]": {"desc": "Confirm each request has a 200 (success) status code.", "args": ["IATI Standard - Homepage"], "outcome": "passed", "error_msg": ""}, "TestGlobalConsistency.test_200_response[IATI Dashboard - Homepage]": {"desc": "Confirm each request has a 200 (success) status code.", "args": ["IATI Dashboard - Homepage"], "outcome": "passed", "error_msg": ""}, "TestGlobalConsistency.test_200_response[IATI Dashboard - Activities Page]": {"desc": "Confirm each request has a 200 (success) status code.", "args": ["IATI Dashboard - Activities Page"], "outcome": "passed", "error_msg": ""}, "TestGlobalConsistency.test_200_response[IATI Dashboard - Files Page]": {"desc": "Confirm each request has a 200 (success) status code.", "args": ["IATI Dashboard - Files Page"], "outcome": "passed", "error_msg": ""}, "TestGlobalConsistency.test_200_response[IATI Dashboard - Publisher Page]": {"desc": "Confirm each request has a 200 (success) status code.", "args": ["IATI Dashboard - Publisher Page"], "outcome": "passed", "error_msg": ""}, "TestGlobalConsistency.test_non_tiny_response[IATI Registry - Homepage]": {"desc": "Confirm each request has response content that is not tiny.", "args": ["IATI Registry - Homepage"], "outcome": "passed", "error_msg": ""}, "TestGlobalConsistency.test_non_tiny_response[IATI Registry - Activity Dataset Page]": {"desc": "Confirm each request has response content that is not tiny.", "args": ["IATI Registry - Activity Dataset Page"], "outcome": "passed", "error_msg": ""}, "TestGlobalConsistency.test_non_tiny_response[IATI Registry - Organisation Dataset Page]": {"desc": "Confirm each request has response content that is not tiny.", "args": ["IATI Registry - Organisation Dataset Page"], "outcome": "passed", "error_msg": ""}, "TestGlobalConsistency.test_non_tiny_response[IATI Standard - Homepage]": {"desc": "Confirm each request has response content that is not tiny.", "args": ["IATI Standard - Homepage"], "outcome": "passed", "error_msg": ""}, "TestGlobalConsistency.test_non_tiny_response[IATI Dashboard - Homepage]": {"desc": "Confirm each request has response content that is not tiny.", "args": ["IATI Dashboard - Homepage"], "outcome": "passed", "error_msg": ""}, "TestGlobalConsistency.test_non_tiny_response[IATI Dashboard - Activities Page]": {"desc": "Confirm each request has response content that is not tiny.", "args": ["IATI Dashboard - Activities Page"], "outcome": "passed", "error_msg": ""}, "TestGlobalConsistency.test_non_tiny_response[IATI Dashboard - Files Page]": {"desc": "Confirm each request has response content that is not tiny.", "args": ["IATI Dashboard - Files Page"], "outcome": "passed", "error_msg": ""}, "TestGlobalConsistency.test_non_tiny_response[IATI Dashboard - Publisher Page]": {"desc": "Confirm each request has response content that is not tiny.", "args": ["IATI Dashboard - Publisher Page"], "outcome": "passed", "error_msg": ""}}, "status": "healthy"}, "google_group": {"desc": "Old IATI google group", "results": {"TestGoogleGroup.test_200_response[Google Group Landing Page]": {"desc": "Confirm each request has a 200 (success) status code.", "args": ["Google Group Landing Page"], "outcome": "passed", "error_msg": ""}, "TestGoogleGroup.test_non_tiny_response[Google Group Landing Page]": {"desc": "Confirm each request has response content that is not tiny.", "args": ["Google Group Landing Page"], "outcome": "passed", "error_msg": ""}}, "status": "healthy"}, "iati_standard": {"desc": "IATI website (iatistandard.org)", "results": {"TestIATIStandard.test_contains_links[iatistandard.org]": {"desc": "Confirm the page contains links to:\n\n* /en/news/\n* /en/about/\n* /en/iati-standard/\n* /en/using-data/\n* /en/contact/\n* /en/privacy-policy/", "args": ["iatistandard.org"], "outcome": "passed", "error_msg": ""}, "TestIATIStandard.test_contains_expected_text[iatistandard.org]": {"desc": "Confirm the page contains the following text:\n\nIATI is a global initiative to improve the transparency\nof development and humanitarian resources", "args": ["iatistandard.org"], "outcome": "passed", "error_msg": ""}, "TestIATIStandard.test_contains_newsletter_signup_form[iatistandard.org]": {"desc": "Confirm the page includes a newsletter signup form.", "args": ["iatistandard.org"], "outcome": "passed", "error_msg": ""}, "TestIATIStandard.test_200_response[iatistandard.org]": {"desc": "Confirm each request has a 200 (success) status code.", "args": ["iatistandard.org"], "outcome": "passed", "error_msg": ""}, "TestIATIStandard.test_non_tiny_response[iatistandard.org]": {"desc": "Confirm each request has response content that is not tiny.", "args": ["iatistandard.org"], "outcome": "passed", "error_msg": ""}}, "status": "healthy"}, "iati_wiki": {"desc": "Old wiki (wiki.archive.iatistandard.org)", "results": {"TestIATIWiki.test_locate_links[wiki.archive.iatistandard.org]": {"desc": "Confirm each page contains links to:\n\n* iatistandard.org\n* iatiregistry.org", "args": ["wiki.archive.iatistandard.org"], "outcome": "failed", "error_msg": "self = \nloaded_request = \n\n def test_locate_links(self, loaded_request):\n \"\"\"\n Confirm each page contains links to:\n \n * iatistandard.org\n * iatiregistry.org\n \"\"\"\n> result = utility.get_links_from_page(loaded_request)\n\ntests/test_iati_wiki.py:22: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \ntests/utility/utility.py:26: in get_links_from_page\n return locate_xpath_result(request, \"//a[@href]/@href\")\ntests/utility/utility.py:15: in locate_xpath_result\n tree = etree.fromstring(request.content, parser)\nsrc/lxml/etree.pyx:3234: in lxml.etree.fromstring\n ???\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\n> ???\nE ValueError: can only parse strings\n\nsrc/lxml/parser.pxi:1875: ValueError"}, "TestIATIWiki.test_200_response[wiki.archive.iatistandard.org]": {"desc": "Confirm each request has a 200 (success) status code.", "args": ["wiki.archive.iatistandard.org"], "outcome": "failed", "error_msg": "self = \nloaded_request = \n\n def test_200_response(self, loaded_request):\n \"\"\"\n Confirm each request has a 200 (success) status code.\n \"\"\"\n> assert loaded_request.status_code == 200\nE AssertionError\n\ntests/web_test_base.py:63: AssertionError"}, "TestIATIWiki.test_non_tiny_response[wiki.archive.iatistandard.org]": {"desc": "Confirm each request has response content that is not tiny.", "args": ["wiki.archive.iatistandard.org"], "outcome": "failed", "error_msg": "self = \nrequest_to_load = 'wiki.archive.iatistandard.org'\n\n def test_non_tiny_response(self, request_to_load):\n \"\"\"\n Confirm each request has response content that is not tiny.\n \"\"\"\n min_response_size = self.requests_to_load[request_to_load].get('min_response_size', 4000)\n response = self.loaded_request_from_test_name(request_to_load)\n \n> assert len(response.content) >= min_response_size\nE TypeError: object of type 'NoneType' has no len()\n\ntests/web_test_base.py:72: TypeError"}}, "status": "unhealthy"}, "registry": {"desc": "Registry (iatiregistry.org)", "results": {"TestIATIRegistry.test_contains_links[iatiregistry.org]": {"desc": "Test that each page contains links to the defined URLs.", "args": ["iatiregistry.org"], "outcome": "passed", "error_msg": ""}, "TestIATIRegistry.test_contains_links[IATI Registry registration page]": {"desc": "Test that each page contains links to the defined URLs.", "args": ["IATI Registry registration page"], "outcome": "passed", "error_msg": ""}, "TestIATIRegistry.test_contains_links[IATI Registry login page]": {"desc": "Test that each page contains links to the defined URLs.", "args": ["IATI Registry login page"], "outcome": "passed", "error_msg": ""}, "TestIATIRegistry.test_contains_links[IATI Registry: Random dataset]": {"desc": "Test that each page contains links to the defined URLs.", "args": ["IATI Registry: Random dataset"], "outcome": "passed", "error_msg": ""}, "TestIATIRegistry.test_contains_links[IATI Registry: Random publisher page]": {"desc": "Test that each page contains links to the defined URLs.", "args": ["IATI Registry: Random publisher page"], "outcome": "passed", "error_msg": ""}, "TestIATIRegistry.test_registration_form_presence[IATI Registry registration page]": {"desc": "Test that there is a valid registration form on the Registry Registration Page.", "args": ["IATI Registry registration page"], "outcome": "passed", "error_msg": ""}, "TestIATIRegistry.test_login_form_presence[IATI Registry login page]": {"desc": "Test that there is a valid login form on the Registry Login Page.", "args": ["IATI Registry login page"], "outcome": "passed", "error_msg": ""}, "TestIATIRegistry.test_200_response[iatiregistry.org]": {"desc": "Confirm each request has a 200 (success) status code.", "args": ["iatiregistry.org"], "outcome": "passed", "error_msg": ""}, "TestIATIRegistry.test_200_response[IATI Registry registration page]": {"desc": "Confirm each request has a 200 (success) status code.", "args": ["IATI Registry registration page"], "outcome": "passed", "error_msg": ""}, "TestIATIRegistry.test_200_response[IATI Registry login page]": {"desc": "Confirm each request has a 200 (success) status code.", "args": ["IATI Registry login page"], "outcome": "passed", "error_msg": ""}, "TestIATIRegistry.test_200_response[IATI Registry: Random publisher page]": {"desc": "Confirm each request has a 200 (success) status code.", "args": ["IATI Registry: Random publisher page"], "outcome": "passed", "error_msg": ""}, "TestIATIRegistry.test_200_response[IATI Registry: Random dataset]": {"desc": "Confirm each request has a 200 (success) status code.", "args": ["IATI Registry: Random dataset"], "outcome": "failed", "error_msg": "self = \nloaded_request = \n\n def test_200_response(self, loaded_request):\n \"\"\"\n Confirm each request has a 200 (success) status code.\n \"\"\"\n> assert loaded_request.status_code == 200\nE AssertionError\n\ntests/web_test_base.py:63: AssertionError"}, "TestIATIRegistry.test_200_response[IATI Registry API: Package search call]": {"desc": "Confirm each request has a 200 (success) status code.", "args": ["IATI Registry API: Package search call"], "outcome": "passed", "error_msg": ""}, "TestIATIRegistry.test_non_tiny_response[iatiregistry.org]": {"desc": "Confirm each request has response content that is not tiny.", "args": ["iatiregistry.org"], "outcome": "passed", "error_msg": ""}, "TestIATIRegistry.test_non_tiny_response[IATI Registry registration page]": {"desc": "Confirm each request has response content that is not tiny.", "args": ["IATI Registry registration page"], "outcome": "passed", "error_msg": ""}, "TestIATIRegistry.test_non_tiny_response[IATI Registry login page]": {"desc": "Confirm each request has response content that is not tiny.", "args": ["IATI Registry login page"], "outcome": "passed", "error_msg": ""}, "TestIATIRegistry.test_non_tiny_response[IATI Registry: Random publisher page]": {"desc": "Confirm each request has response content that is not tiny.", "args": ["IATI Registry: Random publisher page"], "outcome": "passed", "error_msg": ""}, "TestIATIRegistry.test_non_tiny_response[IATI Registry: Random dataset]": {"desc": "Confirm each request has response content that is not tiny.", "args": ["IATI Registry: Random dataset"], "outcome": "passed", "error_msg": ""}, "TestIATIRegistry.test_non_tiny_response[IATI Registry API: Package search call]": {"desc": "Confirm each request has response content that is not tiny.", "args": ["IATI Registry API: Package search call"], "outcome": "passed", "error_msg": ""}}, "status": "unhealthy"}}} \ No newline at end of file +{"created_at": "2023-09-17 12:27:35.195699", "build": null, "status": "unhealthy", "report": {"aidstream": {"desc": "AidStream (aidstream.org)", "results": {"TestAidstream.test_load_aidstream_datasets[Aidstream hosted dataset 1]": {"desc": "Test that aidstream sample datasets are live.", "args": ["Aidstream hosted dataset 1"], "outcome": "passed", "error_msg": ""}, "TestAidstream.test_load_aidstream_datasets[Aidstream hosted dataset 2]": {"desc": "Test that aidstream sample datasets are live.", "args": ["Aidstream hosted dataset 2"], "outcome": "passed", "error_msg": ""}, "TestAidstream.test_load_aidstream_datasets[Aidstream hosted dataset 3]": {"desc": "Test that aidstream sample datasets are live.", "args": ["Aidstream hosted dataset 3"], "outcome": "passed", "error_msg": ""}, "TestAidstream.test_200_response[Aidstream homepage]": {"desc": "Confirm each request has a 200 (success) status code.", "args": ["Aidstream homepage"], "outcome": "passed", "error_msg": ""}, "TestAidstream.test_200_response[Aidstream hosted dataset 1]": {"desc": "Confirm each request has a 200 (success) status code.", "args": ["Aidstream hosted dataset 1"], "outcome": "passed", "error_msg": ""}, "TestAidstream.test_200_response[Aidstream hosted dataset 2]": {"desc": "Confirm each request has a 200 (success) status code.", "args": ["Aidstream hosted dataset 2"], "outcome": "passed", "error_msg": ""}, "TestAidstream.test_200_response[Aidstream hosted dataset 3]": {"desc": "Confirm each request has a 200 (success) status code.", "args": ["Aidstream hosted dataset 3"], "outcome": "passed", "error_msg": ""}, "TestAidstream.test_non_tiny_response[Aidstream homepage]": {"desc": "Confirm each request has response content that is not tiny.", "args": ["Aidstream homepage"], "outcome": "passed", "error_msg": ""}, "TestAidstream.test_non_tiny_response[Aidstream hosted dataset 1]": {"desc": "Confirm each request has response content that is not tiny.", "args": ["Aidstream hosted dataset 1"], "outcome": "passed", "error_msg": ""}, "TestAidstream.test_non_tiny_response[Aidstream hosted dataset 2]": {"desc": "Confirm each request has response content that is not tiny.", "args": ["Aidstream hosted dataset 2"], "outcome": "passed", "error_msg": ""}, "TestAidstream.test_non_tiny_response[Aidstream hosted dataset 3]": {"desc": "Confirm each request has response content that is not tiny.", "args": ["Aidstream hosted dataset 3"], "outcome": "passed", "error_msg": ""}}, "status": "healthy"}, "archive_reference": {"desc": "Archive reference (archivereference.iatistandard.org)", "results": {"TestArchiveReference.test_locate_links[IATI Standard Homepage]": {"desc": "Tests that each page contains links to the defined URLs.", "args": ["IATI Standard Homepage"], "outcome": "failed", "error_msg": "self = \nloaded_request = \n\n def test_locate_links(self, loaded_request):\n \"\"\"\n Tests that each page contains links to the defined URLs.\n \"\"\"\n> result = utility.get_links_from_page(loaded_request)\n\ntests/test_archive_reference.py:38: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \ntests/utility/utility.py:26: in get_links_from_page\n return locate_xpath_result(request, \"//a[@href]/@href\")\ntests/utility/utility.py:15: in locate_xpath_result\n tree = etree.fromstring(request.content, parser)\nsrc/lxml/etree.pyx:3234: in lxml.etree.fromstring\n ???\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\n> ???\nE ValueError: can only parse strings\n\nsrc/lxml/parser.pxi:1875: ValueError"}, "TestArchiveReference.test_locate_links[IATI Standard - Summary Page]": {"desc": "Tests that each page contains links to the defined URLs.", "args": ["IATI Standard - Summary Page"], "outcome": "failed", "error_msg": "self = \nloaded_request = \n\n def test_locate_links(self, loaded_request):\n \"\"\"\n Tests that each page contains links to the defined URLs.\n \"\"\"\n> result = utility.get_links_from_page(loaded_request)\n\ntests/test_archive_reference.py:38: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \ntests/utility/utility.py:26: in get_links_from_page\n return locate_xpath_result(request, \"//a[@href]/@href\")\ntests/utility/utility.py:15: in locate_xpath_result\n tree = etree.fromstring(request.content, parser)\nsrc/lxml/etree.pyx:3234: in lxml.etree.fromstring\n ???\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\n> ???\nE ValueError: can only parse strings\n\nsrc/lxml/parser.pxi:1875: ValueError"}, "TestArchiveReference.test_locate_links[IATI Standard - Schema Page]": {"desc": "Tests that each page contains links to the defined URLs.", "args": ["IATI Standard - Schema Page"], "outcome": "failed", "error_msg": "self = \nloaded_request = \n\n def test_locate_links(self, loaded_request):\n \"\"\"\n Tests that each page contains links to the defined URLs.\n \"\"\"\n> result = utility.get_links_from_page(loaded_request)\n\ntests/test_archive_reference.py:38: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \ntests/utility/utility.py:26: in get_links_from_page\n return locate_xpath_result(request, \"//a[@href]/@href\")\ntests/utility/utility.py:15: in locate_xpath_result\n tree = etree.fromstring(request.content, parser)\nsrc/lxml/etree.pyx:3234: in lxml.etree.fromstring\n ???\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\n> ???\nE ValueError: can only parse strings\n\nsrc/lxml/parser.pxi:1875: ValueError"}, "TestArchiveReference.test_locate_links[IATI Standard - Old Schema Version, Developer Docs]": {"desc": "Tests that each page contains links to the defined URLs.", "args": ["IATI Standard - Old Schema Version, Developer Docs"], "outcome": "failed", "error_msg": "self = \nloaded_request = \n\n def test_locate_links(self, loaded_request):\n \"\"\"\n Tests that each page contains links to the defined URLs.\n \"\"\"\n> result = utility.get_links_from_page(loaded_request)\n\ntests/test_archive_reference.py:38: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \ntests/utility/utility.py:26: in get_links_from_page\n return locate_xpath_result(request, \"//a[@href]/@href\")\ntests/utility/utility.py:15: in locate_xpath_result\n tree = etree.fromstring(request.content, parser)\nsrc/lxml/etree.pyx:3234: in lxml.etree.fromstring\n ???\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\n> ???\nE ValueError: can only parse strings\n\nsrc/lxml/parser.pxi:1875: ValueError"}, "TestArchiveReference.test_locate_links[IATI Standard - Misc Developer Docs Page]": {"desc": "Tests that each page contains links to the defined URLs.", "args": ["IATI Standard - Misc Developer Docs Page"], "outcome": "failed", "error_msg": "self = \nloaded_request = \n\n def test_locate_links(self, loaded_request):\n \"\"\"\n Tests that each page contains links to the defined URLs.\n \"\"\"\n> result = utility.get_links_from_page(loaded_request)\n\ntests/test_archive_reference.py:38: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \ntests/utility/utility.py:26: in get_links_from_page\n return locate_xpath_result(request, \"//a[@href]/@href\")\ntests/utility/utility.py:15: in locate_xpath_result\n tree = etree.fromstring(request.content, parser)\nsrc/lxml/etree.pyx:3234: in lxml.etree.fromstring\n ???\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\n> ???\nE ValueError: can only parse strings\n\nsrc/lxml/parser.pxi:1875: ValueError"}, "TestArchiveReference.test_locate_links[IATI Standard - Activity Standard Docs Page]": {"desc": "Tests that each page contains links to the defined URLs.", "args": ["IATI Standard - Activity Standard Docs Page"], "outcome": "failed", "error_msg": "self = \nloaded_request = \n\n def test_locate_links(self, loaded_request):\n \"\"\"\n Tests that each page contains links to the defined URLs.\n \"\"\"\n> result = utility.get_links_from_page(loaded_request)\n\ntests/test_archive_reference.py:38: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \ntests/utility/utility.py:26: in get_links_from_page\n return locate_xpath_result(request, \"//a[@href]/@href\")\ntests/utility/utility.py:15: in locate_xpath_result\n tree = etree.fromstring(request.content, parser)\nsrc/lxml/etree.pyx:3234: in lxml.etree.fromstring\n ???\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\n> ???\nE ValueError: can only parse strings\n\nsrc/lxml/parser.pxi:1875: ValueError"}, "TestArchiveReference.test_locate_links[IATI Standard - Schema Version Homepage]": {"desc": "Tests that each page contains links to the defined URLs.", "args": ["IATI Standard - Schema Version Homepage"], "outcome": "failed", "error_msg": "self = \nloaded_request = \n\n def test_locate_links(self, loaded_request):\n \"\"\"\n Tests that each page contains links to the defined URLs.\n \"\"\"\n> result = utility.get_links_from_page(loaded_request)\n\ntests/test_archive_reference.py:38: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \ntests/utility/utility.py:26: in get_links_from_page\n return locate_xpath_result(request, \"//a[@href]/@href\")\ntests/utility/utility.py:15: in locate_xpath_result\n tree = etree.fromstring(request.content, parser)\nsrc/lxml/etree.pyx:3234: in lxml.etree.fromstring\n ???\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\n> ???\nE ValueError: can only parse strings\n\nsrc/lxml/parser.pxi:1875: ValueError"}, "TestArchiveReference.test_footer_license_information[IATI Standard Homepage]": {"desc": "Tests that the footer contains license information.\nThis should include information about each text and icon licensing.", "args": ["IATI Standard Homepage"], "outcome": "failed", "error_msg": "self = \nloaded_request = \n\n def test_footer_license_information(self, loaded_request):\n \"\"\"\n Tests that the footer contains license information.\n This should include information about each text and icon licensing.\n \"\"\"\n footer_xpath = '//*[@id=\"footer-credits\"]/span'\n \n> result = utility.get_text_from_xpath(loaded_request, footer_xpath)\n\ntests/test_archive_reference.py:53: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \ntests/utility/utility.py:34: in get_text_from_xpath\n return locate_xpath_result(request, xpath + \"/text()\")\ntests/utility/utility.py:15: in locate_xpath_result\n tree = etree.fromstring(request.content, parser)\nsrc/lxml/etree.pyx:3234: in lxml.etree.fromstring\n ???\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\n> ???\nE ValueError: can only parse strings\n\nsrc/lxml/parser.pxi:1875: ValueError"}, "TestArchiveReference.test_footer_license_information[IATI Standard - Summary Page]": {"desc": "Tests that the footer contains license information.\nThis should include information about each text and icon licensing.", "args": ["IATI Standard - Summary Page"], "outcome": "failed", "error_msg": "self = \nloaded_request = \n\n def test_footer_license_information(self, loaded_request):\n \"\"\"\n Tests that the footer contains license information.\n This should include information about each text and icon licensing.\n \"\"\"\n footer_xpath = '//*[@id=\"footer-credits\"]/span'\n \n> result = utility.get_text_from_xpath(loaded_request, footer_xpath)\n\ntests/test_archive_reference.py:53: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \ntests/utility/utility.py:34: in get_text_from_xpath\n return locate_xpath_result(request, xpath + \"/text()\")\ntests/utility/utility.py:15: in locate_xpath_result\n tree = etree.fromstring(request.content, parser)\nsrc/lxml/etree.pyx:3234: in lxml.etree.fromstring\n ???\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\n> ???\nE ValueError: can only parse strings\n\nsrc/lxml/parser.pxi:1875: ValueError"}, "TestArchiveReference.test_footer_license_information[IATI Standard - Schema Page]": {"desc": "Tests that the footer contains license information.\nThis should include information about each text and icon licensing.", "args": ["IATI Standard - Schema Page"], "outcome": "failed", "error_msg": "self = \nloaded_request = \n\n def test_footer_license_information(self, loaded_request):\n \"\"\"\n Tests that the footer contains license information.\n This should include information about each text and icon licensing.\n \"\"\"\n footer_xpath = '//*[@id=\"footer-credits\"]/span'\n \n> result = utility.get_text_from_xpath(loaded_request, footer_xpath)\n\ntests/test_archive_reference.py:53: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \ntests/utility/utility.py:34: in get_text_from_xpath\n return locate_xpath_result(request, xpath + \"/text()\")\ntests/utility/utility.py:15: in locate_xpath_result\n tree = etree.fromstring(request.content, parser)\nsrc/lxml/etree.pyx:3234: in lxml.etree.fromstring\n ???\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\n> ???\nE ValueError: can only parse strings\n\nsrc/lxml/parser.pxi:1875: ValueError"}, "TestArchiveReference.test_footer_license_information[IATI Standard - Old Schema Version, Developer Docs]": {"desc": "Tests that the footer contains license information.\nThis should include information about each text and icon licensing.", "args": ["IATI Standard - Old Schema Version, Developer Docs"], "outcome": "failed", "error_msg": "self = \nloaded_request = \n\n def test_footer_license_information(self, loaded_request):\n \"\"\"\n Tests that the footer contains license information.\n This should include information about each text and icon licensing.\n \"\"\"\n footer_xpath = '//*[@id=\"footer-credits\"]/span'\n \n> result = utility.get_text_from_xpath(loaded_request, footer_xpath)\n\ntests/test_archive_reference.py:53: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \ntests/utility/utility.py:34: in get_text_from_xpath\n return locate_xpath_result(request, xpath + \"/text()\")\ntests/utility/utility.py:15: in locate_xpath_result\n tree = etree.fromstring(request.content, parser)\nsrc/lxml/etree.pyx:3234: in lxml.etree.fromstring\n ???\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\n> ???\nE ValueError: can only parse strings\n\nsrc/lxml/parser.pxi:1875: ValueError"}, "TestArchiveReference.test_footer_license_information[IATI Standard - Misc Developer Docs Page]": {"desc": "Tests that the footer contains license information.\nThis should include information about each text and icon licensing.", "args": ["IATI Standard - Misc Developer Docs Page"], "outcome": "failed", "error_msg": "self = \nloaded_request = \n\n def test_footer_license_information(self, loaded_request):\n \"\"\"\n Tests that the footer contains license information.\n This should include information about each text and icon licensing.\n \"\"\"\n footer_xpath = '//*[@id=\"footer-credits\"]/span'\n \n> result = utility.get_text_from_xpath(loaded_request, footer_xpath)\n\ntests/test_archive_reference.py:53: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \ntests/utility/utility.py:34: in get_text_from_xpath\n return locate_xpath_result(request, xpath + \"/text()\")\ntests/utility/utility.py:15: in locate_xpath_result\n tree = etree.fromstring(request.content, parser)\nsrc/lxml/etree.pyx:3234: in lxml.etree.fromstring\n ???\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\n> ???\nE ValueError: can only parse strings\n\nsrc/lxml/parser.pxi:1875: ValueError"}, "TestArchiveReference.test_footer_license_information[IATI Standard - Activity Standard Docs Page]": {"desc": "Tests that the footer contains license information.\nThis should include information about each text and icon licensing.", "args": ["IATI Standard - Activity Standard Docs Page"], "outcome": "failed", "error_msg": "self = \nloaded_request = \n\n def test_footer_license_information(self, loaded_request):\n \"\"\"\n Tests that the footer contains license information.\n This should include information about each text and icon licensing.\n \"\"\"\n footer_xpath = '//*[@id=\"footer-credits\"]/span'\n \n> result = utility.get_text_from_xpath(loaded_request, footer_xpath)\n\ntests/test_archive_reference.py:53: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \ntests/utility/utility.py:34: in get_text_from_xpath\n return locate_xpath_result(request, xpath + \"/text()\")\ntests/utility/utility.py:15: in locate_xpath_result\n tree = etree.fromstring(request.content, parser)\nsrc/lxml/etree.pyx:3234: in lxml.etree.fromstring\n ???\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\n> ???\nE ValueError: can only parse strings\n\nsrc/lxml/parser.pxi:1875: ValueError"}, "TestArchiveReference.test_footer_license_information[IATI Standard - Schema Version Homepage]": {"desc": "Tests that the footer contains license information.\nThis should include information about each text and icon licensing.", "args": ["IATI Standard - Schema Version Homepage"], "outcome": "failed", "error_msg": "self = \nloaded_request = \n\n def test_footer_license_information(self, loaded_request):\n \"\"\"\n Tests that the footer contains license information.\n This should include information about each text and icon licensing.\n \"\"\"\n footer_xpath = '//*[@id=\"footer-credits\"]/span'\n \n> result = utility.get_text_from_xpath(loaded_request, footer_xpath)\n\ntests/test_archive_reference.py:53: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \ntests/utility/utility.py:34: in get_text_from_xpath\n return locate_xpath_result(request, xpath + \"/text()\")\ntests/utility/utility.py:15: in locate_xpath_result\n tree = etree.fromstring(request.content, parser)\nsrc/lxml/etree.pyx:3234: in lxml.etree.fromstring\n ???\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\n> ???\nE ValueError: can only parse strings\n\nsrc/lxml/parser.pxi:1875: ValueError"}, "TestArchiveReference.test_locate_text[IATI Standard Homepage]": {"desc": "Tests that each page contains the text\n'technical publishing framework' in the heading.", "args": ["IATI Standard Homepage"], "outcome": "failed", "error_msg": "self = \ntarget_request = 'IATI Standard Homepage'\n\n @pytest.mark.parametrize(\"target_request\", [\"IATI Standard Homepage\"])\n def test_locate_text(self, target_request):\n \"\"\"\n Tests that each page contains the text\n 'technical publishing framework' in the heading.\n \"\"\"\n req = self.loaded_request_from_test_name(target_request)\n text_to_find = \"technical publishing framework\"\n xpath_to_locate = '//*[@id=\"home-strapline\"]/h1'\n \n> result = utility.get_text_from_xpath(req, xpath_to_locate)\n\ntests/test_archive_reference.py:67: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \ntests/utility/utility.py:34: in get_text_from_xpath\n return locate_xpath_result(request, xpath + \"/text()\")\ntests/utility/utility.py:15: in locate_xpath_result\n tree = etree.fromstring(request.content, parser)\nsrc/lxml/etree.pyx:3234: in lxml.etree.fromstring\n ???\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\n> ???\nE ValueError: can only parse strings\n\nsrc/lxml/parser.pxi:1875: ValueError"}, "TestArchiveReference.test_200_response[IATI Standard Homepage]": {"desc": "Confirm each request has a 200 (success) status code.", "args": ["IATI Standard Homepage"], "outcome": "failed", "error_msg": "self = \nloaded_request = \n\n def test_200_response(self, loaded_request):\n \"\"\"\n Confirm each request has a 200 (success) status code.\n \"\"\"\n> assert loaded_request.status_code == 200\nE AssertionError\n\ntests/web_test_base.py:63: AssertionError"}, "TestArchiveReference.test_200_response[IATI Standard - Summary Page]": {"desc": "Confirm each request has a 200 (success) status code.", "args": ["IATI Standard - Summary Page"], "outcome": "failed", "error_msg": "self = \nloaded_request = \n\n def test_200_response(self, loaded_request):\n \"\"\"\n Confirm each request has a 200 (success) status code.\n \"\"\"\n> assert loaded_request.status_code == 200\nE AssertionError\n\ntests/web_test_base.py:63: AssertionError"}, "TestArchiveReference.test_200_response[IATI Standard - Schema Page]": {"desc": "Confirm each request has a 200 (success) status code.", "args": ["IATI Standard - Schema Page"], "outcome": "failed", "error_msg": "self = \nloaded_request = \n\n def test_200_response(self, loaded_request):\n \"\"\"\n Confirm each request has a 200 (success) status code.\n \"\"\"\n> assert loaded_request.status_code == 200\nE AssertionError\n\ntests/web_test_base.py:63: AssertionError"}, "TestArchiveReference.test_200_response[IATI Standard - Old Schema Version, Developer Docs]": {"desc": "Confirm each request has a 200 (success) status code.", "args": ["IATI Standard - Old Schema Version, Developer Docs"], "outcome": "failed", "error_msg": "self = \nloaded_request = \n\n def test_200_response(self, loaded_request):\n \"\"\"\n Confirm each request has a 200 (success) status code.\n \"\"\"\n> assert loaded_request.status_code == 200\nE AssertionError\n\ntests/web_test_base.py:63: AssertionError"}, "TestArchiveReference.test_200_response[IATI Standard - Misc Developer Docs Page]": {"desc": "Confirm each request has a 200 (success) status code.", "args": ["IATI Standard - Misc Developer Docs Page"], "outcome": "failed", "error_msg": "self = \nloaded_request = \n\n def test_200_response(self, loaded_request):\n \"\"\"\n Confirm each request has a 200 (success) status code.\n \"\"\"\n> assert loaded_request.status_code == 200\nE AssertionError\n\ntests/web_test_base.py:63: AssertionError"}, "TestArchiveReference.test_200_response[IATI Standard - Activity Standard Docs Page]": {"desc": "Confirm each request has a 200 (success) status code.", "args": ["IATI Standard - Activity Standard Docs Page"], "outcome": "failed", "error_msg": "self = \nloaded_request = \n\n def test_200_response(self, loaded_request):\n \"\"\"\n Confirm each request has a 200 (success) status code.\n \"\"\"\n> assert loaded_request.status_code == 200\nE AssertionError\n\ntests/web_test_base.py:63: AssertionError"}, "TestArchiveReference.test_200_response[IATI Standard - Schema Version Homepage]": {"desc": "Confirm each request has a 200 (success) status code.", "args": ["IATI Standard - Schema Version Homepage"], "outcome": "failed", "error_msg": "self = \nloaded_request = \n\n def test_200_response(self, loaded_request):\n \"\"\"\n Confirm each request has a 200 (success) status code.\n \"\"\"\n> assert loaded_request.status_code == 200\nE AssertionError\n\ntests/web_test_base.py:63: AssertionError"}, "TestArchiveReference.test_non_tiny_response[IATI Standard Homepage]": {"desc": "Confirm each request has response content that is not tiny.", "args": ["IATI Standard Homepage"], "outcome": "failed", "error_msg": "self = \nrequest_to_load = 'IATI Standard Homepage'\n\n def test_non_tiny_response(self, request_to_load):\n \"\"\"\n Confirm each request has response content that is not tiny.\n \"\"\"\n min_response_size = self.requests_to_load[request_to_load].get('min_response_size', 4000)\n response = self.loaded_request_from_test_name(request_to_load)\n \n> assert len(response.content) >= min_response_size\nE TypeError: object of type 'NoneType' has no len()\n\ntests/web_test_base.py:72: TypeError"}, "TestArchiveReference.test_non_tiny_response[IATI Standard - Summary Page]": {"desc": "Confirm each request has response content that is not tiny.", "args": ["IATI Standard - Summary Page"], "outcome": "failed", "error_msg": "self = \nrequest_to_load = 'IATI Standard - Summary Page'\n\n def test_non_tiny_response(self, request_to_load):\n \"\"\"\n Confirm each request has response content that is not tiny.\n \"\"\"\n min_response_size = self.requests_to_load[request_to_load].get('min_response_size', 4000)\n response = self.loaded_request_from_test_name(request_to_load)\n \n> assert len(response.content) >= min_response_size\nE TypeError: object of type 'NoneType' has no len()\n\ntests/web_test_base.py:72: TypeError"}, "TestArchiveReference.test_non_tiny_response[IATI Standard - Schema Page]": {"desc": "Confirm each request has response content that is not tiny.", "args": ["IATI Standard - Schema Page"], "outcome": "failed", "error_msg": "self = \nrequest_to_load = 'IATI Standard - Schema Page'\n\n def test_non_tiny_response(self, request_to_load):\n \"\"\"\n Confirm each request has response content that is not tiny.\n \"\"\"\n min_response_size = self.requests_to_load[request_to_load].get('min_response_size', 4000)\n response = self.loaded_request_from_test_name(request_to_load)\n \n> assert len(response.content) >= min_response_size\nE TypeError: object of type 'NoneType' has no len()\n\ntests/web_test_base.py:72: TypeError"}, "TestArchiveReference.test_non_tiny_response[IATI Standard - Old Schema Version, Developer Docs]": {"desc": "Confirm each request has response content that is not tiny.", "args": ["IATI Standard - Old Schema Version, Developer Docs"], "outcome": "failed", "error_msg": "self = \nrequest_to_load = 'IATI Standard - Old Schema Version, Developer Docs'\n\n def test_non_tiny_response(self, request_to_load):\n \"\"\"\n Confirm each request has response content that is not tiny.\n \"\"\"\n min_response_size = self.requests_to_load[request_to_load].get('min_response_size', 4000)\n response = self.loaded_request_from_test_name(request_to_load)\n \n> assert len(response.content) >= min_response_size\nE TypeError: object of type 'NoneType' has no len()\n\ntests/web_test_base.py:72: TypeError"}, "TestArchiveReference.test_non_tiny_response[IATI Standard - Misc Developer Docs Page]": {"desc": "Confirm each request has response content that is not tiny.", "args": ["IATI Standard - Misc Developer Docs Page"], "outcome": "failed", "error_msg": "self = \nrequest_to_load = 'IATI Standard - Misc Developer Docs Page'\n\n def test_non_tiny_response(self, request_to_load):\n \"\"\"\n Confirm each request has response content that is not tiny.\n \"\"\"\n min_response_size = self.requests_to_load[request_to_load].get('min_response_size', 4000)\n response = self.loaded_request_from_test_name(request_to_load)\n \n> assert len(response.content) >= min_response_size\nE TypeError: object of type 'NoneType' has no len()\n\ntests/web_test_base.py:72: TypeError"}, "TestArchiveReference.test_non_tiny_response[IATI Standard - Activity Standard Docs Page]": {"desc": "Confirm each request has response content that is not tiny.", "args": ["IATI Standard - Activity Standard Docs Page"], "outcome": "failed", "error_msg": "self = \nrequest_to_load = 'IATI Standard - Activity Standard Docs Page'\n\n def test_non_tiny_response(self, request_to_load):\n \"\"\"\n Confirm each request has response content that is not tiny.\n \"\"\"\n min_response_size = self.requests_to_load[request_to_load].get('min_response_size', 4000)\n response = self.loaded_request_from_test_name(request_to_load)\n \n> assert len(response.content) >= min_response_size\nE TypeError: object of type 'NoneType' has no len()\n\ntests/web_test_base.py:72: TypeError"}, "TestArchiveReference.test_non_tiny_response[IATI Standard - Schema Version Homepage]": {"desc": "Confirm each request has response content that is not tiny.", "args": ["IATI Standard - Schema Version Homepage"], "outcome": "failed", "error_msg": "self = \nrequest_to_load = 'IATI Standard - Schema Version Homepage'\n\n def test_non_tiny_response(self, request_to_load):\n \"\"\"\n Confirm each request has response content that is not tiny.\n \"\"\"\n min_response_size = self.requests_to_load[request_to_load].get('min_response_size', 4000)\n response = self.loaded_request_from_test_name(request_to_load)\n \n> assert len(response.content) >= min_response_size\nE TypeError: object of type 'NoneType' has no len()\n\ntests/web_test_base.py:72: TypeError"}}, "status": "unhealthy"}, "d_portal": {"desc": "D-Portal (d-portal.org)", "results": {"TestDPortal.test_200_response[D-Portal Homepage]": {"desc": "Confirm each request has a 200 (success) status code.", "args": ["D-Portal Homepage"], "outcome": "passed", "error_msg": ""}, "TestDPortal.test_non_tiny_response[D-Portal Homepage]": {"desc": "Confirm each request has response content that is not tiny.", "args": ["D-Portal Homepage"], "outcome": "passed", "error_msg": ""}}, "status": "healthy"}, "dashboard": {"desc": "Dashboard (dashboard.iatistandard.org)", "results": {"TestIATIDashboard.test_contains_links[Dashboard Homepage]": {"desc": "Test that each page contains links to the defined URLs.", "args": ["Dashboard Homepage"], "outcome": "passed", "error_msg": ""}, "TestIATIDashboard.test_contains_links[Page Generated Late in Process]": {"desc": "Test that each page contains links to the defined URLs.", "args": ["Page Generated Late in Process"], "outcome": "passed", "error_msg": ""}, "TestIATIDashboard.test_recently_generated[Dashboard Homepage]": {"desc": "Tests that the dashboard was generated in the past 7 days.", "args": ["Dashboard Homepage"], "outcome": "passed", "error_msg": ""}, "TestIATIDashboard.test_recently_generated[Page Generated Late in Process]": {"desc": "Tests that the dashboard was generated in the past 7 days.", "args": ["Page Generated Late in Process"], "outcome": "passed", "error_msg": ""}, "TestIATIDashboard.test_200_response[Dashboard Homepage]": {"desc": "Confirm each request has a 200 (success) status code.", "args": ["Dashboard Homepage"], "outcome": "passed", "error_msg": ""}, "TestIATIDashboard.test_200_response[Page Generated Late in Process]": {"desc": "Confirm each request has a 200 (success) status code.", "args": ["Page Generated Late in Process"], "outcome": "passed", "error_msg": ""}, "TestIATIDashboard.test_non_tiny_response[Dashboard Homepage]": {"desc": "Confirm each request has response content that is not tiny.", "args": ["Dashboard Homepage"], "outcome": "passed", "error_msg": ""}, "TestIATIDashboard.test_non_tiny_response[Page Generated Late in Process]": {"desc": "Confirm each request has response content that is not tiny.", "args": ["Page Generated Late in Process"], "outcome": "passed", "error_msg": ""}}, "status": "healthy"}, "global_consistency": {"desc": "Consistency of various top level figures across IATI websites.", "results": {"TestGlobalConsistency.test_dash_activity_count_above_min": {"desc": "Test to ensure the dashboard unique activity count is above a specified minimum value (85,000).", "args": [], "outcome": "passed", "error_msg": ""}, "TestGlobalConsistency.test_activity_count_dash_value_consistency": {"desc": "Test to ensure activity counts are consistent within the dashboard.", "args": [], "outcome": "passed", "error_msg": ""}, "TestGlobalConsistency.test_unique_vs_total_dash_activity_values": {"desc": "Test to ensure unique activity counts within the dashboard are not higher\nthan the overall activity counts.", "args": [], "outcome": "passed", "error_msg": ""}, "TestGlobalConsistency.test_activity_count_consistency_iatistandard_homepage": {"desc": "Test to ensure the activity count is consistent, within a 3% margin of error,\nbetween the registry and the IATI Standard homepage.", "args": [], "outcome": "passed", "error_msg": ""}, "TestGlobalConsistency.test_activity_file_count_above_min": {"desc": "Test to ensure the unique activity file count is above a specified minimum value (4,700).\nThis checks both the dashboard and registry.", "args": [], "outcome": "passed", "error_msg": ""}, "TestGlobalConsistency.test_activity_file_count_dash_values": {"desc": "Test to ensure activity file counts are consistent within the dashboard.", "args": [], "outcome": "passed", "error_msg": ""}, "TestGlobalConsistency.test_activity_file_count_consistency": {"desc": "Test to ensure the activity file count is consistent, within a margin of error,\nbetween the registry and dashboard.", "args": [], "outcome": "passed", "error_msg": ""}, "TestGlobalConsistency.test_org_file_count_above_min": {"desc": "Test to ensure the organisation file count is above a specified minimum value (450).\nThis checks both the dashboard and registry.", "args": [], "outcome": "passed", "error_msg": ""}, "TestGlobalConsistency.test_org_file_count_dash_values": {"desc": "Test to ensure organisation file counts are consistent within the dashboard.", "args": [], "outcome": "passed", "error_msg": ""}, "TestGlobalConsistency.test_organisation_dataset_count_consistency": {"desc": "Test to ensure the activity file count is consistent, within a margin of error,\nbetween the registry and dashboard.", "args": [], "outcome": "passed", "error_msg": ""}, "TestGlobalConsistency.test_publisher_count_above_min": {"desc": "Test to ensure the publisher count is above a specified minimum value (630).\nThis checks both the dashboard and registry.", "args": [], "outcome": "passed", "error_msg": ""}, "TestGlobalConsistency.test_publisher_count_dash_values": {"desc": "Test to ensure organisation file counts are consistent within the dashboard.", "args": [], "outcome": "passed", "error_msg": ""}, "TestGlobalConsistency.test_publisher_count_consistency_dashboard": {"desc": "Test to ensure the publisher count is consistent, within a margin of error,\nbetween the registry and dashboard.", "args": [], "outcome": "passed", "error_msg": ""}, "TestGlobalConsistency.test_publisher_count_consistency_iatistandard_homepage": {"desc": "Test to ensure the publisher count is consistent, within a margin of error,\nbetween the registry and the IATI Standard homepage.", "args": [], "outcome": "passed", "error_msg": ""}, "TestGlobalConsistency.test_200_response[IATI Registry - Homepage]": {"desc": "Confirm each request has a 200 (success) status code.", "args": ["IATI Registry - Homepage"], "outcome": "passed", "error_msg": ""}, "TestGlobalConsistency.test_200_response[IATI Registry - Activity Dataset Page]": {"desc": "Confirm each request has a 200 (success) status code.", "args": ["IATI Registry - Activity Dataset Page"], "outcome": "passed", "error_msg": ""}, "TestGlobalConsistency.test_200_response[IATI Registry - Organisation Dataset Page]": {"desc": "Confirm each request has a 200 (success) status code.", "args": ["IATI Registry - Organisation Dataset Page"], "outcome": "passed", "error_msg": ""}, "TestGlobalConsistency.test_200_response[IATI Standard - Homepage]": {"desc": "Confirm each request has a 200 (success) status code.", "args": ["IATI Standard - Homepage"], "outcome": "passed", "error_msg": ""}, "TestGlobalConsistency.test_200_response[IATI Dashboard - Homepage]": {"desc": "Confirm each request has a 200 (success) status code.", "args": ["IATI Dashboard - Homepage"], "outcome": "passed", "error_msg": ""}, "TestGlobalConsistency.test_200_response[IATI Dashboard - Activities Page]": {"desc": "Confirm each request has a 200 (success) status code.", "args": ["IATI Dashboard - Activities Page"], "outcome": "passed", "error_msg": ""}, "TestGlobalConsistency.test_200_response[IATI Dashboard - Files Page]": {"desc": "Confirm each request has a 200 (success) status code.", "args": ["IATI Dashboard - Files Page"], "outcome": "passed", "error_msg": ""}, "TestGlobalConsistency.test_200_response[IATI Dashboard - Publisher Page]": {"desc": "Confirm each request has a 200 (success) status code.", "args": ["IATI Dashboard - Publisher Page"], "outcome": "passed", "error_msg": ""}, "TestGlobalConsistency.test_non_tiny_response[IATI Registry - Homepage]": {"desc": "Confirm each request has response content that is not tiny.", "args": ["IATI Registry - Homepage"], "outcome": "passed", "error_msg": ""}, "TestGlobalConsistency.test_non_tiny_response[IATI Registry - Activity Dataset Page]": {"desc": "Confirm each request has response content that is not tiny.", "args": ["IATI Registry - Activity Dataset Page"], "outcome": "passed", "error_msg": ""}, "TestGlobalConsistency.test_non_tiny_response[IATI Registry - Organisation Dataset Page]": {"desc": "Confirm each request has response content that is not tiny.", "args": ["IATI Registry - Organisation Dataset Page"], "outcome": "passed", "error_msg": ""}, "TestGlobalConsistency.test_non_tiny_response[IATI Standard - Homepage]": {"desc": "Confirm each request has response content that is not tiny.", "args": ["IATI Standard - Homepage"], "outcome": "passed", "error_msg": ""}, "TestGlobalConsistency.test_non_tiny_response[IATI Dashboard - Homepage]": {"desc": "Confirm each request has response content that is not tiny.", "args": ["IATI Dashboard - Homepage"], "outcome": "passed", "error_msg": ""}, "TestGlobalConsistency.test_non_tiny_response[IATI Dashboard - Activities Page]": {"desc": "Confirm each request has response content that is not tiny.", "args": ["IATI Dashboard - Activities Page"], "outcome": "passed", "error_msg": ""}, "TestGlobalConsistency.test_non_tiny_response[IATI Dashboard - Files Page]": {"desc": "Confirm each request has response content that is not tiny.", "args": ["IATI Dashboard - Files Page"], "outcome": "passed", "error_msg": ""}, "TestGlobalConsistency.test_non_tiny_response[IATI Dashboard - Publisher Page]": {"desc": "Confirm each request has response content that is not tiny.", "args": ["IATI Dashboard - Publisher Page"], "outcome": "passed", "error_msg": ""}}, "status": "healthy"}, "google_group": {"desc": "Old IATI google group", "results": {"TestGoogleGroup.test_200_response[Google Group Landing Page]": {"desc": "Confirm each request has a 200 (success) status code.", "args": ["Google Group Landing Page"], "outcome": "passed", "error_msg": ""}, "TestGoogleGroup.test_non_tiny_response[Google Group Landing Page]": {"desc": "Confirm each request has response content that is not tiny.", "args": ["Google Group Landing Page"], "outcome": "passed", "error_msg": ""}}, "status": "healthy"}, "iati_standard": {"desc": "IATI website (iatistandard.org)", "results": {"TestIATIStandard.test_contains_links[iatistandard.org]": {"desc": "Confirm the page contains links to:\n\n* /en/news/\n* /en/about/\n* /en/iati-standard/\n* /en/using-data/\n* /en/contact/\n* /en/privacy-policy/", "args": ["iatistandard.org"], "outcome": "passed", "error_msg": ""}, "TestIATIStandard.test_contains_expected_text[iatistandard.org]": {"desc": "Confirm the page contains the following text:\n\nIATI is a global initiative to improve the transparency\nof development and humanitarian resources", "args": ["iatistandard.org"], "outcome": "passed", "error_msg": ""}, "TestIATIStandard.test_contains_newsletter_signup_form[iatistandard.org]": {"desc": "Confirm the page includes a newsletter signup form.", "args": ["iatistandard.org"], "outcome": "passed", "error_msg": ""}, "TestIATIStandard.test_200_response[iatistandard.org]": {"desc": "Confirm each request has a 200 (success) status code.", "args": ["iatistandard.org"], "outcome": "passed", "error_msg": ""}, "TestIATIStandard.test_non_tiny_response[iatistandard.org]": {"desc": "Confirm each request has response content that is not tiny.", "args": ["iatistandard.org"], "outcome": "passed", "error_msg": ""}}, "status": "healthy"}, "iati_wiki": {"desc": "Old wiki (wiki.archive.iatistandard.org)", "results": {"TestIATIWiki.test_locate_links[wiki.archive.iatistandard.org]": {"desc": "Confirm each page contains links to:\n\n* iatistandard.org\n* iatiregistry.org", "args": ["wiki.archive.iatistandard.org"], "outcome": "failed", "error_msg": "self = \nloaded_request = \n\n def test_locate_links(self, loaded_request):\n \"\"\"\n Confirm each page contains links to:\n \n * iatistandard.org\n * iatiregistry.org\n \"\"\"\n> result = utility.get_links_from_page(loaded_request)\n\ntests/test_iati_wiki.py:22: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \ntests/utility/utility.py:26: in get_links_from_page\n return locate_xpath_result(request, \"//a[@href]/@href\")\ntests/utility/utility.py:15: in locate_xpath_result\n tree = etree.fromstring(request.content, parser)\nsrc/lxml/etree.pyx:3234: in lxml.etree.fromstring\n ???\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\n> ???\nE ValueError: can only parse strings\n\nsrc/lxml/parser.pxi:1875: ValueError"}, "TestIATIWiki.test_200_response[wiki.archive.iatistandard.org]": {"desc": "Confirm each request has a 200 (success) status code.", "args": ["wiki.archive.iatistandard.org"], "outcome": "failed", "error_msg": "self = \nloaded_request = \n\n def test_200_response(self, loaded_request):\n \"\"\"\n Confirm each request has a 200 (success) status code.\n \"\"\"\n> assert loaded_request.status_code == 200\nE AssertionError\n\ntests/web_test_base.py:63: AssertionError"}, "TestIATIWiki.test_non_tiny_response[wiki.archive.iatistandard.org]": {"desc": "Confirm each request has response content that is not tiny.", "args": ["wiki.archive.iatistandard.org"], "outcome": "failed", "error_msg": "self = \nrequest_to_load = 'wiki.archive.iatistandard.org'\n\n def test_non_tiny_response(self, request_to_load):\n \"\"\"\n Confirm each request has response content that is not tiny.\n \"\"\"\n min_response_size = self.requests_to_load[request_to_load].get('min_response_size', 4000)\n response = self.loaded_request_from_test_name(request_to_load)\n \n> assert len(response.content) >= min_response_size\nE TypeError: object of type 'NoneType' has no len()\n\ntests/web_test_base.py:72: TypeError"}}, "status": "unhealthy"}, "registry": {"desc": "Registry (iatiregistry.org)", "results": {"TestIATIRegistry.test_contains_links[iatiregistry.org]": {"desc": "Test that each page contains links to the defined URLs.", "args": ["iatiregistry.org"], "outcome": "passed", "error_msg": ""}, "TestIATIRegistry.test_contains_links[IATI Registry registration page]": {"desc": "Test that each page contains links to the defined URLs.", "args": ["IATI Registry registration page"], "outcome": "passed", "error_msg": ""}, "TestIATIRegistry.test_contains_links[IATI Registry login page]": {"desc": "Test that each page contains links to the defined URLs.", "args": ["IATI Registry login page"], "outcome": "passed", "error_msg": ""}, "TestIATIRegistry.test_contains_links[IATI Registry: Random dataset]": {"desc": "Test that each page contains links to the defined URLs.", "args": ["IATI Registry: Random dataset"], "outcome": "passed", "error_msg": ""}, "TestIATIRegistry.test_contains_links[IATI Registry: Random publisher page]": {"desc": "Test that each page contains links to the defined URLs.", "args": ["IATI Registry: Random publisher page"], "outcome": "passed", "error_msg": ""}, "TestIATIRegistry.test_registration_form_presence[IATI Registry registration page]": {"desc": "Test that there is a valid registration form on the Registry Registration Page.", "args": ["IATI Registry registration page"], "outcome": "passed", "error_msg": ""}, "TestIATIRegistry.test_login_form_presence[IATI Registry login page]": {"desc": "Test that there is a valid login form on the Registry Login Page.", "args": ["IATI Registry login page"], "outcome": "passed", "error_msg": ""}, "TestIATIRegistry.test_200_response[iatiregistry.org]": {"desc": "Confirm each request has a 200 (success) status code.", "args": ["iatiregistry.org"], "outcome": "passed", "error_msg": ""}, "TestIATIRegistry.test_200_response[IATI Registry registration page]": {"desc": "Confirm each request has a 200 (success) status code.", "args": ["IATI Registry registration page"], "outcome": "passed", "error_msg": ""}, "TestIATIRegistry.test_200_response[IATI Registry login page]": {"desc": "Confirm each request has a 200 (success) status code.", "args": ["IATI Registry login page"], "outcome": "passed", "error_msg": ""}, "TestIATIRegistry.test_200_response[IATI Registry: Random publisher page]": {"desc": "Confirm each request has a 200 (success) status code.", "args": ["IATI Registry: Random publisher page"], "outcome": "passed", "error_msg": ""}, "TestIATIRegistry.test_200_response[IATI Registry: Random dataset]": {"desc": "Confirm each request has a 200 (success) status code.", "args": ["IATI Registry: Random dataset"], "outcome": "failed", "error_msg": "self = \nloaded_request = \n\n def test_200_response(self, loaded_request):\n \"\"\"\n Confirm each request has a 200 (success) status code.\n \"\"\"\n> assert loaded_request.status_code == 200\nE AssertionError\n\ntests/web_test_base.py:63: AssertionError"}, "TestIATIRegistry.test_200_response[IATI Registry API: Package search call]": {"desc": "Confirm each request has a 200 (success) status code.", "args": ["IATI Registry API: Package search call"], "outcome": "passed", "error_msg": ""}, "TestIATIRegistry.test_non_tiny_response[iatiregistry.org]": {"desc": "Confirm each request has response content that is not tiny.", "args": ["iatiregistry.org"], "outcome": "passed", "error_msg": ""}, "TestIATIRegistry.test_non_tiny_response[IATI Registry registration page]": {"desc": "Confirm each request has response content that is not tiny.", "args": ["IATI Registry registration page"], "outcome": "passed", "error_msg": ""}, "TestIATIRegistry.test_non_tiny_response[IATI Registry login page]": {"desc": "Confirm each request has response content that is not tiny.", "args": ["IATI Registry login page"], "outcome": "passed", "error_msg": ""}, "TestIATIRegistry.test_non_tiny_response[IATI Registry: Random publisher page]": {"desc": "Confirm each request has response content that is not tiny.", "args": ["IATI Registry: Random publisher page"], "outcome": "passed", "error_msg": ""}, "TestIATIRegistry.test_non_tiny_response[IATI Registry: Random dataset]": {"desc": "Confirm each request has response content that is not tiny.", "args": ["IATI Registry: Random dataset"], "outcome": "passed", "error_msg": ""}, "TestIATIRegistry.test_non_tiny_response[IATI Registry API: Package search call]": {"desc": "Confirm each request has response content that is not tiny.", "args": ["IATI Registry API: Package search call"], "outcome": "passed", "error_msg": ""}}, "status": "unhealthy"}}} \ No newline at end of file