~bigbes/sr-ht-spec

ref: 2b11f1aea6f300be1a458c9701b92e7081ef2bb1 sr-ht-spec/db/space_test.go -rw-r--r-- 2.0 KiB
2b11f1ae — bigbes docs: the design is no longer unimplemented 27 days ago
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
package db

import (
	"context"
	"errors"
	"testing"

	"sourcecraft.dev/bigbes/sr-ht-spec/core"
)

func TestSpaceLifecycle(t *testing.T) {
	s, _, cleanup := newTestStore(t)
	defer cleanup()
	ctx := context.Background()

	ref := core.SpaceRef{Owner: "bigbes", Name: "rfcs"}
	sp, err := s.CreateSpace(ctx, ref)
	if err != nil {
		t.Fatalf("create space: %v", err)
	}
	if sp.ID == 0 {
		t.Fatal("expected a non-zero space id")
	}
	if sp.Created.IsZero() {
		t.Fatal("expected created to be set")
	}
	if sp.Ref != ref {
		t.Fatalf("ref round-trip: got %v, want %v", sp.Ref, ref)
	}

	// (owner, name) is unique.
	if _, err := s.CreateSpace(ctx, ref); !errors.Is(err, ErrSpaceExists) {
		t.Fatalf("duplicate space = %v, want ErrSpaceExists", err)
	}
	// Same name under a different owner is fine.
	if _, err := s.CreateSpace(ctx, core.SpaceRef{Owner: "someone", Name: "rfcs"}); err != nil {
		t.Fatalf("same name, different owner: %v", err)
	}

	got, err := s.GetSpace(ctx, ref)
	if err != nil {
		t.Fatalf("get space: %v", err)
	}
	if got.ID != sp.ID || got.Ref != ref {
		t.Fatalf("get space returned %+v, want id=%d ref=%v", got, sp.ID, ref)
	}
	byID, err := s.GetSpaceByID(ctx, sp.ID)
	if err != nil {
		t.Fatalf("get space by id: %v", err)
	}
	if byID.Ref != ref {
		t.Fatalf("get by id returned %v, want %v", byID.Ref, ref)
	}

	if _, err := s.GetSpace(ctx, core.SpaceRef{Owner: "bigbes", Name: "absent"}); !errors.Is(err, ErrNotFound) {
		t.Fatalf("missing space = %v, want ErrNotFound", err)
	}
	if _, err := s.GetSpaceByID(ctx, 99999); !errors.Is(err, ErrNotFound) {
		t.Fatalf("missing space id = %v, want ErrNotFound", err)
	}

	mkSpace(t, s, ctx, "bigbes", "notes")
	spaces, err := s.ListSpaces(ctx)
	if err != nil {
		t.Fatalf("list spaces: %v", err)
	}
	if len(spaces) != 3 {
		t.Fatalf("expected 3 spaces, got %d", len(spaces))
	}
	// Ordered by owner then name.
	want := []string{"~bigbes/notes", "~bigbes/rfcs", "~someone/rfcs"}
	for i, sp := range spaces {
		if sp.Ref.String() != want[i] {
			t.Errorf("spaces[%d] = %s, want %s", i, sp.Ref, want[i])
		}
	}
}