"""Tests for the API utilities.""" from unittest.mock import MagicMock from marshmallow import Schema, fields, validate from owsrequest.context import RequestContext from requests.structures import CaseInsensitiveDict from notifications import api from notifications.constants.header import ORCHARD_SYST_IDENTITY_ID from notifications.utils import api_utils class DummyEpisodeSchema(Schema): """Dummy schema for testing purposes.""" episode_number = fields.Integer(validate=validate.Range(min=1)) season_number = fields.Integer(required=False, load_default=1) def test_validate_request_data(): """Test validation decorator calls decorated func.""" func = MagicMock() method = api_utils.validate_request_data(DummyEpisodeSchema(), partial=True)(func) with api.app.test_request_context('/', json={'episode_number': 10}): method() assert func.called def test_validate_request_data_not_called(): """Test validation decorator doesn't call decorated func.""" func = MagicMock() method = api_utils.validate_request_data(DummyEpisodeSchema(), partial=True)(func) with api.app.test_request_context('/', json={'episode_number': 0}): method() assert not func.called def test_to_camel(): """Test to_camel method for dictionary.""" data = {'snake_case': 'value'} result = api_utils.to_camel(data) assert result == {'snakeCase': 'value'} def test_to_snake(): """Test to_snake method for dictionary.""" data = {'camelCase': 'value'} result = api_utils.to_snake(data) assert result == {'camel_case': 'value'} def test_is_orchard_syst_true(): """Tests is_orchard_syst returns True when syst user.""" context = RequestContext(CaseInsensitiveDict({'orchard-identity-id': ORCHARD_SYST_IDENTITY_ID})) assert api_utils.is_orchard_syst(context) is True def test_is_orchard_syst_false(): """Tests is_orchard_syst returns False when not syst user.""" context = RequestContext( CaseInsensitiveDict({'orchard-identity-id': '03e83149-3c7f-4587-940b-ce83dec34bc8'}) ) assert api_utils.is_orchard_syst(context) is False