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, 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, err := repoCache.NewIdentity("René Descartes", "rene@descartes.fr")
32	require.NoError(t, err)
33
34	for i := 0; i < 10; i++ {
35		_, _, err := repoCache.NewBugRaw(rene, time.Now().Unix(), "title", "message", nil, nil)
36		require.NoError(t, err)
37	}
38
39	// and two more for testing
40	b1, _, err := repoCache.NewBugRaw(rene, time.Now().Unix(), "title", "message", nil, nil)
41	require.NoError(t, err)
42	b2, _, err := repoCache.NewBugRaw(rene, time.Now().Unix(), "title", "message", nil, nil)
43	require.NoError(t, err)
44
45	err = Select(repoCache, b1.Id())
46	require.NoError(t, err)
47
48	// normal select without args
49	b3, _, err := ResolveBug(repoCache, []string{})
50	require.NoError(t, err)
51	require.Equal(t, b1.Id(), b3.Id())
52
53	// override selection with same id
54	b4, _, err := ResolveBug(repoCache, []string{b1.Id().String()})
55	require.NoError(t, err)
56	require.Equal(t, b1.Id(), b4.Id())
57
58	// override selection with a prefix
59	b5, _, err := ResolveBug(repoCache, []string{b1.Id().Human()})
60	require.NoError(t, err)
61	require.Equal(t, b1.Id(), b5.Id())
62
63	// args that shouldn't override
64	b6, _, err := ResolveBug(repoCache, []string{"arg"})
65	require.NoError(t, err)
66	require.Equal(t, b1.Id(), b6.Id())
67
68	// override with a different id
69	b7, _, err := ResolveBug(repoCache, []string{b2.Id().String()})
70	require.NoError(t, err)
71	require.Equal(t, b2.Id(), b7.Id())
72
73	err = Clear(repoCache)
74	require.NoError(t, err)
75
76	// Resolve without a pattern should error again after clearing the selected bug
77	_, _, err = ResolveBug(repoCache, []string{})
78	require.Error(t, err)
79}