"""ows_features tests.""" from unittest.mock import MagicMock from owsrequest import request as requests import pytest from owsfeatures.constant import service_name from owsfeatures.models import ows_features def test_orchard_id_is_required(): """Orchard id is required.""" response = ows_features.user_features(None) assert not response errors = response.errors assert errors.get('message') == ows_features.ORCHARD_USER_ERROR_MESSAGE assert errors.get('code') == ows_features.ORCHARD_USER_ERROR_CODE def test_get_user_features_returns_service_response( mocker, fixture_service_response): """Test get_user_features returns service response.""" mock_response = MagicMock(status_code=200) mock_response.json = MagicMock(return_value=fixture_service_response) get_mock = mocker.patch.object( requests, 'get', return_value=mock_response, autospec=True) user_features_response = ows_features.user_features('foo:1234') assert get_mock.call_args[0] == ( service_name.OWS_FEATURES, '/features/user/foo:1234') assert user_features_response.message == fixture_service_response def test_get_general_features_returns_service_response( mocker, fixture_service_response): """Test general_features returns service response.""" mock_response = MagicMock(status_code=200) mock_response.json = MagicMock(return_value=fixture_service_response) get_mock = mocker.patch.object( requests, 'get', return_value=mock_response, autospec=True) user_features_response = ows_features.general_features() assert get_mock.call_args[0] == ( service_name.OWS_FEATURES, '/features') assert user_features_response.message == fixture_service_response test_get_active_variant_data = [ ( 'feature_001', MagicMock(status_code=200, content=b'enabled'), 'enabled' ), ( 'feature_002', MagicMock( status_code=404, content=b'{"message": "feature does not exist"}'), None ), ( 'feature_003', MagicMock( status_code=500, content=b'Server error'), None ), ] @pytest.mark.parametrize( ( 'feature_name,' 'owsfeatures_mock_response,' 'expected_response' ), test_get_active_variant_data) def test_get_active_variant( feature_name, owsfeatures_mock_response, expected_response, testapp, mocker): """Test getting active variant of a feature.""" with testapp.test_request_context(): mocker.patch.object( requests, 'process', return_value=owsfeatures_mock_response) features_response = ows_features.get_active_variant( feature_name, 'ows-whatever') assert features_response == expected_response def test_get_active_variant_with_headers(testapp, mocker): """Test get_active_variant_with_headers.""" with testapp.test_request_context(): mocker.patch.object( requests, 'process', return_value=MagicMock(status_code=200, content=b'enabled')) headers = {'Orchard-Identity-Id': '5cd96c3beebfc80f90964f4a'} features_response = ows_features.get_active_variant_with_headers( 'feature_001', 'ows-whatever', headers=headers) assert features_response == 'enabled' requests.process.assert_called_once_with( 'ows-whatever', 'qa', 'GET', 'ows-features', '/features/feature_001', headers=headers)