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

Reply via email to