Classify missing release IDs when accessing assets
This commit is contained in:
@@ -755,6 +755,33 @@ func (writer deliveryCancelWriter) Write(content []byte) (int, error) {
|
||||
return len(content), nil
|
||||
}
|
||||
|
||||
func TestDeliverExistingPageWithoutReleaseID(t *testing.T) {
|
||||
repository := newTaggedDeliveryConsumer(t)
|
||||
prebuilt, err := releasekit.Build(context.Background(), releasekit.BuildRequest{
|
||||
RepositoryDir: repository, Version: "v1.2.3", OutputDir: t.TempDir(),
|
||||
Spec: releasekit.BuildSpec{MainPackage: "./cmd/app", BinaryName: "fixture", Targets: []releasekit.Target{{OS: runtime.GOOS, Arch: runtime.GOARCH}}},
|
||||
})
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
server, remote := newFacadeDeliveryServer(t, repository)
|
||||
defer server.Close()
|
||||
remote.update(func(data *facadeDeliveryData) { data.pages[data.tag] = true; data.omitReleaseID = true })
|
||||
request := releasekit.DeliveryRequest{RepositoryDir: repository, Product: "Fixture", Version: "v1.2.3", Destination: facadeDeliveryDestination(server.URL)}
|
||||
page, err := releasekit.Deliver(context.Background(), request)
|
||||
if err != nil || page.State != releasekit.DeliveryComplete {
|
||||
t.Fatalf("page result = %#v, error = %v", page, err)
|
||||
}
|
||||
request.Prebuilt = &prebuilt
|
||||
result, err := releasekit.Deliver(context.Background(), request)
|
||||
if err == nil || result.State != releasekit.DeliveryNotAttempted || !strings.Contains(err.Error(), "release ID") {
|
||||
t.Fatalf("asset result = %#v, error = %v", result, err)
|
||||
}
|
||||
if snapshot := remote.snapshot(); snapshot.writes != 0 {
|
||||
t.Fatalf("unexpected hosted writes: %#v", snapshot)
|
||||
}
|
||||
}
|
||||
|
||||
type facadeDeliveryServer struct {
|
||||
mu sync.Mutex
|
||||
data facadeDeliveryData
|
||||
@@ -785,16 +812,17 @@ func (state *facadeDeliveryServer) snapshot() facadeDeliveryData {
|
||||
}
|
||||
|
||||
type facadeDeliveryData struct {
|
||||
t *testing.T
|
||||
commit string
|
||||
tag string
|
||||
version string
|
||||
noteBody string
|
||||
pages map[string]bool
|
||||
requests int
|
||||
writes int
|
||||
assets map[string][]byte
|
||||
url string
|
||||
t *testing.T
|
||||
commit string
|
||||
tag string
|
||||
version string
|
||||
noteBody string
|
||||
pages map[string]bool
|
||||
requests int
|
||||
writes int
|
||||
omitReleaseID bool
|
||||
assets map[string][]byte
|
||||
url string
|
||||
}
|
||||
|
||||
func newFacadeDeliveryServer(t *testing.T, repository string) (*httptest.Server, *facadeDeliveryServer) {
|
||||
@@ -894,11 +922,15 @@ func (state *facadeDeliveryServer) writeRelease(w http.ResponseWriter) {
|
||||
// The request handler holds state.mu.
|
||||
data := &state.data
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
_ = json.NewEncoder(w).Encode(map[string]any{
|
||||
"id": 10, "html_url": data.url + "/releases/10", "tag_name": data.tag,
|
||||
release := map[string]any{
|
||||
"html_url": data.url + "/releases/10", "tag_name": data.tag,
|
||||
"target_commitish": data.commit, "name": "Fixture " + data.version,
|
||||
"body": data.noteBody, "draft": false, "prerelease": false,
|
||||
})
|
||||
}
|
||||
if !data.omitReleaseID {
|
||||
release["id"] = 10
|
||||
}
|
||||
_ = json.NewEncoder(w).Encode(release)
|
||||
}
|
||||
|
||||
func mapKeys(values map[string][]byte) []string {
|
||||
|
||||
Reference in New Issue
Block a user