from sqlalchemy import and_ from unittest.mock import patch from db import db from services.users_repository import UsersRepository from tests.test_utils import FixtureLoader from models import models, Project, ArtistTeamUser, ArtistTeam from tests import BaseTestCase, mock_for_m2m_token from tests.users.fixtures.users_fixture import fixture from external_api.base.clients.atlas_client import AtlasUserClaimsModel from tests.performance.utils import mock_from_json m2m_token = mock_for_m2m_token() async def mocked_create_user_claims(*args, **kwargs): return mock_from_json(AtlasUserClaimsModel, "users/fixtures/atlas_user_create_claims.json") async def mocked_update_user_claims(*args, **kwargs): return mock_from_json(AtlasUserClaimsModel, "users/fixtures/atlas_user_claims_for_update.json") @patch("auth.atlas.atlas_token_decoder.jwt.decode", m2m_token.jwt_decode) class TestAtlasBridge(BaseTestCase): url = "/atlas/user" user_id = "sme-dna|6po0091d6c91ty670fe6fdsfhf" user_repo = UsersRepository() def setUp(self): super().setUp() FixtureLoader(models=models).import_as_sql(fixture) @patch("external_api.base.clients.atlas_client.AtlasApiClient.get_user_claims", new=mocked_create_user_claims) def test_create_user(self): user_id = "sme-dna|6po0091d6c91ty670fe6fdsfhf" user_before = self.user_repo.get_user_by_external_id(user_id) self.soft_assert(self.assertEqual, user_before, None) response = self.execute_post(self.url, headers=self.headers, query_string={"id": user_id}) self.soft_assert(self.assertEqual, response.status_code, 200) user = self.user_repo.get_user_by_external_id(user_id) self.soft_assert(self.assertIsNotNone, user) self.soft_assert(self.assertEqual, user.external_id, user_id) self.soft_assert(self.assertEqual, user.name, "Test Testovuch") self.soft_assert(self.assertEqual, user.email, "test-testovuch@example.com") self.soft_assert(self.assertEqual, user.date_time_format, 1) self.soft_assert(self.assertEqual, user.is_admin, False) self.soft_assert(self.assertEqual, user.labels, []) self.assert_all() @patch("external_api.base.clients.atlas_client.AtlasApiClient.get_user_claims", new=mocked_update_user_claims) def test_update_user(self): artist_team_user_before_deletion = ( db.session.query(ArtistTeamUser) .select_from(ArtistTeam) .join(ArtistTeamUser, ArtistTeamUser.artist_team_id == ArtistTeam.id) .filter(ArtistTeamUser.user_id == 2, ArtistTeam.label_id == 6).count() ) user_id = "sme-dna|3po0091d6c91ty670fe6ftryf" user_before = self.user_repo.get_user_by_external_id(user_id) self.soft_assert(self.assertIsNotNone, user_before) self.soft_assert(self.assertEqual, user_before.external_id, user_id) self.soft_assert(self.assertEqual, set([label.id for label in user_before.labels]), {4, 6}) response = self.execute_post(self.url, headers=self.headers, query_string={"id": user_id}) self.soft_assert(self.assertEqual, response.status_code, 200) user = self.user_repo.get_user_by_external_id(user_id) self.soft_assert(self.assertIsNotNone, user) self.soft_assert(self.assertEqual, user.external_id, user_id) self.soft_assert(self.assertEqual, user.name, "Super Cossack") self.soft_assert(self.assertEqual, user.email, "dev-marketing-user-super@example.com") self.soft_assert(self.assertEqual, user.date_time_format, 1) self.soft_assert(self.assertEqual, user.is_admin, False) self.soft_assert(self.assertEqual, set([label.id for label in user.labels]), {2, 4}) project_506 = ( db.session.query(Project) .filter(Project.id == 506) .first() ) self.soft_assert_equal(project_506.is_claimed, False) artist_team_user_after_deletion = ( db.session.query(ArtistTeamUser) .select_from(ArtistTeam) .join(ArtistTeamUser, ArtistTeamUser.artist_team_id == ArtistTeam.id) .filter(ArtistTeamUser.user_id == 2, ArtistTeam.label_id == 6).count() ) self.assertEqual(artist_team_user_before_deletion - 1, artist_team_user_after_deletion) artist_team_user = ( db.session.query(ArtistTeam) .join(ArtistTeamUser, and_(ArtistTeamUser.artist_team_id == ArtistTeam.id, ArtistTeamUser.user_id == 1)) .filter(ArtistTeam.label_id == 6, ArtistTeam.artist_id == 30) .one_or_none() ) self.assertIsNone(artist_team_user) self.assert_all()