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.CreateGoGitTestRepo(t, false)
15
16 repoCache, events, err := cache.NewRepoCache(repo)
17 require.NoError(t, err)
18 for event := range events {
19 require.NoError(t, event.Err)
20 }
21
22 _, _, err = ResolveBug(repoCache, []string{})
23 require.Equal(t, ErrNoValidId, err)
24
25 err = Select(repoCache, "invalid")
26 require.NoError(t, err)
27
28 // Resolve without a pattern should fail when no bug is selected
29 _, _, err = ResolveBug(repoCache, []string{})
30 require.Error(t, err)
31
32 // generate a bunch of bugs
33
34 rene, err := repoCache.Identities().New("René Descartes", "rene@descartes.fr")
35 require.NoError(t, err)
36
37 for i := 0; i < 10; i++ {
38 _, _, err := repoCache.Bugs().NewRaw(rene, time.Now().Unix(), "title", "message", nil, nil)
39 require.NoError(t, err)
40 }
41
42 // and two more for testing
43 b1, _, err := repoCache.Bugs().NewRaw(rene, time.Now().Unix(), "title", "message", nil, nil)
44 require.NoError(t, err)
45 b2, _, err := repoCache.Bugs().NewRaw(rene, time.Now().Unix(), "title", "message", nil, nil)
46 require.NoError(t, err)
47
48 err = Select(repoCache, b1.Id())
49 require.NoError(t, err)
50
51 // normal select without args
52 b3, _, err := ResolveBug(repoCache, []string{})
53 require.NoError(t, err)
54 require.Equal(t, b1.Id(), b3.Id())
55
56 // override selection with same id
57 b4, _, err := ResolveBug(repoCache, []string{b1.Id().String()})
58 require.NoError(t, err)
59 require.Equal(t, b1.Id(), b4.Id())
60
61 // override selection with a prefix
62 b5, _, err := ResolveBug(repoCache, []string{b1.Id().Human()})
63 require.NoError(t, err)
64 require.Equal(t, b1.Id(), b5.Id())
65
66 // args that shouldn't override
67 b6, _, err := ResolveBug(repoCache, []string{"arg"})
68 require.NoError(t, err)
69 require.Equal(t, b1.Id(), b6.Id())
70
71 // override with a different id
72 b7, _, err := ResolveBug(repoCache, []string{b2.Id().String()})
73 require.NoError(t, err)
74 require.Equal(t, b2.Id(), b7.Id())
75
76 err = Clear(repoCache)
77 require.NoError(t, err)
78
79 // Resolve without a pattern should error again after clearing the selected bug
80 _, _, err = ResolveBug(repoCache, []string{})
81 require.Error(t, err)
82}