1package _select
2
3import (
4 "testing"
5 "time"
6
7 "github.com/stretchr/testify/require"
8
9 "github.com/git-bug/git-bug/cache"
10 "github.com/git-bug/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}