import { ExternalBlacklistService } from "../../../src/services/ExternalBlacklist.service"; import { expect } from "chai"; import { CampaignModelFake } from "../fake/CampaignModelFake"; describe("ExternalBlacklistService", function () { let s3serviceResponse: Buffer; let s3service: any; let campaignModel: CampaignModelFake; let externalBlacklistService: ExternalBlacklistService; beforeEach(() => { s3serviceResponse = Buffer.from(["01234", "56789"].join("\n")); s3service = { loadFile: () => { return Promise.resolve({ file: s3serviceResponse }); }, }; campaignModel = new CampaignModelFake(); const bucket = "blacklist_bucket"; const fileName = "blacklist_fileName"; externalBlacklistService = new ExternalBlacklistService( s3service, campaignModel, 1, bucket, fileName ); }); describe("isBlacklisted", () => { it("should return false with empty blacklist", () => { expect(externalBlacklistService.isBlacklisted("01234")).to.equal(false); }); it("should return true when id is in blacklist", () => { externalBlacklistService.blacklist = new Set(["01234"]); expect(externalBlacklistService.isBlacklisted("01234")).to.equal(true); }); it("should return true when id is not in blacklist", () => { externalBlacklistService.blacklist = new Set(["56789"]); expect(externalBlacklistService.isBlacklisted("01234")).to.equal(false); }); }); describe("refresh", () => { it("should load file from s3", async function () { expect(externalBlacklistService.isBlacklisted("01234")).to.equal(false); expect(externalBlacklistService.isBlacklisted("56789")).to.equal(false); expect(externalBlacklistService.isBlacklisted("0987")).to.equal(false); s3service.loadFile = () => { return Promise.resolve({ file: s3serviceResponse, lastModified: Date.now(), }); }; await externalBlacklistService.refresh(); expect(externalBlacklistService.isBlacklisted("01234")).to.equal(true); expect(externalBlacklistService.isBlacklisted("56789")).to.equal(true); expect(externalBlacklistService.isBlacklisted("0987")).to.equal(false); }); it("should filter out forced external campaigns", async function () { campaignModel.campaigns = [ { id: "01234", force_external: true }, { id: "56789" }, { id: "0987" }, ]; expect(externalBlacklistService.isBlacklisted("01234")).to.equal(false); expect(externalBlacklistService.isBlacklisted("56789")).to.equal(false); expect(externalBlacklistService.isBlacklisted("0987")).to.equal(false); s3service.loadFile = () => { return Promise.resolve({ file: s3serviceResponse, lastModified: Date.now(), }); }; await externalBlacklistService.refresh(); expect(externalBlacklistService.isBlacklisted("01234")).to.equal(false); expect(externalBlacklistService.isBlacklisted("56789")).to.equal(true); expect(externalBlacklistService.isBlacklisted("0987")).to.equal(false); }); it("should not reload if the file is outdated", async function () { expect(externalBlacklistService.isBlacklisted("01234")).to.equal(false); expect(externalBlacklistService.isBlacklisted("56789")).to.equal(false); expect(externalBlacklistService.isBlacklisted("0987")).to.equal(false); s3service.loadFile = () => { return Promise.resolve({ file: s3serviceResponse, lastModified: Date.now() - 2 * 24 * 60 * 60 * 1000, }); }; await externalBlacklistService.refresh(); expect(externalBlacklistService.isBlacklisted("01234")).to.equal(false); expect(externalBlacklistService.isBlacklisted("56789")).to.equal(false); expect(externalBlacklistService.isBlacklisted("0987")).to.equal(false); }); }); });