The ninja developer CLI moves out of block/core into its own module git.dev.alexdunmow.com/block/cli. Pins block/core@v0.18.2 for abi/v1, the plugin.mod parser, and DESCRIBE guest builds; vendors its own orchestrator registry client (internal/api, generated from a vendored plugin_registry.proto) since it cannot import block/core/internal. Produces byte-identical v1 artifacts (verified: art-deco codeless SHA256-identical to the pre-move build). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
46 lines
1.3 KiB
Go
46 lines
1.3 KiB
Go
package creds
|
|
|
|
import (
|
|
"encoding/json"
|
|
"testing"
|
|
)
|
|
|
|
func TestHostCreds_ActiveAccountRoundTrip(t *testing.T) {
|
|
src := HostCreds{
|
|
Token: "tok",
|
|
ActiveAccountID: "acct-uuid",
|
|
ActiveAccountSlug: "acme",
|
|
}
|
|
b, err := json.Marshal(src)
|
|
if err != nil {
|
|
t.Fatalf("Marshal: %v", err)
|
|
}
|
|
var got HostCreds
|
|
if err := json.Unmarshal(b, &got); err != nil {
|
|
t.Fatalf("Unmarshal: %v", err)
|
|
}
|
|
if got.ActiveAccountID != "acct-uuid" {
|
|
t.Errorf("ActiveAccountID = %q, want acct-uuid", got.ActiveAccountID)
|
|
}
|
|
if got.ActiveAccountSlug != "acme" {
|
|
t.Errorf("ActiveAccountSlug = %q, want acme", got.ActiveAccountSlug)
|
|
}
|
|
}
|
|
|
|
func TestHostCreds_LegacyFileLoadsWithoutAccount(t *testing.T) {
|
|
// A creds.json from before the active-account fields existed must still
|
|
// unmarshal cleanly; the new fields should be zero-valued.
|
|
legacy := `{"token":"tok","user":"alice","default_scope":"@themes"}`
|
|
var got HostCreds
|
|
if err := json.Unmarshal([]byte(legacy), &got); err != nil {
|
|
t.Fatalf("Unmarshal legacy: %v", err)
|
|
}
|
|
if got.Token != "tok" {
|
|
t.Errorf("Token = %q", got.Token)
|
|
}
|
|
if got.ActiveAccountID != "" || got.ActiveAccountSlug != "" {
|
|
t.Errorf("ActiveAccount* should be empty for legacy file, got id=%q slug=%q",
|
|
got.ActiveAccountID, got.ActiveAccountSlug)
|
|
}
|
|
}
|