public async Task ControllerAction_CanSpecifyReturnResource_UsingAttribute() { // Arrange: var hostPlugin = new MockAppHostPlugin(); hostPlugin.AddPluginType <ConventionBasedResourceMap>(); var mockResource = new LinkedResource2 { Id = 10, Value1 = 100, Value2 = "value-2", Value3 = 300, Value4 = 400 }; var serviceMock = new MockUnitTestService { ServerResources = new[] { mockResource } }; // Act: var client = RequestSettings.Create() .CreateTestClient(hostPlugin, serviceMock); var request = ApiRequest.Create("api/convention/links/resource2", HttpMethod.Get); var resource = (await client.Send <LinkedResourceModel>(request)).Content; // Assert: resource.Links.Should().HaveCount(1); resource.AssertLink("self", HttpMethod.Get, "/api/convention/links/self/return/attribute/10"); }
public async Task ResourceMap_Convention_ResourceLinks() { // Arrange: var hostPlugin = new MockAppHostPlugin(); hostPlugin.AddPluginType <ConventionBasedResourceMap>(); var mockResource = new LinkedResource { Id = 10, Value1 = 100, Value2 = "value-2", Value3 = 300, Value4 = 400 }; var serviceMock = new MockUnitTestService { ServerResources = new[] { mockResource } }; // Act: var client = RequestSettings.Create() .CreateTestClient(hostPlugin, serviceMock); var request = ApiRequest.Create("api/convention/links/resource", HttpMethod.Get); var resource = (await client.Send <LinkedResourceModel>(request)).Content; // Assert: resource.AssertLink("self", HttpMethod.Get, "/api/convention/links/self/10"); resource.AssertLink("resource:create", HttpMethod.Post, "/api/convention/links/create"); resource.AssertLink("resource:update", HttpMethod.Put, "/api/convention/links/update/10"); resource.AssertLink("resource:delete", HttpMethod.Delete, "/api/convention/links/delete/10"); }
public async Task ResourceMap_CanSpecify_AdditionalOptionalLinkProperties() { // Arrange: var hostPlugin = new MockAppHostPlugin(); hostPlugin.AddPluginType <LinkedResourceMap>(); var mockResource = new LinkedResource { Id = 10, Value2 = "value-2" }; var serviceMock = new MockUnitTestService { ServerResources = new[] { mockResource } }; // Act: var client = RequestSettings.Create() .CreateTestClient(hostPlugin, serviceMock); var request = ApiRequest.Create("api/linked/resource", HttpMethod.Get); var resource = (await client.Send <LinkedResourceModel>(request)).Content; // Assert: resource.AssertLink("scenario-30", HttpMethod.Options, "http://external/api/call/10/info/value-2"); var link = resource.Links["scenario-30"]; Assert.Equal(link.Name, "test-name"); Assert.Equal(link.Title, "test-title"); Assert.Equal(link.Type, "test-type"); Assert.Equal(link.HrefLang, "test-href-lang"); }
public async Task CanGenerateUrl_FromStringInterpolatedResourceUrl() { // Arrange: var hostPlugin = new MockAppHostPlugin(); hostPlugin.AddPluginType <LinkedResourceMap>(); var mockResource = new LinkedResource { Id = 10, Value1 = 100, Value2 = "value-2", Value3 = 300, Value4 = 400 }; var serviceMock = new MockUnitTestService { ServerResources = new[] { mockResource } }; // Act: var client = RequestSettings.Create() .CreateTestClient(hostPlugin, serviceMock); var request = ApiRequest.Create("api/linked/resource", HttpMethod.Get); var resource = (await client.Send <LinkedResourceModel>(request)).Content; // Assert: resource.AssertLink("scenario-25", HttpMethod.Options, "http://external/api/call/10/info/value-2"); }
public static WebServerConfig ArrangeWithDefaults(this WebHostFixture fixture, LinkedResource mockResource) { return(fixture.WithServices(services => { var serviceMock = new MockUnitTestService { ServerResources = new[] { mockResource } }; services.AddSingleton <IMockedService>(serviceMock); }) .ComposedFrom(compose => { compose.AddRest(); var hostPlugin = new MockHostPlugin(); hostPlugin.AddPluginType <LinkedResourceMap>(); compose.AddPlugin(hostPlugin); })); }
public async Task ExistingResourceMetadata_CanBeApplied_ToAnotherResourceType() { // Arrange: var hostPlugin = new MockAppHostPlugin(); hostPlugin.AddPluginType <LinkedResourceMap>(); var mockResource = new LinkedResource { Id = 10, Value1 = 100, Value2 = "value-2", Value3 = 300, Value4 = 400 }; var serviceMock = new MockUnitTestService { ServerResources = new[] { mockResource } }; // Act: var client = RequestSettings.Create() .CreateTestClient(hostPlugin, serviceMock); var request = ApiRequest.Create("api/linked/resource/view", HttpMethod.Get); var resource = (await client.Send <LinkedViewResourceModel>(request)).Content; // Assert: // -------------------------------------------------- // Required Route Parameters: resource.AssertLink("scenario-1", HttpMethod.Get, "/api/linked/resource/scenario-1/10"); resource.AssertLink("scenario-2", HttpMethod.Get, "/api/linked/resource/scenario-2/10/param-one/value-2"); // Optional Route Parameter with supplied value: resource.AssertLink("scenario-3", HttpMethod.Get, "/api/linked/resource/scenario-3/10/param-one/300"); // Optional Route Parameter with no supplied value: mockResource.Value3 = null; resource = (await client.Send <LinkedViewResourceModel>(request)).Content; resource.AssertLink("scenario-3", HttpMethod.Get, "/api/linked/resource/scenario-3/10/param-one"); // Multiple Optional Parameters with supplied values. mockResource.Value3 = 600; mockResource.Value2 = "value-2"; resource = (await client.Send <LinkedViewResourceModel>(request)).Content; resource.AssertLink("scenario-4", HttpMethod.Get, "/api/linked/resource/scenario-4/10/param-one/600/value-2"); // Multiple optional Parameters with no supplied value. mockResource.Value3 = null; mockResource.Value2 = null; resource = (await client.Send <LinkedViewResourceModel>(request)).Content; resource.AssertLink("scenario-4", HttpMethod.Get, "/api/linked/resource/scenario-4/10/param-one"); // No route parameters with single parameter populated from posted data. resource = (await client.Send <LinkedViewResourceModel>(request)).Content; resource.AssertLink("scenario-5", HttpMethod.Post, "/api/linked/resource/scenario-5/create"); // Single route parameter with additional class based parameter populated from posted data. resource = (await client.Send <LinkedViewResourceModel>(request)).Content; resource.AssertLink("scenario-6", HttpMethod.Put, "/api/linked/resource/scenario-6/10/update"); }