def test_snapshot_update_is_idempotent(self):
        """Test that nothing has changed if there's nothing to update"""
        self._import_file("snapshotter_create.csv")

        program = db.session.query(
            models.Program).filter(models.Program.slug == "Prog-13211").one()

        self.create_audit(program)

        audit = db.session.query(models.Audit).filter(
            models.Audit.title == "Snapshotable audit").one()

        snapshots = db.session.query(models.Snapshot).filter(
            models.Snapshot.parent_type == "Audit",
            models.Snapshot.parent_id == audit.id,
        )

        self.assertEqual(snapshots.count(), len(Types.all) * 3)

        audit = self.refresh_object(audit)
        self.api.modify_object(audit, {"snapshots": {"operation": "upsert"}})

        old_snapshots = {s.id: s for s in snapshots}

        snapshots = db.session.query(models.Snapshot).filter(
            models.Snapshot.parent_type == "Audit",
            models.Snapshot.parent_id == audit.id,
        )

        new_snapshots = {s.id: s for s in snapshots}

        for _id, snapshot in new_snapshots.items():
            self.assertEqual(snapshot_identity(old_snapshots[_id], snapshot),
                             True)
Example #2
0
    def test_snapshot_update_is_idempotent(self, model_type):
        """Test that nothing has changed if there's nothing to update"""
        with factories.single_commit():
            program = factories.ProgramFactory(title="Test Program")
            model_factory = factories.get_model_factory(model_type)
            model_object = model_factory(
                title="Test Snapshot - {}".format(model_type))
            factories.RelationshipFactory(source=program,
                                          destination=model_object)

        self.create_audit(program)
        audit = db.session.query(models.Audit).filter(
            models.Audit.title == "Snapshotable audit").one()

        snapshots = db.session.query(models.Snapshot).filter(
            models.Snapshot.parent_type == "Audit",
            models.Snapshot.parent_id == audit.id,
        )

        audit = self.refresh_object(audit)
        self.api.modify_object(audit, {"snapshots": {"operation": "upsert"}})

        old_snapshots = {s.id: s for s in snapshots}

        snapshots = db.session.query(models.Snapshot).filter(
            models.Snapshot.parent_type == "Audit",
            models.Snapshot.parent_id == audit.id,
        )

        new_snapshots = {s.id: s for s in snapshots}

        for _id, snapshot in new_snapshots.items():
            self.assertEqual(snapshot_identity(old_snapshots[_id], snapshot),
                             True)
Example #3
0
  def test_snapshot_update_is_idempotent(self):
    """Test that nothing has changed if there's nothing to update"""
    self._check_csv_response(self._import_file("snapshotter_create.csv"), {})

    program = db.session.query(models.Program).filter(
        models.Program.slug == "Prog-13211"
    ).one()

    self.create_audit(program)

    audit = db.session.query(models.Audit).filter(
        models.Audit.title == "Snapshotable audit").one()

    snapshots = db.session.query(models.Snapshot).filter(
        models.Snapshot.parent_type == "Audit",
        models.Snapshot.parent_id == audit.id,
    )

    self.assertEqual(snapshots.count(),
                     (len(Types.all) - len(Types.external)) * 3)

    audit = self.refresh_object(audit)
    self.api.modify_object(audit, {
        "snapshots": {
            "operation": "upsert"
        }
    })

    old_snapshots = {s.id: s for s in snapshots}

    snapshots = db.session.query(models.Snapshot).filter(
        models.Snapshot.parent_type == "Audit",
        models.Snapshot.parent_id == audit.id,
    )

    new_snapshots = {s.id: s for s in snapshots}

    for _id, snapshot in new_snapshots.items():
      self.assertEqual(snapshot_identity(old_snapshots[_id], snapshot), True)