public void MultipleDifferentSpecificationsIncorrectCandidate_ReturnExpectedResultObject()
        {
            var candidate = new Event {
                Id = 1, Code = "Defqon.1", Name = "Purple Tail", IsArchival = false
            };
            var sut = new ItemBigIdSpecification()
                      .Or(new ActiveItemsSpecification())
                      .And(new CodeStartsWithSpecification("Defqon"))
                      .And(new NameContainsSpecification("Purple Tail").Not());

            var overall = sut.IsSatisfiedBy(candidate, out var result);

            Assert.False(overall);
            Assert.Equal(4, result.TotalSpecificationsCount);
            Assert.Equal(1, result.FailedSpecificationsCount);
            Assert.Equal(1, result.FailedSpecifications.Count);
            Assert.Equal(typeof(NameContainsSpecification), result.FailedSpecifications[0].SpecificationType);
            Assert.Equal(1, result.FailedSpecifications[0].Parameters.Count);
            Assert.Equal("Purple Tail", result.FailedSpecifications[0].Parameters["Filter"]);
            Assert.Equal(candidate, result.FailedSpecifications[0].Candidate);
            Assert.Equal(1, result.FailedSpecifications[0].Errors.Count);
            Assert.Equal("Item [Purple Tail] contains: [Purple Tail]", result.FailedSpecifications[0].Errors[0]);
            Assert.Equal(1, result.Errors.Count);
            Assert.Equal("Item [Purple Tail] contains: [Purple Tail]", result.Errors.First());
            Assert.False(result.OverallResult);
            Assert.Equal("ItemBigIdSpecification+Failed Or " +
                         "ActiveItemsSpecification And " +
                         "CodeStartsWithSpecification And " +
                         "NotNameContainsSpecification+Failed", result.Trace);
        }
        public void MultipleDifferentSpecificationsCorrectCandidate_ReturnExpectedResultObject()
        {
            var candidate = new Event
            {
                Id         = 5,
                Code       = "Defqon.1 Australia",
                Name       = "All aboard, this is easy for real",
                IsArchival = false
            };
            var sut = new ItemBigIdSpecification()
                      .Or(new ActiveItemsSpecification())
                      .And(new CodeStartsWithSpecification("Defqon"))
                      .And(new NameContainsSpecification("Purple Tail").Not());

            var overall = sut.IsSatisfiedBy(candidate, out var result);

            Assert.True(overall);
            Assert.Equal(4, result.TotalSpecificationsCount);
            Assert.Equal(0, result.FailedSpecificationsCount);
            Assert.Equal(0, result.FailedSpecifications.Count);
            Assert.Equal(0, result.Errors.Count);
            Assert.True(result.OverallResult);
            Assert.Equal("ItemBigIdSpecification+Failed Or " +
                         "ActiveItemsSpecification And " +
                         "CodeStartsWithSpecification And " +
                         "NotNameContainsSpecification", result.Trace);
        }