"""Unit tests for user context utility functions.""" from unittest.mock import MagicMock from flask import request from owsrequest.constants import headers as grass_const import pytest from werkzeug import exceptions from analytics import context from analytics import logic from tests.unit.fixtures import fixture_api app = fixture_api.APP def test_get_current_user(monkeypatch): """Test user creation and obtaining from the context.""" user_id = 10918 with app.test_request_context(): request.headers = { grass_const.GRASS_ACCOUNT_ID: str(user_id), grass_const.GRASS_ACCOUNT_TYPE: 'SUBACCOUNT' } user = context.get_current_user() assert user.user_id == user_id assert user.user_type == 'S' user_mock = MagicMock(return_value=MagicMock()) monkeypatch.setattr(logic, 'user', user_mock) user_from_context = context.get_current_user() assert user_from_context == user assert not user_mock.called # Proves that the second time # the user has been taken from the context @pytest.mark.parametrize( 'grass_account_id, grass_account_type', [(None, None), ('10918', None), (None, 'SUBACCOUNT'), ('10918', 'UNKNOWN'), ('ID_109@18', 'UNKNOWN'), ] ) def test_get_current_user_negative(grass_account_id, grass_account_type): """Test user creation with bad headers.""" with app.test_request_context(): with pytest.raises(exceptions.Forbidden): request.headers = { grass_const.GRASS_ACCOUNT_ID: grass_account_id, grass_const.GRASS_ACCOUNT_TYPE: grass_account_type } context.get_current_user()