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