Skip to content

Commit

Permalink
Pong to chat, add parser test for ping, fix tests (Liminiens#30)
Browse files Browse the repository at this point in the history
* fix tests, add test for ping

* reply with pong to chat
  • Loading branch information
Liminiens authored Jun 9, 2020
1 parent 883d0dc commit 4de1887
Show file tree
Hide file tree
Showing 4 changed files with 26 additions and 7 deletions.
12 changes: 8 additions & 4 deletions src/Grinder/Commands.fs
Original file line number Diff line number Diff line change
Expand Up @@ -282,12 +282,16 @@ module Processing =
Usernames: UserUsername seq
}

type PingContext = {
ChatId: TelegramChatId
}

type Command =
| BanCommand of BanCommandContext
| BanOnReplyCommand of ActionOnReplyCommandContext
| UnbanCommand of UnbanCommandContext
| UnbanOnReplyCommand of ActionOnReplyCommandContext
| PingCommand
| PingCommand of PingContext
| DoNothingCommand

type CommandError =
Expand Down Expand Up @@ -407,7 +411,7 @@ module Processing =
}
UnbanCommand context
| BotCommand(Ping) ->
PingCommand
PingCommand { ChatId = %context.Message.Chat.Id }
| InvalidCommand _ ->
DoNothingCommand

Expand Down Expand Up @@ -547,8 +551,8 @@ module Processing =
}

return Some <| UnbanOnReplyMessage(context.From, message, errors)
| PingCommand ->
do! botApi.SendTextToChannel "pong"
| PingCommand context ->
do! botApi.SendTextMessage context.ChatId "pong"
return None
| DoNothingCommand ->
return None
Expand Down
3 changes: 3 additions & 0 deletions src/Grinder/Program.fs
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,9 @@ module Program =
member __.UnbanUser chatUsername username =
ApiExt.unbanUserByUsername config %chatUsername %username

member __.SendTextMessage chatId text =
ApiExt.sendMessage chatId config text

member __.UnrestrictUser chatUsername username =
ApiExt.unrestrictUserByUsername config %chatUsername %username

Expand Down
1 change: 1 addition & 0 deletions src/Grinder/Types.fs
Original file line number Diff line number Diff line change
Expand Up @@ -97,4 +97,5 @@ type IBotApi =
abstract member UnbanUser: ChatUsername -> UserUsername -> Async<Result<unit, string>>
abstract member UnrestrictUser: ChatUsername -> UserUsername -> Async<Result<unit, string>>
abstract member SendTextToChannel: string -> Async<unit>
abstract member SendTextMessage: TelegramChatId -> string -> Async<unit>
abstract member PrepareAndDownloadFile: string -> Async<Result<Stream, string>>
17 changes: 14 additions & 3 deletions tests/Grinder.Tests/ParserTests.fs
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ let ``pforeverBan parses forever ban as forever text`` () =
[<InlineData(" \n\r \n@bot @first @second ban 1 day 12 months")>]
let ``parseCommand returns correct command for ban`` (command) =
match run (parseCommand "@bot") command with
| Success(Command(Usernames(usernames), Ban(Timed(duration))), _, _) ->
| Success(UserCommand(Usernames(usernames), Ban(Timed(duration))), _, _) ->
let time = DateTime.UtcNow.AddMonths(12).AddDays(1.)
Assert.Equal(time.ToString("yyyyMMddTHH:mm"), duration.ToString("yyyyMMddTHH:mm"))
Assert.Equal<string seq>(["@first"; "@second"], usernames)
Expand All @@ -125,18 +125,29 @@ let ``parseCommand returns correct command for ban`` (command) =
[<InlineData("@bot @first @second ban\r\n\n")>]
let ``parseCommand returns correct command for forever ban`` (command: string) =
match run (parseCommand "@bot") command with
| Success(Command(Usernames(usernames), Ban(Forever)), _, _) ->
| Success(UserCommand(Usernames(usernames), Ban(Forever)), _, _) ->
Assert.Equal<string seq>(["@first"; "@second"], usernames)
| Failure(error, _, _ ) ->
Assert.FailWithMessage(error)
| _ ->
Assert.Fail()

[<Fact>]
let ``parseCommand returns correct command for ping`` () =
let command = "@bot ping"
match run (parseCommand "@bot") command with
| Success(Ping, _, _) ->
Assert.Success()
| Failure(error, _, _ ) ->
Assert.FailWithMessage(error)
| _ ->
Assert.Fail()

[<Fact>]
let ``parseCommand returns correct command for unban`` () =
let command = "@bot @first @second unban"
match run (parseCommand "@bot") command with
| Success(Command(Usernames(usernames), Unban), _, _) ->
| Success(UserCommand(Usernames(usernames), Unban), _, _) ->
Assert.Equal<string seq>(["@first"; "@second"], usernames)
| Failure(error, _, _ ) ->
Assert.FailWithMessage(error)
Expand Down

0 comments on commit 4de1887

Please sign in to comment.