Skip to content

Commit 3629a9c

Browse files
committed
feat: node tests
1 parent 2069238 commit 3629a9c

File tree

7 files changed

+250
-1
lines changed

7 files changed

+250
-1
lines changed

src/SDK/Language/Node.php

+25
Original file line numberDiff line numberDiff line change
@@ -61,21 +61,41 @@ public function getFiles(): array
6161
'destination' => 'lib/permission.js',
6262
'template' => 'node/lib/permission.js.twig',
6363
],
64+
[
65+
'scope' => 'default',
66+
'destination' => 'test/permission.test.js',
67+
'template' => 'node/test/permission.test.js.twig',
68+
],
6469
[
6570
'scope' => 'default',
6671
'destination' => 'lib/role.js',
6772
'template' => 'node/lib/role.js.twig',
6873
],
74+
[
75+
'scope' => 'default',
76+
'destination' => 'test/role.test.js',
77+
'template' => 'node/test/role.test.js.twig',
78+
],
6979
[
7080
'scope' => 'default',
7181
'destination' => 'lib/id.js',
7282
'template' => 'node/lib/id.js.twig',
7383
],
84+
[
85+
'scope' => 'default',
86+
'destination' => 'test/id.test.js',
87+
'template' => 'node/test/id.test.js.twig',
88+
],
7489
[
7590
'scope' => 'default',
7691
'destination' => 'lib/query.js',
7792
'template' => 'node/lib/query.js.twig',
7893
],
94+
[
95+
'scope' => 'default',
96+
'destination' => 'test/query.test.js',
97+
'template' => 'node/test/query.test.js.twig',
98+
],
7999
[
80100
'scope' => 'default',
81101
'destination' => 'lib/inputFile.js',
@@ -91,6 +111,11 @@ public function getFiles(): array
91111
'destination' => '/lib/services/{{service.name | caseDash}}.js',
92112
'template' => 'node/lib/services/service.js.twig',
93113
],
114+
[
115+
'scope' => 'service',
116+
'destination' => '/test/services/{{service.name | caseDash}}.test.js',
117+
'template' => 'node/test/services/service.test.js.twig',
118+
],
94119
[
95120
'scope' => 'default',
96121
'destination' => 'README.md',

templates/node/package.json.twig

+2-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@
1111
"url": "{{ sdk.gitURL }}"
1212
},
1313
"devDependencies": {
14-
"@types/node": "^18.16.1"
14+
"@types/node": "^18.16.1",
15+
"jest": "^29.7.0"
1516
},
1617
"dependencies": {
1718
"axios": "^1.4.0",

templates/node/test/id.test.js.twig

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
const ID = require("../lib/id");
2+
3+
describe("ID", () => {
4+
test('unique', () => expect(ID.unique()).toEqual('unique()'));
5+
test('custom', () => expect(ID.custom('custom')).toEqual('custom'));
6+
});
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
const Permission = require("../lib/permission");
2+
const Role = require("../lib/role");
3+
4+
describe('Permission', () => {
5+
test('read', () => expect(Permission.read(Role.any())).toEqual('read("any")'));
6+
test('write', () => expect(Permission.write(Role.any())).toEqual('write("any")'));
7+
test('create', () => expect(Permission.create(Role.any())).toEqual('create("any")'));
8+
test('update', () => expect(Permission.update(Role.any())).toEqual('update("any")'));
9+
test('delete', () => expect(Permission.delete(Role.any())).toEqual('delete("any")'));
10+
})
+155
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,155 @@
1+
const Query = require("../lib/query");
2+
3+
const tests = [
4+
{
5+
description: 'with a string',
6+
value: 's',
7+
expectedValues: '["s"]'
8+
},
9+
{
10+
description: 'with a integer',
11+
value: 1,
12+
expectedValues: '[1]'
13+
},
14+
{
15+
description: 'with a double',
16+
value: 1.2,
17+
expectedValues: '[1.2]'
18+
},
19+
{
20+
description: 'with a whole number double',
21+
value: 1.0,
22+
expectedValues: '[1]'
23+
},
24+
{
25+
description: 'with a bool',
26+
value: false,
27+
expectedValues: '[false]'
28+
},
29+
{
30+
description: 'with a list',
31+
value: ['a', 'b', 'c'],
32+
expectedValues: '["a","b","c"]'
33+
}
34+
];
35+
36+
describe('Query', () => {
37+
describe('basic filter equal', () => {
38+
for (const t of tests) {
39+
test(t.description, () =>
40+
expect(Query.equal("attr", t.value))
41+
.toEqual(`equal("attr", ${t.expectedValues})`)
42+
)
43+
}
44+
})
45+
46+
describe('basic filter notEqual', () => {
47+
for (const t of tests) {
48+
test(t.description, () =>
49+
expect(Query.notEqual("attr", t.value))
50+
.toEqual(`notEqual("attr", ${t.expectedValues})`)
51+
)
52+
}
53+
});
54+
55+
describe('basic filter lessThan', () => {
56+
for (const t of tests) {
57+
test(t.description, () =>
58+
expect(Query.lessThan("attr", t.value))
59+
.toEqual(`lessThan("attr", ${t.expectedValues})`)
60+
)
61+
}
62+
});
63+
64+
describe('basic filter lessThanEqual', () => {
65+
for (const t of tests) {
66+
test(t.description, () =>
67+
expect(Query.lessThanEqual("attr", t.value))
68+
.toEqual(`lessThanEqual("attr", ${t.expectedValues})`)
69+
)
70+
}
71+
});
72+
73+
describe('basic filter greaterThan', () => {
74+
for (const t of tests) {
75+
test(t.description, () =>
76+
expect(Query.greaterThan("attr", t.value))
77+
.toEqual(`greaterThan("attr", ${t.expectedValues})`)
78+
)
79+
}
80+
});
81+
82+
describe('basic filter greaterThanEqual', () => {
83+
for (const t of tests) {
84+
test(t.description, () =>
85+
expect(Query.greaterThanEqual("attr", t.value))
86+
.toEqual(`greaterThanEqual("attr", ${t.expectedValues})`)
87+
)
88+
}
89+
});
90+
91+
test('search', () =>
92+
expect(Query.search('attr', 'keyword1 keyword2'))
93+
.toEqual('search("attr", ["keyword1 keyword2"])')
94+
);
95+
96+
test('isNull', () =>
97+
expect(Query.isNull('attr'))
98+
.toEqual('isNull("attr")')
99+
);
100+
101+
test('isNotNull', () =>
102+
expect(Query.isNotNull('attr'))
103+
.toEqual('isNotNull("attr")')
104+
);
105+
106+
describe('between', () => {
107+
test('with integers', () =>
108+
expect(Query.between('attr', 1, 2))
109+
.toEqual('between("attr", [1,2])')
110+
);
111+
test('with doubles', () =>
112+
expect(Query.between('attr', 1.2, 2.2))
113+
.toEqual('between("attr", [1.2,2.2])')
114+
);
115+
test('with strings', () =>
116+
expect(Query.between('attr', "a", "z"))
117+
.toEqual('between("attr", ["a","z"])')
118+
);
119+
});
120+
121+
test('select', () =>
122+
expect(Query.select(['attr1', 'attr2']))
123+
.toEqual('select(["attr1","attr2"])')
124+
);
125+
126+
test('orderAsc', () =>
127+
expect(Query.orderAsc('attr'))
128+
.toEqual('orderAsc("attr")')
129+
);
130+
131+
test('orderDesc', () =>
132+
expect(Query.orderDesc('attr'))
133+
.toEqual('orderDesc("attr")')
134+
);
135+
136+
test('cursorBefore', () =>
137+
expect(Query.cursorBefore('attr'))
138+
.toEqual('cursorBefore("attr")')
139+
);
140+
141+
test('cursorAfter', () =>
142+
expect(Query.cursorAfter('attr'))
143+
.toEqual('cursorAfter("attr")')
144+
);
145+
146+
test('limit', () =>
147+
expect(Query.limit(1))
148+
.toEqual('limit(1)')
149+
);
150+
151+
test('offset', () =>
152+
expect(Query.offset(1))
153+
.toEqual('offset(1)')
154+
);
155+
})

templates/node/test/role.test.js.twig

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
const Role = require("../lib/role");
2+
3+
describe('Role', () => {
4+
test('any', () => expect(Role.any()).toEqual('any'));
5+
test('user without status', () => expect(Role.user('custom')).toEqual('user:custom'));
6+
test('user with status', () => expect(Role.user('custom', 'verified')).toEqual('user:custom/verified'));
7+
test('users without status', () => expect(Role.users()).toEqual('users'));
8+
test('users with status', () => expect(Role.users('verified')).toEqual('users/verified'));
9+
test('guests', () => expect(Role.guests()).toEqual('guests'));
10+
test('team without role', () => expect(Role.team('custom')).toEqual('team:custom'))
11+
test('team with role', () => expect(Role.team('custom', 'owner')).toEqual('team:custom/owner'))
12+
test('member', () => expect(Role.member('custom')).toEqual('member:custom'))
13+
test('label', () => expect(Role.label('admin')).toEqual('label:admin'))
14+
})
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
const Client = require("../../lib/client");
2+
const InputFile = require("../../lib/inputFile");
3+
const {{ service.name | caseUcfirst }} = require("../../lib/services/{{ service.name | caseCamel }}");
4+
5+
const mockedAxios = require("axios");
6+
jest.mock('axios', () => jest.fn());
7+
8+
describe('{{ service.name | caseUcfirst }}', () => {
9+
const client = new Client();
10+
const {{ service.name | caseCamel }} = new {{ service.name | caseUcfirst }}(client);
11+
12+
{% for method in service.methods ~%}
13+
test('test method {{ method.name | caseCamel }}()', async () => {
14+
{%~ if method.type == 'webAuth' %}
15+
const data = '';
16+
{%~ elseif method.type == 'location' %}
17+
const data = new Uint8Array(0);
18+
{%~ else %}
19+
{%- if method.responseModel and method.responseModel != 'any' %}
20+
const data = {
21+
{%- for definition in spec.definitions ~%}{%~ if definition.name == method.responseModel -%}{%~ for property in definition.properties | filter((param) => param.required) ~%}
22+
'{{ property.name | escapeDollarSign }}': {% if property.type == 'object' %}{}{% elseif property.type == 'array' %}[]{% elseif property.type == 'string' %}'{{ property.example | escapeDollarSign }}'{% elseif property.type == 'boolean' %}true{% else %}{{ property.example }}{% endif %},{%~ endfor ~%}{% set break = true %}{%- else -%}{% set continue = true %}{%- endif -%}{%~ endfor -%}
23+
};
24+
{%~ else %}
25+
const data = '';
26+
{%~ endif %}
27+
{%~ endif %}
28+
29+
mockedAxios.mockImplementation(() => Promise.resolve({data: data}));
30+
31+
const response = await {{ service.name | caseCamel }}.{{ method.name | caseCamel }}({%~ for parameter in method.parameters.all | filter((param) => param.required) ~%}
32+
{% if parameter.type == 'object' %}{}{% elseif parameter.type == 'array' %}[]{% elseif parameter.type == 'file' %}InputFile.fromBuffer(new Uint8Array(0), 'image.png'){% elseif parameter.type == 'boolean' %}true{% elseif parameter.type == 'string' %}'{% if parameter.example is not empty %}{{ parameter.example | escapeDollarSign }}{% endif %}'{% elseif parameter.type == 'integer' and parameter['x-example'] is empty %}1{% elseif parameter.type == 'number' and parameter['x-example'] is empty %}1.0{% else %}{{ parameter.example }}{%~ endif ~%},{%~ endfor ~%}
33+
);
34+
35+
expect(response).toEqual(data);
36+
});
37+
{% endfor %}
38+
})

0 commit comments

Comments
 (0)