public async Task LoadAsync_Cancel_DomainClientCompletes() { var mockDomainClient = new CitiesMockDomainClient(); Cities.CityDomainContext ctx = new Cities.CityDomainContext(mockDomainClient); var city = new City() { Name = "NewCity", StateName = "NN", CountyName = "NewCounty" }; // If cancellation results in request beeing cancelled the result should be cancelled var tcs = new TaskCompletionSource <QueryCompletedResult>(); using var cts = new CancellationTokenSource(); mockDomainClient.QueryCompletedResult = tcs.Task; var loadTask = ctx.LoadAsync(ctx.GetCitiesQuery(), cts.Token); cts.Cancel(); tcs.SetResult(new QueryCompletedResult(new[] { city }, Array.Empty <Entity>(), -1, Array.Empty <ValidationResult>())); var result = await loadTask; Assert.AreEqual(1, result.Entities.Count); Assert.AreSame(city, result.Entities.First()); }
public async Task LoadAsync_ValidationErrors() { var mockDomainClient = new CitiesMockDomainClient(); ValidationResult[] validationErrors = new ValidationResult[] { new ValidationResult("Foo", new string[] { "Bar" }) }; mockDomainClient.QueryCompletedResult = Task.FromResult(new QueryCompletedResult(Enumerable.Empty <Entity>(), Enumerable.Empty <Entity>(), 0, validationErrors)); Cities.CityDomainContext ctx = new Cities.CityDomainContext(mockDomainClient); var ex = await ExceptionHelper.ExpectExceptionAsync <DomainOperationException>( () => ctx.LoadAsync(ctx.GetCitiesQuery()), string.Format(Resource.DomainContext_LoadOperationFailed_Validation, "GetCities")); // verify the exception properties Assert.AreEqual(OperationErrorStatus.ValidationFailed, ex.Status); CollectionAssert.AreEqual(validationErrors, (ICollection)ex.ValidationErrors); }
public async Task LoadAsync_Cancel_DomainClientCancel() { var mockDomainClient = new CitiesMockDomainClient(); Cities.CityDomainContext ctx = new Cities.CityDomainContext(mockDomainClient); // If cancellation results in request beeing cancelled the result should be cancelled var tcs = new TaskCompletionSource <QueryCompletedResult>(); using var cts = new CancellationTokenSource(); mockDomainClient.QueryCompletedResult = tcs.Task; var loadTask = ctx.LoadAsync(ctx.GetCitiesQuery(), cts.Token); Assert.IsTrue(ctx.IsLoading); cts.Cancel(); tcs.TrySetCanceled(cts.Token); await ExceptionHelper.ExpectExceptionAsync <OperationCanceledException>(() => loadTask, allowDerivedExceptions : true); Assert.IsTrue(loadTask.IsCanceled); Assert.IsFalse(ctx.IsLoading); }