Ejemplo n.º 1
0
        private async Task DeleteOldResponses(SubmitUsereResponsesCommand command, CancellationToken cancellationToken)
        {
            var questionIds  = command.Responses.Select(x => x.QuestionId);
            var oldResponses = await _responsesRepository.GetUserResponsesForQuestions(command.UserId, questionIds);

            _responsesRepository.DeleteResponses(oldResponses);
        }
Ejemplo n.º 2
0
        private Response[] AddNewResponses(SubmitUsereResponsesCommand command)
        {
            var newResponses = command
                               .Responses
                               .Select(x => x.ToDomain(command.UserId, command.DepartmentId))
                               .ToArray();

            _responsesRepository.AddResponses(newResponses);

            return(newResponses);
        }
        public void SubmitResponses_WithNoResponses_ThrowsException()
        {
            // Arrange
            var command = new SubmitUsereResponsesCommand
            {
                Responses = new UserResponse[0]
            };

            // Act & Assert
            Assert.ThrowsAsync <InvalidOperationException>(() => _service.SubmitResponses(command));
        }
        public async Task SubmitResponses_WithNewAndUpdatedResponses_PublishesEvents()
        {
            // Arrange
            var command = new SubmitUsereResponsesCommand
            {
                Responses = _fixture.CreateMany <UserResponse>(5).ToArray()
            };

            _responsesRepositoryMock
            .Setup(x => x.GetUserResponsesForQuestions(It.IsAny <int>(), It.IsAny <IEnumerable <int> >()))
            .ReturnsAsync(_fixture.CreateMany <Response>(3).ToArray());

            // Act
            await _service.SubmitResponses(command, CancellationToken.None);

            // Arrange
            _eventDispatcherMock.Verify(x => x.PublishEvents(It.Is <IEnumerable <ResponseSubmittedEvent> >(events => events.Count() == 5)), Times.Once);
        }
        public async Task SubmitResponses_WithNewResponses_SavesResponses()
        {
            // Arrange
            var command = new SubmitUsereResponsesCommand
            {
                Responses = _fixture.CreateMany <UserResponse>(5).ToArray()
            };

            _responsesRepositoryMock
            .Setup(x => x.GetUserResponsesForQuestions(It.IsAny <int>(), It.IsAny <IEnumerable <int> >()))
            .ReturnsAsync(new Response[0]);

            // Act
            await _service.SubmitResponses(command, CancellationToken.None);

            // Arrange
            _responsesRepositoryMock.Verify(x => x.AddResponses(It.Is <Response[]>(r => r.Length == 5)));
            _responsesRepositoryMock.Verify(x => x.SaveChanges(It.IsAny <CancellationToken>()));
        }
Ejemplo n.º 6
0
        public async Task SubmitResponses(SubmitUsereResponsesCommand command,
                                          CancellationToken cancellationToken = default)
        {
            if (command.Responses == null || !command.Responses.Any())
            {
                throw new InvalidOperationException($"Response should contain at least one answer");
            }

            await DeleteOldResponses(command, cancellationToken);

            var newResponses = AddNewResponses(command);

            await _responsesRepository.SaveChanges(cancellationToken);

            var events = newResponses.Select(x => new ResponseSubmittedEvent
            {
                QuestionId      = x.QuestionId,
                QuestionnaireId = command.QuestionnaireId,
                UserId          = x.UserId,
                DepartmentId    = x.DepartmentId
            }).ToArray();

            await _eventDispatcher.PublishEvents(events);
        }