dabo Commit
Revision 2937
Date: 2007-03-19 20:10:49 -0700 (Mon, 19 Mar 2007)
Author: Paul
Trac: http://svn.dabodev.com/trac/dabo/changeset/2937
Changed:
U trunk/dabo/biz/test/test_dBizobj.py
U trunk/dabo/db/dCursorMixin.py
U trunk/dabo/db/test/test_dCursorMixin.py
Log:
Fixed dCursorMixin to not take into account brand-new records in isChanged().
A brand-new record is one that has just its initial values, including those
gotten from DefaultValues.
Please test and let me know if this is correct. Honestly, it still feels
somewhat odd to me, but I'll get over it. :)
Diff:
Modified: trunk/dabo/biz/test/test_dBizobj.py
===================================================================
--- trunk/dabo/biz/test/test_dBizobj.py 2007-03-19 21:11:57 UTC (rev 2936)
+++ trunk/dabo/biz/test/test_dBizobj.py 2007-03-20 03:10:49 UTC (rev 2937)
@@ -76,6 +76,14 @@
or ds[2] == ("iField", "G", False,
self.temp_table_name, "iField", None))
self.assertEqual(ds[3], ("nField", "N", False,
self.temp_table_name, "nField", None))
+
+ def test_DefaultValues(self):
+ biz = self.biz
+ biz.DefaultValues["iField"] = 2342
+ biz.new()
+ self.assertEqual(biz.Record.iField, 2342)
+ self.assertEqual(biz.isChanged(), False)
+
def testVirtualFields(self):
biz = self.biz
def getCombinedName():
@@ -161,6 +169,34 @@
## - Begin method unit tests -
+ def test_cancel(self):
+ biz = self.biz
+ biz.Record.cField = "pkm"
+ biz.cancel()
+ self.assertEqual(biz.Record.cField, "Paul Keith McNett")
+ biz.new()
+ self.assertEqual(biz.RowCount, 4)
+ self.assertEqual(biz.RowNumber, 3)
+ biz.cancel()
+ self.assertEqual(biz.RowCount, 3)
+ self.assertEqual(biz.RowNumber, 2)
+
+ def test_isChanged(self):
+ biz = self.biz
+ self.assertEqual(biz.isChanged(), False)
+ biz.Record.cField = "The Magnificent Seven"
+ self.assertEqual(biz.isChanged(), True)
+ biz.cancel()
+ self.assertEqual(biz.isChanged(), False)
+
+ # isChanged() should be False for new records that haven't
had any field
+ # value changes.
+ biz.new()
+ self.assertEqual(biz.isChanged(), False)
+ biz.Record.cField = "Hitsville U.K."
+ self.assertEqual(biz.isChanged(), True)
+
+
def test_oldVal(self):
biz = self.biz
self.assertEqual(biz.oldVal("cField"), biz.Record.cField)
@@ -232,7 +268,7 @@
self.assertEqual(biz.RowCount, 4)
self.assertEqual(biz.RowNumber, 3)
self.assertEqual(cur._newRecords, {"-1-dabotmp": None})
- self.assertEqual(biz.isChanged(), True)
+ self.assertEqual(biz.isChanged(), False) ## (because no field
changed in new record)
self.assertEqual(cur.Record.pk, "-1-dabotmp")
self.assertEqual(biz.Record.cField, "")
self.assertEqual(biz.Record.iField, 0)
@@ -353,6 +389,7 @@
# Test the case where you add a new parent record but no new
children:
bizMain.new()
+ bizMain.Record.cField = "Junco Pardner"
self.assertEqual(bizMain.RowCount, 4)
self.assertEqual(bizMain.RowNumber, 3)
bizMain.saveAll()
@@ -373,17 +410,6 @@
self.assertEqual(biz.Record.iField, None)
self.assertEqual(biz.Record.nField, None)
- def test_cancel(self):
- biz = self.biz
- biz.Record.cField = "pkm"
- biz.cancel()
- self.assertEqual(biz.Record.cField, "Paul Keith McNett")
- biz.new()
- self.assertEqual(biz.RowCount, 4)
- self.assertEqual(biz.RowNumber, 3)
- biz.cancel()
- self.assertEqual(biz.RowCount, 3)
- self.assertEqual(biz.RowNumber, 2)
if __name__ == "__main__":
suite = unittest.TestLoader().loadTestsFromTestCase(Test_dBizobj)
Modified: trunk/dabo/db/dCursorMixin.py
===================================================================
--- trunk/dabo/db/dCursorMixin.py 2007-03-19 21:11:57 UTC (rev 2936)
+++ trunk/dabo/db/dCursorMixin.py 2007-03-20 03:10:49 UTC (rev 2937)
@@ -614,7 +614,8 @@
considered. Otherwise, only the current record will be checked.
"""
if allRows:
- return len(self._mementos) > 0 or len(self._newRecords)
> 0
+ #return len(self._mementos) > 0 or
len(self._newRecords) > 0
+ return len(self._mementos) > 0
else:
row = self.RowNumber
@@ -625,11 +626,11 @@
return False
recKey = self.pkExpression(rec)
memento = self._mementos.get(recKey, None)
- new_rec = self._newRecords.has_key(recKey)
+ #new_rec = self._newRecords.has_key(recKey)
+ #return not (memento is None and not new_rec)
+ return not (not memento)
- return not (memento is None and not new_rec)
-
def setNewFlag(self):
"""Set the current record to be flagged as a new record.
@@ -755,7 +756,7 @@
return True
- def setFieldVal(self, fld, val, row=None):
+ def setFieldVal(self, fld, val, row=None, _resetMemento=False):
"""Set the value of the specified field."""
if self.RowCount <= 0:
raise dException.NoRecordsException, _("No records in
the data set")
@@ -848,6 +849,13 @@
else:
keyFieldValue = rec[keyField]
mem = self._mementos.get(keyFieldValue, {})
+ if _resetMemento:
+ # Set the memento to the new value.
This is used when adding
+ # default values to brand new records.
Note that we are setting
+ # the memento here, for it only to get
completely removed in the
+ # block below, which effectively means
"this field hasn't been
+ # changed".
+ mem[fld] = val
if mem.has_key(fld) or fld in nonUpdateFields:
# Memento is already there, or it isn't
updateable.
pass
@@ -1288,7 +1296,7 @@
# If it is a function, execute it to get the
value, else use literal.
if hasattr(val, "__call__"):
val = val()
- self.setFieldVal(field, val)
+ self.setFieldVal(field, val, _resetMemento=True)
else:
raise dException.FieldNotFoundException,
_("Can't set default value for nonexistent field '%s'.") % field
Modified: trunk/dabo/db/test/test_dCursorMixin.py
===================================================================
--- trunk/dabo/db/test/test_dCursorMixin.py 2007-03-19 21:11:57 UTC (rev
2936)
+++ trunk/dabo/db/test/test_dCursorMixin.py 2007-03-20 03:10:49 UTC (rev
2937)
@@ -242,8 +242,8 @@
self.assertEqual(cur.RowCount, 4)
self.assertEqual(cur.RowNumber, 3)
self.assertEqual(cur._newRecords, {"-1-dabotmp": None})
- self.assertEqual(cur.isChanged(), True)
- self.assertEqual(cur.isChanged(allRows=False), True)
+ self.assertEqual(cur.isChanged(), False) ## (because no field
changed in new record)
+ self.assertEqual(cur.isChanged(allRows=False), False)
self.assertEqual(cur.Record.pk, "-1-dabotmp")
self.assertEqual(cur.Record.cfield, "")
self.assertEqual(cur.Record.ifield, 0)
_______________________________________________
Post Messages to: [email protected]
Subscription Maintenance: http://leafe.com/mailman/listinfo/dabo-dev