Skip to content

Commit 4379105

Browse files
authored
Add integration tests for symbol downloads (loic-sharma#665)
1 parent 6d391b3 commit 4379105

11 files changed

+202
-117
lines changed

tests/BaGet.Tests/ApiIntegrationTests.cs

+77-33
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,16 @@ public class ApiIntegrationTests : IClassFixture<BaGetWebApplicationFactory>
1414
private readonly WebApplicationFactory<Startup> _factory;
1515
private readonly HttpClient _client;
1616

17+
private readonly Stream _packageStream;
18+
private readonly Stream _symbolPackageStream;
19+
1720
public ApiIntegrationTests(BaGetWebApplicationFactory factory, ITestOutputHelper output)
1821
{
1922
_factory = factory.WithOutput(output);
2023
_client = _factory.CreateClient();
24+
25+
_packageStream = TestResources.GetResourceStream(TestResources.Package);
26+
_symbolPackageStream = TestResources.GetResourceStream(TestResources.SymbolPackage);
2127
}
2228

2329
[Fact]
@@ -33,7 +39,7 @@ public async Task IndexReturnsOk()
3339
[Fact]
3440
public async Task SearchReturnsOk()
3541
{
36-
await _factory.AddPackageAsync(PackageData.Default);
42+
await _factory.AddPackageAsync(_packageStream);
3743

3844
using var response = await _client.GetAsync("v3/search");
3945
var content = await response.Content.ReadAsStreamAsync();
@@ -48,23 +54,23 @@ public async Task SearchReturnsOk()
4854
""totalHits"": 1,
4955
""data"": [
5056
{
51-
""id"": ""DefaultPackage"",
57+
""id"": ""TestData"",
5258
""version"": ""1.2.3"",
53-
""description"": ""Default package description"",
59+
""description"": ""Test description"",
5460
""authors"": [
55-
""Default package author""
61+
""Test author""
5662
],
5763
""iconUrl"": """",
5864
""licenseUrl"": """",
5965
""projectUrl"": """",
60-
""registration"": ""http://localhost/v3/registration/defaultpackage/index.json"",
66+
""registration"": ""http://localhost/v3/registration/testdata/index.json"",
6167
""summary"": """",
6268
""tags"": [],
6369
""title"": """",
6470
""totalDownloads"": 0,
6571
""versions"": [
6672
{
67-
""@id"": ""http://localhost/v3/registration/defaultpackage/1.2.3.json"",
73+
""@id"": ""http://localhost/v3/registration/testdata/1.2.3.json"",
6874
""version"": ""1.2.3"",
6975
""downloads"": 0
7076
}
@@ -95,7 +101,7 @@ public async Task SearchReturnsEmpty()
95101
[Fact]
96102
public async Task AutocompleteReturnsOk()
97103
{
98-
await _factory.AddPackageAsync(PackageData.Default);
104+
await _factory.AddPackageAsync(_packageStream);
99105

100106
using var response = await _client.GetAsync("v3/autocomplete");
101107
var content = await response.Content.ReadAsStreamAsync();
@@ -108,7 +114,7 @@ public async Task AutocompleteReturnsOk()
108114
},
109115
""totalHits"": 1,
110116
""data"": [
111-
""DefaultPackage""
117+
""TestData""
112118
]
113119
}", json);
114120
}
@@ -133,9 +139,9 @@ public async Task AutocompleteReturnsEmpty()
133139
[Fact]
134140
public async Task AutocompleteVersionsReturnsOk()
135141
{
136-
await _factory.AddPackageAsync(PackageData.Default);
142+
await _factory.AddPackageAsync(_packageStream);
137143

138-
using var response = await _client.GetAsync("v3/autocomplete?id=DefaultPackage");
144+
using var response = await _client.GetAsync("v3/autocomplete?id=TestData");
139145
var content = await response.Content.ReadAsStreamAsync();
140146
var json = PrettifyJson(content);
141147

@@ -171,9 +177,9 @@ public async Task AutocompleteVersionsReturnsEmpty()
171177
[Fact]
172178
public async Task VersionListReturnsOk()
173179
{
174-
await _factory.AddPackageAsync(PackageData.Default);
180+
await _factory.AddPackageAsync(_packageStream);
175181

176-
var response = await _client.GetAsync("v3/package/DefaultPackage/index.json");
182+
var response = await _client.GetAsync("v3/package/TestData/index.json");
177183
var content = await response.Content.ReadAsStringAsync();
178184

179185
Assert.Equal(HttpStatusCode.OK, response.StatusCode);
@@ -191,9 +197,9 @@ public async Task VersionListReturnsNotFound()
191197
[Fact]
192198
public async Task PackageDownloadReturnsOk()
193199
{
194-
await _factory.AddPackageAsync(PackageData.Default);
200+
await _factory.AddPackageAsync(_packageStream);
195201

196-
using var response = await _client.GetAsync("v3/package/DefaultPackage/1.2.3/DefaultPackage.1.2.3.nupkg");
202+
using var response = await _client.GetAsync("v3/package/TestData/1.2.3/TestData.1.2.3.nupkg");
197203

198204
Assert.Equal(HttpStatusCode.OK, response.StatusCode);
199205
}
@@ -210,10 +216,10 @@ public async Task PackageDownloadReturnsNotFound()
210216
[Fact]
211217
public async Task NuspecDownloadReturnsOk()
212218
{
213-
await _factory.AddPackageAsync(PackageData.Default);
219+
await _factory.AddPackageAsync(_packageStream);
214220

215221
using var response = await _client.GetAsync(
216-
"v3/package/DefaultPackage/1.2.3/DefaultPackage.1.2.3.nuspec");
222+
"v3/package/TestData/1.2.3/TestData.1.2.3.nuspec");
217223

218224
Assert.Equal(HttpStatusCode.OK, response.StatusCode);
219225
}
@@ -230,15 +236,15 @@ public async Task NuspecDownloadReturnsNotFound()
230236
[Fact]
231237
public async Task PackageMetadataReturnsOk()
232238
{
233-
await _factory.AddPackageAsync(PackageData.Default);
239+
await _factory.AddPackageAsync(_packageStream);
234240

235-
using var response = await _client.GetAsync("v3/registration/DefaultPackage/index.json");
241+
using var response = await _client.GetAsync("v3/registration/TestData/index.json");
236242
var content = await response.Content.ReadAsStreamAsync();
237243
var json = PrettifyJson(content);
238244

239245
Assert.Equal(HttpStatusCode.OK, response.StatusCode);
240246
Assert.Equal(@"{
241-
""@id"": ""http://localhost/v3/registration/defaultpackage/index.json"",
247+
""@id"": ""http://localhost/v3/registration/testdata/index.json"",
242248
""@type"": [
243249
""catalog:CatalogRoot"",
244250
""PackageRegistration"",
@@ -247,14 +253,14 @@ public async Task PackageMetadataReturnsOk()
247253
""count"": 1,
248254
""items"": [
249255
{
250-
""@id"": ""http://localhost/v3/registration/defaultpackage/index.json"",
256+
""@id"": ""http://localhost/v3/registration/testdata/index.json"",
251257
""count"": 1,
252258
""lower"": ""1.2.3"",
253259
""upper"": ""1.2.3"",
254260
""items"": [
255261
{
256-
""@id"": ""http://localhost/v3/registration/defaultpackage/1.2.3.json"",
257-
""packageContent"": ""http://localhost/v3/package/defaultpackage/1.2.3/defaultpackage.1.2.3.nupkg"",
262+
""@id"": ""http://localhost/v3/registration/testdata/1.2.3.json"",
263+
""packageContent"": ""http://localhost/v3/package/testdata/1.2.3/testdata.1.2.3.nupkg"",
258264
""catalogEntry"": {
259265
""downloads"": 0,
260266
""hasReadme"": false,
@@ -263,17 +269,22 @@ public async Task PackageMetadataReturnsOk()
263269
],
264270
""releaseNotes"": """",
265271
""repositoryUrl"": """",
266-
""id"": ""DefaultPackage"",
272+
""id"": ""TestData"",
267273
""version"": ""1.2.3"",
268-
""authors"": ""Default package author"",
269-
""dependencyGroups"": [],
270-
""description"": ""Default package description"",
274+
""authors"": ""Test author"",
275+
""dependencyGroups"": [
276+
{
277+
""targetFramework"": ""net50"",
278+
""dependencies"": []
279+
}
280+
],
281+
""description"": ""Test description"",
271282
""iconUrl"": """",
272283
""language"": """",
273284
""licenseUrl"": """",
274285
""listed"": true,
275286
""minClientVersion"": """",
276-
""packageContent"": ""http://localhost/v3/package/defaultpackage/1.2.3/defaultpackage.1.2.3.nupkg"",
287+
""packageContent"": ""http://localhost/v3/package/testdata/1.2.3/testdata.1.2.3.nupkg"",
277288
""projectUrl"": """",
278289
""published"": ""2020-01-01T00:00:00Z"",
279290
""requireLicenseAcceptance"": false,
@@ -300,23 +311,23 @@ public async Task PackageMetadataReturnsNotFound()
300311
[Fact]
301312
public async Task PackageMetadataLeafReturnsOk()
302313
{
303-
await _factory.AddPackageAsync(PackageData.Default);
314+
await _factory.AddPackageAsync(_packageStream);
304315

305-
using var response = await _client.GetAsync("v3/registration/DefaultPackage/1.2.3.json");
316+
using var response = await _client.GetAsync("v3/registration/TestData/1.2.3.json");
306317
var content = await response.Content.ReadAsStreamAsync();
307318
var json = PrettifyJson(content);
308319

309320
Assert.Equal(HttpStatusCode.OK, response.StatusCode);
310321
Assert.Equal(@"{
311-
""@id"": ""http://localhost/v3/registration/defaultpackage/1.2.3.json"",
322+
""@id"": ""http://localhost/v3/registration/testdata/1.2.3.json"",
312323
""@type"": [
313324
""Package"",
314325
""http://schema.nuget.org/catalog#Permalink""
315326
],
316327
""listed"": true,
317-
""packageContent"": ""http://localhost/v3/package/defaultpackage/1.2.3/defaultpackage.1.2.3.nupkg"",
328+
""packageContent"": ""http://localhost/v3/package/testdata/1.2.3/testdata.1.2.3.nupkg"",
318329
""published"": ""2020-01-01T00:00:00Z"",
319-
""registration"": ""http://localhost/v3/registration/defaultpackage/index.json""
330+
""registration"": ""http://localhost/v3/registration/testdata/index.json""
320331
}", json);
321332
}
322333

@@ -331,7 +342,7 @@ public async Task PackageMetadataLeafReturnsNotFound()
331342
[Fact]
332343
public async Task PackageDependentsReturnsOk()
333344
{
334-
using var response = await _client.GetAsync("v3/dependents?packageId=DefaultPackage");
345+
using var response = await _client.GetAsync("v3/dependents?packageId=TestData");
335346

336347
var content = await response.Content.ReadAsStreamAsync();
337348
var json = PrettifyJson(content);
@@ -351,6 +362,39 @@ public async Task PackageDependentsReturnsBadRequest()
351362
Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);
352363
}
353364

365+
[Fact]
366+
public async Task SymbolDownloadReturnsOk()
367+
{
368+
await _factory.AddPackageAsync(_packageStream);
369+
await _factory.AddSymbolPackageAsync(_symbolPackageStream);
370+
371+
using var response = await _client.GetAsync(
372+
"api/download/symbols/testdata.pdb/16F71ED8DD574AA2AD4A22D29E9C981Bffffffff/testdata.pdb");
373+
374+
Assert.Equal(HttpStatusCode.OK, response.StatusCode);
375+
}
376+
377+
[Fact]
378+
public async Task PrefixedSymbolDownloadReturnsOk()
379+
{
380+
await _factory.AddPackageAsync(_packageStream);
381+
await _factory.AddSymbolPackageAsync(_symbolPackageStream);
382+
383+
using var response = await _client.GetAsync(
384+
"api/download/symbols/testprefix/testdata.pdb/16F71ED8DD574AA2AD4A22D29E9C981Bffffffff/testdata.pdb");
385+
386+
Assert.Equal(HttpStatusCode.OK, response.StatusCode);
387+
}
388+
389+
[Fact]
390+
public async Task SymbolDownloadReturnsNotFound()
391+
{
392+
using var response = await _client.GetAsync(
393+
"api/download/symbols/doesnotexist.pdb/16F71ED8DD574AA2AD4A22D29E9C981Bffffffff/doesnotexist.pdb");
394+
395+
Assert.Equal(HttpStatusCode.NotFound, response.StatusCode);
396+
}
397+
354398
private string PrettifyJson(Stream jsonStream)
355399
{
356400
using var writer = new StringWriter();

tests/BaGet.Tests/BaGet.Tests.csproj

+11-4
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<Project Sdk="Microsoft.NET.Sdk">
1+
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
44
<TargetFramework>netcoreapp3.1</TargetFramework>
@@ -20,17 +20,24 @@
2020
</ItemGroup>
2121

2222
<ItemGroup>
23-
<Compile Update="TestData.Designer.cs">
24-
<DependentUpon>TestData.resx</DependentUpon>
23+
<Compile Update="TestData\TestData.Designer.cs">
2524
<DesignTime>True</DesignTime>
2625
<AutoGen>True</AutoGen>
26+
<DependentUpon>TestData.resx</DependentUpon>
2727
</Compile>
2828
</ItemGroup>
2929

3030
<ItemGroup>
31-
<EmbeddedResource Update="TestData.resx">
31+
<EmbeddedResource Update="TestData\TestData.resx">
3232
<LastGenOutput>TestData.Designer.cs</LastGenOutput>
3333
<Generator>ResXFileCodeGenerator</Generator>
34+
<CustomToolNamespace>BaGet.Tests</CustomToolNamespace>
35+
</EmbeddedResource>
36+
<EmbeddedResource Include="TestData\TestData.1.2.3.nupkg">
37+
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
38+
</EmbeddedResource>
39+
<EmbeddedResource Include="TestData\TestData.1.2.3.snupkg">
40+
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
3441
</EmbeddedResource>
3542
</ItemGroup>
3643

0 commit comments

Comments
 (0)