import flask from atlas_um.accounts_validation.services import ( NonActiveAccountsNotificationsService, ) from atlas_um.consts import AccountStateSource from atlas_um.pgdb import DNAAccountExternalState, Auth0AccountExternalState from atlas_um.settings import Settings from tests.atlas_um.factories.auth0_account_factory import Auth0AccountFactory from tests.atlas_um.factories.claim_value_factory import ClaimValueFactory from tests.atlas_um.factories.dna_account_factory import DNAAccountFactory class TestNonActiveAccountsNotificationsService: def test_execution(self, app, pgdb_session, faker, mocker): dna_account = DNAAccountFactory.build() claim_value = ClaimValueFactory.build( claim_name__resource_group__external_id=Settings.RELATED_CLAIMS_NAMESPACE, # noqa claim_name__external_id=NonActiveAccountsNotificationsService.NOTIFICATIONS_CLAIM_NAME_EXTERNAL_ID, # noqa external_id=NonActiveAccountsNotificationsService.NOTIFICATIONS_CLAIM_VALUE_EXTERNAL_ID, # noqa ) dna_account.claim_values = [claim_value] pgdb_session.add(claim_value) pgdb_session.add(dna_account) auth0_account = Auth0AccountFactory.build() pgdb_session.add(auth0_account) dna_state = DNAAccountExternalState() dna_state.dna_account = dna_account dna_state.source = AccountStateSource.USM.value dna_state.last_login = faker.past_datetime() dna_state.is_active = True pgdb_session.add(dna_state) auth0_state = Auth0AccountExternalState() auth0_state.auth0_account = auth0_account auth0_state.last_login = faker.past_datetime() auth0_state.source = AccountStateSource.USM.value auth0_state.is_active = False pgdb_session.add(auth0_state) pgdb_session.commit() mocked_notifications_send_email = mocker.patch( "atlas_um.accounts_validation.services.notifications.send_email" ) mocker.spy(flask, "render_template") NonActiveAccountsNotificationsService.execute() report_url = flask.url_for( "accounts_validation.accounts_states_report_view", _external=False ) report_url = f"https://{Settings.DOMAIN}{report_url}" environment_url = f"https://{Settings.DOMAIN}" assert flask.render_template.call_args_list == [ mocker.call( "notifications/accounts_validation.html", dna_account=dna_account, data=[], report_url=report_url, environment_url=environment_url, ), ] assert mocked_notifications_send_email.call_args_list == [ mocker.call( "Sony Music Product Design & Engineering - Accounts validation", # noqa dna_account.email, flask.render_template.spy_return, ) ]