public async Task <IActionResult> Delete(ReservationsRouteModel routeModel)
        {
            var isProvider = routeModel.UkPrn.HasValue;

            try
            {
                if (!routeModel.Id.HasValue)
                {
                    _logger.LogInformation($"Reservation ID must be in URL, parameter [{nameof(routeModel.Id)}]");
                    var manageRoute = isProvider ? RouteNames.ProviderManage : RouteNames.EmployerManage;
                    return(RedirectToRoute(manageRoute, routeModel));
                }

                var query = new GetReservationQuery
                {
                    Id    = routeModel.Id.Value,
                    UkPrn = routeModel.UkPrn.GetValueOrDefault()
                };
                var queryResult = await _mediator.Send(query);

                var viewName = isProvider ? ViewNames.ProviderDelete : ViewNames.EmployerDelete;

                return(View(viewName, new DeleteViewModel(queryResult)));
            }
            catch (Exception e)
            {
                _logger.LogError(e, "Error preparing for the delete view");
                throw;
            }
        }
Beispiel #2
0
        public async Task <IActionResult> Completed(ReservationsRouteModel routeModel)
        {
            if (!routeModel.Id.HasValue)
            {
                throw new ArgumentException("Reservation ID must be in URL.", nameof(routeModel.Id));
            }

            var query = new GetReservationQuery
            {
                Id    = routeModel.Id.Value,
                UkPrn = routeModel.UkPrn.GetValueOrDefault()
            };
            var queryResult = await _mediator.Send(query);

            //todo: null check on result, redirect to error

            var model = new CompletedViewModel
            {
                AccountLegalEntityName  = queryResult.AccountLegalEntityName,
                TrainingDateDescription = new TrainingDateModel()
                {
                    StartDate = queryResult.StartDate,
                    EndDate   = queryResult.ExpiryDate
                }.GetGDSDateString(),
                CourseDescription = queryResult.Course.CourseDescription,
                StartDate         = queryResult.StartDate,
                CourseId          = queryResult.Course?.Id,
                UkPrn             = queryResult.UkPrn ?? routeModel.ProviderId,
                CohortRef         = routeModel.CohortReference
            };

            var viewName = routeModel.UkPrn.HasValue ? ViewNames.ProviderCompleted : ViewNames.EmployerCompleted;

            return(View(viewName, model));
        }
        public async Task And_All_Fields_Valid_Then_Valid(
            GetReservationQuery query,
            GetReservationQueryValidator validator)
        {
            var result = await validator.ValidateAsync(query);

            result.IsValid().Should().BeTrue();
            result.ValidationDictionary.Count.Should().Be(0);
        }
        public async Task And_No_Id_Then_Invalid(
            GetReservationQueryValidator validator)
        {
            var query = new GetReservationQuery();

            var result = await validator.ValidateAsync(query);

            result.IsValid().Should().BeFalse();
            result.ValidationDictionary.Count.Should().Be(1);
            result.ValidationDictionary
            .Should().ContainKey(nameof(GetReservationQuery.Id))
            .WhichValue.Should().Be($"{nameof(GetReservationQuery.Id)} has not been supplied");
        }
Beispiel #5
0
        public async Task Then_Will_Not_Check_For_Access_If_Employer()
        {
            //Arrange
            var command = new GetReservationQuery
            {
                Id = _expectedReservationId
            };

            //Act + Assert
            await _handler.Handle(command, new CancellationToken());

            _reservationAuthorisationService.Verify(s => s.ProviderReservationAccessAllowed(It.IsAny <uint>(), It.IsAny <GetReservationResponse>()), Times.Never);
        }
Beispiel #6
0
        public void Arrange()
        {
            _query = new GetReservationQuery {
                Id = _expectedReservationId
            };
            _validator = new Mock <IValidator <GetReservationQuery> >();
            _validator.Setup(x => x.ValidateAsync(It.IsAny <GetReservationQuery>()))
            .ReturnsAsync(new ValidationResult {
                ValidationDictionary = new Dictionary <string, string>()
            });
            _cancellationToken = new CancellationToken();
            _service           = new Mock <IAccountReservationService>();
            var reservation = new Reservation(Guid.Empty, 12345, DateTime.UtcNow, 1, "TestName");

            _service.Setup(x => x.GetReservation(_expectedReservationId)).ReturnsAsync(reservation);

            _handler = new GetReservationQueryHandler(_validator.Object, _service.Object);
        }
Beispiel #7
0
        public void Then_Will_Throw_Exception_If_Provider_Access_Denied()
        {
            //Arrange
            _reservationAuthorisationService.Setup(s =>
                                                   s.ProviderReservationAccessAllowed(It.IsAny <uint>(), It.IsAny <GetReservationResponse>()))
            .ReturnsAsync(false);

            var command = new GetReservationQuery
            {
                Id    = _expectedReservationId,
                UkPrn = 12
            };

            //Act + Assert
            Assert.ThrowsAsync <UnauthorizedAccessException>(() => _handler.Handle(command, new CancellationToken()));

            _reservationAuthorisationService.Verify(s => s.ProviderReservationAccessAllowed(command.UkPrn, _response), Times.Once);
        }
        public async Task <ActionResult <ReservationDto> > GetReservation([FromRoute] Guid id)
        {
            try
            {
                var query = new GetReservationQuery()
                {
                    Id = id
                };
                var result = await _mediator.Send(query);

                return(Ok(result));
            }
            catch (EntityNotFoundException e)
            {
                logger.LogError(e.Message);
                return(NotFound(e.Message));
            }
        }
Beispiel #9
0
        public async Task Then_The_Reservation_Is_Returned_By_Id()
        {
            //Arrange
            var command = new GetReservationQuery
            {
                Id    = _expectedReservationId,
                UkPrn = 12
            };

            //Act
            var actual = await _handler.Handle(command, new CancellationToken());

            //Assert
            _reservationAuthorisationService.Verify(s => s.ProviderReservationAccessAllowed(command.UkPrn, _response), Times.Once);

            Assert.AreEqual(_expectedReservationId, actual.ReservationId);
            Assert.AreEqual(_expectedStartDate, actual.StartDate);
            Assert.AreEqual(_expectedExpiryDate, actual.ExpiryDate);
            Assert.AreEqual(ExpectedLegalEntityId, actual.AccountLegalEntityId);
            Assert.AreEqual(ExpectedLegalEntityName, actual.AccountLegalEntityName);
            Assert.AreEqual(ExpectedProviderId, actual.UkPrn);
        }
 public async Task <Reservation> Handle(GetReservationQuery request, CancellationToken cancellationToken)
 {
     return(await _repository.GetAsync(request.Id));
 }