Skip to content

Commit a74c853

Browse files
Add support for base16.encode(), base64.encode(), base64url.encode()
1 parent 6e0982a commit a74c853

File tree

12 files changed

+228
-103
lines changed

12 files changed

+228
-103
lines changed

jest/__mocks__/encoding.js

Lines changed: 33 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,44 +1,54 @@
11
export const mock_TextEncoder_encode = jest.fn();
22
export const TextEncoder = jest.fn().mockImplementation(() => {
3-
return {
4-
encoding: "utf-8",
5-
encode: mock_TextEncoder_encode,
6-
};
3+
return {
4+
encoding: "utf-8",
5+
encode: mock_TextEncoder_encode
6+
};
77
});
88

99
export const mock_TextDecoder_decode = jest.fn();
10-
export const TextDecoder = jest.fn().mockImplementation( () => {
11-
return {
12-
fatal: false,
13-
ignoreBOM: false,
14-
encoding: "utf-8",
15-
decode: mock_TextDecoder_decode
16-
};
10+
export const TextDecoder = jest.fn().mockImplementation(() => {
11+
return {
12+
fatal: false,
13+
ignoreBOM: false,
14+
encoding: "utf-8",
15+
decode: mock_TextDecoder_decode
16+
};
1717
});
1818

1919
export const atob = jest.fn();
2020
export const btoa = jest.fn();
2121

2222
export const mock_base64_decode = jest.fn();
23-
const Base64 = jest.fn().mockImplementation( () => {
24-
return {
25-
decode: mock_base64_decode,
26-
};
23+
export const mock_base64_encode = jest.fn();
24+
25+
const Base64 = jest.fn().mockImplementation(() => {
26+
return {
27+
decode: mock_base64_decode,
28+
encode: mock_base64_encode
29+
};
2730
});
31+
2832
export const base64 = new Base64();
2933

3034
export const mock_base64url_decode = jest.fn();
31-
const Base64url = jest.fn().mockImplementation( () => {
32-
return {
33-
decode: mock_base64url_decode,
34-
};
35+
export const mock_base64url_encode = jest.fn();
36+
37+
const Base64url = jest.fn().mockImplementation(() => {
38+
return {
39+
decode: mock_base64url_decode,
40+
encode: mock_base64url_encode
41+
};
3542
});
3643
export const base64url = new Base64url();
3744

3845
export const mock_base16_decode = jest.fn();
39-
const Base16 = jest.fn().mockImplementation( () => {
40-
return {
41-
decode: mock_base16_decode,
42-
};
46+
export const mock_base16_encode = jest.fn();
47+
48+
const Base16 = jest.fn().mockImplementation(() => {
49+
return {
50+
decode: mock_base16_decode,
51+
encode: mock_base16_encode
52+
};
4353
});
4454
export const base16 = new Base16();
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
{
2-
"edgeworker-version": "0.1",
3-
"description" : "Examples of atob, btoa, baseX.decode usage."
2+
"edgeworker-version": "0.2",
3+
"description" : "Examples of atob, btoa, baseX.decode, baseX.encode usage."
44
}
Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,37 @@
11
import { atob, btoa, base64, base64url, base16 } from "encoding";
22

33
export function onClientRequest(request) {
4-
let result = base64.decode("SGVsbG8=", "String"); //decodes to "Hello"
5-
let dec = atob("V29ybGQ="); //decodes to "World"
4+
let encoded = base64.encode(
5+
new Uint8Array([
6+
72,
7+
101,
8+
108,
9+
108,
10+
111,
11+
44,
12+
32,
13+
119,
14+
111,
15+
114,
16+
108,
17+
100,
18+
33
19+
])
20+
);
21+
let result = base64.decode("SGVsbG8=", "String"); // Decodes to "Hello"
22+
let dec = atob("V29ybGQ="); // Decodes to "World"
623
}
724

825
export function onOriginRequest(request) {
926
let enc = btoa("Hello");
27+
let encoded = base64url.encode(
28+
new Uint8Array([72, 101, 108, 108, 111, 32, 116, 104, 101, 114, 101])
29+
);
1030
let result1 = base64url.decode(enc, "String");
11-
let result2 = base16.decode("576F726C64", "String"); //decodes to "World"
31+
let result2 = base16.decode("576F726C64", "String"); // Decodes to "World"
32+
let enc3 = base16.encode(new Uint8Array([72, 101, 108, 108, 111])); // "Hello"
1233
}
1334

1435
export function onOriginResponse(request, response) {
15-
let result = base64.decode("SGVsbG8sIHdvcmxk", "Uint8Array"); //decodes to "[72,101,108,108,111,44,32,119,111,114,108,100]"
16-
}
36+
let result = base64.decode("SGVsbG8sIHdvcmxk", "Uint8Array"); // Decodes to "[72,101,108,108,111,44,32,119,111,114,108,100]"
37+
}

jest/package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

jest/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "edgeworkers-jest-mocks",
3-
"version": "1.0.25",
3+
"version": "1.0.26",
44
"description": "Akamai EdgeWorkers Jest mocks",
55
"dependencies": {
66
"@babel/core": "^7.17.8",

jest/test/examples/encoding/main.test.js

Lines changed: 72 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,81 @@
1-
import {onClientRequest, onOriginResponse, onOriginRequest} from "../../../edgeworkers/examples/respond-from-edgeworkers/encoding/encoding/main";
1+
import {
2+
onClientRequest,
3+
onOriginResponse,
4+
onOriginRequest
5+
} from "../../../edgeworkers/examples/respond-from-edgeworkers/encoding/encoding/main";
26
import Request from "request";
37
import Response from "response";
4-
import {atob, btoa, mock_base16_decode, mock_base64_decode, mock_base64url_decode} from "../../../__mocks__/encoding";
8+
import {
9+
atob,
10+
btoa,
11+
mock_base16_decode,
12+
mock_base16_encode,
13+
mock_base64_decode,
14+
mock_base64_encode,
15+
mock_base64url_decode,
16+
mock_base64url_encode
17+
} from "../../../__mocks__/encoding";
518

19+
describe("EdgeWorker that has atob, btoa, baseX.decode, baseX.encode usage", () => {
20+
beforeEach(() => {
21+
jest.clearAllMocks();
22+
});
623

7-
describe('EdgeWorker that has atob, btoa, baseX.decode usage', () => {
24+
test("onClientRequest decodes hello World by using decode and atob ", () => {
25+
let requestMock = new Request();
26+
onClientRequest(requestMock);
27+
expect(mock_base64_decode).toHaveBeenCalledTimes(1);
28+
expect(mock_base64_encode).toHaveBeenCalledTimes(1);
29+
expect(atob).toHaveBeenCalledTimes(1);
30+
expect(mock_base64_decode).toHaveBeenCalledWith("SGVsbG8=", "String");
31+
expect(mock_base64_encode).toHaveBeenCalledWith(
32+
new Uint8Array([
33+
72,
34+
101,
35+
108,
36+
108,
37+
111,
38+
44,
39+
32,
40+
119,
41+
111,
42+
114,
43+
108,
44+
100,
45+
33
46+
])
47+
);
48+
expect(atob).toBeCalledWith("V29ybGQ=");
49+
});
850

9-
beforeEach(() => {
10-
jest.clearAllMocks();
11-
});
51+
test("onOriginRequest decodes Hello World by using btoa, base64url.decode, base64url.encode, base16.encode and base16.decode", () => {
52+
let requestMock = new Request();
53+
onOriginRequest(requestMock);
54+
expect(btoa).toHaveBeenCalledTimes(1);
55+
expect(mock_base64url_decode).toHaveBeenCalledTimes(1);
56+
expect(mock_base64url_encode).toHaveBeenCalledTimes(1);
57+
expect(mock_base16_decode).toHaveBeenCalledTimes(1);
58+
expect(mock_base16_encode).toHaveBeenCalledTimes(1);
1259

13-
test("onClientRequest decodes hello World by using decode and atob ", () => {
14-
let requestMock = new Request();
15-
onClientRequest(requestMock);
16-
expect(mock_base64_decode).toHaveBeenCalledTimes(1);
17-
expect(atob).toHaveBeenCalledTimes(1);
18-
expect(mock_base64_decode).toHaveBeenCalledWith("SGVsbG8=", "String");
19-
expect(atob).toBeCalledWith("V29ybGQ=");
20-
});
60+
expect(btoa).toHaveBeenCalledWith("Hello");
61+
expect(mock_base16_decode).toHaveBeenCalledWith("576F726C64", "String");
62+
expect(mock_base16_encode).toHaveBeenCalledWith(
63+
new Uint8Array([72, 101, 108, 108, 111])
64+
);
65+
expect(mock_base64url_encode).toHaveBeenCalledWith(
66+
new Uint8Array([72, 101, 108, 108, 111, 32, 116, 104, 101, 114, 101])
67+
);
68+
});
2169

22-
test("onOriginRequest decodes Hello World by using btoa, base64url.decode and base16.decode", () => {
23-
let requestMock = new Request();
24-
onOriginRequest(requestMock);
25-
expect(btoa).toHaveBeenCalledTimes(1);
26-
expect(mock_base64url_decode).toHaveBeenCalledTimes(1);
27-
expect(mock_base16_decode).toHaveBeenCalledTimes(1);
70+
test("onOriginResponse decodes to Uint8Array using base64.decode", () => {
71+
let requestMock = new Request();
72+
let responseMock = new Response();
73+
onOriginResponse(requestMock, responseMock);
74+
expect(mock_base64_decode).toHaveBeenCalledTimes(1);
2875

29-
expect(btoa).toHaveBeenCalledWith("Hello");
30-
expect(mock_base16_decode).toHaveBeenCalledWith("576F726C64", "String");
31-
});
32-
33-
test("onOriginResponse decodes to Uint8Array using base64.decode", () => {
34-
let requestMock = new Request();
35-
let responseMock = new Response();
36-
onOriginResponse(requestMock, responseMock);
37-
expect(mock_base64_decode).toHaveBeenCalledTimes(1);
38-
39-
expect(mock_base64_decode).toHaveBeenCalledWith("SGVsbG8sIHdvcmxk", "Uint8Array");
40-
});
76+
expect(mock_base64_decode).toHaveBeenCalledWith(
77+
"SGVsbG8sIHdvcmxk",
78+
"Uint8Array"
79+
);
80+
});
4181
});
42-

mocha/__mocks__/encoding.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,26 +22,32 @@ export const atob = sinon.stub();
2222
export const btoa = sinon.stub();
2323

2424
export const mock_base64_decode = sinon.stub();
25+
export const mock_base64_encode = sinon.stub();
2526
class Base64 {
2627
constructor() {
2728
this.decode = mock_base64_decode;
29+
this.encode = mock_base64_encode;
2830
}
2931
}
3032
export const base64 = new Base64();
3133

3234

3335
export const mock_base64url_decode = sinon.stub();
36+
export const mock_base64url_encode = sinon.stub();
3437
class Base64url {
3538
constructor() {
3639
this.decode = mock_base64url_decode;
40+
this.encode = mock_base64url_encode;
3741
}
3842
}
3943
export const base64url = new Base64url();
4044

4145
export const mock_base16_decode = sinon.stub();
46+
export const mock_base16_encode = sinon.stub();
4247
class Base16 {
4348
constructor() {
4449
this.decode = mock_base16_decode;
50+
this.encode = mock_base16_encode;
4551
}
4652
}
4753
export const base16 = new Base16();
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
{
2-
"edgeworker-version": "0.1",
3-
"description" : "Examples of atob, btoa, baseX.decode usage."
2+
"edgeworker-version": "0.2",
3+
"description" : "Examples of atob, btoa, baseX.decode, baseX.encode usage."
44
}

mocha/edgeworkers/examples/respond-from-edgeworkers/encoding/encoding/main.js

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,35 @@
11
import { atob, btoa, base64, base64url, base16 } from "encoding";
22

33
export function onClientRequest(request) {
4+
let encoded = base64.encode(
5+
new Uint8Array([
6+
72,
7+
101,
8+
108,
9+
108,
10+
111,
11+
44,
12+
32,
13+
119,
14+
111,
15+
114,
16+
108,
17+
100,
18+
33
19+
])
20+
);
421
let result = base64.decode("SGVsbG8=", "String"); //decodes to "Hello"
522
let dec = atob("V29ybGQ="); //decodes to "World"
623
}
724

825
export function onOriginRequest(request) {
926
let enc = btoa("Hello");
27+
let encoded = base64url.encode(
28+
new Uint8Array([72, 101, 108, 108, 111, 32, 116, 104, 101, 114, 101])
29+
);
1030
let result1 = base64url.decode(enc, "String");
1131
let result2 = base16.decode("576F726C64", "String"); //decodes to "World"
32+
let enc3 = base16.encode(new Uint8Array([72, 101, 108, 108, 111])); // "Hello"
1233
}
1334

1435
export function onOriginResponse(request, response) {

mocha/package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

mocha/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "edgeworkers-mocha-mocks",
3-
"version": "1.0.25",
3+
"version": "1.0.26",
44
"description": "Akamai EdgeWorkers Mocha mocks",
55
"dependencies": {
66
"@babel/core": "^7.17.8",

0 commit comments

Comments
 (0)