public async Task GetVisitsTicketTariffsAsync__An_unexpected_internal_error_occurred__Should_throw_Exception()
        {
            _visitTariffDbServiceMock.Setup(x => x.GetAsync(It.IsNotNull <string>())).ThrowsAsync(new Exception());
            var controller = new TicketTariffsController(_ticketTariffDbServiceMock.Object, _visitTariffDbServiceMock.Object, _logger, _mapperMock.Object);

            Func <Task> result = async() => await controller.GetVisitsTicketTariffsAsync(_visitTariffId);

            await result.Should().ThrowExactlyAsync <Exception>();
        }
        public async Task GetVisitsTicketTariffsAsync__visit_tariff_not_found__Should_return_404NotFound_response_with_error()
        {
            _visitTariffDbServiceMock.Setup(x => x.GetAsync(It.IsNotNull <string>())).ThrowsAsync(new InvalidOperationException());
            var controller = new TicketTariffsController(_ticketTariffDbServiceMock.Object, _visitTariffDbServiceMock.Object, _logger, _mapperMock.Object);

            var result = await controller.GetVisitsTicketTariffsAsync(_visitTariffId);

            (result as ObjectResult).StatusCode.Should().Be(404);
            ((result as ObjectResult).Value as ResponseWrapper).Error.Should().NotBeEquivalentTo(new ApiError());
        }
        public async Task GetVisitsTicketTariffsAsync__At_least_one_element_found__Should_return_200OK_response_with_not_empty_IEnumerable()
        {
            _visitTariffDbServiceMock.Setup(x => x.GetAsync(It.IsNotNull <string>())).ReturnsAsync(_parentVisitTariff);
            _mapperMock.Setup(x => x.Map <IEnumerable <TicketTariffDto> >(It.IsNotNull <IEnumerable <TicketTariff> >())).Returns(_ticketTariffDtos.AsEnumerable());
            var controller = new TicketTariffsController(_ticketTariffDbServiceMock.Object, _visitTariffDbServiceMock.Object, _logger, _mapperMock.Object);

            var result = await controller.GetVisitsTicketTariffsAsync(_visitTariffId);

            (result as ObjectResult).StatusCode.Should().Be(200);
            (((result as ObjectResult).Value as ResponseWrapper).Data as IEnumerable <TicketTariffDto>).Should().NotBeEmpty();
        }
        public async Task GetVisitsTicketTariffsAsync__An_internal_error_reffered_to_the_database_occurred__Should_throw_InternalDbServiceException()
        {
            // Example of these errors: database does not exist, table does not exist etc.

            _visitTariffDbServiceMock.Setup(x => x.GetAsync(It.IsNotNull <string>())).ThrowsAsync(new InternalDbServiceException());
            var controller = new TicketTariffsController(_ticketTariffDbServiceMock.Object, _visitTariffDbServiceMock.Object, _logger, _mapperMock.Object);

            Func <Task> result = async() => await controller.GetVisitsTicketTariffsAsync(_visitTariffId);

            await result.Should().ThrowExactlyAsync <InternalDbServiceException>();
        }
        public async Task GetVisitsTicketTariffsAsync__visit_tariff_does_not_contain_any_ticket_tariffs__Should_return_200OK_response_with_empty_IEnumerable()
        {
            // Create parent VisitTariff with empty TicketTariffs.
            var parentvisitTariff = _parentVisitTariff.Clone() as VisitTariff;

            parentvisitTariff.TicketTariffs = Enumerable.Empty <TicketTariff>().ToArray();

            _visitTariffDbServiceMock.Setup(x => x.GetAsync(It.IsNotNull <string>())).ReturnsAsync(parentvisitTariff);
            _mapperMock.Setup(x => x.Map <IEnumerable <TicketTariffDto> >(It.IsNotNull <IEnumerable <TicketTariff> >())).Returns(Enumerable.Empty <TicketTariffDto>());
            var controller = new TicketTariffsController(_ticketTariffDbServiceMock.Object, _visitTariffDbServiceMock.Object, _logger, _mapperMock.Object);

            var result = await controller.GetVisitsTicketTariffsAsync(_visitTariffId);

            (result as ObjectResult).StatusCode.Should().Be(200);
            (((result as ObjectResult).Value as ResponseWrapper).Data as IEnumerable <TicketTariffDto>).Should().BeEmpty();
        }