Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions Emulsion.Tests/Actors/Core.fs
Original file line number Diff line number Diff line change
Expand Up @@ -30,12 +30,12 @@ type CoreTests(testOutput: ITestOutputHelper) as this =

[<Fact>]
member this.``Core actor should spawn successfully``() =
let core = spawnCore()
let _core = spawnCore()
this.ExpectNoMsg()

[<Fact>]
member this.``Core creates one XMPP actor and one Telegram actor``() =
let core = spawnCore()
let _core = spawnCore()
this.ExpectNoMsg()
Assert.Equal(2, actorsCreated)

Expand All @@ -48,5 +48,5 @@ type CoreTests(testOutput: ITestOutputHelper) as this =
[<Fact>]
member this.``Core sends Telegram message to XMPP actor``() =
let core = spawnCore()
core.Tell(TelegramMessage { main = Authored { author = "Telegram user"; text = "x" }; replyTo = None })
core.Tell(TelegramMessage(Authored { author = "Telegram user"; text = "x" }))
xmppActor.ExpectMsg(OutgoingMessage (Authored { author = "Telegram user"; text = "x" }))
19 changes: 10 additions & 9 deletions Emulsion.Tests/Telegram/FunogramTests.fs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ open Xunit

open Emulsion
open Emulsion.Telegram
open Emulsion.Telegram.Funogram

[<Literal>]
let private selfUserId = 100500L
Expand Down Expand Up @@ -140,7 +141,7 @@ let private replyingUser = createUser (Some "replyingUser") "" None
let private forwardingUser = createUser (Some "forwardingUser") "" None

module ReadMessageTests =
let readMessage = Funogram.MessageConverter.read selfUserId
let private readMessage = MessageConverter.read selfUserId

[<Fact>]
let readMessageWithUnknownUser() =
Expand Down Expand Up @@ -317,7 +318,7 @@ module ReadMessageTests =

[<Fact>]
let multilineForwardShouldBeUnlimited(): unit =
let messageLinesLimit = Funogram.MessageConverter.DefaultMessageLinesLimit
let messageLinesLimit = MessageConverter.DefaultMessageLinesLimit
let multilineMessage = String.init messageLinesLimit (fun _ -> "test\n") + "test"
let forwardedMessage = createMessage (Some originalUser) (Some multilineMessage)
let message = createForwardedMessage forwardingUser forwardedMessage
Expand All @@ -331,7 +332,7 @@ module ReadMessageTests =

[<Fact>]
let longForwardShouldBeUnlimited(): unit =
let messageLengthLimit = Funogram.MessageConverter.DefaultMessageLengthLimit
let messageLengthLimit = MessageConverter.DefaultMessageLengthLimit
let longString = String.init (messageLengthLimit + 1) (fun _ -> "A")
let forwardedMessage = createMessage (Some originalUser) (Some longString)
let message = createForwardedMessage forwardingUser forwardedMessage
Expand Down Expand Up @@ -546,20 +547,20 @@ module ProcessMessageTests =
module ProcessSendResultTests =
[<Fact>]
let processResultShouldDoNothingOnOk(): unit =
Assert.Equal((), Funogram.processSendResult(Ok()))
Assert.Equal((), processSendResult(Ok()))

[<Fact>]
let processResultShouldThrowOnError(): unit =
let result = Error({ ErrorCode = 502; Description = "Error" })
Assert.ThrowsAny<Exception>(fun () -> Funogram.processSendResult result) |> ignore
Assert.ThrowsAny<Exception>(fun () -> processSendResult result) |> ignore

module FlattenMessageTests =
let private flattenMessage = Funogram.MessageConverter.flatten Funogram.MessageConverter.DefaultQuoteSettings
let private flattenMessage = MessageConverter.flatten MessageConverter.DefaultQuoteSettings
let private flattenMessageLineLimit limit =
let defaultSettings = Funogram.MessageConverter.DefaultQuoteSettings
let defaultSettings = MessageConverter.DefaultQuoteSettings
let limits = { defaultSettings.limits with messageLengthLimit = Some limit }
let quoteSettings = { defaultSettings with limits = limits }
Funogram.MessageConverter.flatten quoteSettings
MessageConverter.flatten quoteSettings

[<Fact>]
let flattenReplyMessage() =
Expand Down Expand Up @@ -612,5 +613,5 @@ module PrepareMessageTests =
let prepareMessageEscapesHtml() =
Assert.Equal(
"<b>user &lt;3</b>\nmy_message &lt;&amp;&gt;",
Funogram.prepareHtmlMessage (Authored { author = "user <3"; text = "my_message <&>" })
prepareHtmlMessage (Authored { author = "user <3"; text = "my_message <&>" })
)
5 changes: 1 addition & 4 deletions Emulsion/Actors/Core.fs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ open Akka.Actor
open Serilog

open Emulsion
open Emulsion.Telegram

type CoreActor(logger: ILogger, factories: ActorFactories) as this =
inherit ReceiveActor()
Expand All @@ -23,9 +22,7 @@ type CoreActor(logger: ILogger, factories: ActorFactories) as this =

member this.OnMessage(message : IncomingMessage) : unit =
match message with
| TelegramMessage msg ->
let message = Funogram.MessageConverter.flatten Funogram.MessageConverter.DefaultQuoteSettings msg
xmpp.Tell(OutgoingMessage message, this.Self)
| TelegramMessage msg -> xmpp.Tell(OutgoingMessage msg, this.Self)
| XmppMessage msg -> telegram.Tell(OutgoingMessage msg, this.Self)

let spawn (logger: ILogger) (factories: ActorFactories) (system: IActorRefFactory) (name: string): IActorRef =
Expand Down
7 changes: 1 addition & 6 deletions Emulsion/Message.fs
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,6 @@ module Message =
type OutgoingMessage =
| OutgoingMessage of Message

type TelegramMessage = {
main: Message
replyTo: Message option
}

type IncomingMessage =
| XmppMessage of Message
| TelegramMessage of TelegramMessage
| TelegramMessage of Message
17 changes: 13 additions & 4 deletions Emulsion/Telegram/Funogram.fs
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,11 @@ open Emulsion
open Emulsion.Settings

type private FunogramMessage = Types.Message
[<Struct>]
type internal ThreadMessage = {
main: Message
replyTo: Message option
}

module MessageConverter =
type MessageLimits = {
Expand Down Expand Up @@ -232,7 +237,7 @@ module MessageConverter =
let private addOriginalMessage quoteSettings originalMessage replyMessageBody =
sprintf "%s\n\n%s" (getQuotedMessage quoteSettings originalMessage) replyMessageBody

let internal flatten (quotedLimits: QuoteSettings) (message: TelegramMessage): Message =
let internal flatten (quotedLimits: QuoteSettings) (message: ThreadMessage): Message =
match message.main with
| Authored msg ->
let author = msg.author
Expand Down Expand Up @@ -284,7 +289,7 @@ module MessageConverter =
let messageText = text.Substring messageTextOffset
Authored { author = authorName; text = messageText }

let internal read (selfUserId: int64) (message: FunogramMessage): TelegramMessage =
let internal read (selfUserId: int64) (message: FunogramMessage): ThreadMessage =
let mainMessage = extractMessageContent message
match message.ReplyToMessage with
| None -> { main = mainMessage; replyTo = None }
Expand All @@ -302,9 +307,13 @@ let internal processSendResult(result: Result<'a, ApiResponseError>): unit =
failwith $"Telegram API Call processing error {e.ErrorCode}: {e.Description}"

let internal processMessage (context: {| SelfUserId: int64; GroupId: int64 |})
(message: FunogramMessage): TelegramMessage option =
(message: FunogramMessage): Message option =
if context.GroupId = message.Chat.Id
then Some <| MessageConverter.read context.SelfUserId message
then
message
|> MessageConverter.read context.SelfUserId
|> MessageConverter.flatten MessageConverter.DefaultQuoteSettings
|> Some
else None

let private updateArrived groupId (logger: ILogger) onMessage (ctx: Bot.UpdateContext) =
Expand Down