]> git.giacomolli.uk - onechat/blob - command_test.go
Select notification targets by stable ID
[onechat] / command_test.go
1 package main
2
3 import (
4 "io"
5 "os"
6 "testing"
7
8 "github.com/stretchr/testify/require"
9 )
10
11 func TestVersionCommandPrintsBuildVersion(t *testing.T) {
12 original := version
13 version = "test-version"
14 t.Cleanup(func() {
15 version = original
16 })
17
18 require.Equal(t, "test-version\n", commandOutput(t, "version"))
19 }
20
21 func TestHelpListsVersionCommand(t *testing.T) {
22 require.Contains(t, commandOutput(t, "help"), " version show the build version\n")
23 }
24
25 func TestHelpListsTheImportTargetFlag(t *testing.T) {
26 help := commandOutput(t, "help")
27 require.Contains(t, help, "import [-n] [--agent NAME] ZIP...")
28 require.Contains(t, help, "--agent NAME import into an existing direct child (default: root)")
29 }
30
31 func TestHelpListsTheStableNotificationTargetFlag(t *testing.T) {
32 require.Contains(t, commandOutput(t, "help"), "notify [--agent-id ID] --source SOURCE --id ID --text TEXT")
33
34 help := commandOutput(t, "notify", "--help")
35 require.Contains(t, help, "not processed")
36 require.Contains(t, help, "--agent-id ID")
37 require.NotContains(t, help, "--agent NAME")
38 }
39
40 func commandOutput(t *testing.T, args ...string) string {
41 t.Helper()
42
43 reader, writer, err := os.Pipe()
44 require.NoError(t, err)
45
46 originalArgs, originalStdout := os.Args, os.Stdout
47 os.Args = append([]string{"onechat"}, args...)
48 os.Stdout = writer
49 t.Cleanup(func() {
50 os.Args, os.Stdout = originalArgs, originalStdout
51
52 require.NoError(t, reader.Close())
53 })
54
55 err = run()
56 require.NoError(t, err)
57
58 require.NoError(t, writer.Close())
59
60 output, err := io.ReadAll(reader)
61 require.NoError(t, err)
62
63 return string(output)
64 }