public async Task Evaluate_ProducerObligationTypeChange_WithConflictDueToExistingEeeData_ReturnsExistingUniqueEeeDataObligationInErrorMessage
            (ObligationType existingProducerEeeDataObligationType, ObligationType existingProducerObligationType, ObligationType newProducerObligationType)
        {
            // Arrange
            var builder = new ProducerObligationTypeChangeBuilder();

            var existingProducerDetails = A.Fake<ProducerSubmission>();
            A.CallTo(() => existingProducerDetails.ObligationType)
                .Returns(existingProducerObligationType);

            A.CallTo(() => builder.ProducerQuerySet.GetLatestProducerForComplianceYearAndScheme(A<string>._, A<string>._, A<Guid>._))
                .Returns(existingProducerDetails);

            var eeeOutputAmount = A.Fake<EeeOutputAmount>();
            A.CallTo(() => eeeOutputAmount.ObligationType)
                .Returns(existingProducerEeeDataObligationType);

            A.CallTo(() => builder.SchemeEeeDataQuerySet.GetLatestProducerEeeData(A<string>._))
                .Returns(new List<EeeOutputAmount> { eeeOutputAmount });

            var newProducerDetails = new producerType
            {
                status = statusType.A,
                obligationType = newProducerObligationType.ToDeserializedXmlObligationType()
            };

            // Act
            var result = await builder.Build().Evaluate(newProducerDetails);

            // Assert
            A.CallTo(() => builder.ProducerQuerySet.GetLatestProducerForComplianceYearAndScheme(A<string>._, A<string>._, A<Guid>._))
                .MustHaveHappened();

            A.CallTo(() => builder.SchemeEeeDataQuerySet.GetLatestProducerEeeData(A<string>._))
                .MustHaveHappened();

            Assert.False(result.IsValid);
            Assert.Equal(ErrorLevel.Error, result.ErrorLevel);
            Assert.Contains(string.Format("because {0} EEE data has already been submitted", existingProducerEeeDataObligationType), result.Message);
        }
        public async Task Evaluate_ProducerObligationTypeChange_NoConflictWithExistingEeeData_ReturnsWarning
            (ObligationType existingProducerEeeDataObligationType, ObligationType existingProducerObligationType, ObligationType newProducerObligationType)
        {
            // Arrange
            var builder = new ProducerObligationTypeChangeBuilder();

            var existingProducerDetails = A.Fake<ProducerSubmission>();
            A.CallTo(() => existingProducerDetails.ObligationType)
                .Returns(existingProducerObligationType);

            A.CallTo(() => builder.ProducerQuerySet.GetLatestProducerForComplianceYearAndScheme(A<string>._, A<string>._, A<Guid>._))
                .Returns(existingProducerDetails);

            var eeeOutputAmount = A.Fake<EeeOutputAmount>();
            A.CallTo(() => eeeOutputAmount.ObligationType)
                .Returns(existingProducerEeeDataObligationType);

            A.CallTo(() => builder.SchemeEeeDataQuerySet.GetLatestProducerEeeData(A<string>._))
                .Returns(new List<EeeOutputAmount> { eeeOutputAmount });

            var newProducerDetails = new producerType
            {
                status = statusType.A,
                obligationType = newProducerObligationType.ToDeserializedXmlObligationType()
            };

            // Act
            var result = await builder.Build().Evaluate(newProducerDetails);

            // Assert
            A.CallTo(() => builder.ProducerQuerySet.GetLatestProducerForComplianceYearAndScheme(A<string>._, A<string>._, A<Guid>._))
                .MustHaveHappened();

            A.CallTo(() => builder.SchemeEeeDataQuerySet.GetLatestProducerEeeData(A<string>._))
                .MustHaveHappened();

            Assert.False(result.IsValid);
            Assert.Equal(ErrorLevel.Warning, result.ErrorLevel);
        }