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); }
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"); }
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(); }
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); }
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"); }
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"); }
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); }