예제 #1
0
    def setUp(self):
        super(TestGetAPI, self).setUp()
        self.p1_history, self.p2_history, self.p3_history = [], [], []

        self.t1 = datetime.utcfromtimestamp(10)
        p1 = UserTable(**self.p1)
        p3 = UserTable(**self.p3)
        with mock.patch('versionalchemy.models.datetime') as p:
            p.now.return_value = self.t1
            self.session.add_all([p1, p3])
            self.session.flush()
            self.p1_history.append(self._history(p1, self.t1, 0))
            self.p3_history.append(self._history(p3, self.t1, 0))

        self.t2 = datetime.utcfromtimestamp(20)
        p1.col1 = 'change1'
        p2 = UserTable(**self.p2)
        with mock.patch('versionalchemy.models.datetime') as p:
            p.now.return_value = self.t2
            self.session.add_all([p1, p2])
            self.session.flush()
            self.p1_history.append(self._history(p1, self.t2, 1))
            self.p2_history.append(self._history(p2, self.t2, 0))

        self.t3 = datetime.utcfromtimestamp(30)
        p1.col3 = False
        p1.col1 = 'change2'
        with mock.patch('versionalchemy.models.datetime') as p:
            p.now.return_value = self.t3
            self.session.add(p1)
            self.session.flush()
            self.p1_history.append(self._history(p1, self.t3, 2))

        self.t4 = datetime.utcfromtimestamp(40)
        p1.col2 = 15
        p2.col2 = 12
        with mock.patch('versionalchemy.models.datetime') as p:
            p.now.return_value = self.t4
            self.session.add_all([p1, p2])
            self.session.flush()
            self.p1_history.append(self._history(p1, self.t4, 3))
            self.p2_history.append(self._history(p2, self.t4, 1))
예제 #2
0
    def setUp(self):
        super(TestDeleteAPI, self).setUp()

        p1 = UserTable(**self.p1)
        p3 = UserTable(**self.p3)
        self.session.add_all([p1, p3])
        self.session.flush()

        p1.col1 = 'change1'
        p2 = UserTable(**self.p2)
        self.session.add_all([p1, p2])
        self.session.flush()

        p1.col3 = False
        p1.col1 = 'change2'
        self.session.add(p1)
        self.session.flush()

        p1.col2 = 15
        p2.col2 = 12
        self.session.add_all([p1, p2])
        self.session.flush()
예제 #3
0
    def test_multiple_product_updates(self):
        """
        Update a product multiple times and ensure each one gets
        correctly versioned.
        """
        p = UserTable(**self.p1)
        self._add_and_test_version(p, 0)

        p.col1 = 'new'
        p.col2 = -1
        self._add_and_test_version(p, 1)

        p.col1 = 'third change'
        p.col2 = 139
        p.col3 = False
        self._add_and_test_version(p, 2)

        self._verify_row(
            dict(self.p1, **{
                'col1': 'third change',
                'col2': 139,
                'col3': False,
            }), 1)
        self._verify_archive(self.p1, 0)
        self._verify_archive(dict(self.p1, **{
            'col1': 'new',
            'col2': -1,
        }), 1)
        self._verify_archive(dict(
            self.p1, **{
                'col1': 'third change',
                'col2': 139,
                'col3': False,
            }),
                             2,
                             log_id=p.va_id)
예제 #4
0
    def test_product_update(self):
        p = UserTable(**self.p1)
        self._add_and_test_version(p, 0)

        p.col1 = 'new'
        p.col2 = -1
        self._add_and_test_version(p, 1)

        self._verify_row(dict(self.p1, **{'col1': 'new', 'col2': -1}), 1)
        self._verify_archive(self.p1, 0)
        self._verify_archive(dict(self.p1, **{
            'col1': 'new',
            'col2': -1,
        }),
                             1,
                             log_id=p.va_id)
 def test_restore_row_with_new_nullable_column_by_va_version(self):
     p = UserTable(**self.p1)
     self._add_and_test_version(p, 0)
     p = self.session.query(UserTable).get(p.id)
     log = self.session.query(ArchiveTable).get(p.va_id)
     first_va_version = log.va_version
     p.col1 = 'test'
     p.col2 = 10
     self.session.commit()
     p = self.session.query(UserTable).get(p.id)
     self.assertEqual(p.col1, 'test')
     self.assertEqual(p.col2, 10)
     self.addTestNullableColumn()
     p = self.session.query(UserTable).get(p.id)
     p.va_restore(self.session, first_va_version)
     p = self.session.query(UserTable).get(p.id)
     self.assertEqual(p.col1, self.p1['col1'])
     self.assertEqual(p.col2, self.p1['col2'])
     self.assertEqual(p.test_column1, None)
예제 #6
0
    def test_product_update_with_user(self):
        p = UserTable(**self.p1)
        p.updated_by('test_user1')
        self._add_and_test_version(p, 0)

        p.col1 = 'new'
        p.col2 = -1
        p.updated_by('test_user2')
        self._add_and_test_version(p, 1)

        self._verify_row(dict(self.p1, **{'col1': 'new', 'col2': -1}), 1)
        self._verify_archive(self.p1, 0, user='******')
        self._verify_archive(dict(self.p1, **{
            'col1': 'new',
            'col2': -1,
        }),
                             1,
                             user='******',
                             log_id=p.va_id)
 def test_restore_row_with_new_nullable_column_by_va_id(self):
     p = UserTable(**self.p1)
     self._add_and_test_version(p, 0)
     p = self.session.query(UserTable).get(p.id)
     first_va_id = p.va_id
     p.col1 = 'test'
     p.col2 = 10
     self.session.commit()
     p = self.session.query(UserTable).get(p.id)
     self.assertEqual(p.col1, 'test')
     self.assertEqual(p.col2, 10)
     self.assertEqual(p.va_id, first_va_id + 1, 'va_id should be increased')
     self.addTestNullableColumn()
     p = self.session.query(UserTable).get(p.id)
     p.va_restore(self.session, va_id=first_va_id)
     p = self.session.query(UserTable).get(p.id)
     self.assertEqual(p.col1, self.p1['col1'])
     self.assertEqual(p.col2, self.p1['col2'])
     self.assertEqual(p.test_column1, None)
     self.assertEqual(p.va_id, first_va_id + 2)