1package _select
2
3import (
4 "fmt"
5 "io/ioutil"
6 "log"
7 "testing"
8
9 "github.com/MichaelMure/git-bug/cache"
10 "github.com/MichaelMure/git-bug/repository"
11)
12
13func TestSelect(t *testing.T) {
14 repo, err := cache.NewRepoCache(createRepo())
15 checkErr(t, err)
16
17 _, _, err = ResolveBug(repo, []string{})
18 if err != ErrNoValidId {
19 t.Fatal("expected no valid id error, got", err)
20 }
21
22 err = Select(repo, "invalid")
23 checkErr(t, err)
24
25 _, _, err = ResolveBug(repo, []string{})
26 if err == nil {
27 t.Fatal("expected invalid bug error")
28 }
29
30 // generate a bunch of bugs
31 for i := 0; i < 10; i++ {
32 _, err := repo.NewBug("title", "message")
33 checkErr(t, err)
34 }
35
36 // two more for testing
37 b1, err := repo.NewBug("title", "message")
38 checkErr(t, err)
39 b2, err := repo.NewBug("title", "message")
40 checkErr(t, err)
41
42 err = Select(repo, b1.Id())
43 checkErr(t, err)
44
45 // normal select without args
46 b3, _, err := ResolveBug(repo, []string{})
47 checkErr(t, err)
48 if b3.Id() != b1.Id() {
49 t.Fatal("incorrect bug returned")
50 }
51
52 // override selection with same id
53 b4, _, err := ResolveBug(repo, []string{b1.Id()})
54 checkErr(t, err)
55 if b4.Id() != b1.Id() {
56 t.Fatal("incorrect bug returned")
57 }
58
59 // override selection with a prefix
60 b5, _, err := ResolveBug(repo, []string{b1.HumanId()})
61 checkErr(t, err)
62 if b5.Id() != b1.Id() {
63 t.Fatal("incorrect bug returned")
64 }
65
66 // args that shouldn't override
67 b6, _, err := ResolveBug(repo, []string{"arg"})
68 checkErr(t, err)
69 if b6.Id() != b1.Id() {
70 t.Fatal("incorrect bug returned")
71 }
72
73 // override with a different id
74 b7, _, err := ResolveBug(repo, []string{b2.Id()})
75 checkErr(t, err)
76 if b7.Id() != b2.Id() {
77 t.Fatal("incorrect bug returned")
78 }
79
80 err = Clear(repo)
81 checkErr(t, err)
82
83 _, _, err = ResolveBug(repo, []string{})
84 if err == nil {
85 t.Fatal("expected invalid bug error")
86 }
87}
88
89func createRepo() *repository.GitRepo {
90 dir, err := ioutil.TempDir("", "")
91 if err != nil {
92 log.Fatal(err)
93 }
94
95 fmt.Println("Creating repo:", dir)
96
97 repo, err := repository.InitGitRepo(dir)
98 if err != nil {
99 log.Fatal(err)
100 }
101
102 return repo
103}
104
105func checkErr(t testing.TB, err error) {
106 if err != nil {
107 t.Fatal(err)
108 }
109}