public async Task Returns_Service_When_Service_Exists()
            {
                var existingApi = new ApiDescriptionBuilder().Build();

                _store.Setup(s => s.FindByServiceIdAsync("MyApi")).ReturnsAsync(existingApi);

                var service = await _serviceRepository.GetApiAsync("MyApi");

                service.Should().NotBeNull();
                service.Should().Be(existingApi);
            }
Beispiel #2
0
        public void Can_Write_ServiceApiDescription_To_Json()
        {
            var apiDescription = new ApiDescriptionBuilder().Build();
            var json           = JsonConvert.SerializeObject(apiDescription, new OpenApiDocumentJsonConverter());

            var newApiDescription = ServiceApiDescription.ReadFromJson(json);

            newApiDescription.Should().NotBeNull();
            newApiDescription.ServiceId.Should().Be("Api1");
            newApiDescription.ApiDocument.Should().NotBeNull();
            newApiDescription.ApiDocument.Info.Should().NotBeNull();
            newApiDescription.ApiDocument.Info.Title.Should().Be("My Api");
        }
Beispiel #3
0
        public void it_should_acknowledge_restricted_resource()
        {
            var apiDescriptionBuilder = new ApiDescriptionBuilder <TestController>(
                _descriptionBuilder,
                _xmlDocProvider.Object,
                new[] { _typeDescriptionBuilder.Object },
                new IServerBehaviorAttributeVisitor[0],
                _namedGraphSelectorFactory.Object);

            apiDescriptionBuilder.BuildDescription(_apiDocumentation.Object, null);

            var statusCodes = _apiDocumentation.Object.SupportedClasses.First().GetSupportedOperations().First(operation => operation.Operation.Label == "Update").Operation.StatusCodes;

            statusCodes.Should().Contain((int)HttpStatusCode.Unauthorized);
        }
            public async Task Registers_New_Service_When_Not_Exists()
            {
                var description = new ApiDescriptionBuilder().WithServiceId("MyApi").Build();

                _store.Setup(s => s.FindByServiceIdAsync("NewService")).ReturnsAsync((ServiceApiDescription)null);
                ServiceApiDescription newDescription = null;

                _store.Setup(s => s.StoreAsync(It.IsAny <ServiceApiDescription>())).Callback <ServiceApiDescription>(s => newDescription = s).Returns(Task.CompletedTask);

                await _serviceRepository.StoreApiAsync(description);

                newDescription.Should().NotBeNull();
                newDescription.ServiceId.Should().Be("MyApi");
                newDescription.ApiDocument.Should().NotBeNull();
            }
Beispiel #5
0
        public void it_should_build_the_api_documentation_using_a_Shacl_profile()
        {
            Mock <ITypeDescriptionBuilder> shaclTypeDescriptionBuilder = SetupTypeDescriptionBuilder(_entityContext, EntityConverter.Shacl);
            var apiDescriptionBuilder = new ApiDescriptionBuilder <TestController>(
                _descriptionBuilder,
                _xmlDocProvider.Object,
                new[] { _typeDescriptionBuilder.Object, shaclTypeDescriptionBuilder.Object },
                new IServerBehaviorAttributeVisitor[0],
                _namedGraphSelectorFactory.Object);

            apiDescriptionBuilder.BuildDescription(_apiDocumentation.Object, new[] { EntityConverter.Shacl });

            _typeDescriptionBuilder.VerifyGet(instance => instance.SupportedProfiles, Times.Once);
            shaclTypeDescriptionBuilder.VerifyGet(instance => instance.SupportedProfiles, Times.Once);
            _typeDescriptionBuilder.Verify(instance => instance.BuildTypeDescription(It.IsAny <DescriptionContext>()), Times.Never);
        }
Beispiel #6
0
        public void it_should_build_the_api_documentation()
        {
            var apiDescriptionBuilder = new ApiDescriptionBuilder <TestController>(
                _descriptionBuilder,
                _xmlDocProvider.Object,
                new[] { _typeDescriptionBuilder.Object },
                new IServerBehaviorAttributeVisitor[0],
                _namedGraphSelectorFactory.Object);

            apiDescriptionBuilder.BuildDescription(_apiDocumentation.Object, null);

            _apiDocumentation.Object.EntryPoints.Should().HaveCount(0);
            _apiDocumentation.Object.SupportedClasses.Should().HaveCount(1);
            _apiDocumentation.Object.SupportedClasses.First().SupportedOperations.Should().HaveCount(1);
            _apiDocumentation.Object.SupportedClasses.First().SupportedOperations.First().Method.Should().HaveCount(1);
            _apiDocumentation.Object.SupportedClasses.First().SupportedOperations.First().Method.First().Should().Be("POST");
        }
Beispiel #7
0
        public void it_should_determine_property_owning_an_operation()
        {
            var apiDescriptionBuilder = new ApiDescriptionBuilder <TestController>(
                _descriptionBuilder,
                _xmlDocProvider.Object,
                new[] { _typeDescriptionBuilder.Object },
                new IServerBehaviorAttributeVisitor[0],
                _namedGraphSelectorFactory.Object);

            var operationOwner = apiDescriptionBuilder.DetermineOperationOwner(
                typeof(TestController).GetMethod("SetRoles").ToOperationInfo("http://temp.uri/", Verb.POST),
                DescriptionContext.ForType(_apiDocumentation.Object, typeof(Person), _typeDescriptionBuilder.Object),
                new Mock <IClass>(MockBehavior.Strict).Object);

            operationOwner.Should().BeAssignableTo <ISupportedProperty>();
            operationOwner.Id.ToString().Should().Be("urn:hydra:" + typeof(Person).FullName + ".Roles");
        }
Beispiel #8
0
        public void it_should_list_possible_status_codes()
        {
            var apiDescriptionBuilder = new ApiDescriptionBuilder <TestController>(
                _descriptionBuilder,
                _xmlDocProvider.Object,
                new[] { _typeDescriptionBuilder.Object },
                new IServerBehaviorAttributeVisitor[0],
                _namedGraphSelectorFactory.Object);

            apiDescriptionBuilder.BuildDescription(_apiDocumentation.Object, null);

            var statusCodes = _apiDocumentation.Object.SupportedClasses.First().GetSupportedOperations().First(operation => operation.Operation.Label == "Delete").Operation.StatusCodes;

            statusCodes.Should().Contain((int)HttpStatusCode.NoContent);
            statusCodes.Should().Contain((int)HttpStatusCode.NotFound);
            statusCodes.Should().Contain((int)HttpStatusCode.BadRequest);
            statusCodes.Should().Contain((int)HttpStatusCode.Forbidden);
        }