Merge pull request #388 from voldyman/ill-be-back
Added /back and tests for all away commands
This commit is contained in:
commit
af502977e6
|
@ -478,6 +478,19 @@ func InitCommands(c *Commands) {
|
|||
},
|
||||
})
|
||||
|
||||
c.Add(Command{
|
||||
Prefix: "/back",
|
||||
Help: "Clear away status.",
|
||||
Handler: func(room *Room, msg message.CommandMsg) error {
|
||||
isAway, _, _ := msg.From().GetAway()
|
||||
if isAway {
|
||||
msg.From().SetAway("")
|
||||
room.Send(message.NewEmoteMsg("is back.", msg.From()))
|
||||
}
|
||||
return nil
|
||||
},
|
||||
})
|
||||
|
||||
c.Add(Command{
|
||||
Op: true,
|
||||
Prefix: "/mute",
|
||||
|
|
|
@ -0,0 +1,58 @@
|
|||
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)
|
||||
}
|
||||
}
|
||||
|
||||
})
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue