Esempio n. 1
0
class ExecuteBlockTest(TestCase):
    """
    Test executeing blocking changesets.

    Each test will set up a change in a different way but that ought to have the same
    results. Then we'll try to roll back the change, after changing one voter, and check
    those results.
    """
    def setUp(self):
        # these should be blocked during the changeset
        self.citizen1 = CitizenFactory()
        self.citizen2 = CitizenFactory()
        # citizen3 already blocked
        self.citizen3 = CitizenFactory()
        self.citizen3.block()
        # citizen4 won't be included
        self.citizen4 = CitizenFactory()

        self.changeset = ChangesetFactory(
            status=Changeset.STATUS_APPROVED,
            change=Changeset.CHANGE_BLOCK,
        )

    def doit(self):
        self.changeset.full_clean()
        citizens = list(self.changeset.get_citizens_to_change())
        self.assertIn(self.citizen1, citizens)
        self.assertIn(self.citizen2, citizens)
        self.assertIn(self.citizen3, citizens)  # In the list, but will not be changed
        self.assertNotIn(self.citizen4, citizens)

        self.changeset.execute()
        self.citizen1 = refresh_model(self.citizen1)
        self.citizen2 = refresh_model(self.citizen2)
        self.citizen3 = refresh_model(self.citizen3)
        self.citizen4 = refresh_model(self.citizen4)
        self.assertTrue(self.citizen1.blocked)
        self.assertTrue(self.citizen2.blocked)
        self.assertTrue(self.citizen3.blocked)
        self.assertFalse(self.citizen4.blocked)

        changes = self.changeset.change_records.all()
        self.assertTrue(changes.filter(citizen=self.citizen1, changed=True).exists())
        self.assertTrue(changes.filter(citizen=self.citizen2, changed=True).exists())
        self.assertTrue(changes.filter(citizen=self.citizen3, changed=False).exists())
        self.assertFalse(changes.filter(citizen=self.citizen4).exists())

        self.assertEqual(Changeset.STATUS_PARTIALLY_SUCCESSFUL, self.changeset.status)

        # Now unblock citizen 2
        self.citizen2.unblock()

        rollback = ChangesetFactory(
            status=Changeset.STATUS_APPROVED,
            change=Changeset.CHANGE_ROLLBACK,
            how_to_select=Changeset.SELECT_OTHER_CHANGESET,
            other_changeset=self.changeset,
        )
        citizens = list(rollback.get_citizens_to_change())
        self.assertIn(self.citizen1, citizens)
        self.assertIn(self.citizen2, citizens)
        self.assertNotIn(self.citizen3, citizens)  # not changed before, so not in list this time
        self.assertNotIn(self.citizen4, citizens)

        rollback.execute()
        self.changeset = refresh_model(self.changeset)
        self.assertEqual(Changeset.STATUS_ROLLED_BACK, self.changeset.status)

        self.citizen1 = refresh_model(self.citizen1)
        self.citizen2 = refresh_model(self.citizen2)
        self.citizen3 = refresh_model(self.citizen3)
        self.citizen4 = refresh_model(self.citizen4)
        self.assertFalse(self.citizen1.blocked)
        self.assertFalse(self.citizen2.blocked)
        self.assertTrue(self.citizen3.blocked)
        self.assertFalse(self.citizen4.blocked)

        changes = rollback.change_records.all()
        self.assertTrue(changes.filter(citizen=self.citizen1, changed=True).exists())
        self.assertTrue(changes.filter(citizen=self.citizen2, changed=False).exists())
        # reg 3 not in the list because they were changed previously
        self.assertFalse(changes.filter(citizen=self.citizen3).exists())
        self.assertFalse(changes.filter(citizen=self.citizen4).exists())
        self.assertEqual(Changeset.STATUS_PARTIALLY_SUCCESSFUL, rollback.status)

    def test_block_by_uploaded_citizens(self):
        self.changeset.how_to_select = Changeset.SELECT_UPLOADED_NIDS
        self.changeset.save()
        self.changeset.selected_citizens.add(self.citizen1, self.citizen2, self.citizen3)
        self.doit()

    def test_block_by_selected_centers(self):
        center1 = RegistrationCenterFactory()
        center2 = RegistrationCenterFactory()
        RegistrationCenterFactory()
        RegistrationFactory(citizen=self.citizen1, registration_center=center1,
                            archive_time=None)
        RegistrationFactory(citizen=self.citizen2, registration_center=center1,
                            archive_time=None)
        RegistrationFactory(citizen=self.citizen3, registration_center=center2,
                            archive_time=None)
        self.changeset.how_to_select = Changeset.SELECT_CENTERS
        self.changeset.save()
        self.changeset.selected_centers.add(center1, center2)
        self.doit()

    def test_block_by_other_changeset(self):
        other = ChangesetFactory(status=Changeset.STATUS_SUCCESSFUL)
        self.changeset.how_to_select = Changeset.SELECT_OTHER_CHANGESET
        self.changeset.other_changeset = other
        self.changeset.save()
        ChangeRecordFactory(citizen=self.citizen1, changeset=other, changed=True)
        ChangeRecordFactory(citizen=self.citizen2, changeset=other, changed=True)
        ChangeRecordFactory(citizen=self.citizen3, changeset=other, changed=True)
        ChangeRecordFactory(citizen=self.citizen4, changeset=other, changed=False)
        self.doit()