The builder's tools bundle serves reserved given a package's name: it follows the catalog half's packages view itself, finds the module from the name, answers the reserved version, or for a version no reservation holds asks the seat mesh-catalog's versions and answers released with the release's digests; a name no entry carries, two entries carry, or a version neither reserved nor released is answered error. builder_versions by name calls reserved through its invokes. The builder's process serves no call. Builds: design 47 G §572, §582 (A-70) Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
59 lines
2.9 KiB
Go
59 lines
2.9 KiB
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
"testing"
|
|
"time"
|
|
|
|
"git.novox.be/novox/mesh-contracts/health-and-repair/go/clients/meshhandactsclient"
|
|
"git.novox.be/novox/mesh-delivery/contracts/go/seats/meshbuilds"
|
|
"git.novox.be/novox/mesh-delivery/contracts/go/seats/meshcatalog"
|
|
|
|
"mesh-delivery-builder/internal/build"
|
|
"mesh-delivery-builder/internal/versions"
|
|
)
|
|
|
|
// Design 47 G §572, §582, A-70: the bundle's verb reserved takes a name and answers from the view it follows and the catalog's
|
|
// versions, and builder_versions, asked by a name, calls reserved and answers what it answers.
|
|
func TestReservedByNameIsTheBundlesAndBuilderVersionsCallsIt(t *testing.T) {
|
|
none := versions.Reader{Keys: func() ([]string, error) { return nil, nil }, Get: func(string) (json.RawMessage, bool, error) { return nil, false, nil }}
|
|
carriers := func(_ context.Context, name string) ([]versions.Built, error) {
|
|
if name == "@novox/mesh-sdk" {
|
|
return []versions.Built{{Module: "mesh-sdk", Artifact: "ts"}}, nil
|
|
}
|
|
return nil, nil
|
|
}
|
|
released := func(_ context.Context, module string) ([]meshcatalog.VersionEntry, error) {
|
|
return []meshcatalog.VersionEntry{{Module: module, Version: "0.1.2", Artifacts: []meshcatalog.VersionArtifact{{Artifact: "mesh-sdk:ts", Digest: "sha256:dd"}}}}, nil
|
|
}
|
|
acts := meshhandactsclient.Recorder{Ask: func(string, any) (json.RawMessage, error) { return json.RawMessage(`{}`), nil }}
|
|
byName := map[string]func(map[string]any) (any, error){}
|
|
for _, tl := range reservedTools(none, nil, time.Now, acts, carriers, released) {
|
|
byName[tl.Name] = tl.Run
|
|
}
|
|
got, err := byName[versions.ReservedVerb](map[string]any{"name": "@novox/mesh-sdk", "version": "0.1.2"})
|
|
want := meshbuilds.ReservedAnswer{Module: "mesh-sdk", Version: "0.1.2", Released: true, Artifacts: []meshbuilds.ReservedAnswerArtifactsItem{{Artifact: "mesh-sdk:ts", Digest: "sha256:dd"}}}
|
|
if err != nil || got.(meshbuilds.ReservedAnswer).Released != want.Released || got.(meshbuilds.ReservedAnswer).Artifacts[0] != want.Artifacts[0] {
|
|
t.Fatalf("reserved by name = %+v (%v), want %+v", got, err, want)
|
|
}
|
|
var called []string
|
|
reserve := func(name, version string) (meshbuilds.ReservedAnswer, error) {
|
|
called = append(called, name+"@"+version)
|
|
return want, nil
|
|
}
|
|
tools := Tools(build.StuckReader{}, nil, nil, nil, nil, time.Now, none, none, none, reserve)
|
|
for _, tl := range tools {
|
|
if tl.Name == versions.VersionsTool {
|
|
out, err := tl.Run(map[string]any{"name": "@novox/mesh-sdk", "version": "0.1.2"})
|
|
ans, ok := out.(versions.VersionsAnswer)
|
|
if err != nil || !ok || ans.Reserved == nil || ans.Reserved.Module != "mesh-sdk" || !ans.Reserved.Released {
|
|
t.Fatalf("builder_versions by name = %+v (%v), want reserved's answer in it", out, err)
|
|
}
|
|
}
|
|
}
|
|
if len(called) != 1 || called[0] != "@novox/mesh-sdk@0.1.2" {
|
|
t.Errorf("reserved was called %v, want once, by the name and version", called)
|
|
}
|
|
}
|