1+ import * as dotenv from "dotenv"
2+ import { IPBogon , IPinfoResProxy } from "../src/common"
3+ import IPinfoResProxyWrapper from "../src/ipinfoResProxyWrapper"
4+
5+ const testIfTokenIsSet = process . env . IPINFO_TOKEN ? test : test . skip
6+
7+ beforeAll ( ( ) => {
8+ dotenv . config ( )
9+ } )
10+
11+ describe ( "IPinfoResProxyWrapper" , ( ) => {
12+ testIfTokenIsSet ( "lookupIp" , async ( ) => {
13+ const wrapper = new IPinfoResProxyWrapper ( process . env . IPINFO_TOKEN ! )
14+
15+ for ( let i = 0 ; i < 5 ; i ++ ) {
16+ const data = ( await wrapper . lookupIp ( "139.5.0.122" ) ) as IPinfoResProxy
17+
18+ expect ( data . ip ) . toEqual ( "139.5.0.122" )
19+ expect ( data . service ) . toBeDefined ( )
20+ expect ( typeof data . service ) . toBe ( "string" )
21+ expect ( data . last_seen ) . toBeDefined ( )
22+ expect ( typeof data . last_seen ) . toBe ( "string" )
23+ expect ( data . percent_days_seen ) . toBeDefined ( )
24+ expect ( typeof data . percent_days_seen ) . toBe ( "number" )
25+ }
26+ } )
27+
28+ testIfTokenIsSet ( "isBogon" , async ( ) => {
29+ const wrapper = new IPinfoResProxyWrapper ( process . env . IPINFO_TOKEN ! )
30+
31+ const data = ( await wrapper . lookupIp ( "198.51.100.1" ) ) as IPBogon
32+ expect ( data . ip ) . toEqual ( "198.51.100.1" )
33+ expect ( data . bogon ) . toEqual ( true )
34+ } )
35+
36+ test ( "Error is thrown for invalid token" , async ( ) => {
37+ const wrapper = new IPinfoResProxyWrapper ( "invalid-token" )
38+ await expect ( wrapper . lookupIp ( "1.2.3.4" ) ) . rejects . toThrow ( )
39+ } )
40+
41+ test ( "Error is thrown when response cannot be parsed as JSON" , async ( ) => {
42+ const baseUrlWithUnparseableResponse = "https://ipinfo.io/developers#"
43+ const wrapper = new IPinfoResProxyWrapper ( "token" , undefined , undefined , baseUrlWithUnparseableResponse )
44+
45+ await expect ( wrapper . lookupIp ( "1.2.3.4" ) ) . rejects . toThrow ( )
46+
47+ const result = await wrapper
48+ . lookupIp ( "1.2.3.4" )
49+ . then ( ( _ ) => "parseable" )
50+ . catch ( ( _ ) => "unparseable" )
51+
52+ expect ( result ) . toEqual ( "unparseable" )
53+ } )
54+ } )
0 commit comments