forked from smartcontractkit/external-adapters-js
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathelection.test.ts
155 lines (136 loc) · 3.48 KB
/
election.test.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
import { AdapterRequest } from '@chainlink/types'
import request, { SuperTest, Test } from 'supertest'
import process from 'process'
import nock from 'nock'
import http from 'http'
import { server as startServer } from '../../src'
import {
mockResponseWithMultipleRaces,
mockResponseWithNationalAndState,
mockResponseWithNoRaces,
mockStatusLevelResponse,
} from './fixtures'
import { AddressInfo } from 'net'
let oldEnv: NodeJS.ProcessEnv
const MOCK_KEY = 'mock-key'
beforeAll(() => {
oldEnv = JSON.parse(JSON.stringify(process.env))
process.env.API_KEY = MOCK_KEY
process.env.API_VERBOSE = process.env.API_VERBOSE || 'true'
if (process.env.RECORD) {
nock.recorder.rec()
}
})
afterAll(() => {
process.env = oldEnv
if (process.env.RECORD) {
nock.recorder.play()
}
nock.restore()
nock.cleanAll()
nock.enableNetConnect()
})
describe('execute', () => {
const id = '1'
let server: http.Server
let req: SuperTest<Test>
beforeAll(async () => {
server = await startServer()
req = request(`localhost:${(server.address() as AddressInfo).port}`)
})
afterAll((done) => {
server.close(done)
})
describe('with no races', () => {
const data: AdapterRequest = {
id,
data: {
date: '2021-06-08',
statePostal: 'VA',
level: 'state',
officeID: 'A',
raceType: 'D',
},
}
mockResponseWithNoRaces(MOCK_KEY)
it('should return error', async () => {
const response = await req
.post('/')
.send(data)
.set('Accept', '*/*')
.set('Content-Type', 'application/json')
.expect('Content-Type', /json/)
.expect(500)
expect(response.body).toMatchSnapshot()
})
})
describe('with multiple races', () => {
const data: AdapterRequest = {
id,
data: {
date: '2021-06-08',
statePostal: 'VA',
level: 'state',
officeID: 'A',
raceType: 'D',
},
}
mockResponseWithMultipleRaces(MOCK_KEY)
it('should return error', async () => {
const response = await req
.post('/')
.send(data)
.set('Accept', '*/*')
.set('Content-Type', 'application/json')
.expect('Content-Type', /json/)
.expect(500)
expect(response.body).toMatchSnapshot()
})
})
describe('with national level response', () => {
const data: AdapterRequest = {
id,
data: {
date: '2020-11-08',
statePostal: 'US',
level: 'state',
officeID: 'P',
raceType: 'G',
},
}
mockResponseWithNationalAndState(MOCK_KEY)
it('should return success', async () => {
const response = await req
.post('/')
.send(data)
.set('Accept', '*/*')
.set('Content-Type', 'application/json')
.expect('Content-Type', /json/)
.expect(200)
expect(response.body).toMatchSnapshot()
})
})
describe('with state level response', () => {
const data: AdapterRequest = {
id,
data: {
date: '2021-06-08',
statePostal: 'CA',
level: 'state',
officeID: 'A',
raceType: 'D',
},
}
mockStatusLevelResponse(MOCK_KEY)
it('should return success', async () => {
const response = await req
.post('/')
.send(data)
.set('Accept', '*/*')
.set('Content-Type', 'application/json')
.expect('Content-Type', /json/)
.expect(200)
expect(response.body).toMatchSnapshot()
})
})
})