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