internal/control/snippet_test.go

d7d409e545d4b0999652559ac53e94ce556b56f6
gitbay/internal/control/snippet_test.go history · blame · raw

63 lines · 1716 bytes

 1package control
 2
 3import (
 4	"bytes"
 5	"fmt"
 6	"strconv"
 7	"strings"
 8	"testing"
 9
10	"gitbay.org/gitbay/internal/config"
11	"gitbay.org/gitbay/internal/protocol"
12	"gitbay.org/gitbay/internal/store"
13)
14
15// A snippet already at maxSnippetFiles refuses a new name but still
16// accepts a replacement of one it already holds.
17func TestSnippetFileSetRefusesThe65thFile(t *testing.T) {
18	st, err := store.Open(":memory:")
19	if err != nil {
20		t.Fatal(err)
21	}
22	t.Cleanup(func() { st.Close() })
23	if err := st.MigrateUp(); err != nil {
24		t.Fatal(err)
25	}
26	uid, err := st.CreateUser("alice", false)
27	if err != nil {
28		t.Fatal(err)
29	}
30	snID, err := st.CreateSnippet(uid, "abc123abc123", "", "unlisted", "f0", []byte("x\n"))
31	if err != nil {
32		t.Fatal(err)
33	}
34	for i := 1; i < maxSnippetFiles; i++ {
35		if err := st.SetSnippetFile(snID, fmt.Sprintf("f%d", i), []byte("x\n")); err != nil {
36			t.Fatal(err)
37		}
38	}
39
40	ctx := func() (*Ctx, *bytes.Buffer) {
41		var out bytes.Buffer
42		return &Ctx{
43			User:   store.User{ID: uid, Username: "alice"},
44			Scope:  "full",
45			Store:  st,
46			Cfg:    config.Config{Limits: config.Limits{MaxSnippetBytes: 1 << 20}},
47			Stdin:  strings.NewReader("x\n"),
48			Stdout: &out,
49			Stderr: &out,
50		}, &out
51	}
52
53	c, out := ctx()
54	if code := runSnippetFileSet(c, []string{"abc123abc123", "new.txt"}); code != protocol.ExitUsage ||
55		!strings.Contains(out.String(), strconv.Itoa(maxSnippetFiles)) {
56		t.Fatalf("new file at the cap: exit %d, want %d naming %d: %s", code, protocol.ExitUsage, maxSnippetFiles, out.String())
57	}
58
59	c, out = ctx()
60	if code := runSnippetFileSet(c, []string{"abc123abc123", "f0"}); code != protocol.ExitOK {
61		t.Fatalf("replacing an existing file at the cap: exit %d: %s", code, out.String())
62	}
63}