class AssetAuditTest(TestCase): def setUp(self): self.user = get_user_model().objects.create_user(username='******') self.user_lookup = UserLookup.objects.create( user=self.user, scheme='mock', identifier=self.user.username) set_local_user(self.user) self.asset = Asset(name='test-asset') self.asset.save() def tearDown(self): clear_local_user() def test_no_audits_initially(self): """With no changes, there should be no audit.""" self.assertEqual(Audit.objects.count(), 0) def test_create(self): """Changing an asset makes an audit record.""" old_name = self.asset.name self.asset.name = 'new-name' self.asset.save() self.assertEqual(Audit.objects.count(), 1) audit = Audit.objects.filter(model_pk=repr(self.asset.pk)).first() self.assertIsNotNone(audit) self.assertEqual(audit.field, 'name') self.assertEqual(audit.old, old_name) self.assertEqual(audit.new, self.asset.name) self.assertEqual(audit.who.pk, self.user.pk) def test_audit_compare_override(self): """Changes to MultiSelectField fields are audited correctly.""" # fixtures field = self.asset._meta.get_field('data_subject') choices = dict(Asset.DATA_SUBJECT_CHOICES) # check blank fields handles correctly self.assertFalse(self.asset.audit_compare(field, None, None)) self.assertFalse( self.asset.audit_compare(field, MSFList(choices), set())) # check different list orders don't don't trigger an audit record self.assertFalse( self.asset.audit_compare( field, MSFList(choices, ['public', 'alumni']), ['alumni', 'public'], )) # check that actual change is detected self.assertTrue( self.asset.audit_compare( field, MSFList(choices, ['public', 'alumni']), {'alumni', 'public', 'supplier'}, ))