public async Task UpdateActiveCampaigns_WhenNewActiveCampaignsShouldBeInserted_InsertThemAndReturnTrue() { //Arrange _campaignClientMock.Setup(c => c.Campaigns.GetAsync(It.IsAny <CampaignsPaginationRequestModel>())) .ReturnsAsync(CampaignCacheServiceTestData.GetPaginatedCampaignListResponseModel()); _dbMock.Setup(db => db.StringGetAsync($"BonusEngine:campaignId:{CampaignCacheServiceTestData.ActiveCampaignId}", It.IsAny <CommandFlags>())) .ReturnsAsync(value: RedisValue.Null); _dbMock.Setup(db => db.StringGetAsync($"BonusEngine:bonusType:{CampaignCacheServiceTestData.BonusTypeCampaigns.TypeName}", It.IsAny <CommandFlags>())) .ReturnsAsync(value: RedisValue.Null); _activeCampaignRepositoryMock.Setup(a => a.GetAll()) .ReturnsAsync(new List <Guid>()); _activeCampaignRepositoryMock.Setup(a => a.InsertAsync(It.IsAny <Guid>())) .ReturnsAsync(Guid.NewGuid()); //Act var result = await _campaignCacheService.UpdateActiveCampaigns(); //Assert _campaignClientMock .Verify(c => c.Campaigns.GetAsync(It.IsAny <CampaignsPaginationRequestModel>()), Times.Once); _dbMock .Verify(db => db.StringGetAsync($"BonusEngine:campaignId:{CampaignCacheServiceTestData.ActiveCampaignId}", It.IsAny <CommandFlags>()), Times.Once); _dbMock .Verify(db => db.StringGetAsync($"BonusEngine:bonusType:{CampaignCacheServiceTestData.BonusTypeCampaigns.TypeName}", It.IsAny <CommandFlags>()), Times.Once); _activeCampaignRepositoryMock .Verify(a => a.GetAll(), Times.Once); _activeCampaignRepositoryMock .Verify(a => a.InsertAsync(It.IsAny <Guid>()), Times.Once); _activeCampaignRepositoryMock .Verify(a => a.DeleteAsync(It.IsAny <Guid>()), Times.Never); Assert.True(result); }
public async Task UpdateActiveCampaigns_WhenNewActiveCampaignsShouldBeInsertedAndNotActiveShouldBeRemoved_UpdateThemAndReturnTrue() { //Arrange _campaignClientMock.Setup(c => c.Campaigns.GetAsync(It.IsAny <CampaignsPaginationRequestModel>())) .ReturnsAsync(CampaignCacheServiceTestData.GetPaginatedCampaignListResponseModel()); _dbMock.Setup(db => db.StringGetAsync($"BonusEngine:campaignId:{CampaignCacheServiceTestData.ActiveCampaignId}", It.IsAny <CommandFlags>())) .ReturnsAsync(value: JsonConvert.SerializeObject(CampaignCacheServiceTestData.CampaignModel)); _dbMock.Setup(db => db.StringGetAsync($"BonusEngine:campaignId:{CampaignCacheServiceTestData.NotActiveCampaignId}", It.IsAny <CommandFlags>())) .ReturnsAsync(value: JsonConvert.SerializeObject(CampaignCacheServiceTestData.CampaignModel)); _dbMock.Setup(db => db.StringGetAsync($"BonusEngine:bonusType:{CampaignCacheServiceTestData.BonusTypeCampaigns.TypeName}", It.IsAny <CommandFlags>())) .ReturnsAsync(value: JsonConvert.SerializeObject(CampaignCacheServiceTestData.BonusTypeCampaigns)); _activeCampaignRepositoryMock.Setup(a => a.GetAll()) .ReturnsAsync(CampaignCacheServiceTestData.ActiveCampaignIdsFromDb); _activeCampaignRepositoryMock.Setup(a => a.InsertAsync(It.IsAny <Guid>())) .ReturnsAsync(Guid.NewGuid()); //Act var result = await _campaignCacheService.UpdateActiveCampaigns(); //Assert _campaignClientMock .Verify(c => c.Campaigns.GetAsync(It.IsAny <CampaignsPaginationRequestModel>()), Times.Once); _dbMock .Verify(db => db.StringGetAsync($"BonusEngine:campaignId:{CampaignCacheServiceTestData.ActiveCampaignId}", It.IsAny <CommandFlags>()), Times.Exactly(2)); //when update existing active campaign in the cache _dbMock .Verify(db => db.KeyDeleteAsync($"BonusEngine:campaignId:{CampaignCacheServiceTestData.ActiveCampaignId}", It.IsAny <CommandFlags>()), Times.Once); _dbMock .Verify(db => db.KeyDeleteAsync($"BonusEngine:campaignId:{CampaignCacheServiceTestData.NotActiveCampaignId}", It.IsAny <CommandFlags>()), Times.Once); _dbMock .Verify(db => db.StringGetAsync($"BonusEngine:bonusType:{CampaignCacheServiceTestData.BonusTypeCampaigns.TypeName}", It.IsAny <CommandFlags>()), Times.Exactly(3)); _activeCampaignRepositoryMock .Verify(a => a.GetAll(), Times.Once); _activeCampaignRepositoryMock .Verify(a => a.InsertAsync(It.IsAny <Guid>()), Times.Never); _activeCampaignRepositoryMock .Verify(a => a.DeleteAsync(It.IsAny <Guid>()), Times.Once); Assert.True(result); }