internal/control/snippet_test.go
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}