def test_tidy(self): # if sequence = NULL, tidy sets sequences count = self.db_(self.db_.testy.sequence == None).count() self.assertEqual(count, self.records) seq = DbSequenceField(field=self.db_.testy.sequence) seq.tidy() count = self.db_(self.db_.testy.sequence == None).count() self.assertEqual(count, 0) # Sequence values start at 1 and are sequential rows = self.db_().select(self.db_.testy.ALL) seqs = [] for row in rows: seqs.append(int(row.sequence)) self.assertEqual(range(1, self.records + 1), seqs) # if multiple records have same sequence value, tidy sets them unique self.db_(self.db_.testy.id > 0).update(sequence=1) self.db_.commit() count = self.db_(self.db_.testy.sequence == 1).count() self.assertEqual(count, self.records) seq = DbSequenceField(field=self.db_.testy.sequence) seq.tidy() count = self.db_(self.db_.testy.sequence == 1).count() self.assertEqual(count, 1) # Doesn't kak on an empty table self.db_(self.db_.testy.id > 0).delete() self.db_.commit() seq = DbSequenceField(field=self.db_.testy.sequence) seq.tidy()
def test_move(self): # Control - test that a reset returns expected self.reset_list() expect = [1, 2, 3, 4] got = self.id_list() self.assertEqual(got, expect) seq = DbSequenceField(field=self.db_.testy.sequence) # move with no position provided self.reset_list() seq.move(2) expect = [1, 3, 4, 2] # 2 is moved to end got = self.id_list() self.assertEqual(got, expect) # move to new position upward self.reset_list() seq.move(4, 2) expect = [1, 4, 2, 3] got = self.id_list() self.assertEqual(got, expect) # move to new position downward self.reset_list() seq.move(1, 3) expect = [2, 3, 1, 4] got = self.id_list() self.assertEqual(got, expect) # move to same position self.reset_list() seq.move(2, 2) expect = [1, 2, 3, 4] got = self.id_list() self.assertEqual(got, expect) # move to 'start' self.reset_list() seq.move(3, 'start') expect = [3, 1, 2, 4] got = self.id_list() self.assertEqual(got, expect) # move to 'end' self.reset_list() seq.move(1, 'end') expect = [2, 3, 4, 1] got = self.id_list() self.assertEqual(got, expect) # move 'up' self.reset_list() seq.move(3, 'up') expect = [1, 3, 2, 4] got = self.id_list() self.assertEqual(got, expect) # move 'down' self.reset_list() seq.move(2, 'down') expect = [1, 3, 2, 4] got = self.id_list() self.assertEqual(got, expect) # Secessive moves # move 'up' self.reset_list() seq.move(2, 'up') expect = [2, 1, 3, 4] got = self.id_list() self.assertEqual(got, expect) seq.move(2, 'down') expect = [1, 2, 3, 4] got = self.id_list() self.assertEqual(got, expect) # Boundary tests # move first to 'start' self.reset_list() seq.move(1, 'start') expect = [1, 2, 3, 4] got = self.id_list() self.assertEqual(got, expect) # move last to 'end' self.reset_list() seq.move(4, 'end') expect = [1, 2, 3, 4] got = self.id_list() self.assertEqual(got, expect) # move first 'up' self.reset_list() seq.move(1, 'up') expect = [1, 2, 3, 4] got = self.id_list() self.assertEqual(got, expect) # move last 'down' self.reset_list() seq.move(4, 'down') expect = [1, 2, 3, 4] got = self.id_list() self.assertEqual(got, expect) # move to position outside of range self.reset_list() seq.move(2, 9999) expect = [1, 3, 4, 2] got = self.id_list() self.assertEqual(got, expect) # move to position outside of range self.reset_list() seq.move(3, -1) expect = [3, 1, 2, 4] got = self.id_list() self.assertEqual(got, expect) # invalid position self.reset_list() seq.move(1, '__invalid__') expect = [1, 2, 3, 4] got = self.id_list() self.assertEqual(got, expect)