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(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}