public Task QueryStringParams_CanBeSpecified() { return(WebHostFixture.TestAsync <LinkGenerationTests>(async host => { IMockedService mockedSrv = new MockUnitTestService { Customers = new[] { new CustomerResource { CustomerId = "ID_1", Age = 47 } } }; var response = await host .ArrangeWithDefaults(mockedSrv) .Act.OnRestClient(async client => { var request = ApiRequest.Create("api/customers/24234234234", HttpMethod.Get, config => { config.Settings.UseHalDefaults(); config.Settings.QueryString .AddParam("a", "v1") .AddParam("b", "v2"); }); return await client.SendAsync <CustomerModel>(request); }); response.Assert.ApiResponse(apiResponse => { apiResponse.Request.RequestUri.PathAndQuery .Should().Be("/api/customers/24234234234?a=v1&b=v2"); }); })); }
public Task ClientCan_ReceiveEmbeddedResourceCollection() { // Arrange the test resources that will be returned from the server // to test the client consumer code. var serverResource = new CustomerResource { CustomerId = Guid.NewGuid().ToString() }; // Embed to child resources. serverResource.Embed(new[] { new AddressResource { AddressId = Guid.NewGuid().ToString(), CustomerId = serverResource.CustomerId }, new AddressResource { AddressId = Guid.NewGuid().ToString(), CustomerId = serverResource.CustomerId } }, "addresses"); // Configure the mock service to return the resource. var mockSrv = new MockUnitTestService { Customers = new[] { serverResource } }; // Run the unit test and request the resource and assert the expected results. return(WebHostFixture.TestAsync <LinkGenerationTests>(async host => { var response = await host .ArrangeWithDefaults(mockSrv) .Act.OnRestClient(async client => { var request = ApiRequest.Get("api/customers/embedded/resource"); return await client.SendAsync <CustomerModel>(request); }); response.Assert.ApiResponse(apiResponse => { var resource = (CustomerModel)apiResponse.Content; // Validate that an embedded resource collection was returned. resource.Should().NotBeNull(); resource.Embedded.Should().NotBeNull(); resource.Embedded.Keys.Should().HaveCount(1); resource.Embedded.ContainsKey("addresses").Should().BeTrue(); // At this point, the embedded resource is the generic JSON.NET representation. // The next line of code will deserialize this generic representation in the C# client side class // matching the server-sided resource collection. var embeddedClientResource = resource.GetEmbeddedCollection <AddressModel>("addresses").ToArray(); embeddedClientResource.Should().NotBeNull(); embeddedClientResource.Should().HaveCount(2); }); })); }