Skip to content

Commit 03371c4

Browse files
authored
Merge branch 'main' into fix-21448
2 parents a501c3c + 11d3677 commit 03371c4

File tree

2 files changed

+72
-37
lines changed

2 files changed

+72
-37
lines changed

Diff for: routers/api/packages/nuget/api_v3.go

+6-13
Original file line numberDiff line numberDiff line change
@@ -207,20 +207,13 @@ type SearchResultVersion struct {
207207
}
208208

209209
func createSearchResultResponse(l *linkBuilder, totalHits int64, pds []*packages_model.PackageDescriptor) *SearchResultResponse {
210-
data := make([]*SearchResult, 0, len(pds))
210+
grouped := make(map[string][]*packages_model.PackageDescriptor)
211+
for _, pd := range pds {
212+
grouped[pd.Package.Name] = append(grouped[pd.Package.Name], pd)
213+
}
211214

212-
if len(pds) > 0 {
213-
groupID := pds[0].Package.Name
214-
group := make([]*packages_model.PackageDescriptor, 0, 10)
215-
216-
for i := 0; i < len(pds); i++ {
217-
if groupID != pds[i].Package.Name {
218-
data = append(data, createSearchResult(l, group))
219-
groupID = pds[i].Package.Name
220-
group = group[:0]
221-
}
222-
group = append(group, pds[i])
223-
}
215+
data := make([]*SearchResult, 0, len(pds))
216+
for _, group := range grouped {
224217
data = append(data, createSearchResult(l, group))
225218
}
226219

Diff for: tests/integration/api_packages_nuget_test.go

+66-24
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111
"encoding/xml"
1212
"fmt"
1313
"io"
14+
"io/ioutil"
1415
"net/http"
1516
"net/http/httptest"
1617
"testing"
@@ -83,25 +84,29 @@ func TestPackageNuGet(t *testing.T) {
8384
symbolFilename := "test.pdb"
8485
symbolID := "d910bb6948bd4c6cb40155bcf52c3c94"
8586

86-
var buf bytes.Buffer
87-
archive := zip.NewWriter(&buf)
88-
w, _ := archive.Create("package.nuspec")
89-
w.Write([]byte(`<?xml version="1.0" encoding="utf-8"?>
90-
<package xmlns="http://schemas.microsoft.com/packaging/2013/05/nuspec.xsd">
91-
<metadata>
92-
<id>` + packageName + `</id>
93-
<version>` + packageVersion + `</version>
94-
<authors>` + packageAuthors + `</authors>
95-
<description>` + packageDescription + `</description>
96-
<dependencies>
97-
<group targetFramework=".NETStandard2.0">
98-
<dependency id="Microsoft.CSharp" version="4.5.0" />
99-
</group>
100-
</dependencies>
101-
</metadata>
102-
</package>`))
103-
archive.Close()
104-
content := buf.Bytes()
87+
createPackage := func(id, version string) io.Reader {
88+
var buf bytes.Buffer
89+
archive := zip.NewWriter(&buf)
90+
w, _ := archive.Create("package.nuspec")
91+
w.Write([]byte(`<?xml version="1.0" encoding="utf-8"?>
92+
<package xmlns="http://schemas.microsoft.com/packaging/2013/05/nuspec.xsd">
93+
<metadata>
94+
<id>` + id + `</id>
95+
<version>` + version + `</version>
96+
<authors>` + packageAuthors + `</authors>
97+
<description>` + packageDescription + `</description>
98+
<dependencies>
99+
<group targetFramework=".NETStandard2.0">
100+
<dependency id="Microsoft.CSharp" version="4.5.0" />
101+
</group>
102+
</dependencies>
103+
</metadata>
104+
</package>`))
105+
archive.Close()
106+
return &buf
107+
}
108+
109+
content, _ := ioutil.ReadAll(createPackage(packageName, packageVersion))
105110

106111
url := fmt.Sprintf("/api/packages/%s/nuget", user.Name)
107112

@@ -242,7 +247,7 @@ func TestPackageNuGet(t *testing.T) {
242247
t.Run("SymbolPackage", func(t *testing.T) {
243248
defer tests.PrintCurrentTest(t)()
244249

245-
createPackage := func(id, packageType string) io.Reader {
250+
createSymbolPackage := func(id, packageType string) io.Reader {
246251
var buf bytes.Buffer
247252
archive := zip.NewWriter(&buf)
248253

@@ -268,15 +273,15 @@ AAAjQmxvYgAAAGm7ENm9SGxMtAFVvPUsPJTF6PbtAAAAAFcVogEJAAAAAQAAAA==`)
268273
return &buf
269274
}
270275

271-
req := NewRequestWithBody(t, "PUT", fmt.Sprintf("%s/symbolpackage", url), createPackage("unknown-package", "SymbolsPackage"))
276+
req := NewRequestWithBody(t, "PUT", fmt.Sprintf("%s/symbolpackage", url), createSymbolPackage("unknown-package", "SymbolsPackage"))
272277
req = AddBasicAuthHeader(req, user.Name)
273278
MakeRequest(t, req, http.StatusNotFound)
274279

275-
req = NewRequestWithBody(t, "PUT", fmt.Sprintf("%s/symbolpackage", url), createPackage(packageName, "DummyPackage"))
280+
req = NewRequestWithBody(t, "PUT", fmt.Sprintf("%s/symbolpackage", url), createSymbolPackage(packageName, "DummyPackage"))
276281
req = AddBasicAuthHeader(req, user.Name)
277282
MakeRequest(t, req, http.StatusBadRequest)
278283

279-
req = NewRequestWithBody(t, "PUT", fmt.Sprintf("%s/symbolpackage", url), createPackage(packageName, "SymbolsPackage"))
284+
req = NewRequestWithBody(t, "PUT", fmt.Sprintf("%s/symbolpackage", url), createSymbolPackage(packageName, "SymbolsPackage"))
280285
req = AddBasicAuthHeader(req, user.Name)
281286
MakeRequest(t, req, http.StatusCreated)
282287

@@ -320,7 +325,7 @@ AAAjQmxvYgAAAGm7ENm9SGxMtAFVvPUsPJTF6PbtAAAAAFcVogEJAAAAAQAAAA==`)
320325
}
321326
}
322327

323-
req = NewRequestWithBody(t, "PUT", fmt.Sprintf("%s/symbolpackage", url), createPackage(packageName, "SymbolsPackage"))
328+
req = NewRequestWithBody(t, "PUT", fmt.Sprintf("%s/symbolpackage", url), createSymbolPackage(packageName, "SymbolsPackage"))
324329
req = AddBasicAuthHeader(req, user.Name)
325330
MakeRequest(t, req, http.StatusConflict)
326331
})
@@ -437,6 +442,43 @@ AAAjQmxvYgAAAGm7ENm9SGxMtAFVvPUsPJTF6PbtAAAAAFcVogEJAAAAAQAAAA==`)
437442
assert.Equal(t, c.ExpectedTotal, result.TotalHits, "case %d: unexpected total hits", i)
438443
assert.Len(t, result.Data, c.ExpectedResults, "case %d: unexpected result count", i)
439444
}
445+
446+
t.Run("EnforceGrouped", func(t *testing.T) {
447+
defer tests.PrintCurrentTest(t)()
448+
449+
req := NewRequestWithBody(t, "PUT", url, createPackage(packageName+".dummy", "1.0.0"))
450+
req = AddBasicAuthHeader(req, user.Name)
451+
MakeRequest(t, req, http.StatusCreated)
452+
453+
req = NewRequestWithBody(t, "PUT", url, createPackage(packageName, "1.0.99"))
454+
req = AddBasicAuthHeader(req, user.Name)
455+
MakeRequest(t, req, http.StatusCreated)
456+
457+
req = NewRequest(t, "GET", fmt.Sprintf("%s/query?q=%s", url, packageName))
458+
req = AddBasicAuthHeader(req, user.Name)
459+
resp := MakeRequest(t, req, http.StatusOK)
460+
461+
var result nuget.SearchResultResponse
462+
DecodeJSON(t, resp, &result)
463+
464+
assert.EqualValues(t, 3, result.TotalHits)
465+
assert.Len(t, result.Data, 2)
466+
for _, sr := range result.Data {
467+
if sr.ID == packageName {
468+
assert.Len(t, sr.Versions, 2)
469+
} else {
470+
assert.Len(t, sr.Versions, 1)
471+
}
472+
}
473+
474+
req = NewRequest(t, "DELETE", fmt.Sprintf("%s/%s/%s", url, packageName+".dummy", "1.0.0"))
475+
req = AddBasicAuthHeader(req, user.Name)
476+
MakeRequest(t, req, http.StatusNoContent)
477+
478+
req = NewRequest(t, "DELETE", fmt.Sprintf("%s/%s/%s", url, packageName, "1.0.99"))
479+
req = AddBasicAuthHeader(req, user.Name)
480+
MakeRequest(t, req, http.StatusNoContent)
481+
})
440482
})
441483
})
442484

0 commit comments

Comments
 (0)