Example #1
0
 private void GivenServicesReturnExpectedValues(CreateMessageRequest parsedInput, WebexTeamsMessage apiResponse,
                                                GlobalXMessage parsedApiResponse, Person sender)
 {
     _messageParser.ParseCreateMessageRequest(_input).Returns(parsedInput);
     _apiService.SendMessageAsync(parsedInput).Returns(Task.FromResult(apiResponse));
     _messageParser.ParseMessage(apiResponse).Returns(parsedApiResponse);
     _apiService.GetPersonAsync(apiResponse.PersonId).Returns(Task.FromResult(sender));
 }
Example #2
0
 internal void TestSendMessage(GlobalXMessage input, CreateMessageRequest parsedInput,
                               WebexTeamsMessage apiResponse, GlobalXMessage parsedApiResponse, Person sender, GlobalXMessage output)
 {
     this.Given(x => GivenAGlobalXMessage(input))
     .And(x => GivenServicesReturnExpectedValues(parsedInput, apiResponse, parsedApiResponse, sender))
     .When(x => WhenSendingAMessage())
     .Then(x => ThenItShouldCallApiService())
     .And(x => ThenItShouldReturnAMessage(output))
     .BDDfy();
 }
        private async Task <Models.Message> ResendMessageWithRootParentId(Message message)
        {
            var parentMessage = await _apiService.GetMessageAsync(message.ParentId);

            message.ParentId = parentMessage.ParentId;

            var request = _messageParser.ParseCreateMessageRequest(message);
            var result  = await _apiService.SendMessageAsync(request).ConfigureAwait(false);

            return(result);
        }
Example #4
0
 internal void TestSendBadParentMessage(GlobalXMessage input, WebexTeamsMessage apiResponse)
 {
     this.Given(x => GivenAGlobalXMessage(input))
     .And(x => GivenApiServiceThrowsInvalidParentExceptionForBadParent())
     .And(x => GivenMessageParserReturnsCreateMessageRequest())
     .And(x => GivenApiServiceReturnsGoodParent())
     .And(x => GivenApiServiceReturnsCorrectResult(apiResponse))
     .And(x => GivenServicesReturnSomeValues())
     .When(x => WhenSendingAMessage())
     .Then(x => ThenThereShouldBeTwoCallsToSendMessage())
     .BDDfy();
 }
        public async Task <Message> SendMessageAsync(Message message)
        {
            var request = _messageParser.ParseCreateMessageRequest(message);

            Models.Message result;
            try
            {
                result = await _apiService.SendMessageAsync(request).ConfigureAwait(false);
            }
            catch (InvalidParentException)
            {
                result = await ResendMessageWithRootParentId(message);
            }

            return(await GetSentMessageWithSender(result));
        }
Example #6
0
 private void ThenItShouldReturnAMessage(GlobalXMessage output)
 {
     _output.ShouldNotBeNull();
     _output.ShouldSatisfyAllConditions(
         () => _output.Created.ShouldBe(output.Created),
         () => _output.Text.ShouldBe(output.Text),
         () => {
         if (output.MessageParts != null)
         {
             _output.MessageParts.ShouldNotBeNull();
             _output.MessageParts.Length.ShouldBe(output.MessageParts.Length);
             for (int i = 0; i < _output.MessageParts.Length; i++)
             {
                 _output.MessageParts[i].MessageType.ShouldBe(output.MessageParts[i].MessageType);
                 _output.MessageParts[i].Text.ShouldBe(output.MessageParts[i].Text);
                 _output.MessageParts[i].UserId.ShouldBe(output.MessageParts[i].UserId);
             }
         }
         else
         {
             _output.MessageParts.ShouldBeNull();
         }
     },
         () =>
     {
         if (output.Sender != null)
         {
             ComparePeople(output.Sender, _output.Sender);
         }
         else
         {
             _output.Sender.ShouldBeNull();
         }
     },
         () => _output.RoomId.ShouldBe(output.RoomId),
         () => _output.RoomType.ShouldBe(output.RoomType)
         );
 }
Example #7
0
 private void GivenAGlobalXMessage(GlobalXMessage input)
 {
     _input = input;
 }
Example #8
0
 private async void WhenSendingAMessage()
 {
     _output = await _subject.SendMessageAsync(_input);
 }
        public CreateMessageRequest ParseCreateMessageRequest(GlobalXMessage message)
        {
            var request = new CreateMessageRequest
            {
                ParentId = message.ParentId
            };

            string roomDecoded;

            try
            {
                var base64String = message.RoomId;
                if (base64String.Length % 4 != 0)
                {
                    var amountToPad = 4 - base64String.Length % 4;
                    base64String = base64String.PadRight(base64String.Length + amountToPad, '=');
                }
                var roomBytes = Convert.FromBase64String(base64String);
                roomDecoded = Encoding.UTF8.GetString(roomBytes);
            }
            catch (FormatException)
            {
                throw new ArgumentException($"Invalid room ID {message.RoomId}");
            }

            if (roomDecoded.StartsWith(RoomIdPrefix))
            {
                request.RoomId = message.RoomId;
            }
            else if (roomDecoded.StartsWith(PersonIdPrefix))
            {
                request.ToPersonId = message.RoomId;
            }
            else
            {
                throw new ArgumentException($"Invalid room ID {message.RoomId}");
            }

            if (!string.IsNullOrWhiteSpace(message.Text) && (message.MessageParts == null || message.MessageParts.Length == 0))
            {
                request.Markdown = message.Text;
            }
            else if (message.MessageParts?.Length > 0)
            {
                var markdownBuilder = new StringBuilder();
                foreach (MessagePart messagePart in message.MessageParts)
                {
                    switch (messagePart.MessageType)
                    {
                    case MessageType.Text:
                        markdownBuilder.Append(messagePart.Text);
                        break;

                    case MessageType.PersonMention:
                        markdownBuilder.Append($"<@personId:{messagePart.UserId}|{messagePart.Text}>");
                        break;

                    case MessageType.GroupMention:
                        markdownBuilder.Append($"<@{messagePart.UserId}>");
                        break;

                    case MessageType.OrderedList:
                        markdownBuilder.Append("\n1. ");
                        markdownBuilder.Append(string.Join("\n1. ", messagePart.ListItems));
                        markdownBuilder.Append("\n");
                        break;

                    case MessageType.UnorderedList:
                        markdownBuilder.Append("\n- ");
                        markdownBuilder.Append(string.Join("\n- ", messagePart.ListItems));
                        markdownBuilder.Append("\n");
                        break;

                    default:
                        throw new ArgumentException($"Invalid message type {messagePart.MessageType}");
                    }
                }

                request.Markdown = markdownBuilder.ToString();
            }
            else
            {
                throw new ArgumentException("Please provide a message to send");
            }

            return(request);
        }