diff options
author | Michael Muré <batolettre@gmail.com> | 2022-12-27 19:40:40 +0100 |
---|---|---|
committer | Michael Muré <batolettre@gmail.com> | 2022-12-27 19:40:40 +0100 |
commit | e920987860dd9392fefc4b222aa4d2446b74f3d8 (patch) | |
tree | 7f67b211ed2a6342e4a3ca4e1011f3b91f0080bb /commands/select/select_test.go | |
parent | 8cea6c7515e42cb8821a03c9bfebb0a8f63a01be (diff) | |
download | git-bug-e920987860dd9392fefc4b222aa4d2446b74f3d8.tar.gz |
commands: generic "select" code, move bug completion in bugcmd
Diffstat (limited to 'commands/select/select_test.go')
-rw-r--r-- | commands/select/select_test.go | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/commands/select/select_test.go b/commands/select/select_test.go new file mode 100644 index 00000000..4425c275 --- /dev/null +++ b/commands/select/select_test.go @@ -0,0 +1,86 @@ +package _select + +import ( + "testing" + "time" + + "github.com/stretchr/testify/require" + + "github.com/MichaelMure/git-bug/cache" + "github.com/MichaelMure/git-bug/repository" +) + +func TestSelect(t *testing.T) { + repo := repository.CreateGoGitTestRepo(t, false) + + backend, err := cache.NewRepoCacheNoEvents(repo) + require.NoError(t, err) + + const typename = "foo" + const namespace = "foos" + + resolve := func(args []string) (*cache.BugCache, []string, error) { + return Resolve[*cache.BugCache](backend, typename, namespace, backend.Bugs(), args) + } + + _, _, err = resolve([]string{}) + require.True(t, IsErrNoValidId(err)) + + err = Select(backend, namespace, "invalid") + require.NoError(t, err) + + // Resolve without a pattern should fail when no bug is selected + _, _, err = resolve([]string{}) + require.Error(t, err) + + // generate a bunch of bugs + + rene, err := backend.Identities().New("René Descartes", "rene@descartes.fr") + require.NoError(t, err) + + for i := 0; i < 10; i++ { + _, _, err := backend.Bugs().NewRaw(rene, time.Now().Unix(), "title", "message", nil, nil) + require.NoError(t, err) + } + + // and two more for testing + b1, _, err := backend.Bugs().NewRaw(rene, time.Now().Unix(), "title", "message", nil, nil) + require.NoError(t, err) + b2, _, err := backend.Bugs().NewRaw(rene, time.Now().Unix(), "title", "message", nil, nil) + require.NoError(t, err) + + err = Select(backend, namespace, b1.Id()) + require.NoError(t, err) + + // normal select without args + b3, _, err := resolve([]string{}) + require.NoError(t, err) + require.Equal(t, b1.Id(), b3.Id()) + + // override selection with same id + b4, _, err := resolve([]string{b1.Id().String()}) + require.NoError(t, err) + require.Equal(t, b1.Id(), b4.Id()) + + // override selection with a prefix + b5, _, err := resolve([]string{b1.Id().Human()}) + require.NoError(t, err) + require.Equal(t, b1.Id(), b5.Id()) + + // args that shouldn't override + b6, _, err := resolve([]string{"arg"}) + require.NoError(t, err) + require.Equal(t, b1.Id(), b6.Id()) + + // override with a different id + b7, _, err := resolve([]string{b2.Id().String()}) + require.NoError(t, err) + require.Equal(t, b2.Id(), b7.Id()) + + err = Clear(backend, namespace) + require.NoError(t, err) + + // Resolve without a pattern should error again after clearing the selected bug + _, _, err = resolve([]string{}) + require.Error(t, err) +} |