Ejemplo n.º 1
0
        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());
        }
Ejemplo n.º 2
0
            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());
            }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
            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());
            }
Ejemplo n.º 5
0
 public async Task GenerateClientAsync(SwaggerDocument document, string documentPath)
 {
     if (document != null)
     {
         SwaggerCode = await RunTaskAsync(Task.Run(() => document.ToJson()));
     }
     else
     {
         SwaggerCode = string.Empty;
     }
 }
Ejemplo n.º 6
0
        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""");
        }
Ejemplo n.º 7
0
 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?
     }
 }
Ejemplo n.º 8
0
        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));
        }
Ejemplo n.º 9
0
        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);
        }
Ejemplo n.º 10
0
        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", ""));
        }
Ejemplo n.º 11
0
        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());
        }
Ejemplo n.º 12
0
        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
        }
Ejemplo n.º 13
0
        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());
        }
Ejemplo n.º 14
0
        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
        }
Ejemplo n.º 15
0
            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();
            }