Ejemplo n.º 1
0
        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");
        }
Ejemplo n.º 2
0
        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);
            }));
        }
Ejemplo n.º 6
0
        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");
        }