Add typed procedure contract result handling
This commit is contained in:
@@ -113,5 +113,87 @@ namespace DynamORM.Tests.Procedure
|
||||
Assert.AreEqual("XYZ", p0.Value);
|
||||
}
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TestDeclaredResultTypeComesFromContractInterface()
|
||||
{
|
||||
Assert.AreEqual(typeof(ProcedureParameterResult), DynamicProcedureResultBinder.GetDeclaredResultType(new ProcedureParameterObject()));
|
||||
Assert.AreEqual(typeof(ProcedureMultiResult), DynamicProcedureResultBinder.GetDeclaredResultType(new ProcedureMultiResultArgs()));
|
||||
Assert.IsNull(DynamicProcedureResultBinder.GetDeclaredResultType(new object()));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TestDeclaredResultPayloadBindingMapsMainAndOutValues()
|
||||
{
|
||||
var result = DynamicProcedureResultBinder.BindPayload(
|
||||
typeof(ProcedureParameterResult),
|
||||
"sp_Test",
|
||||
15,
|
||||
new System.Collections.Generic.Dictionary<string, object>
|
||||
{
|
||||
{ "result", 7 },
|
||||
{ "description", "done" },
|
||||
{ "status", 3 }
|
||||
}) as ProcedureParameterResult;
|
||||
|
||||
Assert.NotNull(result);
|
||||
Assert.AreEqual(15, result.MainResult);
|
||||
Assert.AreEqual(7, result.Result);
|
||||
Assert.AreEqual("done", result.Description);
|
||||
Assert.AreEqual(3, result.Status);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TestDeclaredResultReaderCanConsumeMultipleResultSets()
|
||||
{
|
||||
using (var reader = new FakeMultiResultDataReader(
|
||||
Tuple.Create(
|
||||
new[] { "Code" },
|
||||
new[] { typeof(string) },
|
||||
new[]
|
||||
{
|
||||
new object[] { "A" },
|
||||
new object[] { "B" }
|
||||
}),
|
||||
Tuple.Create(
|
||||
new[] { "State" },
|
||||
new[] { typeof(int) },
|
||||
new[]
|
||||
{
|
||||
new object[] { 10 },
|
||||
new object[] { 20 }
|
||||
})))
|
||||
{
|
||||
var result = DynamicProcedureResultBinder.ReadDeclaredResult(typeof(ProcedureMultiResult), reader) as ProcedureMultiResult;
|
||||
|
||||
Assert.NotNull(result);
|
||||
CollectionAssert.AreEqual(new[] { "A", "B" }, result.Codes);
|
||||
CollectionAssert.AreEqual(new[] { 10, 20 }, result.States);
|
||||
}
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TestDeclaredResultPayloadCanAugmentReaderResult()
|
||||
{
|
||||
var existing = new ProcedureMultiResult();
|
||||
existing.Codes.Add("A");
|
||||
existing.States.Add(10);
|
||||
|
||||
var result = DynamicProcedureResultBinder.BindPayload(
|
||||
typeof(ProcedureMultiResult),
|
||||
"sp_Multi",
|
||||
99,
|
||||
new System.Collections.Generic.Dictionary<string, object>
|
||||
{
|
||||
{ "status", 5 }
|
||||
},
|
||||
existing) as ProcedureMultiResult;
|
||||
|
||||
Assert.AreSame(existing, result);
|
||||
Assert.AreEqual(99, result.MainResult);
|
||||
Assert.AreEqual(5, result.Status);
|
||||
CollectionAssert.AreEqual(new[] { "A" }, result.Codes);
|
||||
CollectionAssert.AreEqual(new[] { 10 }, result.States);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user