"""Tests for features module.""" import json from flexmock import flexmock import pytest import requests from masters_registry import config from masters_registry import features from masters_registry.constant import api_const def test_get_user_features(mocker): """Test get features dict by orchard_user_id.""" request_args = { 'application': config.SERVICE_NAME, 'environment': config.ENVIRONMENT, 'method': 'GET', 'service_name': api_const.OWS_FEATURES, 'path': '/features/user/alw1234', 'correlation_id': 'test-id' } expected_features_dict = {'not_added_territories_warning': 'enabled'} success_response = requests.Response() success_response.status_code = 200 success_response._content = json.dumps( expected_features_dict).encode('latin1') mock_process = mocker.patch.object( features.request, 'process', return_value=success_response) received_features = features._get_user_features( 'alw1234', correlation_id='test-id') assert received_features == expected_features_dict mock_process.assert_called_with(**request_args) def test_get_user_features_no_user_id(mocker): """Test get features dict without orchard_user_id.""" request_args = { 'application': config.SERVICE_NAME, 'environment': config.ENVIRONMENT, 'method': 'GET', 'service_name': api_const.OWS_FEATURES, 'path': '/features', 'correlation_id': 'test-id' } expected_features_dict = {'not_added_territories_warning': 'enabled'} success_response = requests.Response() success_response.status_code = 200 success_response._content = json.dumps( expected_features_dict).encode('latin1') mock_process = mocker.patch.object( features.request, 'process', return_value=success_response) received_features = features._get_user_features( orchard_user_id=None, correlation_id='test-id') assert received_features == expected_features_dict mock_process.assert_called_with(**request_args) def test_get_user_features_raises_error(): """Test raise error in daemon mode if ows-features returned error.""" error_response = requests.Response() error_response.status_code = 500 (flexmock(features.request) .should_receive('process') .and_return(error_response)) with pytest.raises(features.OwsFeaturesError): features._get_user_features('alw1234') @pytest.mark.parametrize('orchard_user_id', ['alw:987']) def test_is_feature_enabled_daemon_mode_alw_user(orchard_user_id): """Test wrapper handles daemon mode for a workstation user.""" (flexmock(features.features) .should_receive('is_feature_enabled') .never()) (flexmock(features) .should_receive('_get_user_features') .with_args('alw:987', None) .and_return({'test_feature': 'enabled'})) result = features._is_feature_enabled( 'test_feature', orchard_user_id, daemon=True) assert result is True @pytest.mark.parametrize('orchard_user_id', ['123', 'oa:123']) def test_is_feature_enabled_daemon_mode(orchard_user_id): """Test wrapper handles daemon mode.""" (flexmock(features.features) .should_receive('is_feature_enabled') .never()) (flexmock(features) .should_receive('_get_user_features') .with_args('oa:123', None) .and_return({'test_feature': 'enabled'})) result = features._is_feature_enabled( 'test_feature', orchard_user_id, daemon=True) assert result is True def test_is_feature_enabled_flask_mode(): """Test wrapper handles Flask mode.""" (flexmock(features) .should_receive('_get_user_features') .never()) (flexmock(features.features) .should_receive('is_feature_enabled') .once() .and_return(True)) result = features._is_feature_enabled('test_feature') assert result is True