public async Task <StopApprenticeshipResult> StopApprenticeship(Core.Models.StopApprenticeshipRequest request, CancellationToken token)
        {
            try
            {
                request.Validate();

                await _commitmentApi.StopApprenticeship(request.ApprenticeshipId, new CommitmentsV2.Api.Types.Requests.StopApprenticeshipRequest
                {
                    AccountId     = request.AccountId,
                    MadeRedundant = request.MadeRedundant,
                    StopDate      = request.StopDate,
                    UserInfo      = new CommitmentsV2.Types.UserInfo
                    {
                        UserId          = request.UserId,
                        UserDisplayName = request.DisplayName,
                        UserEmail       = request.EmailAddress
                    }
                }, token);

                return(new StopApprenticeshipResult
                {
                    ApprenticeshipId = request.ApprenticeshipId
                });
            }
            catch (CommitmentsApiModelException cException)
            {
                _logger.LogError(cException, "Failure to stop the apprenticeship.");
                var errorMessages = string.Empty;
                return(new StopApprenticeshipResult
                {
                    ApprenticeshipId = request.ApprenticeshipId,
                    ErrorMessage = cException.Errors.Aggregate(errorMessages, (a, b) => a + " " + b.Message)
                });
            }
            catch (Exception e)
            {
                _logger.LogError(e, "Failure to stop the apprenticeship.");
                return(new StopApprenticeshipResult
                {
                    ApprenticeshipId = request.ApprenticeshipId,
                    ErrorMessage = e.Message
                });
            }
        }
        public async Task StoppingAnApprenticeship_ReturnsSuccess_WhenApiCallSucceeds(EmployerCommitmentsService sut, Core.Models.StopApprenticeshipRequest request)
        {
            //Given

            //When
            var result = await sut.StopApprenticeship(request, new CancellationToken());

            //Then
            result.Should().BeEquivalentTo(new StopApprenticeshipResult {
                ApprenticeshipId = request.ApprenticeshipId
            });
        }
        public async Task StoppingAnApprenticeship_ReturnsError_WhenApiCallFails([Frozen] Mock <ICommitmentsApiClient> apiClient, EmployerCommitmentsService sut, Core.Models.StopApprenticeshipRequest request, List <ErrorDetail> errors)
        {
            //Given
            apiClient.Setup(s => s.StopApprenticeship(request.ApprenticeshipId, It.IsAny <CommitmentsV2.Api.Types.Requests.StopApprenticeshipRequest>(), It.IsAny <CancellationToken>())).Throws(new CommitmentsApiModelException(errors));

            //When
            var result = await sut.StopApprenticeship(request, new CancellationToken());

            //Then
            result.HasError.Should().BeTrue();
            var errorMessage = GetErrorMessages(errors);

            result.ErrorMessage.Should().Be(errorMessage);
        }
        public async Task StoppingAnApprenticeship_ReturnsError_WhenPassedInvalidApprenticeshipId(EmployerCommitmentsService sut, Core.Models.StopApprenticeshipRequest request)
        {
            //Given
            request.AccountId        = 1;
            request.ApprenticeshipId = 0;

            //When
            var result = await sut.StopApprenticeship(request, new CancellationToken());

            //Then
            result.HasError.Should().BeTrue();
            result.ErrorMessage.Should().Be("apprenticeshipId must be greater than 0 (Parameter 'apprenticeshipId')");
        }