Skip to content

Commit 64420e8

Browse files
Add tests: validate, request-builder
1 parent 3b9adcb commit 64420e8

File tree

7 files changed

+1776
-31
lines changed

7 files changed

+1776
-31
lines changed

package.json

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
"eventsource": "^2.0.1"
2727
},
2828
"devDependencies": {
29+
"@types/jest": "^27.5.1",
2930
"@types/node": "^17.0.31",
3031
"@typescript-eslint/eslint-plugin": "^5.23.0",
3132
"@typescript-eslint/parser": "^5.23.0",
@@ -35,10 +36,25 @@
3536
"eslint-plugin-prettier": "^4.0.0",
3637
"eslint-plugin-unicorn": "^42.0.0",
3738
"eslint-plugin-unused-imports": "^1.1.2",
39+
"jest": "^28.1.0",
3840
"nodemon": "^2.0.16",
3941
"rimraf": "^3.0.2",
42+
"ts-jest": "^28.0.2",
4043
"ts-node": "^10.7.0",
4144
"tsconfig-paths": "^4.0.0",
4245
"typescript": "^4.6.4"
46+
},
47+
"jest": {
48+
"moduleFileExtensions": [
49+
"js",
50+
"json",
51+
"ts"
52+
],
53+
"rootDir": "src",
54+
"testRegex": ".*\\.spec\\.ts$",
55+
"transform": {
56+
"^.+\\.(t|j)s$": "ts-jest"
57+
},
58+
"testEnvironment": "node"
4359
}
4460
}

src/__tests__/request-builder.spec.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import { buildUrlHeaders } from '../request-builder'
2+
3+
4+
describe('request builder test', () => {
5+
it('clean CF_', async () => {
6+
const
7+
{ url, headers } = buildUrlHeaders({
8+
'CF_API_KEY': 'the-token',
9+
'CF_HOST': 'g.codefresh.io',
10+
'CF_IMAGE': 'testImage'
11+
})
12+
expect(url).toEqual('g.codefresh.io/api/image-report?IMAGE=testImage')
13+
expect(headers).toEqual({ 'authorization': 'the-token' })
14+
})
15+
16+
})

src/__tests__/validate.spec.ts

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
import { validate } from '../validate'
2+
3+
4+
describe('client report-image validation', () => {
5+
it('Must have', async () => {
6+
try {
7+
validate({ ENV1: '1', someVal: 'ignored' })
8+
} catch (error) {
9+
expect(error.message).toBe(`Validation Error: ["CF_API_KEY must be provided as environment variable.","CF_IMAGE must be provided as environment variable."]`)
10+
return
11+
}
12+
fail(`should have thrown Validation Error`)
13+
})
14+
it('All OK', async () => {
15+
let res
16+
try {
17+
res = validate({ CF_API_KEY: '1', alsoIgnored: 'ignored', IGNORED: 'ignored too', CF_IMAGE: 'testImage', CF_HOST: `host.io` })
18+
} catch (error) {
19+
fail(`should have not thrown an error ${JSON.stringify(error)}`)
20+
}
21+
expect(res).toEqual({
22+
'CF_API_KEY': '1',
23+
'CF_HOST': 'host.io',
24+
'CF_IMAGE': 'testImage'
25+
})
26+
})
27+
it('default CF_HOST', async () => {
28+
let res
29+
try {
30+
res = validate({ CF_API_KEY: '1', alsoIgnored: 'ignored', IGNORED: 'ignored too', CF_IMAGE: 'testImage' })
31+
} catch (error) {
32+
fail(`should have not thrown an error ${JSON.stringify(error)}`)
33+
}
34+
expect(res).toEqual({
35+
'CF_API_KEY': '1',
36+
'CF_HOST': 'g.codefresh.io',
37+
'CF_IMAGE': 'testImage'
38+
})
39+
})
40+
})

src/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ async function main(): Promise<void> {
1212
console.debug('Running with verbose log')
1313
}
1414
const payload = validate(process.env)
15-
const { url, headers } = buildUrlHeaders(payload, encodeURIComponent)
15+
const { url, headers } = buildUrlHeaders(payload)
1616
if (verbose) {
1717
console.debug(`Payload: ${JSON.stringify(payload, null, 2)}`)
1818
console.debug(`Sending request: ${url}, headers: ${JSON.stringify(headers)}`)

src/request-builder.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@ function cleanThePrefixCF(env: Record<string, string|undefined>): Record<string,
1616
* @param payload
1717
* @param esc
1818
*/
19-
export function buildUrlHeaders(payload: Record<string, string | undefined>, esc: (uriComponent: (string | number | boolean)) => string) {
19+
export function buildUrlHeaders(payload: Record<string, string | undefined>) {
20+
const esc = encodeURIComponent
2021
const parameters = cleanThePrefixCF(payload)
2122
const headers = { 'authorization': parameters['API_KEY'] }
2223
const host = parameters['HOST']

src/validate.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ export function validate(payload: Record<string, string|undefined>): Record<stri
1111
messages.push(`CF_IMAGE must be provided as environment variable.`)
1212
}
1313
if (messages.length>0) {
14-
console.error()
1514
throw new Error(`Validation Error: ${JSON.stringify(messages)}`)
1615
}
1716
filtered['CF_HOST'] = filtered['CF_HOST'] || 'g.codefresh.io'

0 commit comments

Comments
 (0)