Skip to content

Commit da964d0

Browse files
committed
Add support for Core bundle
1 parent 8e19feb commit da964d0

File tree

5 files changed

+2602
-969
lines changed

5 files changed

+2602
-969
lines changed
Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
import * as dotenv from "dotenv";
2+
import { IPBogon, IPinfoCore } from "../src/common";
3+
import IPinfoCoreWrapper from "../src/ipinfoCoreWrapper";
4+
5+
const testIfTokenIsSet = process.env.IPINFO_TOKEN ? test : test.skip;
6+
7+
beforeAll(() => {
8+
dotenv.config();
9+
});
10+
11+
describe("IPinfoCoreWrapper", () => {
12+
testIfTokenIsSet("lookupIp", async () => {
13+
const ipinfoWrapper = new IPinfoCoreWrapper(process.env.IPINFO_TOKEN!);
14+
15+
// test multiple times for cache.
16+
for (let i = 0; i < 5; i++) {
17+
const data = (await ipinfoWrapper.lookupIp(
18+
"8.8.8.8"
19+
)) as IPinfoCore;
20+
21+
// Basic fields
22+
expect(data.ip).toEqual("8.8.8.8");
23+
24+
// Check nested geo object with all fields
25+
expect(data.geo).toBeDefined();
26+
expect(typeof data.geo).toBe("object");
27+
expect(data.geo.city).toBeDefined();
28+
expect(data.geo.region).toBeDefined();
29+
expect(data.geo.region_code).toBeDefined();
30+
expect(data.geo.country).toBeDefined();
31+
expect(data.geo.country_code).toBeDefined();
32+
expect(data.geo.continent).toBeDefined();
33+
expect(data.geo.continent_code).toBeDefined();
34+
expect(data.geo.latitude).toBeDefined();
35+
expect(data.geo.longitude).toBeDefined();
36+
expect(data.geo.timezone).toBeDefined();
37+
expect(data.geo.postal_code).toBeDefined();
38+
39+
// Check nested as object with all fields
40+
expect(data.as).toBeDefined();
41+
expect(typeof data.as).toBe("object");
42+
expect(data.as.asn).toBeDefined();
43+
expect(data.as.name).toBeDefined();
44+
expect(data.as.domain).toBeDefined();
45+
expect(data.as.type).toBeDefined();
46+
47+
// Check all network/type flags
48+
expect(data.is_anonymous).toBeDefined();
49+
expect(data.is_anycast).toBeDefined();
50+
expect(data.is_hosting).toBeDefined();
51+
expect(data.is_mobile).toBeDefined();
52+
expect(data.is_satellite).toBeDefined();
53+
54+
// Check geo formatting was applied
55+
expect(data.geo.country_name).toBeDefined();
56+
expect(data.geo.isEU).toBeDefined();
57+
expect(data.geo.country_flag_url).toBeDefined();
58+
}
59+
});
60+
61+
testIfTokenIsSet("isBogon", async () => {
62+
const ipinfoWrapper = new IPinfoCoreWrapper(process.env.IPINFO_TOKEN!);
63+
64+
const data = (await ipinfoWrapper.lookupIp("198.51.100.1")) as IPBogon;
65+
expect(data.ip).toEqual("198.51.100.1");
66+
expect(data.bogon).toEqual(true);
67+
});
68+
69+
test("Error is thrown for invalid token", async () => {
70+
const ipinfo = new IPinfoCoreWrapper("invalid-token");
71+
await expect(ipinfo.lookupIp("1.2.3.4")).rejects.toThrow();
72+
});
73+
74+
test("Error is thrown when response cannot be parsed as JSON", async () => {
75+
const baseUrlWithUnparseableResponse = "https://ipinfo.io/developers#";
76+
77+
const ipinfo = new IPinfoCoreWrapper(
78+
"token",
79+
undefined,
80+
undefined,
81+
undefined,
82+
baseUrlWithUnparseableResponse
83+
);
84+
85+
await expect(ipinfo.lookupIp("1.2.3.4")).rejects.toThrow();
86+
87+
const result = await ipinfo
88+
.lookupIp("1.2.3.4")
89+
.then((_) => "parseable")
90+
.catch((_) => "unparseable");
91+
92+
expect(result).toEqual("unparseable");
93+
});
94+
});

0 commit comments

Comments
 (0)