Skip to content

Commit 465baaf

Browse files
committed
Test against APIs.guru schemas
1 parent 973696f commit 465baaf

File tree

1 file changed

+78
-0
lines changed

1 file changed

+78
-0
lines changed
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
using Newtonsoft.Json;
2+
using Newtonsoft.Json.Linq;
3+
using System;
4+
using System.Collections.Generic;
5+
using System.Net.Http;
6+
using System.Threading.Tasks;
7+
using Xunit;
8+
9+
namespace Microsoft.OpenApi.Readers.Tests.ApisGuruTests
10+
{
11+
[Collection("DefaultSettings")]
12+
public class ApisGuruTests
13+
{
14+
public static IEnumerable<object[]> GetSchemas()
15+
{
16+
using (var client = new HttpClient())
17+
{
18+
var listJsonStr = client
19+
.GetStringAsync("https://api.apis.guru/v2/list.json")
20+
.GetAwaiter().GetResult();
21+
22+
var json = JObject.Parse(listJsonStr);
23+
foreach (var item in json.Properties())
24+
{
25+
var versions = GetProp(item.Value, "versions") as JObject;
26+
if (versions == null)
27+
continue;
28+
foreach (var prop in versions.Properties())
29+
{
30+
var urlToJson = GetProp(prop.Value, "swaggerUrl")?.ToObject<string>();
31+
if (urlToJson != null)
32+
yield return new object[] { urlToJson };
33+
34+
var utlToYaml = GetProp(prop.Value, "swaggerYamlUrl")?.ToObject<string>();
35+
if (utlToYaml != null)
36+
yield return new object[] { utlToYaml };
37+
}
38+
}
39+
}
40+
41+
JToken GetProp(JToken obj, string prop)
42+
{
43+
if (!(obj is JObject jObj))
44+
return null;
45+
if (!jObj.TryGetValue(prop, out var jToken))
46+
return null;
47+
return jToken;
48+
}
49+
}
50+
51+
private static JToken GetProp(JToken obj, string prop)
52+
{
53+
if (!(obj is JObject jObj))
54+
return null;
55+
if (!jObj.TryGetValue(prop, out var jToken))
56+
return null;
57+
return jToken;
58+
}
59+
60+
61+
62+
[Theory(DisplayName = "APIs.guru")]
63+
[MemberData(nameof(GetSchemas))]
64+
public async Task EnsureThatICouldParse(string url)
65+
{
66+
using (var httpClient = new HttpClient())
67+
{
68+
var stream = await httpClient.GetStreamAsync(url);
69+
var openApiDocument = new OpenApiStreamReader().Read(stream, out var diagnostic);
70+
71+
Assert.Equal(OpenApiSpecVersion.OpenApi2_0, diagnostic.SpecificationVersion);
72+
Assert.Equal(0, diagnostic.Errors.Count);
73+
74+
Assert.NotNull(openApiDocument);
75+
}
76+
}
77+
}
78+
}

0 commit comments

Comments
 (0)