mirror of
https://github.com/shazow/ssh-chat.git
synced 2025-07-20 20:44:30 +02:00
/back, /away: Change no-op to return err
Fixes #402 When the user is not set as away, using the `/back` or `/away` command should return error. The previous behaviour was inconsistent, `/away` sent a message and `/back` ignored it. New behaviour is error for both cases. Co-authored-by: Akshay <akshay.shekher@gmail.com>
This commit is contained in:
parent
0eebb64c1d
commit
d25630020d
@ -469,12 +469,13 @@ func InitCommands(c *Commands) {
|
|||||||
msg.From().SetAway(awayMsg)
|
msg.From().SetAway(awayMsg)
|
||||||
if awayMsg != "" {
|
if awayMsg != "" {
|
||||||
room.Send(message.NewEmoteMsg("has gone away: "+awayMsg, msg.From()))
|
room.Send(message.NewEmoteMsg("has gone away: "+awayMsg, msg.From()))
|
||||||
} else if !isAway {
|
return nil
|
||||||
room.Send(message.NewSystemMsg("Not away. Append a reason message to set away.", msg.From()))
|
|
||||||
} else {
|
|
||||||
room.Send(message.NewEmoteMsg("is back.", msg.From()))
|
|
||||||
}
|
}
|
||||||
return nil
|
if isAway {
|
||||||
|
room.Send(message.NewEmoteMsg("is back.", msg.From()))
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return errors.New("not away. Append a reason message to set away")
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -486,8 +487,9 @@ func InitCommands(c *Commands) {
|
|||||||
if isAway {
|
if isAway {
|
||||||
msg.From().SetAway("")
|
msg.From().SetAway("")
|
||||||
room.Send(message.NewEmoteMsg("is back.", msg.From()))
|
room.Send(message.NewEmoteMsg("is back.", msg.From()))
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
return nil
|
return errors.New("must be away to be back")
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -25,10 +25,17 @@ func TestAwayCommands(t *testing.T) {
|
|||||||
// expected output
|
// expected output
|
||||||
IsUserAway bool
|
IsUserAway bool
|
||||||
AwayMessage string
|
AwayMessage string
|
||||||
|
|
||||||
|
// expected state change
|
||||||
|
ExpectsError func(awayBefore bool) bool
|
||||||
}
|
}
|
||||||
awayStep := step{"/away snorkling", true, "snorkling"}
|
neverError := func(_ bool) bool { return false }
|
||||||
notAwayStep := step{"/away", false, ""}
|
// if the user was away before, then the error is expected
|
||||||
backStep := step{"/back", false, ""}
|
errorIfAwayBefore := func(awayBefore bool) bool { return awayBefore }
|
||||||
|
|
||||||
|
awayStep := step{"/away snorkling", true, "snorkling", neverError}
|
||||||
|
notAwayStep := step{"/away", false, "", errorIfAwayBefore}
|
||||||
|
backStep := step{"/back", false, "", errorIfAwayBefore}
|
||||||
|
|
||||||
steps := []step{awayStep, notAwayStep, backStep}
|
steps := []step{awayStep, notAwayStep, backStep}
|
||||||
cases := [][]int{
|
cases := [][]int{
|
||||||
@ -42,7 +49,12 @@ func TestAwayCommands(t *testing.T) {
|
|||||||
for _, s := range []step{steps[c[0]], steps[c[1]], steps[c[2]]} {
|
for _, s := range []step{steps[c[0]], steps[c[1]], steps[c[2]]} {
|
||||||
msg, _ := message.NewPublicMsg(s.Msg, u).ParseCommand()
|
msg, _ := message.NewPublicMsg(s.Msg, u).ParseCommand()
|
||||||
|
|
||||||
cmds.Run(room, *msg)
|
awayBeforeCommand, _, _ := u.GetAway()
|
||||||
|
|
||||||
|
err := cmds.Run(room, *msg)
|
||||||
|
if err != nil && s.ExpectsError(awayBeforeCommand) {
|
||||||
|
t.Fatalf("unexpected error running the command: %+v", err)
|
||||||
|
}
|
||||||
|
|
||||||
isAway, _, awayMsg := u.GetAway()
|
isAway, _, awayMsg := u.GetAway()
|
||||||
if isAway != s.IsUserAway {
|
if isAway != s.IsUserAway {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user