示例#1
0
        public void ReadMetadata_WithNoApis_ReturnsApiDefinitionWithNoDirectories()
        {
            string  json    = @"{
  ""swaggerVersion"": ""1.0.0"",
  ""info"": {
    ""version"": ""v1""
  }
}";
            JObject jobject = JObject.Parse(json);
            SwaggerV1ApiDefinitionReader swaggerV1ApiDefinitionReader = new SwaggerV1ApiDefinitionReader();

            ApiDefinition apiDefinition = swaggerV1ApiDefinitionReader.ReadDefinition(jobject, null);

            Assert.NotNull(apiDefinition?.DirectoryStructure);
            Assert.Empty(apiDefinition.DirectoryStructure.DirectoryNames);
        }
示例#2
0
        public void ReadMetadata_WithNoOperations_ReturnsApiDefinitionWithStructure()
        {
            string  json    = @"{
  ""swaggerVersion"": ""1.2"",
  ""apis"": [
    {
      ""path"": ""/user/logout"",
    }
  ]
}";
            JObject jobject = JObject.Parse(json);
            SwaggerV1ApiDefinitionReader swaggerV1ApiDefinitionReader = new SwaggerV1ApiDefinitionReader();

            ApiDefinition apiDefinition = swaggerV1ApiDefinitionReader.ReadDefinition(jobject, null);

            Assert.NotNull(apiDefinition?.DirectoryStructure);
        }
示例#3
0
        public void ReadMetadata_WithNoOperations_ReturnsApiDefinitionWithNullRequestInfo()
        {
            string  json    = @"{
  ""swaggerVersion"": ""1.2"",
  ""apis"": [
    {
      ""path"": ""/user/logout"",
    }
  ]
}";
            JObject jobject = JObject.Parse(json);
            SwaggerV1ApiDefinitionReader swaggerV1ApiDefinitionReader = new SwaggerV1ApiDefinitionReader();

            ApiDefinition apiDefinition = swaggerV1ApiDefinitionReader.ReadDefinition(jobject, null);

            IDirectoryStructure subDirectory = apiDefinition.DirectoryStructure.TraverseTo("/user/logout");

            Assert.Null(subDirectory.RequestInfo);
        }
示例#4
0
        public void CanHandle_WithNoSwaggerVersionKeyInDocument_ReturnsFalse()
        {
            string  json    = @"{
  ""apis"": [
    {
      ""path"": ""/user/logout"",
      ""operations"": [
        {
        }
      ]
    }
  ]
}";
            JObject jobject = JObject.Parse(json);
            SwaggerV1ApiDefinitionReader swaggerV1ApiDefinitionReader = new SwaggerV1ApiDefinitionReader();

            bool?result = swaggerV1ApiDefinitionReader.CanHandle(jobject);

            Assert.False(result);
        }
示例#5
0
        public void ReadDefinition_WithNoBasePath_BaseAddressesIsEmpty()
        {
            string  json    = @"{
  ""swaggerVersion"": ""1.2"",
  ""apis"": [
    {
      ""path"": ""/user/logout"",
      ""operations"": [
        {
        }
      ]
    }
  ]
}";
            JObject jobject = JObject.Parse(json);
            SwaggerV1ApiDefinitionReader swaggerV1ApiDefinitionReader = new SwaggerV1ApiDefinitionReader();

            ApiDefinition apiDefinition = swaggerV1ApiDefinitionReader.ReadDefinition(jobject, null);

            Assert.NotNull(apiDefinition?.BaseAddresses);
            Assert.Empty(apiDefinition.BaseAddresses);
        }
示例#6
0
        public void ReadDefinition_WithBasePath_BaseAddressHasOneEntry()
        {
            string  json    = @"{
  ""swaggerVersion"": ""1.2"",
  ""basePath"": ""https://localhost"",
  ""apis"": [
    {
      ""path"": ""/user/logout"",
      ""operations"": [
        {
        }
      ]
    }
  ]
}";
            JObject jobject = JObject.Parse(json);
            SwaggerV1ApiDefinitionReader swaggerV1ApiDefinitionReader = new SwaggerV1ApiDefinitionReader();

            ApiDefinition apiDefinition = swaggerV1ApiDefinitionReader.ReadDefinition(jobject, new Uri("https://localhost/swagger.json"));

            Assert.NotNull(apiDefinition?.BaseAddresses);
            Assert.Single(apiDefinition.BaseAddresses);
            Assert.Equal("https://localhost/", apiDefinition.BaseAddresses[0].Url.ToString());
        }
示例#7
0
        public void ReadMetadata_WithMultipleObjectsInApisArray_ReturnsApiDefinition()
        {
            string  json    = @"{
  ""swaggerVersion"": ""1.2"",
  ""apis"": [
    {
      ""path"": ""/user/logout"",
      ""operations"": [
        {
          ""method"": ""GET"",
          ""parameters"": []
        }
      ]
    },
    {
      ""path"": ""/user/login"",
      ""operations"": [
        {
          ""method"": ""GET"",
          ""parameters"": [
            {
              ""name"": ""username"",
              ""description"": ""The user name for login"",
              ""required"": true,
              ""type"": ""string"",
              ""paramType"": ""query""
            }
          ]
        }
      ]
    }
  ],
  ""models"": {
    ""User"": {
      ""id"": ""User"",
      ""properties"": {
        ""id"": {
          ""type"": ""integer"",
          ""format"": ""int64""
        },
        ""firstName"": {
          ""type"": ""string""
        }
      }
    }
  }
}";
            JObject jobject = JObject.Parse(json);
            SwaggerV1ApiDefinitionReader swaggerV1ApiDefinitionReader = new SwaggerV1ApiDefinitionReader();

            ApiDefinition apiDefinition = swaggerV1ApiDefinitionReader.ReadDefinition(jobject, null);

            Assert.NotNull(apiDefinition?.DirectoryStructure);
            Assert.Single(apiDefinition.DirectoryStructure.DirectoryNames);
            Assert.Equal("user", apiDefinition.DirectoryStructure.DirectoryNames.Single());

            IDirectoryStructure logoutSubDirectory = apiDefinition.DirectoryStructure.TraverseTo("/user/logout");

            Assert.Single(logoutSubDirectory.RequestInfo.Methods);
            Assert.Contains("GET", logoutSubDirectory.RequestInfo.Methods, StringComparer.Ordinal);

            IDirectoryStructure loginSubDirectory = apiDefinition.DirectoryStructure.TraverseTo("/user/logout");

            Assert.Single(loginSubDirectory.RequestInfo.Methods);
            Assert.Contains("GET", loginSubDirectory.RequestInfo.Methods, StringComparer.Ordinal);
        }
示例#8
0
        public void ReadMetadata_WithSingleObjectInApisArray_ReturnsApiDefinition()
        {
            string  json    = @"{
  ""swaggerVersion"": ""1.2"",
  ""apis"": [
    {
      ""path"": ""/user"",
      ""operations"": [
        {
          ""method"": ""PUT"",
          ""parameters"": [
            {
              ""name"": ""username"",
              ""description"": ""name that need to be deleted"",
              ""required"": true,
              ""type"": ""string"",
              ""paramType"": ""path""
            }
          ]
        },
        {
          ""method"": ""DELETE"",
          ""summary"": ""Delete user"",
          ""notes"": ""This can only be done by the logged in user."",
          ""type"": ""void"",
          ""nickname"": ""deleteUser"",
          ""parameters"": [
            {
              ""name"": ""username"",
              ""description"": ""The name that needs to be deleted"",
              ""required"": true,
              ""type"": ""string"",
              ""paramType"": ""path""
            }
          ]
        }
      ]
    }
  ],
  ""models"": {
    ""User"": {
      ""id"": ""User"",
      ""properties"": {
        ""id"": {
          ""type"": ""integer"",
          ""format"": ""int64""
        },
        ""firstName"": {
          ""type"": ""string""
        }
      }
    }
  }
}";
            JObject jobject = JObject.Parse(json);
            SwaggerV1ApiDefinitionReader swaggerV1ApiDefinitionReader = new SwaggerV1ApiDefinitionReader();

            ApiDefinition apiDefinition = swaggerV1ApiDefinitionReader.ReadDefinition(jobject, null);

            Assert.NotNull(apiDefinition?.DirectoryStructure);
            Assert.Single(apiDefinition.DirectoryStructure.DirectoryNames);
            Assert.Equal("user", apiDefinition.DirectoryStructure.DirectoryNames.Single());

            IDirectoryStructure subDirectory = apiDefinition.DirectoryStructure.TraverseTo("/user");

            Assert.Equal(2, subDirectory.RequestInfo.Methods.Count);
            Assert.Contains("PUT", subDirectory.RequestInfo.Methods, StringComparer.Ordinal);
            Assert.Contains("DELETE", subDirectory.RequestInfo.Methods, StringComparer.Ordinal);
        }