mirror of
https://github.com/shazow/ssh-chat.git
synced 2025-04-26 13:22:18 +03:00
59 lines
1.4 KiB
Go
59 lines
1.4 KiB
Go
package chat
|
|
|
|
import (
|
|
"fmt"
|
|
"testing"
|
|
|
|
"github.com/shazow/ssh-chat/chat/message"
|
|
)
|
|
|
|
func TestAwayCommands(t *testing.T) {
|
|
cmds := &Commands{}
|
|
InitCommands(cmds)
|
|
|
|
room := NewRoom()
|
|
go room.Serve()
|
|
defer room.Close()
|
|
|
|
// steps are order dependent
|
|
// User can be "away" or "not away" using 3 commands "/away [msg]", "/away", "/back"
|
|
// 2^3 possible cases, run all and verify state at the end
|
|
type step struct {
|
|
// input
|
|
Msg string
|
|
|
|
// expected output
|
|
IsUserAway bool
|
|
AwayMessage string
|
|
}
|
|
awayStep := step{"/away snorkling", true, "snorkling"}
|
|
notAwayStep := step{"/away", false, ""}
|
|
backStep := step{"/back", false, ""}
|
|
|
|
steps := []step{awayStep, notAwayStep, backStep}
|
|
cases := [][]int{
|
|
{0, 1, 2}, {0, 2, 1}, {1, 0, 2}, {1, 2, 0}, {2, 0, 1}, {2, 1, 0},
|
|
}
|
|
for _, c := range cases {
|
|
t.Run(fmt.Sprintf("Case: %d, %d, %d", c[0], c[1], c[2]), func(t *testing.T) {
|
|
|
|
u := message.NewUser(message.SimpleID("shark"))
|
|
|
|
for _, s := range []step{steps[c[0]], steps[c[1]], steps[c[2]]} {
|
|
msg, _ := message.NewPublicMsg(s.Msg, u).ParseCommand()
|
|
|
|
cmds.Run(room, *msg)
|
|
|
|
isAway, _, awayMsg := u.GetAway()
|
|
if isAway != s.IsUserAway {
|
|
t.Fatalf("expected user away state '%t' not equals to actual '%t' after message '%s'", s.IsUserAway, isAway, s.Msg)
|
|
}
|
|
if awayMsg != s.AwayMessage {
|
|
t.Fatalf("expected user away message '%s' not equal to actual '%s' after message '%s'", s.AwayMessage, awayMsg, s.Msg)
|
|
}
|
|
}
|
|
|
|
})
|
|
}
|
|
}
|