from atlas_um.dna_accounts.reports import dna_accounts_and_assigned_claims from atlas_um.pgdb.associations import dna_account_claim_table from tests.atlas_um.factories import ( DNAAccountFactory, ClaimNameFactory, ClaimValueFactory, DNAAccountActivityFactory, ResourceGroupFactory, ) DATE_TIME_FORMAT = "%Y-%m-%d %H:%M:%S" class TestDnaAccountsAndAssignedClaims: def test_enabled(self, faker, mocker, pgdb_session): resource_group = ResourceGroupFactory.build(name="Product A") account = DNAAccountFactory.build() dna_account_activity = DNAAccountActivityFactory.build( resource_group=resource_group, dna_account=account ) pgdb_session.add(account) pgdb_session.add(resource_group) pgdb_session.add(dna_account_activity) claim_name = ClaimNameFactory.build(resource_group=resource_group) pgdb_session.add(claim_name) account.claim_values = [ ClaimValueFactory.build(claim_name=claim_name) for _ in range(faker.pyint(1, 5)) ] pgdb_session.commit() data = list(dna_accounts_and_assigned_claims()) expected_data = [ [ "First Name", "Last Name", "Email", "ID", "VIP", "Status", "Personnel Type", "Supervisor Email", "Location", "Business Unit", "Employee Corporate Username", "Job Title", "Expiration Date", f"{dna_account_activity.resource_group.name}: First Login", f"{dna_account_activity.resource_group.name}: Last Login", f"{dna_account_activity.resource_group.name}: Last Activity", f"{claim_name.resource_group.name}: Enabled", f"{claim_name.resource_group.name}: {claim_name.friendly}", ], [ account.given_name, account.family_name, account.email, account.sub, int(account.is_vip), account.status.value, account.personnel_type.name, account.supervisor_email, account.location, account.business_unit.name, account.preferred_username, account.job_title, account.expiration_date, dna_account_activity.first_login.strftime(DATE_TIME_FORMAT), dna_account_activity.last_login.strftime(DATE_TIME_FORMAT), dna_account_activity.last_activity.strftime(DATE_TIME_FORMAT), "1", ", ".join( sorted( [v.friendly for v in account.claim_values], key=str.lower, ) ), ], ] assert data == expected_data def test_disabled(self, faker, mocker, pgdb_session): resource_group = ResourceGroupFactory.build(name="Product A") account = DNAAccountFactory.build() dna_account_activity = DNAAccountActivityFactory.build( resource_group=resource_group, dna_account=account ) pgdb_session.add(account) pgdb_session.add(resource_group) pgdb_session.add(dna_account_activity) claim_name = ClaimNameFactory.build(resource_group=resource_group) pgdb_session.add(claim_name) account.claim_values = [ ClaimValueFactory.build(claim_name=claim_name) for _ in range(faker.pyint(1, 5)) ] pgdb_session.commit() pgdb_session.execute( dna_account_claim_table.update().values(is_disabled=True) ) pgdb_session.commit() data = list(dna_accounts_and_assigned_claims()) expected_data = [ [ "First Name", "Last Name", "Email", "ID", "VIP", "Status", "Personnel Type", "Supervisor Email", "Location", "Business Unit", "Employee Corporate Username", "Job Title", "Expiration Date", f"{dna_account_activity.resource_group.name}: First Login", f"{dna_account_activity.resource_group.name}: Last Login", f"{dna_account_activity.resource_group.name}: Last Activity", f"{claim_name.resource_group.name}: Enabled", f"{claim_name.resource_group.name}: {claim_name.friendly}", ], [ account.given_name, account.family_name, account.email, account.sub, int(account.is_vip), account.status.value, account.personnel_type.name, account.supervisor_email, account.location, account.business_unit.name, account.preferred_username, account.job_title, account.expiration_date, dna_account_activity.first_login.strftime(DATE_TIME_FORMAT), dna_account_activity.last_login.strftime(DATE_TIME_FORMAT), dna_account_activity.last_activity.strftime(DATE_TIME_FORMAT), "0", ", ".join( sorted( [v.friendly for v in account.claim_values], key=str.lower, ) ), ], ] assert data == expected_data