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