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