protected override async Task <string> RunIsolatedAsync(AssemblyLoader.AssemblyLoader assemblyLoader) { var document = new SwaggerDocument(); var generator = new JsonSchemaGenerator(Settings); var schemaResolver = new SwaggerSchemaResolver(document, Settings); #if FullNet var assemblies = PathUtilities.ExpandFileWildcards(AssemblyPaths) .Select(path => Assembly.LoadFrom(path)).ToArray(); #else var currentDirectory = await DynamicApis.DirectoryGetCurrentDirectoryAsync().ConfigureAwait(false); var assemblies = PathUtilities.ExpandFileWildcards(AssemblyPaths) .Select(path => assemblyLoader.Context.LoadFromAssemblyPath(PathUtilities.MakeAbsolutePath(path, currentDirectory))).ToArray(); #endif var allExportedClassNames = assemblies.SelectMany(a => a.ExportedTypes).Select(t => t.FullName).ToList(); var matchedClassNames = ClassNames .SelectMany(n => PathUtilities.FindWildcardMatches(n, allExportedClassNames, '.')) .Distinct(); foreach (var className in matchedClassNames) { var type = assemblies.Select(a => a.GetType(className)).FirstOrDefault(t => t != null); await generator.GenerateAsync(type, schemaResolver).ConfigureAwait(false); } return(document.ToJson()); }
private async Task <string> FromAssemblyTypeAsync(string[] classNames, string settingsData) { var document = new SwaggerDocument(); var settings = JsonConvert.DeserializeObject <AssemblyTypeToSwaggerGeneratorSettings>(settingsData); RegisterReferencePaths(GetAllReferencePaths(settings)); var generator = new JsonSchemaGenerator(settings); var schemaResolver = new SwaggerSchemaResolver(document, settings); #if FullNet var assemblies = PathUtilities.ExpandFileWildcards(settings.AssemblySettings.AssemblyPaths) .Select(path => Assembly.LoadFrom(path)).ToArray(); #else var currentDirectory = await DynamicApis.DirectoryGetCurrentDirectoryAsync().ConfigureAwait(false); var assemblies = PathUtilities.ExpandFileWildcards(settings.AssemblySettings.AssemblyPaths) .Select(path => Context.LoadFromAssemblyPath(PathUtilities.MakeAbsolutePath(path, currentDirectory))).ToArray(); #endif var allExportedClassNames = assemblies.SelectMany(a => a.ExportedTypes).Select(t => t.FullName).ToList(); var matchedClassNames = classNames .SelectMany(n => PathUtilities.FindWildcardMatches(n, allExportedClassNames, '.')) .Distinct(); foreach (var className in matchedClassNames) { var type = assemblies.Select(a => a.GetType(className)).FirstOrDefault(t => t != null); await generator.GenerateAsync(type, schemaResolver).ConfigureAwait(false); } return(document.ToJson()); }
public async Task When_generating_multiple_types_then_they_are_appended_to_the_definitions() { //// Arrange var classNames = new[] { "NSwag.SwaggerGeneration.WebApi.Tests.B", "NSwag.SwaggerGeneration.WebApi.Tests.C" }; //// Act var document = new SwaggerDocument(); var settings = new JsonSchemaGeneratorSettings(); var schemaResolver = new SwaggerSchemaResolver(document, settings); var generator = new JsonSchemaGenerator(settings); foreach (var className in classNames) { var type = typeof(TypesToSwaggerTests).Assembly.GetType(className); await generator.GenerateAsync(type, schemaResolver).ConfigureAwait(false); } var json = document.ToJson(); //// Assert Assert.IsNotNull(json); Assert.AreEqual(2, document.Definitions.Count); }
internal string FromAssemblyType(string[] classNames, string settingsData) { var settings = JsonConvert.DeserializeObject <AssemblyTypeToSwaggerGeneratorSettings>(settingsData); RegisterReferencePaths(GetAllReferencePaths(settings)); var document = new SwaggerDocument(); var generator = new JsonSchemaGenerator(settings); var schemaResolver = new SchemaResolver(); var schemaDefinitionAppender = new SwaggerDocumentSchemaDefinitionAppender(document, settings.TypeNameGenerator); #if FullNet var assembly = Assembly.LoadFrom(settings.AssemblyPath); #else var assembly = Context.LoadFromAssemblyPath(settings.AssemblyPath); #endif foreach (var className in classNames) { var type = assembly.GetType(className); var schema = generator.Generate(type, schemaResolver, schemaDefinitionAppender); document.Definitions[type.Name] = schema; } return(document.ToJson()); }
public async Task GenerateClientAsync(SwaggerDocument document, string documentPath) { if (document != null) { SwaggerCode = await RunTaskAsync(Task.Run(() => document.ToJson())); } else { SwaggerCode = string.Empty; } }
public async Task When_callbacks_are_defined_then_they_are_serialized_in_OpenApi() { //// Arrange var document = new SwaggerDocument { Paths = { { "/baz", new SwaggerPathItem { { SwaggerOperationMethod.Get, new SwaggerOperation { Callbacks = { { "onData", new OpenApiCallback { { "foo", new SwaggerPathItem { { SwaggerOperationMethod.Post, new SwaggerOperation { Description = "bar" } } } } } } } } } } } } }; //// Act var json = document.ToJson(SchemaType.OpenApi3); //// Assert Assert.Contains(@"""bar"""); }
public async Task <string> GenerateSwaggerAsync() { try { var schema = JsonSchema4.FromJson(_command.Schema); var document = new SwaggerDocument(); document.Definitions[schema.TypeNameRaw ?? "MyType"] = schema; return(document.ToJson()); } catch (Exception exception) { MessageBox.Show(exception.Message, "Error loading the JSON Schema"); return(string.Empty); // TODO: What to do on error? } }
public void When_host_is_removed_then_base_url_is_also_empty() { //// Arrange var document = new SwaggerDocument { Host = "localhost:12354", BasePath = "/myapi", Schemes = { SwaggerSchema.Http } }; //// Act document.Host = string.Empty; var json = document.ToJson(SchemaType.Swagger2); //// Assert Assert.True(string.IsNullOrEmpty(document.BaseUrl)); }
public void When_scheme_without_host_is_added_then_servers_are_not_cleared() { //// Arrange var document = new SwaggerDocument { BasePath = "/myapi", Schemes = { SwaggerSchema.Http } }; //// Act document.Schemes.Add(SwaggerSchema.Https); document.Host = "localhost:12354"; var json = document.ToJson(SchemaType.Swagger2); //// Assert Assert.Equal(2, document.Servers.Count); }
public async Task When_document_is_empty_then_serialized_correctly_in_Swagger() { //// Arrange var document = new SwaggerDocument(); //// Act var json = document.ToJson(SchemaType.Swagger2); //// Assert Assert.Equal( @"{ ""swagger"": ""2.0"", ""info"": { ""title"": """", ""version"": """" } }".Replace("\r", ""), json.Replace("\r", "")); }
public async Task When_host_basePath_and_schemeas_are_set_then_it_is_correctly_converted_to_OpenApi() { //// Arrange var document = new SwaggerDocument { Host = "localhost:12354", BasePath = "/myapi", Schemes = { SwaggerSchema.Http } }; //// Act var json = document.ToJson(SchemaType.Swagger2); //// Assert Assert.Equal("localhost:12354", document.Host); Assert.Equal("/myapi", document.BasePath); Assert.Equal(1, document.Schemes.Count); Assert.Equal(SwaggerSchema.Http, document.Schemes.First()); }
public async Task When_using_json_schema_with_references_in_service_then_references_are_correctly_resolved() { //// Arrange var jsonSchema = @"{ ""definitions"": { ""app"": { ""definitions"": { ""name"": { ""pattern"": ""^[a-z][a-z0-9-]{3,30}$"", ""type"": ""string"" } }, ""properties"": { ""name"": { ""$ref"": ""#/definitions/app/definitions/name"" } }, ""required"": [""name""], ""type"": ""object"" } }, ""properties"": { ""app"": { ""$ref"": ""#/definitions/app"" }, }, ""type"": ""object"" }"; //// Act var schema = await JsonSchema4.FromJsonAsync(jsonSchema); var document = new SwaggerDocument(); document.Definitions["Foo"] = schema; //// Assert var jsonService = document.ToJson(); // no exception expected }
public async Task When_server_is_set_then_it_is_correctly_converted_to_Swagger() { //// Arrange var document = new SwaggerDocument { Servers = { new OpenApiServer { Url = "http://localhost:12354/myapi" } } }; //// Act var json = document.ToJson(SchemaType.Swagger2); //// Assert Assert.Equal("localhost:12354", document.Host); Assert.Equal("/myapi", document.BasePath); Assert.Equal(1, document.Schemes.Count); Assert.Equal(SwaggerSchema.Http, document.Schemes.First()); }
public void When_using_json_schema_with_references_in_service_then_references_are_correctly_resolved() { //// Arrange var jsonSchema = @"{ ""definitions"": { ""app"": { ""definitions"": { ""name"": { ""pattern"": ""^[a-z][a-z0-9-]{3,30}$"", ""type"": ""string"" } }, ""properties"": { ""name"": { ""$ref"": ""#/definitions/app/definitions/name"" } }, ""required"": [""name""], ""type"": ""object"" } }, ""properties"": { ""app"": { ""$ref"": ""#/definitions/app"" }, }, ""type"": ""object"" }"; //// Act var schema = JsonSchema4.FromJson(jsonSchema); var document = new SwaggerDocument(); document.Definitions["Foo"] = schema; //// Assert var jsonService = document.ToJson(); // no exception expected }
internal string FromAssemblyType(string[] classNames, string settingsData) { var document = new SwaggerDocument(); var settings = JsonConvert.DeserializeObject<AssemblyTypeToSwaggerGeneratorSettings>(settingsData); RegisterReferencePaths(GetAllReferencePaths(settings)); var generator = new JsonSchemaGenerator(settings); var schemaResolver = new SwaggerSchemaResolver(document, settings); #if FullNet var assembly = Assembly.LoadFrom(settings.AssemblyPath); #else var assembly = Context.LoadFromAssemblyPath(settings.AssemblyPath); #endif foreach (var className in classNames) { var type = assembly.GetType(className); var schema = generator.Generate(type, schemaResolver); document.Definitions[type.Name] = schema; } return document.ToJson(); }