public async Task TestDomainService_QueryDirect_Throws() { MockDomainService_SelectThrows provider = ServerTestHelper.CreateInitializedDomainService <MockDomainService_SelectThrows>(DomainOperationType.Query); DomainServiceDescription serviceDescription = DomainServiceDescription.GetDescription(provider.GetType()); DomainOperationEntry method = serviceDescription.DomainOperationEntries.First(p => p.Name == "GetEntities" && p.Operation == DomainOperation.Query); QueryDescription qd = new QueryDescription(method, Array.Empty <object>()); await ExceptionHelper.ExpectExceptionAsync <Exception>(async() => { try { await provider.QueryAsync <TestEntity>(qd, CancellationToken.None); } catch (TargetInvocationException ex) { throw ex.InnerException; } }, "Test"); }
public async Task InvokeOperation_ServerValidationError() { TestProvider_Scenarios provider = ServerTestHelper.CreateInitializedDomainService <TestProvider_Scenarios>(DomainOperationType.Invoke); DomainServiceDescription serviceDescription = DomainServiceDescription.GetDescription(typeof(TestProvider_Scenarios)); DomainOperationEntry incrementBid1ForAByMethod = serviceDescription.GetInvokeOperation("IncrementBid1ForABy"); Assert.IsNotNull(incrementBid1ForAByMethod); TestDomainServices.A inputA = new TestDomainServices.A() { BID1 = 1 }; var invokeResult = await provider.InvokeAsync(new InvokeDescription(incrementBid1ForAByMethod, new object[] { inputA, 2 }), CancellationToken.None); Assert.IsNull(invokeResult.Result); Assert.IsNotNull(invokeResult.ValidationErrors); Assert.AreEqual(2, invokeResult.ValidationErrors.Count); Assert.AreEqual("The field delta must be between 5 and 10.", invokeResult.ValidationErrors.ElementAt(0).ErrorMessage); Assert.AreEqual("The RequiredString field is required.", invokeResult.ValidationErrors.ElementAt(1).ErrorMessage); }
public async Task TestDomainService_QueryDirect() { TestDomainServices.LTS.Catalog provider = ServerTestHelper.CreateInitializedDomainService <TestDomainServices.LTS.Catalog>(DomainOperationType.Query); DomainServiceDescription serviceDescription = DomainServiceDescription.GetDescription(provider.GetType()); DomainOperationEntry method = serviceDescription.DomainOperationEntries.Where(p => p.Operation == DomainOperation.Query).First(p => p.Name == "GetProductsByCategory"); QueryDescription qd = new QueryDescription(method, new object[] { 1 }); var queryResult = await provider.QueryAsync <DataTests.AdventureWorks.LTS.Product>(qd, CancellationToken.None); int count = queryResult.Result.Cast <DataTests.AdventureWorks.LTS.Product>().Count(); Assert.AreEqual(32, count); // verify that we can use the same provider to execute another query qd = new QueryDescription(method, new object[] { 2 }); queryResult = await provider.QueryAsync <DataTests.AdventureWorks.LTS.Product>(qd, CancellationToken.None); count = queryResult.Result.Cast <DataTests.AdventureWorks.LTS.Product>().Count(); Assert.AreEqual(43, count); }
public async Task ServerValidation_InvokeOperation() { TestDomainServices.TestProvider_Scenarios service = ServerTestHelper.CreateInitializedDomainService <TestDomainServices.TestProvider_Scenarios>(DomainOperationType.Invoke); DomainServiceDescription serviceDescription = DomainServiceDescription.GetDescription(service.GetType()); DomainOperationEntry method = serviceDescription.DomainOperationEntries.Single(p => p.Name == "InvokeOperationWithParamValidation"); InvokeDescription invokeDescription = new InvokeDescription(method, new object[] { -3, "ABC", new TestDomainServices.CityWithCacheData() }); var invokeResult = await service.InvokeAsync(invokeDescription, CancellationToken.None); Assert.IsNotNull(invokeResult.ValidationErrors); Assert.AreEqual(2, invokeResult.ValidationErrors.Count()); ValidationResult error = invokeResult.ValidationErrors.ElementAt(0); Assert.AreEqual("The field a must be between 0 and 10.", error.ErrorMessage); Assert.AreEqual("a", error.MemberNames.Single()); error = invokeResult.ValidationErrors.ElementAt(1); Assert.AreEqual("The field b must be a string with a maximum length of 2.", error.ErrorMessage); Assert.AreEqual("b", error.MemberNames.Single()); }
public void TestDomainService_QueryDirect() { TestDomainServices.LTS.Catalog provider = ServerTestHelper.CreateInitializedDomainService <TestDomainServices.LTS.Catalog>(DomainOperationType.Query); DomainServiceDescription serviceDescription = DomainServiceDescription.GetDescription(provider.GetType()); DomainOperationEntry method = serviceDescription.DomainOperationEntries.Where(p => p.Operation == DomainOperation.Query).First(p => p.Name == "GetProductsByCategory"); QueryDescription qd = new QueryDescription(method, new object[] { 1 }); int totalCount; IEnumerable <ValidationResult> validationErrors; IEnumerable result = provider.Query(qd, out validationErrors, out totalCount); int count = result.Cast <DataTests.AdventureWorks.LTS.Product>().Count(); Assert.AreEqual(32, count); // verify that we can use the same provider to execute another query qd = new QueryDescription(method, new object[] { 2 }); result = provider.Query(qd, out validationErrors, out totalCount); count = result.Cast <DataTests.AdventureWorks.LTS.Product>().Count(); Assert.AreEqual(43, count); }
public void DomainService_CallSubmitWithMultipleInvocations() { DomainServiceDescription description = DomainServiceDescription.GetDescription(typeof(DomainMethod_ValidProvider_MultipleMethods)); List <ChangeSetEntry> changeSetEntries = new List <ChangeSetEntry>(); ChangeSetEntry processCountyOperation = new ChangeSetEntry(); processCountyOperation.Id = 1; processCountyOperation.Entity = new County { Name = "King", StateName = "WA" }; processCountyOperation.DomainOperationEntry = description.GetCustomMethod(typeof(County), "ProcessCounty"); processCountyOperation.Operation = DomainOperation.Update; processCountyOperation.EntityActions = new EntityActionCollection { { "ProcessCounty", null } }; changeSetEntries.Add(processCountyOperation); ChangeSetEntry processCityOperation = new ChangeSetEntry(); processCityOperation.Id = 2; processCityOperation.Entity = new City { Name = "Redmond", CountyName = "King", StateName = "WA" }; processCityOperation.DomainOperationEntry = description.GetCustomMethod(typeof(City), "ProcessCity"); processCityOperation.Operation = DomainOperation.Update; processCityOperation.EntityActions = new EntityActionCollection { { "ProcessCity", new object[] { new byte[] { 123, 1 } } } }; changeSetEntries.Add(processCityOperation); ChangeSet changeset = new ChangeSet(changeSetEntries); DomainMethod_ValidProvider_MultipleMethods myTestProvider = ServerTestHelper.CreateInitializedDomainService <DomainMethod_ValidProvider_MultipleMethods>(DomainOperationType.Submit); myTestProvider.Submit(changeset); // check that the domain services have invoked the domain method correctly by checking the internal variables set Assert.AreEqual <string>("ProcessCounty_ProcessCity_", myTestProvider.Invoked); Assert.AreEqual <int>(2, myTestProvider.InputData.Length); }
public async Task ServerValidation_Query() { TestDomainServices.TestProvider_Scenarios service = ServerTestHelper.CreateInitializedDomainService <TestDomainServices.TestProvider_Scenarios>(DomainOperationType.Query); DomainServiceDescription serviceDescription = DomainServiceDescription.GetDescription(service.GetType()); DomainOperationEntry method = serviceDescription.DomainOperationEntries.Single(p => p.Name == "QueryWithParamValidation"); QueryDescription qd = new QueryDescription(method, new object[] { -1, "ABC" }); var queryResult = await service.QueryAsync <TestDomainServices.A>(qd, CancellationToken.None); Assert.IsNotNull(queryResult.ValidationErrors); Assert.AreEqual(2, queryResult.ValidationErrors.Count()); ValidationResult error = queryResult.ValidationErrors.ElementAt(0); Assert.AreEqual("The field a must be between 0 and 10.", error.ErrorMessage); Assert.AreEqual("a", error.MemberNames.Single()); error = queryResult.ValidationErrors.ElementAt(1); Assert.AreEqual("The field b must be a string with a maximum length of 2.", error.ErrorMessage); Assert.AreEqual("b", error.MemberNames.Single()); }
public void TestDomainService_QueryDirect_Throws() { MockDomainService_SelectThrows provider = ServerTestHelper.CreateInitializedDomainService <MockDomainService_SelectThrows>(DomainOperationType.Query); DomainServiceDescription serviceDescription = DomainServiceDescription.GetDescription(provider.GetType()); DomainOperationEntry method = serviceDescription.DomainOperationEntries.First(p => p.Name == "GetEntities" && p.Operation == DomainOperation.Query); QueryDescription qd = new QueryDescription(method, new object[0]); int totalCount; IEnumerable <ValidationResult> validationErrors; ExceptionHelper.ExpectException <Exception>(delegate { try { provider.Query(qd, out validationErrors, out totalCount); } catch (TargetInvocationException ex) { throw ex.InnerException; } }, "Test"); }
public void InvokeOperation_ServerValidationError() { TestProvider_Scenarios provider = ServerTestHelper.CreateInitializedDomainService <TestProvider_Scenarios>(DomainOperationType.Invoke); DomainServiceDescription serviceDescription = DomainServiceDescription.GetDescription(typeof(TestProvider_Scenarios)); DomainOperationEntry incrementBid1ForAByMethod = serviceDescription.GetInvokeOperation("IncrementBid1ForABy"); Assert.IsNotNull(incrementBid1ForAByMethod); IEnumerable <ValidationResult> validationErrors; TestDomainServices.A inputA = new TestDomainServices.A() { BID1 = 1 }; object result = provider.Invoke(new InvokeDescription(incrementBid1ForAByMethod, new object[] { inputA, 2 }), out validationErrors); Assert.IsNull(result); Assert.IsNotNull(validationErrors); Assert.AreEqual(2, validationErrors.Count()); Assert.AreEqual("The field delta must be between 5 and 10.", validationErrors.ElementAt(0).ErrorMessage); Assert.AreEqual("The RequiredString field is required.", validationErrors.ElementAt(1).ErrorMessage); }