select_test.go

 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, stderr := cache.NewTestRepoCache(t, repo)
17
18	_, _, err := ResolveBug(repoCache, []string{})
19	require.Equal(t, ErrNoValidId, err)
20
21	err = Select(repoCache, "invalid")
22	require.NoError(t, err)
23
24	// Resolve without a pattern should fail when no bug is selected
25	_, _, err = ResolveBug(repoCache, []string{})
26	require.Error(t, err)
27
28	// generate a bunch of bugs
29
30	rene, err := repoCache.NewIdentity("René Descartes", "rene@descartes.fr")
31	require.NoError(t, err)
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().String()})
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.Id().Human()})
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().String()})
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.Empty(t, stderr.String())
80}