1package _select
2
3import (
4 "testing"
5 "time"
6
7 "github.com/stretchr/testify/require"
8
9 "github.com/MichaelMure/git-bug/cache"
10 "github.com/MichaelMure/git-bug/repository"
11)
12
13func TestSelect(t *testing.T) {
14 repo := repository.CreateTestRepo(false)
15 defer repository.CleanupTestRepos(repo)
16
17 repoCache, err := cache.NewRepoCache(repo)
18 require.NoError(t, err)
19
20 _, _, err = ResolveBug(repoCache, []string{})
21 require.Equal(t, ErrNoValidId, err)
22
23 err = Select(repoCache, "invalid")
24 require.NoError(t, err)
25
26 // Resolve without a pattern should fail when no bug is selected
27 _, _, err = ResolveBug(repoCache, []string{})
28 require.Error(t, err)
29
30 // generate a bunch of bugs
31
32 rene, err := repoCache.NewIdentity("René Descartes", "rene@descartes.fr")
33 require.NoError(t, err)
34
35 for i := 0; i < 10; i++ {
36 _, _, err := repoCache.NewBugRaw(rene, time.Now().Unix(), "title", "message", nil, nil)
37 require.NoError(t, err)
38 }
39
40 // and two more for testing
41 b1, _, err := repoCache.NewBugRaw(rene, time.Now().Unix(), "title", "message", nil, nil)
42 require.NoError(t, err)
43 b2, _, err := repoCache.NewBugRaw(rene, time.Now().Unix(), "title", "message", nil, nil)
44 require.NoError(t, err)
45
46 err = Select(repoCache, b1.Id())
47 require.NoError(t, err)
48
49 // normal select without args
50 b3, _, err := ResolveBug(repoCache, []string{})
51 require.NoError(t, err)
52 require.Equal(t, b1.Id(), b3.Id())
53
54 // override selection with same id
55 b4, _, err := ResolveBug(repoCache, []string{b1.Id().String()})
56 require.NoError(t, err)
57 require.Equal(t, b1.Id(), b4.Id())
58
59 // override selection with a prefix
60 b5, _, err := ResolveBug(repoCache, []string{b1.Id().Human()})
61 require.NoError(t, err)
62 require.Equal(t, b1.Id(), b5.Id())
63
64 // args that shouldn't override
65 b6, _, err := ResolveBug(repoCache, []string{"arg"})
66 require.NoError(t, err)
67 require.Equal(t, b1.Id(), b6.Id())
68
69 // override with a different id
70 b7, _, err := ResolveBug(repoCache, []string{b2.Id().String()})
71 require.NoError(t, err)
72 require.Equal(t, b2.Id(), b7.Id())
73
74 err = Clear(repoCache)
75 require.NoError(t, err)
76
77 // Resolve without a pattern should error again after clearing the selected bug
78 _, _, err = ResolveBug(repoCache, []string{})
79 require.Error(t, err)
80}