public async Task ShouldDeleteConditionCompletions_WhenCampaignCompleted()
        {
            // Arrange
            var fixture = new CampaignCompletionServiceTestsFixture().IncreaseCompletionCount();

            fixture.Campaign.CompletionCount = 3;

            fixture.ConditionCompletions.AddRange(new List <ConditionCompletion>
            {
                new ConditionCompletion(),
                new ConditionCompletion(),
            });

            // Execute
            await fixture.Service.IncreaseCompletionCountAsync(
                fixture.CampaignCompletion,
                fixture.Campaign,
                fixture.ConditionCompletions);

            // Assert
            fixture.ConditionCompletionServiceMock
            .Verify(c => c.DeleteAsync(It.IsAny <IEnumerable <ConditionCompletion> >()), Times.Once);

            fixture.CampaignCompletionRepositoryMock
            .Verify(c => c.UpdateAsync(It.IsAny <CampaignCompletion>()), Times.Once);
        }
        public async Task ShouldReturnCampaignCompletion_WhenSuchIsPresentedInTheDatabase()
        {
            // Arrange
            var fixture = new CampaignCompletionServiceTestsFixture().SetupGetCampaigns();

            // Execute
            var result = await fixture.Service.GetByCampaignAsync(fixture.CampaignCompletion.Id, fixture.CampaignCompletion.CustomerId);

            // Assert
            Assert.Equal(fixture.CampaignCompletion, result);
        }
        public async Task ShouldReturnNull_WhenNoCampaignCompletionIsPresentedInTheDatabase()
        {
            // Arrange
            var fixture = new CampaignCompletionServiceTestsFixture
            {
                CampaignCompletion = null
            }.SetupGetCampaigns();

            // Execute
            var result = await fixture.Service.GetByCampaignAsync(Guid.NewGuid().ToString("D"), Guid.NewGuid().ToString("D"));

            // Assert
            Assert.Null(result);
        }
        public async Task ShouldIncreaseCompletionCountAndMarkIsCompletedTrue_WhenMaxCompletionCountIsMetYet()
        {
            // Arrange
            var fixture = new CampaignCompletionServiceTestsFixture().IncreaseCompletionCount();

            fixture.Campaign.CompletionCount = 3;
            fixture.CampaignCompletion.CampaignCompletionCount = 2;

            // Execute
            await fixture.Service.IncreaseCompletionCountAsync(
                fixture.CampaignCompletion,
                fixture.Campaign,
                fixture.ConditionCompletions);

            // Assert
            fixture.ConditionCompletionServiceMock
            .Verify(c => c.UpdateAsync(It.IsAny <ConditionCompletion>()), Times.Never);

            fixture.CampaignCompletionRepositoryMock
            .Verify(c => c.UpdateAsync(It.IsAny <CampaignCompletion>()), Times.Once);
        }