/// <summary>Generates the Swagger definition for all controllers in the assembly.</summary>
        /// <param name="controllerClassNames">The controller class names.</param>
        /// <exception cref="InvalidOperationException">No assembly paths have been provided.</exception>
        /// <returns>The Swagger definition.</returns>
        public override SwaggerDocument GenerateForControllers(IEnumerable <string> controllerClassNames)
        {
            var loader = new WebApiAssemblyLoader();
            var data   = loader.GenerateForControllers(controllerClassNames, JsonConvert.SerializeObject(Settings));

            return(SwaggerDocument.FromJson(data));
        }
        /// <summary>Generates the Swagger definition for the given classes without operations (used for class generation).</summary>
        /// <param name="classNames">The class names.</param>
        /// <returns>The Swagger definition.</returns>
        public override SwaggerDocument Generate(string[] classNames)
        {
            var loader = new NetAssemblyLoader();
            var data   = loader.FromAssemblyType(classNames, JsonConvert.SerializeObject(Settings));

            return(SwaggerDocument.FromJson(data));
        }
Exemple #3
0
 /// <summary></summary>
 public async Task <SwaggerDocument> RunAsync()
 {
     if (!string.IsNullOrEmpty(Swagger))
     {
         return(await Task.Run(() => SwaggerDocument.FromJson(Swagger)));
     }
     else
     {
         return(await Task.Run(() => SwaggerDocument.FromUrl(Url)));
     }
 }
        /// <summary>Generates the Swagger definition for the given classes without operations (used for class generation).</summary>
        /// <param name="classNames">The class names.</param>
        /// <returns>The Swagger definition.</returns>
        public override SwaggerDocument Generate(string[] classNames)
        {
#if FullNet
            using (var isolated = new AppDomainIsolation <NetAssemblyLoader>(Path.GetDirectoryName(Path.GetFullPath(Settings.AssemblyPath)), Settings.AssemblyConfig))
                return(SwaggerDocument.FromJson(isolated.Object.FromAssemblyType(classNames, JsonConvert.SerializeObject(Settings))));
#else
            var loader = new NetAssemblyLoader();
            var data   = loader.FromAssemblyType(classNames, JsonConvert.SerializeObject(Settings));
            return(SwaggerDocument.FromJson(data));
#endif
        }
Exemple #5
0
        public void ExtensionDataTest()
        {
            //// Arrange
            var json = _jsonVendorExtensionData;

            //// Act
            var document = SwaggerDocument.FromJson(json);

            //// Assert
            Assert.IsNotNull(document.Operations.First().Operation.Responses["202"].ExtensionData);
        }
Exemple #6
0
        public void WhenGeneratingOperationIdsThenMissingIdsAreGenerated()
        {
            //// Arrange
            var json = _sampleServiceCode;

            //// Act
            var document = SwaggerDocument.FromJson(json);

            document.GenerateOperationIds();

            //// Assert
            Assert.AreEqual("pets", document.Operations.First().Operation.OperationId);
        }
Exemple #7
0
        /// <summary>Generates the Swagger definition for all controllers in the assembly.</summary>
        /// <param name="controllerClassNames">The controller class names.</param>
        /// <exception cref="InvalidOperationException">No assembly paths have been provided.</exception>
        /// <returns>The Swagger definition.</returns>
        public override SwaggerDocument GenerateForControllers(IEnumerable <string> controllerClassNames)
        {
#if FullNet
            using (var isolated = new AppDomainIsolation <WebApiAssemblyLoader>(Path.GetDirectoryName(Path.GetFullPath(Settings.AssemblyPaths.First())), Settings.AssemblyConfig))
            {
                var document = isolated.Object.GenerateForControllers(controllerClassNames, JsonConvert.SerializeObject(Settings));
                return(SwaggerDocument.FromJson(document));
            }
#else
            var loader = new WebApiAssemblyLoader();
            var data   = loader.GenerateForControllers(controllerClassNames, JsonConvert.SerializeObject(Settings));
            return(SwaggerDocument.FromJson(data));
#endif
        }
Exemple #8
0
        public void WhenConvertingAndBackThenItShouldBeTheSame()
        {
            //// Arrange
            var json = _sampleServiceCode;

            //// Act
            var document  = SwaggerDocument.FromJson(json);
            var json2     = document.ToJson();
            var reference = document.Paths["/pets"][SwaggerOperationMethod.Get].Responses["200"].Schema.Item.SchemaReference;

            //// Assert
            Assert.IsNotNull(json2);
            Assert.IsNotNull(reference);
            Assert.AreEqual(3, reference.Properties.Count);
        }
        public void When_webapi2swagger_is_called_then_file_is_created()
        {
            //// Arrange
            var command = "webapi2swagger " +
                          "/assembly:" + Path.GetFullPath("../../../NSwag.Demo.Web/bin/NSwag.Demo.Web.dll") + " " +
                          "/controller:NSwag.Demo.Web.Controllers.PersonsController " +
                          "/defaultUrlTemplate:api/{controller}/{action}/{id} " +
                          "/output:" + OutputFile;

            //// Act
            var output   = RunCommandLine(command);
            var document = SwaggerDocument.FromJson(output);

            //// Assert
            Assert.IsNotNull(document);
        }
 public Task GenerateClientAsync(string swaggerData, string documentPath)
 {
     return(RunTaskAsync(async() =>
     {
         var code = string.Empty;
         await Task.Run(async() =>
         {
             if (!string.IsNullOrEmpty(swaggerData))
             {
                 Command.Input = SwaggerDocument.FromJson(swaggerData, documentPath);
                 code = await Command.RunAsync();
                 Command.Input = null;
             }
         });
         ClientCode = code ?? string.Empty;
     }));
 }
Exemple #11
0
        public Task GenerateClientAsync(string swaggerData, string documentPath)
        {
            return(RunTaskAsync(async() =>
            {
                Dictionary <string, string> result = null;
                await Task.Run(async() =>
                {
                    if (!string.IsNullOrEmpty(swaggerData))
                    {
                        Command.Input = SwaggerDocument.FromJson(swaggerData, documentPath);
                        result = await Command.RunAsync();
                        Command.Input = null;
                    }
                });

                ClientCode = result != null ? string.Join("\n\n", result.Values) : string.Empty;
            }));
        }
Exemple #12
0
        private SwaggerDocument CreateDocument(WebApiToSwaggerGeneratorSettings settings)
        {
            var document = !string.IsNullOrEmpty(settings.DocumentTemplate) ? SwaggerDocument.FromJson(settings.DocumentTemplate) : new SwaggerDocument();

            document.Consumes = new List <string> {
                "application/json"
            };
            document.Produces = new List <string> {
                "application/json"
            };
            document.Info = new SwaggerInfo
            {
                Title       = settings.Title,
                Description = settings.Description,
                Version     = settings.Version
            };

            return(document);
        }
Exemple #13
0
        public void When_parameter_is_array_then_CSharp_is_correct()
        {
            //// Arrange
            var swagger  = @"{
  ""swagger"" : ""2.0"",
  ""info"" : {
    ""version"" : ""1.0.2"",
    ""title"" : ""Test API""
  },
  ""host"" : ""localhost:8080"",
  ""basePath"" : ""/"",
  ""tags"" : [ {
    ""name"" : ""api""
  } ],
  ""schemes"" : [ ""http"" ],
  ""paths"" : {
     ""/removeElement"" : {
      ""delete"" : {
        ""tags"" : [ ""api"" ],
        ""summary"" : ""Removes elements"",
        ""description"" : ""Removes elements"",
        ""operationId"" : ""removeElement"",
        ""consumes"" : [ ""application/json"" ],
        ""produces"" : [ ""application/json"" ],
        ""parameters"" : [ {
          ""name"" : ""X-User"",
          ""in"" : ""header"",
          ""description"" : ""User identifier"",
          ""required"" : true,
          ""type"" : ""string""
        }, {
          ""name"" : ""elementId"",
          ""in"" : ""query"",
          ""description"" : ""The ids of existing elements that should be removed"",
          ""required"" : false,
          ""type"" : ""array"",
          ""items"" : {
            ""type"" : ""integer"",
            ""format"" : ""int64""
          },
        } ],
        ""responses"" : {
          ""default"" : {
            ""description"" : ""successful operation""
          }
        }
      }
    }
  },
    ""definitions"" : { }
}
";
            var document = SwaggerDocument.FromJson(swagger);

            //// Act
            var settings = new SwaggerToCSharpClientGeneratorSettings {
                ClassName = "MyClass"
            };
            var generator = new SwaggerToCSharpClientGenerator(document, settings);
            var code      = generator.GenerateFile();

            //// Assert
            Assert.IsTrue(
                code.Contains(
                    @"foreach(var item_ in elementId) { url_ += string.Format(""elementId={0}&"", Uri.EscapeDataString(item_.ToString())); }"));
        }
Exemple #14
0
        public async Task GenerateClientAsync(string swaggerData, string documentPath)
        {
            var code = !string.IsNullOrEmpty(swaggerData) ? await RunTaskAsync(() => SwaggerDocument.FromJson(swaggerData, documentPath)?.ToJson()) : string.Empty;

            SwaggerCode = code ?? string.Empty;
        }