"""Unit tests for metadata-consistency-checks logic.""" import pytest import config from src.logic.check_ddex_generation import check_ddex_generation from src.logic.check_ddex_generation import DDEX_OK from src.logic.check_ddex_generation import DDEX_WARN from src.logic.check_ddex_generation import DDEX_ERROR from src.logic.check_ddex_generation import DDEX_UNKNOWN class TestCheckDdexGeneration: """Tests for check_ddex_generation.""" @pytest.fixture def requests(self, mocker): """Fixture for requests module mock.""" return mocker.patch('src.logic.check_ddex_generation.requests') @pytest.fixture def requests_successful(self, mocker, requests): """Fixture for successful responses.""" responses = [] for _ in config.DDEX_GENERATION_URLS: responses.append(mocker.Mock(status_code=200, text='OK')) requests.get.side_effect = responses return requests def test_check_ddex_generation_successfull(self, requests_successful): """Test check_ddex_generation with successful responses.""" result = check_ddex_generation(123) assert result[0] == DDEX_OK @pytest.mark.parametrize('error_text', [ ( 'a:2:{s:8:"metadata";s:60:"UPC [001002003] has been taken down and is not ' 'available.";s:5:"error";s:60:"UPC [001002003] has been taken down and is ' 'not available.";}' ), ( 'DDEX Check failed: a:2:{s:8:"metadata";s:43:"UPC [197189241000] is not ' 'in content in OA.";s:5:"error";s:43:"UPC [197189241000] is ' 'not in content in OA.";}' ) ]) def test_check_ddex_generation_unsuccessful_not_metadata(self, mocker, requests, error_text): """Test check_ddex_generation with unsuccessful responses not due to metadata.""" responses = [] for _ in config.DDEX_GENERATION_URLS: responses.append(mocker.Mock(status_code=500, text=error_text)) requests.get.side_effect = responses status, response_text = check_ddex_generation(123) assert status == DDEX_WARN assert response_text == error_text @pytest.fixture def requests_unsuccessful(self, mocker, requests): """Fixture for unsuccessful responses.""" responses = [] for _ in config.DDEX_GENERATION_URLS: responses.append(mocker.Mock(status_code=500, text='Metadata Error')) requests.get.side_effect = responses return requests def test_check_ddex_generation_unsuccessful(self, requests_unsuccessful): """Test check_ddex_generation with unsuccessful responses.""" result = check_ddex_generation(123) assert result[0] == DDEX_ERROR @pytest.fixture def requests_empty(self, mocker, requests): """Fixture for empty DDEX responses.""" responses = [] for _ in config.DDEX_GENERATION_URLS: responses.append(mocker.Mock(status_code=500, text='')) requests.get.side_effect = responses return requests def test_check_ddex_generation_empty(self, requests_empty): """Test check_ddex_generation with empty response.""" response = check_ddex_generation(123) assert response[0] == DDEX_UNKNOWN assert response[1] == ''