"""Test hundlers.""" import json from unittest.mock import patch import pytest from sony_metadata import api from sony_metadata import config from sony_metadata import handlers # noqa from sony_metadata import response @pytest.fixture def fixture_client(): """Creates an api test client fixture.""" return api.app.test_client() def test_health(fixture_client): """Tests health handler.""" response = fixture_client.get(config.HEALTH_CHECK) # Response object returns True if 200 & no errors assert response def test_label_fields_subaccount(fixture_client): """Test label_fields_subaccount handler returns HTTP Code 200.""" result = fixture_client.get("/label_fields/subaccount/1") # Response object returns True if 200 & no errors assert result def test_label_fields_vendor(fixture_client): """Test label_fields_vendor handler returns HTTP Code 200.""" result = fixture_client.get("/label_fields/vendor/1") # Response object returns True if 200 & no errors assert result @pytest.mark.parametrize("subaccount_id", ["abc", "1a3", None]) def test_invalid_subaccount_id(subaccount_id, fixture_client): """Test HTTP 400 code returned with invalid subaccount_id.""" expected_json = {"code": response.ERROR_CODE_VALIDATION_ERROR, "message": "subaccount_id is not an int"} result = fixture_client.get("/label_fields/subaccount/{}".format(subaccount_id)) response_json = json.loads(result.data.decode()) assert response_json == expected_json assert result.status_code == 400 @pytest.mark.parametrize("vendor_id", ["abc", "1a3", None]) def test_invalid_vendor_id(vendor_id, fixture_client): """Test HTTP 400 code returned with invalid vendor_id.""" expected_json = {"code": response.ERROR_CODE_VALIDATION_ERROR, "message": "vendor_id is not an int"} result = fixture_client.get("/label_fields/vendor/{}".format(vendor_id)) response_json = json.loads(result.data.decode()) assert response_json == expected_json assert result.status_code == 400 def test_add_update_endpoint(fixture_client): """Tests the create/update endpoint.""" metadata = { "financial_label_code": "Megaforce +", "financial_label_name": "G913", "rep_owner_code": None, "rep_owner_name": None, "gras_imprint_code": None, "gras_imprint_name": None, "sap_profit_center_code": None, "sap_profit_center_name": None, } result = fixture_client.put("/label_fields/vendor/7123", json=metadata) assert result @patch("sony_metadata.logic.label.add_update_vendor_meta") def test_add_update_label_subaccount(mock_upsert, fixture_client): """Tests the create/update endpoint.""" mock_upsert.return_value = response.Response("Yah!") result = fixture_client.put( "/label_fields/vendor/7123/subaccount/3452345", json={ "financial_label_code": "Megaforce +", "financial_label_name": "G913", "rep_owner_code": None, "rep_owner_name": None, "gras_imprint_code": None, "gras_imprint_name": None, "sap_profit_center_code": None, "sap_profit_center_name": None, }, ) # assert result.status_code == 200 assert result.data.decode() == "Yah!"