Skip to content

Commit 5dcac93

Browse files
author
Jareth Hein
committed
Fix updating a field to actually check before marking a record dirty, properly XMLquote username and passwords
1 parent d997a59 commit 5dcac93

File tree

3 files changed

+73
-7
lines changed

3 files changed

+73
-7
lines changed

Intuit.QuickBase.Client/QRecord.cs

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -336,16 +336,23 @@ private void SetExistingField(int index, int fieldIndex, object value)
336336
string fileName = (string) value;
337337
_fields[fieldIndex].Value = Path.GetFileName(fileName);
338338
_fields[fieldIndex].FullName = fileName;
339+
if (RecordState != RecordState.New)
340+
{
341+
RecordState = RecordState.Modified;
342+
}
339343
}
340344
else
341345
{
342-
_fields[fieldIndex].Value = value;
346+
if (!_fields[fieldIndex].Value.Equals(value))
347+
{
348+
_fields[fieldIndex].Value = value;
349+
if (RecordState != RecordState.New)
350+
{
351+
RecordState = RecordState.Modified;
352+
}
353+
}
343354
}
344355

345-
if (RecordState != RecordState.New)
346-
{
347-
RecordState = RecordState.Modified;
348-
}
349356
}
350357

351358
public int GetColumnIndex(string columnName)

Intuit.QuickBase.Core/Payload/AuthenticatePayload.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
*/
88
using System;
99
using System.Text;
10+
using System.Xml;
11+
using System.Xml.Linq;
1012

1113
namespace Intuit.QuickBase.Core.Payload
1214
{
@@ -62,11 +64,19 @@ private int Hours
6264

6365
internal override string GetXmlPayload()
6466
{
67+
#if FALSE
6568
var sb = new StringBuilder();
6669
sb.Append(String.Format("<username>{0}</username><password>{1}</password>",
6770
Username, Password));
6871
sb.Append(Hours > 0 ? String.Format("<hours>{0}</hours>", Hours) : String.Empty);
6972
return sb.ToString();
73+
#else
74+
var sb = new StringBuilder();
75+
sb.Append(new XElement("username", Username));
76+
sb.Append(new XElement("password", Password));
77+
if (Hours > 0) sb.Append(new XElement("hours", Hours));
78+
return sb.ToString();
79+
#endif
7080
}
7181
}
7282
}

QBFunctionTest/UnitTest1.cs

Lines changed: 51 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,27 @@ public void SetupTestValues()
5858
phoneVal = "(303) 555-1212";
5959
percentVal = 95.5m;
6060
}
61+
62+
public void Setup2ndValues()
63+
{
64+
textVal = "Test string #2 & an ampersand";
65+
floatVal = 1234.56m;
66+
checkboxVal = false;
67+
dateVal = new DateTime(2010, 01, 12);
68+
timeStampVal = new DateTime(1971, 03, 24, 23, 55, 00, DateTimeKind.Local);
69+
timeOfDayVal = new DateTime(2002, 2, 2, 23, 45, 56).TimeOfDay;
70+
durationVal = new TimeSpan(0, 1, 2, 3);
71+
addressVal.Line1 = "1313 Mockingbird Ln";
72+
addressVal.City = "Culver City";
73+
addressVal.Province = "CA";
74+
addressVal.PostalCode = "90120";
75+
addressVal.Country = "USA";
76+
currencyVal = 25.25m;
77+
emailVal = "[email protected]";
78+
phoneVal = "(719) 555-1212";
79+
percentVal = 95.5m;
80+
}
81+
6182
}
6283

6384
[TestMethod]
@@ -86,7 +107,6 @@ public void BasicCreationAndRoundTripTest()
86107
testTable.Columns.Add(new QColumn("TimeStampTest", FieldType.timestamp));
87108
testTable.Columns.Add(new QColumn("TimeOfDayTest", FieldType.timeofday));
88109
testTable.Columns.Add(new QColumn("DurationTest", FieldType.duration));
89-
//testTable.Columns.Add(new QColumn("AddressTest", FieldType.address));
90110
testTable.Columns.Add(new QColumn("CurrencyTest", FieldType.currency));
91111
testTable.Columns.Add(new QColumn("PercentTest", FieldType.percent));
92112
testTable.Columns.Add(new QColumn("EmailTest", FieldType.email));
@@ -103,7 +123,6 @@ public void BasicCreationAndRoundTripTest()
103123
inRec["TimeStampTest"] = exemplar.timeStampVal;
104124
inRec["TimeOfDayTest"] = exemplar.timeOfDayVal;
105125
inRec["DurationTest"] = exemplar.durationVal;
106-
//inRec["AddressTest"] = exemplar.addressVal;
107126
inRec["CurrencyTest"] = exemplar.currencyVal;
108127
inRec["PercentTest"] = exemplar.percentVal;
109128
inRec["EmailTest"] = exemplar.emailVal;
@@ -151,6 +170,36 @@ public void BasicCreationAndRoundTripTest()
151170
Assert.AreEqual(exemplar.percentVal, outRec["PercentTest"], "Percents don't roundtrip");
152171
Assert.AreEqual(exemplar.emailVal, outRec["EmailTest"], "Emails don't roundtrip");
153172
Assert.AreEqual(exemplar.phoneVal, outRec["PhoneTest"], "Phones don't roundtrip");
173+
174+
exemplar.Setup2ndValues();
175+
outRec["TextTest"] = exemplar.textVal;
176+
outRec["FloatTest"] = exemplar.floatVal;
177+
outRec["CheckboxTest"] = exemplar.checkboxVal;
178+
outRec["DateTest"] = exemplar.dateVal;
179+
outRec["TimeStampTest"] = exemplar.timeStampVal;
180+
outRec["TimeOfDayTest"] = exemplar.timeOfDayVal;
181+
outRec["DurationTest"] = exemplar.durationVal;
182+
outRec["CurrencyTest"] = exemplar.currencyVal;
183+
outRec["PercentTest"] = exemplar.percentVal;
184+
outRec["EmailTest"] = exemplar.emailVal;
185+
outRec["PhoneTest"] = exemplar.phoneVal;
186+
187+
testTable.AcceptChanges();
188+
testTable.Query();
189+
190+
IQRecord outRec2 = testTable.Records[0];
191+
Assert.AreEqual(exemplar.textVal, outRec2["TextTest"], "Strings don't update");
192+
Assert.AreEqual(exemplar.floatVal, outRec2["FloatTest"], "Floats don't update");
193+
Assert.AreEqual(exemplar.checkboxVal, outRec2["CheckboxTest"], "Checkboxes don't update");
194+
Assert.AreEqual(exemplar.dateVal, outRec2["DateTest"], "Dates don't update");
195+
Assert.AreEqual(exemplar.timeStampVal, outRec2["TimeStampTest"], "TimeStamps don't update");
196+
Assert.AreEqual(exemplar.timeOfDayVal, outRec2["TimeOfDayTest"], "TimeOfDays don't update");
197+
Assert.AreEqual(exemplar.durationVal, outRec2["DurationTest"], "Durations don't update");
198+
Assert.AreEqual(exemplar.currencyVal, outRec2["CurrencyTest"], "Currencies don't update");
199+
Assert.AreEqual(exemplar.percentVal, outRec2["PercentTest"], "Percents don't update");
200+
Assert.AreEqual(exemplar.emailVal, outRec2["EmailTest"], "Emails don't update");
201+
Assert.AreEqual(exemplar.phoneVal, outRec2["PhoneTest"], "Phones don't update");
202+
154203
}
155204
}
156205
}

0 commit comments

Comments
 (0)