public async Task PostRight_adds_data_to_right_position_on_diff_and_returns_created_result()
        {
            // Arrange
            var newDiff = await GetNewDiff();

            // Act
            var leftData           = new NewInputViewModel("Zm9vYmFy");
            var payload            = new StringContent(JsonConvert.SerializeObject(leftData), Encoding.UTF8, "application/json");
            var rightInputResponse = await _client.PostAsync($"/api/diffs/{newDiff.Id}/right", payload);

            // Assert
            await AssertInputCreatedOnDiffPosition(rightInputResponse, newDiff.Id, InputPosition.Right);
        }
        public async Task PostLeftAsync_publishes_NewInputIntegrationEvent_on_event_bus()
        {
            // Arrange
            var diffId   = Guid.NewGuid();
            var newInput = new NewInputViewModel {
                Data = "foobar"
            };
            var eventBus   = new Mock <IRabbitMQEventBus>();
            var controller = SetupDiffControllerForPostInput(diffId, eventBus: eventBus);

            // Act
            var response = await controller.PostLeftAsync(diffId, newInput);

            // Assert
            AssertNewInputIntegrationEventPublished(response, diffId, InputPosition.Left, eventBus);
        }
        public async Task PostLeftAsync_adds_data_to_left_position_of_given_diff()
        {
            // Arrange
            var diffId   = Guid.NewGuid();
            var newInput = new NewInputViewModel {
                Data = "foobar"
            };
            var inputRepository = new Mock <IInputRepository>();
            var controller      = SetupDiffControllerForPostInput(diffId, inputRepository);

            // Act
            var response = await controller.PostLeftAsync(diffId, newInput);

            // Assert
            AssertInputCreatedOnPosition(response, diffId, newInput.Data, InputPosition.Left, inputRepository);
        }
Beispiel #4
0
        private async Task <InputViewModel> AddInputToDiffAsync(string route, string data)
        {
            if (string.IsNullOrEmpty(data))
            {
                return(null);
            }

            var newInput = new NewInputViewModel(data);
            var payload  = new StringContent(JsonConvert.SerializeObject(newInput), Encoding.UTF8, "application/json");

            var response = await _client.PostAsync(route, payload);

            Assert.True(response.IsSuccessStatusCode, $"Failed to post on {route} - {response.StatusCode}");

            var strContent = await response.Content.ReadAsStringAsync();

            return(JsonConvert.DeserializeObject <InputViewModel>(strContent));
        }
        private async Task <IActionResult> HandlePostInputRequest(Guid diffId, NewInputViewModel input, InputPosition position)
        {
            if (!ModelState.IsValid)
            {
                _logger.LogWarning($"Post{Enum.GetName(typeof(InputPosition), position)}({diffId}) failed validation");

                return(BadRequest(ModelState));
            }

            _logger.LogInformation($"Find({diffId}): retrieving item on repository");

            var diff = await _diffRepository.FindAsync(_ => _.UUID == diffId);

            if (diff == null)
            {
                _logger.LogWarning($"Find({diffId}): item not found on repository");

                return(NotFound(new ResourceNotFoundForIdResultMessage <Diff>(diffId)));
            }

            var newInput = new InputData(diffId, position, input.Data);

            _logger.LogInformation($"Save({diffId}, Diff obj): saving item on repository");

            await _inputRepository.AddOneAsync(newInput);

            _logger.LogInformation($"Save({diffId}, Diff obj): saving item on repository");

            var eventMessage = new NewInputIntegrationEvent(newInput);

            _logger.LogInformation($"Input registered, sending integration event ({eventMessage.Id})");

            _eventBus.Publish(eventMessage);

            _logger.LogInformation($"Integration event ({eventMessage.Id}) sent!");

            var viewModel = _mapper.Map <InputViewModel>(newInput);

            return(Created(newInput.Id, viewModel));
        }
 public async Task <IActionResult> PostRightAsync([FromRoute] Guid id, [FromBody] NewInputViewModel input)
 {
     return(await HandlePostInputRequest(id, input, InputPosition.Right));
 }