"""Tests for GrassAuth util.""" from os import environ import re from auth.auth import GrassAuth, UserType, VectorAPIAccessTokenNotFound from pymysql import OperationalError from pytest import fixture, mark, raises from requests.exceptions import InvalidSchema QA_DB_HOST = environ['QA_DB_HOST'] QA_DB_USER = environ['QA_DB_USER'] QA_DB_PASS = environ['QA_DB_PASS'] QA_DB_DATABASE = environ['QA_DB_DATABASE'] QA_GRASS_HOST = environ['QA_GRASS_HOST'] @fixture(autouse=True) def setup_environment(): """Resets environment variables to state from start of run.""" environ['QA_DB_HOST'] = QA_DB_HOST environ['QA_DB_USER'] = QA_DB_USER environ['QA_DB_PASS'] = QA_DB_PASS environ['QA_DB_DATABASE'] = QA_DB_DATABASE environ['QA_GRASS_HOST'] = QA_GRASS_HOST TEST_VENDOR_CONTACT_ID = 38271 TEST_OA_USER_ID = 179 TOKEN_PATTERN = '^[a-f0-9]{32}$' @mark.parametrize( 'user_detail', [(UserType.WORKSTATION, TEST_VENDOR_CONTACT_ID), (UserType.OA, TEST_OA_USER_ID), (UserType.OA, None)]) def test_grass_auth(user_detail): """Happy path test of GrassAuth.""" auth = GrassAuth(user_detail[0], user_detail[1]) assert re.match(TOKEN_PATTERN, auth.grass_token) @mark.parametrize( 'user_detail', [(UserType.WORKSTATION, TEST_VENDOR_CONTACT_ID), (UserType.OA, TEST_OA_USER_ID), (UserType.OA, None)]) def test_oauth_token(user_detail): """Happy path test of GrassAuth.""" auth = GrassAuth(user_detail[0], user_detail[1]) assert re.match(TOKEN_PATTERN, auth.fetch_oauth_token()) @mark.parametrize('user_id', [None, TEST_VENDOR_CONTACT_ID, TEST_OA_USER_ID]) def test_grass_none_user_type(user_id): """Test with null user type.""" with raises(ValueError): GrassAuth(None, user_id).grass_token @mark.parametrize('user_id', [None, TEST_VENDOR_CONTACT_ID, TEST_OA_USER_ID]) def test_grass_string_user_type(user_id): """Test with string user type.""" with raises(TypeError): GrassAuth('Bad User Type', user_id).grass_token def test_grass_none_vend_contact_id(): """Test with null vend contact ID for a Workstation token.""" with raises(ValueError): GrassAuth(UserType.WORKSTATION, None).grass_token def test_grass_unknown_vend_contact_id(): """Test with unknown vend contact ID for a Workstation token.""" with raises(VectorAPIAccessTokenNotFound): GrassAuth(UserType.WORKSTATION, 99999666).grass_token def test_grass_unknown_oa_user_id(): """Test with unknown OA user ID for a OA token.""" with raises(VectorAPIAccessTokenNotFound): GrassAuth(UserType.OA, 99999666).grass_token def test_grass_auth_blank_string_vend_contact_id(): """Test with blank vend contact ID string for a Workstation token.""" with raises(ValueError): GrassAuth(UserType.WORKSTATION, '').grass_token def test_grass_auth_string_vend_contact_id(): """Test with an invalid vend contact ID string for a Workstation token.""" with raises(TypeError): GrassAuth(UserType.WORKSTATION, 'bad').grass_token def test_grass_auth_string_oa_user_id(): """Test with an invalid OA user ID string for a OA token.""" with raises(TypeError): GrassAuth(UserType.OA, 'bad').grass_token def test_grass_auth_list_vend_contact_id(): """Test with list of strings for vend contact ID for Workstation token.""" with raises(TypeError): GrassAuth(UserType.WORKSTATION, ['bad', 'bad']).grass_token def test_grass_auth_list_oa_user_id(): """Test with list of strings for OA user ID for OA token.""" with raises(TypeError): GrassAuth(UserType.OA, ['bad', 'bad']).grass_token def test_grass_auth_blank_list_vend_contact_id(): """Test with a blank list for vend contact ID for a Workstation token.""" with raises(ValueError): GrassAuth(UserType.WORKSTATION, []).grass_token @mark.parametrize( 'user_detail', [(UserType.WORKSTATION, TEST_VENDOR_CONTACT_ID), (UserType.OA, TEST_OA_USER_ID), (UserType.OA, None)]) def test_grass_auth_no_host(user_detail): """Test with missing QA_DB_HOST.""" with raises(ValueError): del environ['QA_DB_HOST'] GrassAuth(user_detail[0], user_detail[1]).grass_token @mark.parametrize( 'user_detail', [(UserType.WORKSTATION, TEST_VENDOR_CONTACT_ID), (UserType.OA, TEST_OA_USER_ID), (UserType.OA, None)]) def test_grass_auth_no_db_user(user_detail): """Test with missing QA_DB_USER.""" with raises(ValueError): del environ['QA_DB_USER'] GrassAuth(user_detail[0], user_detail[1]).grass_token @mark.parametrize( 'user_detail', [(UserType.WORKSTATION, TEST_VENDOR_CONTACT_ID), (UserType.OA, TEST_OA_USER_ID), (UserType.OA, None)]) def test_grass_auth_no_db_pass(user_detail): """Test with missing QA_DB_PASS.""" with raises(ValueError): del environ['QA_DB_PASS'] GrassAuth(user_detail[0], user_detail[1]).grass_token @mark.parametrize( 'user_detail', [(UserType.WORKSTATION, TEST_VENDOR_CONTACT_ID), (UserType.OA, TEST_OA_USER_ID), (UserType.OA, None)]) def test_grass_auth_no_db(user_detail): """Test with missing QA_DB_DATABASE.""" with raises(ValueError): del environ['QA_DB_DATABASE'] GrassAuth(user_detail[0], user_detail[1]).grass_token @mark.parametrize( 'user_detail', [(UserType.WORKSTATION, TEST_VENDOR_CONTACT_ID), (UserType.OA, TEST_OA_USER_ID), (UserType.OA, None)]) def test_grass_auth_no_grass_host(user_detail): """Test with missing QA_GRASS_HOST.""" with raises(ValueError): del environ['QA_GRASS_HOST'] GrassAuth(user_detail[0], user_detail[1]).grass_token @mark.parametrize( 'user_detail', [(UserType.WORKSTATION, TEST_VENDOR_CONTACT_ID), (UserType.OA, TEST_OA_USER_ID), (UserType.OA, None)]) def test_grass_auth_bad_host(user_detail): """Test with invalid QA_DB_HOST.""" with raises(OperationalError): environ['QA_DB_HOST'] = 'bunk_host' GrassAuth(user_detail[0], user_detail[1]).grass_token @mark.parametrize( 'user_detail', [(UserType.WORKSTATION, TEST_VENDOR_CONTACT_ID), (UserType.OA, TEST_OA_USER_ID), (UserType.OA, None)]) def test_grass_auth_bad_db_user(user_detail): """Test with invalid QA_DB_USER.""" with raises(OperationalError): environ['QA_DB_USER'] = 'bunk_user' GrassAuth(user_detail[0], user_detail[1]).grass_token @mark.parametrize( 'user_detail', [(UserType.WORKSTATION, TEST_VENDOR_CONTACT_ID), (UserType.OA, TEST_OA_USER_ID), (UserType.OA, None)]) def test_grass_auth_bad_db_pass(user_detail): """Test with invalid QA_DB_PASS.""" with raises(OperationalError): environ['QA_DB_PASS'] = 'bunk_pass' GrassAuth(user_detail[0], user_detail[1]).grass_token @mark.parametrize( 'user_detail', [(UserType.WORKSTATION, TEST_VENDOR_CONTACT_ID), (UserType.OA, TEST_OA_USER_ID), (UserType.OA, None)]) def test_grass_auth_bad_db(user_detail): """Test with invalid QA_DB_DATABASE.""" with raises(OperationalError): environ['QA_DB_DATABASE'] = 'bunk_db' GrassAuth(user_detail[0], user_detail[1]).grass_token @mark.parametrize( 'user_detail', [(UserType.WORKSTATION, TEST_VENDOR_CONTACT_ID), (UserType.OA, TEST_OA_USER_ID), (UserType.OA, None)]) def test_grass_auth_bad_grass_host(user_detail): """Test with invalid QA_GRASS_HOST.""" with raises(InvalidSchema): environ['QA_GRASS_HOST'] = 'bunk_host' GrassAuth(user_detail[0], user_detail[1]).grass_token