def test__update(self): def initialize(): t = DbObject(DBH.test) t.tbl_.truncate() t.db_.commit() t.company_id = COMPANY_ID t.number = NUMBER t.name = NAME t.amount = AMOUNT t.start_date = START_DATE t.status = STATUS self.assertTrue(t.add()) return t records = DbObject(DBH.test).set_.get() self.assertEqual(len(records), 0) t = initialize() records = DbObject(DBH.test).set_.get() self.assertEqual(len(records), 1) self.assertEqual(records[0], t) t2 = DbObject(DBH.test) t2.company_id = COMPANY_ID_2 t2.number = NUMBER_2 t2.name = NAME_2 t2.amount = AMOUNT_2 t2.start_date = START_DATE_2 t2.status = STATUS_2 # Record is not in database, should add self.assertTrue(t2.update()) records = DbObject(DBH.test).set_.get() self.assertEqual(len(records), 2) self.assertNotEqual(t.id, t2.id) # Record is in database, should modify self.assertTrue(t2.update()) records = DbObject(DBH.test).set_.get() self.assertEqual(len(records), 2) self.assertNotEqual(t.id, t2.id) # Update record with identical key fields, should modify t t = initialize() t2 = DbObject(DBH.test) t2.company_id = COMPANY_ID t2.number = NUMBER_2 t2.name = NAME t2.amount = AMOUNT_2 t2.start_date = START_DATE_2 t2.status = STATUS_2 self.assertTrue(t2.update(key_fields=["company_id", "name"])) tests = t.set_.get() self.assertEqual(len(tests), 1) self.assertEqual(t.id, t2.id) # Update record with non-identical key fields but matching id, should # modify. t = initialize() t2 = DbObject(DBH.test) t2.id = t.id t2.company_id = COMPANY_ID_2 t2.number = NUMBER_2 t2.name = NAME_2 t2.amount = AMOUNT_2 t2.start_date = START_DATE_2 t2.status = STATUS_2 self.assertTrue(t2.update(key_fields=["company_id", "name"])) tests = t.set_.get() self.assertEqual(len(tests), 1) self.assertEqual(t.id, t2.id) self.assertEqual(tests[0].company_id, t2.company_id) # Update record with non-identical key fields, no id, should add t = initialize() t2 = DbObject(DBH.test) t2.id = None t2.company_id = COMPANY_ID_2 t2.number = NUMBER_2 t2.name = NAME_2 t2.amount = AMOUNT_2 t2.start_date = START_DATE_2 t2.status = STATUS_2 self.assertTrue(t2.update(key_fields=["company_id", "name"])) tests = t.set_.get() self.assertEqual(len(tests), 2) self.assertNotEqual(t.id, t2.id) # Test with a key field not defined. t = initialize() t2 = DbObject(DBH.test) t2.id = None t2.company_id = COMPANY_ID_2 self.assertTrue(t2.update(key_fields=["company_id", "name"])) tests = t.set_.get() self.assertEqual(len(tests), 2) self.assertNotEqual(t.id, t2.id) t3 = DbObject(DBH.test) t3.id = None t3.company_id = COMPANY_ID_2 self.assertTrue(t3.update(key_fields=["company_id", "name"])) tests = t.set_.get() self.assertEqual(len(tests), 2) self.assertEqual(t2.id, t3.id) # Make sure it distinguishes between NULL and empty string. t = initialize() t2 = DbObject(DBH.test) t2.id = None t2.company_id = COMPANY_ID_2 t2.name = "" self.assertTrue(t2.update(key_fields=["company_id", "name"])) t3 = DbObject(DBH.test) t3.id = None t3.company_id = COMPANY_ID_2 self.assertTrue(t3.update(key_fields=["company_id", "name"])) tests = t.set_.get() self.assertEqual(len(tests), 3) self.assertNotEqual(t2.id, t3.id) t.tbl_.truncate() t.db_.commit() return