示例#1
0
        public async Task ShouldCreateTraceAsync()
        {
            var createTraceDto = new CreateTraceDto
            {
                Description = TestActiveTraceDescription.Some(),
                Title       = TestActiveTraceTitle,
                DueDate     = _testActiveTraceDueDate,
                PropertyId  = TestActivePropertyId
            };

            _traceRepositoryMock.Setup(x => x.Insert(
                                           It.Is <Trace>(t =>
                                                         t.Description == TestActiveTraceDescription &&
                                                         t.Title == TestActiveTraceTitle &&
                                                         t.State == TraceState.Active &&
                                                         t.DueDate == _testActiveTraceDueDate &&
                                                         t.PropertyId == TestActivePropertyId)));

            _traceRepositoryMock.Setup(x => x.SaveAsync())
            .Returns(Task.CompletedTask);

            var result = await _traceService.CreateTraceAsync(createTraceDto);

            result.Id.Should().Be(0);
            result.Title.Should().Be(TestActiveTraceTitle);
            result.Description.ValueOrFailure().Should().Be(TestActiveTraceDescription);
            result.DueDate.Should().Be(_testActiveTraceDueDate);
            result.PropertyId.Should().Be(TestActivePropertyId);
            result.ReservationId.HasValue.Should().BeFalse();
        }
示例#2
0
        public async Task <TraceDto> CreateTraceAsync(CreateTraceDto createTraceDto)
        {
            Check.NotNull(createTraceDto, nameof(createTraceDto));

            if (string.IsNullOrWhiteSpace(createTraceDto.Title) ||
                createTraceDto.DueDate < LocalDate.FromDateTime(DateTime.Today))
            {
                throw new BusinessValidationException(TextConstants.CreateTraceWithoutTitleOrFutureDateErrorMessage);
            }

            var trace = new Trace
            {
                Description   = createTraceDto.Description.ValueOrDefault(),
                State         = TraceState.Active,
                Title         = createTraceDto.Title,
                DueDate       = createTraceDto.DueDate,
                PropertyId    = createTraceDto.PropertyId,
                ReservationId = createTraceDto.ReservationId.ValueOrDefault(),
                AssignedRole  = createTraceDto.AssignedRole.ValueOrDefault()
            };

            _traceRepository.Insert(trace);

            await _traceRepository.SaveAsync();

            return(TraceToDto(trace));
        }
        public async Task <ResultModel <TraceItemModel> > CreateTraceWithReservationIdAsync(CreateTraceItemModel createTraceItemModel)
        {
            try
            {
                var createTraceDto = new CreateTraceDto
                {
                    Title         = createTraceItemModel.Title,
                    Description   = createTraceItemModel.Description.SomeNotNull(),
                    DueDate       = createTraceItemModel.DueDate.ToLocalDateTime().Date,
                    ReservationId = createTraceItemModel.ReservationId.SomeNotNull(),
                    AssignedRole  = createTraceItemModel.AssignedRole.SomeNotNull()
                };

                var traceDto = await _traceService.CreateTraceFromReservationAsync(createTraceDto);

                var traceItemModel = traceDto.ConvertToTraceItemModel();

                return(new ResultModel <TraceItemModel>
                {
                    Result = traceItemModel.Some(),
                    Success = true
                });
            }
            catch (BusinessValidationException ex)
            {
                _logger.LogWarning(ex, $"{nameof(TraceModifierService)}.{nameof(CreateTraceWithReservationIdAsync)} - Exception while trying to create reservation for reservation with Id {createTraceItemModel.ReservationId}");

                return(new ResultModel <TraceItemModel>
                {
                    Success = false,
                    ErrorMessage = ex.Message.Some()
                });
            }
        }
示例#4
0
        /// <summary>
        /// This function exists to request the propertyId for this specific trace based on the reservationId
        /// </summary>
        /// <param name="createTraceDto">The dto with the information to create the trace</param>
        /// <returns>Id of the new trace</returns>
        public async Task <TraceDto> CreateTraceFromReservationAsync(CreateTraceDto createTraceDto)
        {
            var reservationId = createTraceDto.ReservationId.ValueOrException(
                new BusinessValidationException(TextConstants.NoReservationIdProvidedErrorMessage));

            var propertyId = await GetPropertyIdFromReservationIdAsync(reservationId);

            createTraceDto.PropertyId = propertyId;

            return(await CreateTraceAsync(createTraceDto));
        }
示例#5
0
        public async Task ShouldFailToCreateTraceWhenTitleIsEmptyAsync()
        {
            var createTraceDto = new CreateTraceDto
            {
                Description = TestActiveTraceDescription.Some(),
                DueDate     = _testActiveTraceDueDate
            };

            var result = await Assert.ThrowsAsync <BusinessValidationException>(() => _traceService.CreateTraceAsync(createTraceDto));

            result.Message.Should().Be("The trace must have a title and a due date in the future to be created.");
        }
示例#6
0
        public async Task ShouldFailToCreateTraceWhenDueDateIsInThePastAsync()
        {
            var createTraceDto = new CreateTraceDto
            {
                Title       = TestActiveTraceTitle,
                Description = TestActiveTraceDescription.Some(),
                DueDate     = LocalDate.FromDateTime(DateTime.Today.AddDays(-1))
            };

            var result = await Assert.ThrowsAsync <BusinessValidationException>(() => _traceService.CreateTraceAsync(createTraceDto));

            result.Message.Should().Be("The trace must have a title and a due date in the future to be created.");
        }