const { parseEtherscanPage } = require("../src/shared/etherscanLabels"); describe("etherscanLabels", () => { describe("parseEtherscanPage", () => { test("detects Fake_Phishing label in title", () => { const html = `Fake_Phishing184810 | Address: 0x00000c07...3ea470000 | Etherscan`; const result = parseEtherscanPage(html); expect(result.label).toBe("Fake_Phishing184810"); expect(result.isPhishing).toBe(true); expect(result.warning).toContain("Fake_Phishing184810"); expect(result.warning).toContain("Phish/Hack"); }); test("detects Fake_Phishing with different number", () => { const html = `Fake_Phishing5169 | Address: 0x3e0defb8...99a7a8a74 | Etherscan`; const result = parseEtherscanPage(html); expect(result.label).toBe("Fake_Phishing5169"); expect(result.isPhishing).toBe(true); }); test("detects Exploiter label", () => { const html = `Exploiter 42 | Address: 0xabcdef...1234 | Etherscan`; const result = parseEtherscanPage(html); expect(result.label).toBe("Exploiter 42"); expect(result.isPhishing).toBe(true); }); test("detects scam warning in body text", () => { const html = `Address: 0xabcdef...1234 | Etherscan` + `There are reports that this address was used in a Phishing scam.`; const result = parseEtherscanPage(html); expect(result.label).toBeNull(); expect(result.isPhishing).toBe(true); expect(result.warning).toContain("phishing/scam"); }); test("detects scam warning with label in body", () => { const html = `SomeScammer | Address: 0xabcdef...1234 | Etherscan` + `There are reports that this address was used in a scam.`; const result = parseEtherscanPage(html); expect(result.label).toBe("SomeScammer"); expect(result.isPhishing).toBe(true); expect(result.warning).toContain("SomeScammer"); }); test("returns clean result for legitimate address", () => { const html = `vitalik.eth | Address: 0xd8dA6BF2...37aA96045 | EtherscanOverview`; const result = parseEtherscanPage(html); expect(result.label).toBe("vitalik.eth"); expect(result.isPhishing).toBe(false); expect(result.warning).toBeNull(); }); test("returns clean result for unlabeled address", () => { const html = `Address: 0x1234567890...abcdef | EtherscanOverview`; const result = parseEtherscanPage(html); expect(result.label).toBeNull(); expect(result.isPhishing).toBe(false); expect(result.warning).toBeNull(); }); test("handles exchange labels correctly (not phishing)", () => { const html = `Coinbase 10 | Address: 0xa9d1e08c...b81d3e43 | EtherscanOverview`; const result = parseEtherscanPage(html); expect(result.label).toBe("Coinbase 10"); expect(result.isPhishing).toBe(false); }); test("handles contract names correctly (not phishing)", () => { const html = `Beacon Deposit Contract | Address: 0x00000000...03d7705Fa | EtherscanOverview`; const result = parseEtherscanPage(html); expect(result.label).toBe("Beacon Deposit Contract"); expect(result.isPhishing).toBe(false); }); test("handles empty HTML gracefully", () => { const result = parseEtherscanPage(""); expect(result.label).toBeNull(); expect(result.isPhishing).toBe(false); expect(result.warning).toBeNull(); }); test("handles malformed title tag", () => { const html = ``; const result = parseEtherscanPage(html); expect(result.label).toBeNull(); expect(result.isPhishing).toBe(false); }); test("detects wallet drainer warning", () => { const html = `Address: 0xabc...def | Etherscan` + `This is a known wallet drainer contract.`; const result = parseEtherscanPage(html); expect(result.isPhishing).toBe(true); }); }); });