Files
simplegit/gitrpc/ctrl_test.go
T
2026-07-29 06:51:43 -04:00

53 lines
1.4 KiB
Go

package gitrpc
import (
"context"
"encoding/json"
"testing"
"connectrpc.com/connect"
"simplegit/common"
v1 "simplegit/gitrpc/v1"
"simplegit/state"
statectrl "simplegit/state/ctrl"
)
func TestCtrlListsReposAndRejectsInvalidCalls(t *testing.T) {
cfg := &common.Config{Root: t.TempDir(), DBUri: "sqlite://state.db"}
if err := cfg.Prepare(); err != nil {
t.Fatal(err)
}
store, err := state.Open(cfg)
if err != nil {
t.Fatal(err)
}
t.Cleanup(func() { _ = store.Engine().Close() })
if err := store.UpsertRepo("acme", "demo", true); err != nil {
t.Fatal(err)
}
server := NewServer(cfg, store)
resp, err := server.Ctrl(context.Background(), connect.NewRequest(&v1.CtrlRequest{Op: statectrl.OpListRepos}))
if err != nil {
t.Fatal(err)
}
var repos []statectrl.RepoRow
if err := json.Unmarshal(resp.Msg.Result, &repos); err != nil {
t.Fatal(err)
}
if len(repos) != 1 || repos[0].Ns != "acme" || repos[0].Name != "demo" || !repos[0].IsPrivate {
t.Fatalf("unexpected repos: %+v", repos)
}
for _, req := range []*v1.CtrlRequest{
{Op: "sql", Args: []string{"DROP TABLE repo"}},
{Op: statectrl.OpGrantsForRepo, Args: []string{"missing-name"}},
} {
_, err := server.Ctrl(context.Background(), connect.NewRequest(req))
if connect.CodeOf(err) != connect.CodeInvalidArgument {
t.Fatalf("Ctrl(%q) code = %s, want invalid_argument: %v", req.Op, connect.CodeOf(err), err)
}
}
}