Skip to content
This repository was archived by the owner on Dec 24, 2022. It is now read-only.

Commit 9fe24ea

Browse files
committed
Add test for updating default values with dictionary
1 parent 56b29e1 commit 9fe24ea

File tree

2 files changed

+154
-1
lines changed

2 files changed

+154
-1
lines changed

src/ServiceStack.OrmLite/OrmLiteConfigExtensions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,7 @@ internal static ModelDefinition GetModelDefinition(this Type modelType)
160160
Name = propertyInfo.Name,
161161
Alias = aliasAttr?.Name,
162162
FieldType = propertyType,
163-
FieldTypeDefaultValue = propertyType.GetDefaultValue(),
163+
FieldTypeDefaultValue = isNullable ? null : propertyType.GetDefaultValue(),
164164
TreatAsType = treatAsType,
165165
PropertyInfo = propertyInfo,
166166
IsNullable = isNullable,

tests/ServiceStack.OrmLite.Tests/OrmLiteUpdateTests.cs

Lines changed: 153 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -812,6 +812,148 @@ void AssertDbStringParamSizes(IDbCommand cmd)
812812
Assert.That(row.FirstName, Is.EqualTo("Updated"));
813813
}
814814
}
815+
816+
[Test]
817+
public void Can_update_DefaultValue()
818+
{
819+
using var db = OpenDbConnection();
820+
db.DropAndCreateTable<DefaultValue>();
821+
AssertDefaultValueFieldTypeDefaultValues();
822+
823+
var orig = new DefaultValue {
824+
Id = 1,
825+
Bool = true,
826+
NBool = false,
827+
Int = 2,
828+
NInt = 0,
829+
String = "A",
830+
};
831+
db.Insert(orig);
832+
var row = db.SingleById<DefaultValue>(1);
833+
AssertDefaultValues(row, orig);
834+
835+
db.UpdateOnly<DefaultValue>(new Dictionary<string, object> {
836+
[nameof(DefaultValue.Id)] = 1,
837+
[nameof(DefaultValue.Bool)] = false,
838+
[nameof(DefaultValue.NBool)] = null,
839+
[nameof(DefaultValue.Int)] = 0,
840+
[nameof(DefaultValue.NInt)] = null,
841+
[nameof(DefaultValue.String)] = null,
842+
});
843+
844+
row = db.SingleById<DefaultValue>(1);
845+
AssertDefaultValues(row, new DefaultValue {
846+
Id = 1,
847+
Bool = false,
848+
NBool = null,
849+
Int = 0,
850+
NInt = null,
851+
String = null,
852+
});
853+
854+
db.UpdateOnly<DefaultValue>(new Dictionary<string, object> {
855+
[nameof(DefaultValue.Id)] = 1,
856+
[nameof(DefaultValue.Bool)] = true,
857+
[nameof(DefaultValue.NBool)] = false,
858+
[nameof(DefaultValue.Int)] = 1,
859+
[nameof(DefaultValue.NInt)] = 0,
860+
[nameof(DefaultValue.String)] = "",
861+
});
862+
863+
row = db.SingleById<DefaultValue>(1);
864+
AssertDefaultValues(row, new DefaultValue {
865+
Id = 1,
866+
Bool = true,
867+
NBool = false,
868+
Int = 1,
869+
NInt = 0,
870+
String = "",
871+
});
872+
}
873+
874+
[Test]
875+
public async Task Can_update_DefaultValue_Async()
876+
{
877+
using var db = OpenDbConnection();
878+
db.DropAndCreateTable<DefaultValue>();
879+
AssertDefaultValueFieldTypeDefaultValues();
880+
881+
var orig = new DefaultValue {
882+
Id = 1,
883+
Bool = true,
884+
NBool = false,
885+
Int = 2,
886+
NInt = 0,
887+
String = "A",
888+
};
889+
await db.InsertAsync(orig);
890+
var row = await db.SingleByIdAsync<DefaultValue>(1);
891+
AssertDefaultValues(row, orig);
892+
893+
db.UpdateOnly<DefaultValue>(new Dictionary<string, object> {
894+
[nameof(DefaultValue.Id)] = 1,
895+
[nameof(DefaultValue.Bool)] = false,
896+
[nameof(DefaultValue.NBool)] = null,
897+
[nameof(DefaultValue.Int)] = 0,
898+
[nameof(DefaultValue.NInt)] = null,
899+
[nameof(DefaultValue.String)] = null,
900+
});
901+
902+
row = await db.SingleByIdAsync<DefaultValue>(1);
903+
AssertDefaultValues(row, new DefaultValue {
904+
Id = 1,
905+
Bool = false,
906+
NBool = null,
907+
Int = 0,
908+
NInt = null,
909+
String = null,
910+
});
911+
912+
await db.UpdateOnlyAsync<DefaultValue>(new Dictionary<string, object> {
913+
[nameof(DefaultValue.Id)] = 1,
914+
[nameof(DefaultValue.Bool)] = true,
915+
[nameof(DefaultValue.NBool)] = false,
916+
[nameof(DefaultValue.Int)] = 1,
917+
[nameof(DefaultValue.NInt)] = 0,
918+
[nameof(DefaultValue.String)] = "",
919+
});
920+
921+
row = db.SingleById<DefaultValue>(1);
922+
AssertDefaultValues(row, new DefaultValue {
923+
Id = 1,
924+
Bool = true,
925+
NBool = false,
926+
Int = 1,
927+
NInt = 0,
928+
String = "",
929+
});
930+
}
931+
932+
private static void AssertDefaultValueFieldTypeDefaultValues()
933+
{
934+
var modelDef = typeof(DefaultValue).GetModelMetadata();
935+
Assert.That(modelDef.GetFieldDefinition(nameof(DefaultValue.Int)).FieldTypeDefaultValue,
936+
Is.EqualTo(default(int)));
937+
Assert.That(modelDef.GetFieldDefinition(nameof(DefaultValue.NInt)).FieldTypeDefaultValue,
938+
Is.EqualTo(default(int?)));
939+
Assert.That(modelDef.GetFieldDefinition(nameof(DefaultValue.Bool)).FieldTypeDefaultValue,
940+
Is.EqualTo(default(bool)));
941+
Assert.That(modelDef.GetFieldDefinition(nameof(DefaultValue.NBool)).FieldTypeDefaultValue,
942+
Is.EqualTo(default(bool?)));
943+
Assert.That(modelDef.GetFieldDefinition(nameof(DefaultValue.String)).FieldTypeDefaultValue,
944+
Is.EqualTo(default(string)));
945+
}
946+
947+
private void AssertDefaultValues(DefaultValue row, DefaultValue orig)
948+
{
949+
Assert.That(row.Id, Is.EqualTo(orig.Id));
950+
Assert.That(row.Bool, Is.EqualTo(orig.Bool));
951+
Assert.That(row.NBool, Is.EqualTo(orig.NBool));
952+
Assert.That(row.Int, Is.EqualTo(orig.Int));
953+
Assert.That(row.NInt, Is.EqualTo(orig.NInt));
954+
Assert.That(row.String, Is.EqualTo(orig.String));
955+
}
956+
815957
}
816958

817959
[CompositeIndex("FirstName", "LastName")]
@@ -830,4 +972,15 @@ public class Shutdown
830972
public int Id { get; set; }
831973
public bool? IsShutdownGraceful { get; set; }
832974
}
975+
976+
public class DefaultValue
977+
{
978+
public int Id { get; set; }
979+
public int Int { get; set; }
980+
public int? NInt { get; set; }
981+
public bool Bool { get; set; }
982+
public bool? NBool { get; set; }
983+
public string String { get; set; }
984+
}
985+
833986
}

0 commit comments

Comments
 (0)