示例#1
0
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'},
            ))