|
7ddb0c4…
|
lmata
|
1 |
package scroll_test |
|
7ddb0c4…
|
lmata
|
2 |
|
|
7ddb0c4…
|
lmata
|
3 |
import ( |
|
7ddb0c4…
|
lmata
|
4 |
"strings" |
|
7ddb0c4…
|
lmata
|
5 |
"testing" |
|
7ddb0c4…
|
lmata
|
6 |
|
|
7ddb0c4…
|
lmata
|
7 |
"github.com/conflicthq/scuttlebot/internal/bots/scroll" |
|
7ddb0c4…
|
lmata
|
8 |
) |
|
7ddb0c4…
|
lmata
|
9 |
|
|
7ddb0c4…
|
lmata
|
10 |
func TestParseCommand(t *testing.T) { |
|
7ddb0c4…
|
lmata
|
11 |
cases := []struct { |
|
7ddb0c4…
|
lmata
|
12 |
name string |
|
7ddb0c4…
|
lmata
|
13 |
input string |
|
7ddb0c4…
|
lmata
|
14 |
wantCh string |
|
7ddb0c4…
|
lmata
|
15 |
wantLim int |
|
7ddb0c4…
|
lmata
|
16 |
wantErr bool |
|
7ddb0c4…
|
lmata
|
17 |
}{ |
|
7ddb0c4…
|
lmata
|
18 |
{"basic", "replay #fleet", "#fleet", 50, false}, |
|
7ddb0c4…
|
lmata
|
19 |
{"with last", "replay #fleet last=100", "#fleet", 100, false}, |
|
7ddb0c4…
|
lmata
|
20 |
{"last capped at max", "replay #fleet last=9999", "#fleet", 500, false}, |
|
7ddb0c4…
|
lmata
|
21 |
{"missing channel", "replay", "", 0, true}, |
|
7ddb0c4…
|
lmata
|
22 |
{"no hash", "replay fleet", "", 0, true}, |
|
7ddb0c4…
|
lmata
|
23 |
{"unknown command", "history #fleet", "", 0, true}, |
|
7ddb0c4…
|
lmata
|
24 |
{"invalid last", "replay #fleet last=abc", "", 0, true}, |
|
7ddb0c4…
|
lmata
|
25 |
{"unknown arg", "replay #fleet foo=bar", "", 0, true}, |
|
7ddb0c4…
|
lmata
|
26 |
} |
|
7ddb0c4…
|
lmata
|
27 |
|
|
7ddb0c4…
|
lmata
|
28 |
for _, tc := range cases { |
|
7ddb0c4…
|
lmata
|
29 |
t.Run(tc.name, func(t *testing.T) { |
|
7ddb0c4…
|
lmata
|
30 |
req, err := scroll.ParseCommand(tc.input) |
|
7ddb0c4…
|
lmata
|
31 |
if tc.wantErr { |
|
7ddb0c4…
|
lmata
|
32 |
if err == nil { |
|
7ddb0c4…
|
lmata
|
33 |
t.Errorf("ParseCommand(%q): expected error, got nil", tc.input) |
|
7ddb0c4…
|
lmata
|
34 |
} |
|
7ddb0c4…
|
lmata
|
35 |
return |
|
7ddb0c4…
|
lmata
|
36 |
} |
|
7ddb0c4…
|
lmata
|
37 |
if err != nil { |
|
7ddb0c4…
|
lmata
|
38 |
t.Fatalf("ParseCommand(%q): unexpected error: %v", tc.input, err) |
|
7ddb0c4…
|
lmata
|
39 |
} |
|
7ddb0c4…
|
lmata
|
40 |
if req.Channel != tc.wantCh { |
|
7ddb0c4…
|
lmata
|
41 |
t.Errorf("Channel: got %q, want %q", req.Channel, tc.wantCh) |
|
7ddb0c4…
|
lmata
|
42 |
} |
|
7ddb0c4…
|
lmata
|
43 |
if req.Limit != tc.wantLim { |
|
7ddb0c4…
|
lmata
|
44 |
t.Errorf("Limit: got %d, want %d", req.Limit, tc.wantLim) |
|
7ddb0c4…
|
lmata
|
45 |
} |
|
7ddb0c4…
|
lmata
|
46 |
}) |
|
7ddb0c4…
|
lmata
|
47 |
} |
|
7ddb0c4…
|
lmata
|
48 |
} |
|
7ddb0c4…
|
lmata
|
49 |
|
|
7ddb0c4…
|
lmata
|
50 |
func TestParseCommandCaseInsensitive(t *testing.T) { |
|
7ddb0c4…
|
lmata
|
51 |
req, err := scroll.ParseCommand("REPLAY #fleet last=10") |
|
7ddb0c4…
|
lmata
|
52 |
if err != nil { |
|
7ddb0c4…
|
lmata
|
53 |
t.Fatalf("ParseCommand: %v", err) |
|
7ddb0c4…
|
lmata
|
54 |
} |
|
7ddb0c4…
|
lmata
|
55 |
if req.Channel != "#fleet" { |
|
7ddb0c4…
|
lmata
|
56 |
t.Errorf("Channel: got %q", req.Channel) |
|
7ddb0c4…
|
lmata
|
57 |
} |
|
7ddb0c4…
|
lmata
|
58 |
_ = strings.ToLower // just confirming case insensitivity is tested |
|
7ddb0c4…
|
lmata
|
59 |
} |