Esempio n. 1
0
        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");
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
        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());
        }
Esempio n. 5
0
        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);
        }
Esempio n. 7
0
        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());
        }
Esempio n. 8
0
        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");
        }
Esempio n. 9
0
        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);
        }