public async Task Handle_CallsInnerApi_ReturnsValidResponse(
            GetStandardResponse apiResponseStandard,
            GetProviderCourseResponse apiResponseProviderCourse,
            List <GetProviderCourseLocationsResponse> apiResponseProviderCourseLocation,
            GetProviderCourseQuery query,
            [Frozen] Mock <ICoursesApiClient <CoursesApiConfiguration> > apiClientMockCourse,
            [Frozen] Mock <IRoatpCourseManagementApiClient <RoatpV2ApiConfiguration> > apiClientMock,
            GetProviderCourseQueryHandler sut)
        {
            apiClientMockCourse.Setup(c => c.GetWithResponseCode <GetStandardResponse>(It.Is <GetStandardRequest>(c =>
                                                                                                                  c.GetUrl.Equals(new GetStandardRequest(query.LarsCode).GetUrl)))).
            ReturnsAsync(new ApiResponse <GetStandardResponse>(apiResponseStandard, HttpStatusCode.OK, ""));

            apiClientMock.Setup(c => c.GetWithResponseCode <GetProviderCourseResponse>(It.Is <GetProviderCourseRequest>(c =>
                                                                                                                        c.GetUrl.Equals(new GetProviderCourseRequest(query.Ukprn, query.LarsCode).GetUrl)))).
            ReturnsAsync(new ApiResponse <GetProviderCourseResponse>(apiResponseProviderCourse, HttpStatusCode.OK, ""));

            apiClientMock.Setup(c => c.GetWithResponseCode <List <GetProviderCourseLocationsResponse> >(It.Is <GetProviderCourseLocationsRequest>(c =>
                                                                                                                                                  c.GetUrl.Equals(new GetProviderCourseLocationsRequest(query.Ukprn, query.LarsCode).GetUrl)))).
            ReturnsAsync(new ApiResponse <List <GetProviderCourseLocationsResponse> >(apiResponseProviderCourseLocation, HttpStatusCode.OK, ""));

            var result = await sut.Handle(query, new CancellationToken());

            result.Should().NotBeNull();
        }
        public async Task Handle_CallsApiClient(
            [Frozen] Mock <IRoatpCourseManagementApiClient <RoatpV2ApiConfiguration> > apiClientMock,
            UpdateContactDetailsCommandHandler sut,
            UpdateContactDetailsCommand command,
            CancellationToken cancellationToken,
            ProviderCourseUpdateRequest request,
            GetProviderCourseResponse apiResponse)
        {
            apiClientMock.Setup(a => a.Get <GetProviderCourseResponse>(It.IsAny <GetProviderCourseRequest>())).ReturnsAsync(apiResponse);

            await sut.Handle(command, cancellationToken);

            apiClientMock.Verify(a => a.Put(It.IsAny <ProviderCourseUpdateRequest>()), Times.Once);
        }
        public void Handle_CallsApiClient_ReturnException(
            [Frozen] Mock <IRoatpCourseManagementApiClient <RoatpV2ApiConfiguration> > apiClientMock,
            UpdateContactDetailsCommandHandler sut,
            UpdateContactDetailsCommand command,
            CancellationToken cancellationToken,
            GetProviderCourseResponse apiResponse,
            HttpRequestContentException expectedException)
        {
            apiClientMock.Setup(a => a.Get <GetProviderCourseResponse>(It.IsAny <GetProviderCourseRequest>())).ReturnsAsync(apiResponse);

            apiClientMock.Setup(c => c.Put(It.IsAny <ProviderCourseUpdateRequest>())).Throws(expectedException);

            var actualException = Assert.ThrowsAsync <HttpRequestContentException>(() => sut.Handle(command, cancellationToken));

            actualException.Should().Be(expectedException);
        }
        public void Handle_CallsInnerApi_ReturnsExceptionWhenProviderCourseLocationsGetsBadRequest(
            GetStandardResponse apiResponseStandard,
            GetProviderCourseResponse apiResponseProviderCourse,
            GetProviderCourseQuery query,
            [Frozen] Mock <ICoursesApiClient <CoursesApiConfiguration> > apiClientMockCourse,
            [Frozen] Mock <IRoatpCourseManagementApiClient <RoatpV2ApiConfiguration> > apiClientMock,
            GetProviderCourseQueryHandler sut)
        {
            apiClientMockCourse.Setup(c => c.GetWithResponseCode <GetStandardResponse>(It.Is <GetStandardRequest>(c =>
                                                                                                                  c.GetUrl.Equals(new GetStandardRequest(query.LarsCode).GetUrl)))).
            ReturnsAsync(new ApiResponse <GetStandardResponse>(apiResponseStandard, HttpStatusCode.OK, ""));

            apiClientMock.Setup(c => c.GetWithResponseCode <GetProviderCourseResponse>(It.Is <GetProviderCourseRequest>(c =>
                                                                                                                        c.GetUrl.Equals(new GetProviderCourseRequest(query.Ukprn, query.LarsCode).GetUrl)))).
            ReturnsAsync(new ApiResponse <GetProviderCourseResponse>(apiResponseProviderCourse, HttpStatusCode.OK, ""));

            apiClientMock.Setup(c => c.GetWithResponseCode <List <GetProviderCourseLocationsResponse> >(It.Is <GetProviderCourseLocationsRequest>(c =>
                                                                                                                                                  c.GetUrl.Equals(new GetProviderCourseLocationsRequest(query.Ukprn, query.LarsCode).GetUrl))))
            .ReturnsAsync(new ApiResponse <List <GetProviderCourseLocationsResponse> >(new List <GetProviderCourseLocationsResponse> {
            }, HttpStatusCode.BadRequest, "Error"));

            Assert.ThrowsAsync <HttpRequestContentException>(() => sut.Handle(query, new CancellationToken()));
        }