@insignia-education/api-sdk-js 0.15.71 → 0.15.74
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +7 -2
- package/src/api/v1/Courses.js +4 -4
- package/src/api/v1/Employee.js +2 -0
- package/src/api/v1/Users.js +7 -0
- package/.ai/guidelines/research-order.md +0 -29
- package/.claude/agents/product-spec-architect.md +0 -163
- package/.claude/agents/senior-code-reviewer.md +0 -109
- package/.claude/agents/senior-software-developer.md +0 -90
- package/.claude/agents/senior-software-maintainer.md +0 -121
- package/.claude/skills/general/documentation/SKILL.md +0 -49
- package/.claude/skills/general/handoff/SKILL.md +0 -15
- package/.claude/skills/general/investigation/SKILL.md +0 -53
- package/.claude/skills/general/performance/SKILL.md +0 -31
- package/.claude/skills/git/pull-request/SKILL.md +0 -47
- package/.claude/skills/how-to-create-skills/SKILL.md +0 -82
- package/.github/hooks/pre-commit +0 -22
- package/.github/workflows/npm-publish-github-packages.yml +0 -29
- package/.nvmrc +0 -1
- package/AGENTS.md +0 -140
- package/CLAUDE.md +0 -51
- package/babel.config.cjs +0 -1
- package/eslint.config.mjs +0 -29
- package/jest.config.mjs +0 -47
- package/scss/Services/_notification.scss +0 -0
- package/scss/index.scss +0 -2
- package/tests/client.test.js +0 -265
- package/tests/helpers.js +0 -21
- package/tests/integration/api/v1/accounts.test.js +0 -31
- package/tests/integration/api/v1/auth/login.test.js +0 -44
- package/tests/integration/api/v1/changelogs.test.js +0 -21
- package/tests/integration/api/v1/contact-forms.test.js +0 -24
- package/tests/integration/api/v1/conversational-topics.test.js +0 -17
- package/tests/integration/api/v1/countries.test.js +0 -20
- package/tests/integration/api/v1/coupons.test.js +0 -19
- package/tests/integration/api/v1/courses/by-cod.test.js +0 -19
- package/tests/integration/api/v1/courses/index.test.js +0 -46
- package/tests/integration/api/v1/currencies/history.test.js +0 -23
- package/tests/integration/api/v1/currencies/index.test.js +0 -24
- package/tests/integration/api/v1/currencies/values.test.js +0 -24
- package/tests/integration/api/v1/files.test.js +0 -42
- package/tests/integration/api/v1/forums/index.test.js +0 -23
- package/tests/integration/api/v1/hashes.test.js +0 -18
- package/tests/integration/api/v1/insignias.test.js +0 -19
- package/tests/integration/api/v1/languages.test.js +0 -28
- package/tests/integration/api/v1/mail-blacklist.test.js +0 -19
- package/tests/integration/api/v1/offers.test.js +0 -20
- package/tests/integration/api/v1/organizations.test.js +0 -89
- package/tests/integration/api/v1/payment-methods/by-currencies.test.js +0 -51
- package/tests/integration/api/v1/quizzes/index.test.js +0 -37
- package/tests/integration/api/v1/short-links.test.js +0 -20
- package/tests/integration/api/v1/surveys/index.test.js +0 -40
- package/tests/integration/api/v1/taxes.test.js +0 -19
- package/tests/integration/api/v1/teacher/index.test.js +0 -53
- package/tests/integration/api/v1/telegram.test.js +0 -33
- package/tests/integration/api/v1/user-types.test.js +0 -17
- package/tests/integration/api/v1/users/cash-receivers.test.js +0 -19
- package/tests/integration/api/v1/users/index.test.js +0 -32
- package/tests/integration/api/v1/users/telegram.test.js +0 -36
- package/tests/integration/api/v1/zoom.test.js +0 -17
- package/tests/integration/loadEnv.js +0 -16
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
api,
|
|
3
|
-
loginCustomer,
|
|
4
|
-
loginAdmin
|
|
5
|
-
} from '../../../../helpers.js';
|
|
6
|
-
|
|
7
|
-
describe('api/v1/forums', () => {
|
|
8
|
-
test('get | authenticated', async () => {
|
|
9
|
-
await loginCustomer();
|
|
10
|
-
await api.forums.get()
|
|
11
|
-
.then(response => {
|
|
12
|
-
response = Object.values(response);
|
|
13
|
-
expect(Array.isArray(response)).toBe(true);
|
|
14
|
-
response.forEach(forum => {
|
|
15
|
-
expect(forum["id"]).toBeDefined();
|
|
16
|
-
expect(forum["title"]).toBeDefined();
|
|
17
|
-
expect(forum["enabled"]).toBeDefined();
|
|
18
|
-
expect(forum["created_at"]).toBeDefined();
|
|
19
|
-
expect(forum["updated_at"]).toBeDefined();
|
|
20
|
-
});
|
|
21
|
-
});
|
|
22
|
-
});
|
|
23
|
-
});
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { api, loginAdmin } from '../../../helpers.js';
|
|
2
|
-
|
|
3
|
-
describe('api/v1/hashes', () => {
|
|
4
|
-
test('get | authenticated', async () => {
|
|
5
|
-
await loginAdmin();
|
|
6
|
-
await api.hashes.get()
|
|
7
|
-
.then(response => {
|
|
8
|
-
response = Object.values(response);
|
|
9
|
-
expect(Array.isArray(response)).toBe(true);
|
|
10
|
-
response.forEach(hash => {
|
|
11
|
-
expect(hash["id"]).toBeDefined();
|
|
12
|
-
expect(hash["hash"]).toBeDefined();
|
|
13
|
-
expect(hash["created_at"]).toBeDefined();
|
|
14
|
-
expect(hash["updated_at"]).toBeDefined();
|
|
15
|
-
});
|
|
16
|
-
});
|
|
17
|
-
});
|
|
18
|
-
});
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import InsigniaApiV1 from '../../../../src/api/v1/index.js';
|
|
2
|
-
|
|
3
|
-
const api = new InsigniaApiV1(process.env.INSIGNIA_EDUCATION_API_BASE_URL);
|
|
4
|
-
|
|
5
|
-
describe('api/v1/insignias', () => {
|
|
6
|
-
test('get', async () => {
|
|
7
|
-
await api.insignias.get()
|
|
8
|
-
.then(response => {
|
|
9
|
-
response = Object.values(response);
|
|
10
|
-
expect(response.length > 0).toBe(true);
|
|
11
|
-
response.forEach(insignia => {
|
|
12
|
-
expect(insignia["id"]).toBeDefined();
|
|
13
|
-
expect(insignia["cod"]).toBeDefined();
|
|
14
|
-
expect(insignia["title"]).toBeDefined();
|
|
15
|
-
expect(insignia["enabled"]).toBeDefined();
|
|
16
|
-
});
|
|
17
|
-
});
|
|
18
|
-
});
|
|
19
|
-
});
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
import InsigniaApiV1 from '../../../../src/api/v1/index.js';
|
|
3
|
-
|
|
4
|
-
const api = new InsigniaApiV1(process.env.INSIGNIA_EDUCATION_API_BASE_URL);
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
describe('api/v1/languages', () => {
|
|
8
|
-
test('get', async () => {
|
|
9
|
-
await api.languages.get()
|
|
10
|
-
.then(response => {
|
|
11
|
-
response = Object.values(response);
|
|
12
|
-
expect(response.length > 0).toBe(true);
|
|
13
|
-
response.forEach(language => {
|
|
14
|
-
expect(language["id"]).toBeDefined();
|
|
15
|
-
expect(language["iso"]).toBeDefined();
|
|
16
|
-
expect(language["flag_emoji"]).toBeDefined();
|
|
17
|
-
expect(language["enabled"]).toBeDefined();
|
|
18
|
-
expect(language["default"]).toBeDefined();
|
|
19
|
-
expect(language["created_at"]).toBeDefined();
|
|
20
|
-
expect(language["updated_at"]).toBeDefined();
|
|
21
|
-
expect(language["deleted_at"]).toBeDefined();
|
|
22
|
-
})
|
|
23
|
-
|
|
24
|
-
});
|
|
25
|
-
});
|
|
26
|
-
});
|
|
27
|
-
|
|
28
|
-
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { api, loginAdmin } from '../../../helpers.js';
|
|
2
|
-
|
|
3
|
-
describe('api/v1/mail-blacklist', () => {
|
|
4
|
-
test('get | authenticated', async () => {
|
|
5
|
-
await loginAdmin();
|
|
6
|
-
await api.mailBlacklist.get()
|
|
7
|
-
.then(response => {
|
|
8
|
-
response = Object.values(response);
|
|
9
|
-
expect(Array.isArray(response)).toBe(true);
|
|
10
|
-
response.forEach(entry => {
|
|
11
|
-
expect(entry["id"]).toBeDefined();
|
|
12
|
-
expect(entry["email"]).toBeDefined();
|
|
13
|
-
expect(entry["type_id"]).toBeDefined();
|
|
14
|
-
expect(entry["created_at"]).toBeDefined();
|
|
15
|
-
expect(entry["updated_at"]).toBeDefined();
|
|
16
|
-
});
|
|
17
|
-
});
|
|
18
|
-
});
|
|
19
|
-
});
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { api, loginAdmin } from '../../../helpers.js';
|
|
2
|
-
|
|
3
|
-
describe('api/v1/offers', () => {
|
|
4
|
-
test('get | authenticated', async () => {
|
|
5
|
-
await loginAdmin();
|
|
6
|
-
await api.offers.get()
|
|
7
|
-
.then(response => {
|
|
8
|
-
response = Object.values(response);
|
|
9
|
-
expect(Array.isArray(response)).toBe(true);
|
|
10
|
-
response.forEach(offer => {
|
|
11
|
-
expect(offer["id"]).toBeDefined();
|
|
12
|
-
expect(offer["title"]).toBeDefined();
|
|
13
|
-
expect(offer["percentage"]).toBeDefined();
|
|
14
|
-
expect(offer["enabled"]).toBeDefined();
|
|
15
|
-
expect(offer["created_at"]).toBeDefined();
|
|
16
|
-
expect(offer["updated_at"]).toBeDefined();
|
|
17
|
-
});
|
|
18
|
-
});
|
|
19
|
-
});
|
|
20
|
-
});
|
|
@@ -1,89 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
api,
|
|
3
|
-
loginAdmin,
|
|
4
|
-
logout,
|
|
5
|
-
} from '../../../helpers.js';
|
|
6
|
-
|
|
7
|
-
// Permission boundaries below the organization-and-above gate (plain customer/student,
|
|
8
|
-
// 403) are covered by the api repo's own PHPUnit suite (OrganizationControllerTest) —
|
|
9
|
-
// no test account below EMPLOYEE-tier is available in this environment's .env.test.
|
|
10
|
-
//
|
|
11
|
-
// Client#request() throws on non-2xx (err.status, err.data) rather than resolving —
|
|
12
|
-
// error cases below assert against a rejected promise, not a resolved {success,status}.
|
|
13
|
-
|
|
14
|
-
describe('api/v1/organizations', () => {
|
|
15
|
-
test('get | unauthenticated', async () => {
|
|
16
|
-
await expect(api.organizations.get()).rejects.toMatchObject({ status: 401 });
|
|
17
|
-
});
|
|
18
|
-
|
|
19
|
-
test('create | employee-and-above', async () => {
|
|
20
|
-
await loginAdmin();
|
|
21
|
-
const response = await api.organizations.create({ nice_name: 'SDK Test Org' });
|
|
22
|
-
expect(response["id"]).toBeDefined();
|
|
23
|
-
expect(response["nice_name"]).toBe('SDK Test Org');
|
|
24
|
-
expect(response["user_id"]).toBeDefined();
|
|
25
|
-
});
|
|
26
|
-
|
|
27
|
-
test('get(id) | shape', async () => {
|
|
28
|
-
await loginAdmin();
|
|
29
|
-
const created = await api.organizations.create({ nice_name: 'SDK Test Org 2' });
|
|
30
|
-
const response = await api.organizations.get(created.id);
|
|
31
|
-
expect(response["id"]).toBe(created.id);
|
|
32
|
-
expect(response["nice_name"]).toBe('SDK Test Org 2');
|
|
33
|
-
expect(response["legal_name"]).toBeDefined();
|
|
34
|
-
expect(response["fiscal_number"]).toBeDefined();
|
|
35
|
-
expect(response["user_id"]).toBeDefined();
|
|
36
|
-
expect(response["created_at"]).toBeDefined();
|
|
37
|
-
expect(response["updated_at"]).toBeDefined();
|
|
38
|
-
});
|
|
39
|
-
|
|
40
|
-
test('edit', async () => {
|
|
41
|
-
await loginAdmin();
|
|
42
|
-
const created = await api.organizations.create({ nice_name: 'SDK Test Org 3' });
|
|
43
|
-
const response = await api.organizations.edit(created.id, { nice_name: 'SDK Test Org 3 Edited' });
|
|
44
|
-
expect(response["nice_name"]).toBe('SDK Test Org 3 Edited');
|
|
45
|
-
});
|
|
46
|
-
|
|
47
|
-
test('members(id).get() | empty for a freshly created organization', async () => {
|
|
48
|
-
await loginAdmin();
|
|
49
|
-
const created = await api.organizations.create({ nice_name: 'SDK Test Org 4' });
|
|
50
|
-
const response = await api.organizations.members(created.id).get();
|
|
51
|
-
expect(Object.values(response)).toEqual([]);
|
|
52
|
-
});
|
|
53
|
-
|
|
54
|
-
test('members(id).courses(userId) | rejects a non-member user_id', async () => {
|
|
55
|
-
await loginAdmin();
|
|
56
|
-
const created = await api.organizations.create({ nice_name: 'SDK Test Org 5' });
|
|
57
|
-
await expect(api.organizations.members(created.id).courses(created.user_id))
|
|
58
|
-
.rejects.toMatchObject({ status: 422 });
|
|
59
|
-
});
|
|
60
|
-
|
|
61
|
-
test('members(id).createPayment(userId, data) | reaches validation, not the OwnerOrStaff 403', async () => {
|
|
62
|
-
await loginAdmin();
|
|
63
|
-
const created = await api.organizations.create({ nice_name: 'SDK Test Org 6' });
|
|
64
|
-
// Empty payload — asserts the route/method wiring bypasses OwnerOrStaff and lands
|
|
65
|
-
// in UserPaymentCreateRequest validation (422), never a 403.
|
|
66
|
-
await expect(api.organizations.members(created.id).createPayment(created.user_id, {}))
|
|
67
|
-
.rejects.toMatchObject({ status: 422 });
|
|
68
|
-
});
|
|
69
|
-
});
|
|
70
|
-
|
|
71
|
-
describe('api/v1/users/organization-owners', () => {
|
|
72
|
-
test('get | unauthenticated', async () => {
|
|
73
|
-
// Runs after earlier logged-in tests share this file's `api` client instance —
|
|
74
|
-
// must explicitly log out, or its session cookie makes this look authenticated.
|
|
75
|
-
await logout();
|
|
76
|
-
await expect(api.users.organizationOwners()).rejects.toMatchObject({ status: 401 });
|
|
77
|
-
});
|
|
78
|
-
|
|
79
|
-
test('get | employee-and-above', async () => {
|
|
80
|
-
await loginAdmin();
|
|
81
|
-
const response = Object.values(await api.users.organizationOwners());
|
|
82
|
-
expect(Array.isArray(response)).toBe(true);
|
|
83
|
-
response.forEach(user => {
|
|
84
|
-
expect(user["id"]).toBeDefined();
|
|
85
|
-
expect(user["name"]).toBeDefined();
|
|
86
|
-
expect(user["type_id"]).toBeDefined();
|
|
87
|
-
});
|
|
88
|
-
});
|
|
89
|
-
});
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
api,
|
|
3
|
-
loginCustomer,
|
|
4
|
-
loginAdmin
|
|
5
|
-
} from '../../../../helpers.js';
|
|
6
|
-
describe('api/v1/payment-methods/by-currency/1', () => {
|
|
7
|
-
test('get', async () => {
|
|
8
|
-
await api.currencies.get()
|
|
9
|
-
.then(response => {
|
|
10
|
-
Object.values(response).forEach(async currency => {
|
|
11
|
-
await api.paymentMethods.byCurrency(currency.id)
|
|
12
|
-
.then(response => {
|
|
13
|
-
response = Object.values(response);
|
|
14
|
-
if(response.length == 0){
|
|
15
|
-
return;
|
|
16
|
-
}
|
|
17
|
-
expect(response[0]["id"]).toBeDefined();
|
|
18
|
-
expect(response[0]["currency_id"]).toBeDefined();
|
|
19
|
-
expect(response[0]["order"]).toBeDefined();
|
|
20
|
-
expect(response[0]["cod"]).toBeDefined();
|
|
21
|
-
expect(response[0]["title"]).toBeDefined();
|
|
22
|
-
expect(response[0]["requires_reference"]).toBeDefined();
|
|
23
|
-
expect(response[0]["can_upload_support"]).toBeDefined();
|
|
24
|
-
expect(response[0]["enabled"]).toBeDefined();
|
|
25
|
-
expect(response[0]["commission_amount"]).toBeDefined();
|
|
26
|
-
expect(response[0]["commission_percentage"]).toBeDefined();
|
|
27
|
-
expect(response[0]["description"]).toBeDefined();
|
|
28
|
-
expect(response[0]["image"]).toBeDefined();
|
|
29
|
-
expect(response[0]["icon"]).toBeDefined();
|
|
30
|
-
expect(response[0]["created_at"]).toBeDefined();
|
|
31
|
-
expect(response[0]["updated_at"]).toBeDefined();
|
|
32
|
-
expect(response[0]["deleted_at"]).toBeDefined();
|
|
33
|
-
})
|
|
34
|
-
})
|
|
35
|
-
})
|
|
36
|
-
});
|
|
37
|
-
});
|
|
38
|
-
|
|
39
|
-
describe('users/cash-receivers', () => {
|
|
40
|
-
test('get By currency id() returns a list', async () => {
|
|
41
|
-
await api.users.cashReceivers()
|
|
42
|
-
.then(response => {
|
|
43
|
-
expect(response.length > 0).toBe(true);
|
|
44
|
-
response.forEach(user => {
|
|
45
|
-
expect(user["id"]).toBeDefined();
|
|
46
|
-
expect(user["name"]).toBeDefined();
|
|
47
|
-
})
|
|
48
|
-
})
|
|
49
|
-
});
|
|
50
|
-
});
|
|
51
|
-
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
api,
|
|
3
|
-
loginCustomer,
|
|
4
|
-
loginAdmin
|
|
5
|
-
} from '../../../../helpers.js';
|
|
6
|
-
describe('api/v1/quizzes', () => {
|
|
7
|
-
test('get | authenticated', async () => {
|
|
8
|
-
await loginAdmin();
|
|
9
|
-
await api.quizzes.get()
|
|
10
|
-
.then(response => {
|
|
11
|
-
response = Object.values(response);
|
|
12
|
-
expect(Array.isArray(response)).toBe(true);
|
|
13
|
-
response.forEach(quiz => {
|
|
14
|
-
expect(quiz["id"]).toBeDefined();
|
|
15
|
-
expect(quiz["created_at"]).toBeDefined();
|
|
16
|
-
expect(quiz["updated_at"]).toBeDefined();
|
|
17
|
-
});
|
|
18
|
-
});
|
|
19
|
-
});
|
|
20
|
-
|
|
21
|
-
test('get questions | authenticated', async () => {
|
|
22
|
-
await loginAdmin();
|
|
23
|
-
const quizzes = await api.quizzes.get().then(r => Object.values(r));
|
|
24
|
-
if (quizzes.length === 0) return;
|
|
25
|
-
const quizId = quizzes[0]["id"];
|
|
26
|
-
await api.quizzes.questions(quizId).get()
|
|
27
|
-
.then(response => {
|
|
28
|
-
response = Object.values(response);
|
|
29
|
-
expect(Array.isArray(response)).toBe(true);
|
|
30
|
-
response.forEach(question => {
|
|
31
|
-
expect(question["id"]).toBeDefined();
|
|
32
|
-
expect(question["quiz_id"]).toBeDefined();
|
|
33
|
-
expect(question["question"]).toBeDefined();
|
|
34
|
-
});
|
|
35
|
-
});
|
|
36
|
-
});
|
|
37
|
-
});
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { api, loginAdmin } from '../../../helpers.js';
|
|
2
|
-
|
|
3
|
-
describe('api/v1/short-links', () => {
|
|
4
|
-
test('get | authenticated', async () => {
|
|
5
|
-
await loginAdmin();
|
|
6
|
-
await api.shortLinks.get()
|
|
7
|
-
.then(response => {
|
|
8
|
-
response = Object.values(response);
|
|
9
|
-
expect(Array.isArray(response)).toBe(true);
|
|
10
|
-
response.forEach(link => {
|
|
11
|
-
expect(link["id"]).toBeDefined();
|
|
12
|
-
expect(link["cod"]).toBeDefined();
|
|
13
|
-
expect(link["url"]).toBeDefined();
|
|
14
|
-
expect(link["enabled"]).toBeDefined();
|
|
15
|
-
expect(link["created_at"]).toBeDefined();
|
|
16
|
-
expect(link["updated_at"]).toBeDefined();
|
|
17
|
-
});
|
|
18
|
-
});
|
|
19
|
-
});
|
|
20
|
-
});
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
api,
|
|
3
|
-
loginCustomer,
|
|
4
|
-
loginAdmin
|
|
5
|
-
} from '../../../../helpers.js';
|
|
6
|
-
|
|
7
|
-
describe('api/v1/surveys', () => {
|
|
8
|
-
test('get | authenticated', async () => {
|
|
9
|
-
await loginCustomer();
|
|
10
|
-
await api.surveys.get()
|
|
11
|
-
.then(response => {
|
|
12
|
-
response = Object.values(response);
|
|
13
|
-
expect(Array.isArray(response)).toBe(true);
|
|
14
|
-
response.forEach(survey => {
|
|
15
|
-
expect(survey["id"]).toBeDefined();
|
|
16
|
-
expect(survey["cod"]).toBeDefined();
|
|
17
|
-
expect(survey["enabled"]).toBeDefined();
|
|
18
|
-
expect(survey["created_at"]).toBeDefined();
|
|
19
|
-
expect(survey["updated_at"]).toBeDefined();
|
|
20
|
-
});
|
|
21
|
-
});
|
|
22
|
-
});
|
|
23
|
-
|
|
24
|
-
test('get questions | authenticated', async () => {
|
|
25
|
-
await loginCustomer();
|
|
26
|
-
const surveys = await api.surveys.get().then(r => Object.values(r));
|
|
27
|
-
if (surveys.length === 0) return;
|
|
28
|
-
const surveyId = surveys[0]["id"];
|
|
29
|
-
await api.surveys.questions(surveyId).get()
|
|
30
|
-
.then(response => {
|
|
31
|
-
response = Object.values(response);
|
|
32
|
-
expect(Array.isArray(response)).toBe(true);
|
|
33
|
-
response.forEach(question => {
|
|
34
|
-
expect(question["id"]).toBeDefined();
|
|
35
|
-
expect(question["survey_id"]).toBeDefined();
|
|
36
|
-
expect(question["question"]).toBeDefined();
|
|
37
|
-
});
|
|
38
|
-
});
|
|
39
|
-
});
|
|
40
|
-
});
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { api, loginAdmin } from '../../../helpers.js';
|
|
2
|
-
|
|
3
|
-
describe('api/v1/taxes', () => {
|
|
4
|
-
test('get', async () => {
|
|
5
|
-
await loginAdmin();
|
|
6
|
-
await api.taxes.get()
|
|
7
|
-
.then(response => {
|
|
8
|
-
response = Object.values(response);
|
|
9
|
-
expect(response.length > 0).toBe(true);
|
|
10
|
-
response.forEach(tax => {
|
|
11
|
-
expect(tax["id"]).toBeDefined();
|
|
12
|
-
expect(tax["cod"]).toBeDefined();
|
|
13
|
-
expect(tax["title"]).toBeDefined();
|
|
14
|
-
expect(tax["percentage"]).toBeDefined();
|
|
15
|
-
expect(tax["enabled"]).toBeDefined();
|
|
16
|
-
});
|
|
17
|
-
});
|
|
18
|
-
});
|
|
19
|
-
});
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
api,
|
|
3
|
-
loginCustomer,
|
|
4
|
-
loginAdmin
|
|
5
|
-
} from '../../../../helpers.js';
|
|
6
|
-
|
|
7
|
-
describe('api/v1/teacher/absences', () => {
|
|
8
|
-
test('get | authenticated', async () => {
|
|
9
|
-
await loginAdmin();
|
|
10
|
-
await api.teacher.absences().get()
|
|
11
|
-
.then(response => {
|
|
12
|
-
response = Object.values(response);
|
|
13
|
-
expect(Array.isArray(response)).toBe(true);
|
|
14
|
-
response.forEach(absence => {
|
|
15
|
-
expect(absence["id"]).toBeDefined();
|
|
16
|
-
expect(absence["created_at"]).toBeDefined();
|
|
17
|
-
expect(absence["updated_at"]).toBeDefined();
|
|
18
|
-
});
|
|
19
|
-
});
|
|
20
|
-
});
|
|
21
|
-
});
|
|
22
|
-
|
|
23
|
-
describe('api/v1/teacher/config-sets', () => {
|
|
24
|
-
test('get | authenticated', async () => {
|
|
25
|
-
await loginAdmin();
|
|
26
|
-
await api.teacher.configSets().get()
|
|
27
|
-
.then(response => {
|
|
28
|
-
response = Object.values(response);
|
|
29
|
-
expect(Array.isArray(response)).toBe(true);
|
|
30
|
-
response.forEach(configSet => {
|
|
31
|
-
expect(configSet["id"]).toBeDefined();
|
|
32
|
-
expect(configSet["created_at"]).toBeDefined();
|
|
33
|
-
expect(configSet["updated_at"]).toBeDefined();
|
|
34
|
-
});
|
|
35
|
-
});
|
|
36
|
-
});
|
|
37
|
-
});
|
|
38
|
-
|
|
39
|
-
describe('api/v1/teacher/configs', () => {
|
|
40
|
-
test('get | authenticated', async () => {
|
|
41
|
-
await loginAdmin();
|
|
42
|
-
await api.teacher.configs().get()
|
|
43
|
-
.then(response => {
|
|
44
|
-
response = Object.values(response);
|
|
45
|
-
expect(Array.isArray(response)).toBe(true);
|
|
46
|
-
response.forEach(config => {
|
|
47
|
-
expect(config["id"]).toBeDefined();
|
|
48
|
-
expect(config["created_at"]).toBeDefined();
|
|
49
|
-
expect(config["updated_at"]).toBeDefined();
|
|
50
|
-
});
|
|
51
|
-
});
|
|
52
|
-
});
|
|
53
|
-
});
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
api,
|
|
3
|
-
loginAdmin,
|
|
4
|
-
loginCustomer,
|
|
5
|
-
} from '../../../helpers.js';
|
|
6
|
-
|
|
7
|
-
describe('api/v1/telegram', () => {
|
|
8
|
-
test('webhookStatus | requires authentication', async () => {
|
|
9
|
-
await expect(api.telegram.webhookStatus()).rejects.toMatchObject({ status: 401 });
|
|
10
|
-
});
|
|
11
|
-
|
|
12
|
-
test('webhookStatus | forbidden below admin', async () => {
|
|
13
|
-
await loginCustomer();
|
|
14
|
-
await expect(api.telegram.webhookStatus()).rejects.toMatchObject({ status: 403 });
|
|
15
|
-
});
|
|
16
|
-
|
|
17
|
-
test('webhookStatus | reachable by admin', async () => {
|
|
18
|
-
await loginAdmin();
|
|
19
|
-
await api.telegram.webhookStatus()
|
|
20
|
-
.then(response => {
|
|
21
|
-
expect(typeof response).toBe('object');
|
|
22
|
-
});
|
|
23
|
-
});
|
|
24
|
-
|
|
25
|
-
test('setWebhook | requires authentication', async () => {
|
|
26
|
-
await expect(api.telegram.setWebhook()).rejects.toMatchObject({ status: 401 });
|
|
27
|
-
});
|
|
28
|
-
|
|
29
|
-
test('setWebhook | forbidden below admin', async () => {
|
|
30
|
-
await loginCustomer();
|
|
31
|
-
await expect(api.telegram.setWebhook()).rejects.toMatchObject({ status: 403 });
|
|
32
|
-
});
|
|
33
|
-
});
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { api, loginAdmin } from '../../../helpers.js';
|
|
2
|
-
|
|
3
|
-
describe('api/v1/user-types', () => {
|
|
4
|
-
test('get', async () => {
|
|
5
|
-
await loginAdmin();
|
|
6
|
-
await api.userTypes.get()
|
|
7
|
-
.then(response => {
|
|
8
|
-
response = Object.values(response);
|
|
9
|
-
expect(response.length > 0).toBe(true);
|
|
10
|
-
response.forEach(userType => {
|
|
11
|
-
expect(userType["id"]).toBeDefined();
|
|
12
|
-
expect(userType["cod"]).toBeDefined();
|
|
13
|
-
expect(userType["title"]).toBeDefined();
|
|
14
|
-
});
|
|
15
|
-
});
|
|
16
|
-
});
|
|
17
|
-
});
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
api,
|
|
3
|
-
loginCustomer,
|
|
4
|
-
loginAdmin
|
|
5
|
-
} from '../../../../helpers.js';
|
|
6
|
-
|
|
7
|
-
describe('api/v1/users/cash-receivers', () => {
|
|
8
|
-
test('get', async () => {
|
|
9
|
-
await api.users.cashReceivers()
|
|
10
|
-
.then(response => {
|
|
11
|
-
expect(response.length > 0).toBe(true);
|
|
12
|
-
response.forEach(user => {
|
|
13
|
-
expect(user["id"]).toBeDefined();
|
|
14
|
-
expect(user["name"]).toBeDefined();
|
|
15
|
-
})
|
|
16
|
-
})
|
|
17
|
-
});
|
|
18
|
-
});
|
|
19
|
-
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
api,
|
|
3
|
-
loginCustomer,
|
|
4
|
-
loginAdmin
|
|
5
|
-
} from '../../../../helpers.js';
|
|
6
|
-
|
|
7
|
-
describe('api/v1/users', () => {
|
|
8
|
-
// get(id = null) with no id returns the authenticated user's own
|
|
9
|
-
// profile (UserController::get() -> auth()->user()), not a list.
|
|
10
|
-
test('get | authenticated', async () => {
|
|
11
|
-
await loginAdmin();
|
|
12
|
-
await api.users.get()
|
|
13
|
-
.then(response => {
|
|
14
|
-
expect(response["id"]).toBeDefined();
|
|
15
|
-
expect(response["name"]).toBeDefined();
|
|
16
|
-
expect(response["email"]).toBeDefined();
|
|
17
|
-
expect(response["created_at"]).toBeDefined();
|
|
18
|
-
expect(response["updated_at"]).toBeDefined();
|
|
19
|
-
});
|
|
20
|
-
});
|
|
21
|
-
|
|
22
|
-
test('get by id | authenticated', async () => {
|
|
23
|
-
await loginAdmin();
|
|
24
|
-
const me = await api.users.get();
|
|
25
|
-
await api.users.get(me["id"])
|
|
26
|
-
.then(response => {
|
|
27
|
-
expect(response["id"]).toBe(me["id"]);
|
|
28
|
-
expect(response["name"]).toBeDefined();
|
|
29
|
-
expect(response["email"]).toBeDefined();
|
|
30
|
-
});
|
|
31
|
-
});
|
|
32
|
-
});
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
api,
|
|
3
|
-
loginCustomer,
|
|
4
|
-
} from '../../../../helpers.js';
|
|
5
|
-
|
|
6
|
-
describe('api/v1/users/{id}/telegram', () => {
|
|
7
|
-
test('linkToken | authenticated owner returns a deep link', async () => {
|
|
8
|
-
await loginCustomer();
|
|
9
|
-
const me = await api.users.get();
|
|
10
|
-
await api.users.telegram(me["id"]).linkToken()
|
|
11
|
-
.then(response => {
|
|
12
|
-
expect(response["hash"]).toBeDefined();
|
|
13
|
-
expect(response["link"]).toContain(response["hash"]);
|
|
14
|
-
expect(response["link"]).toMatch(/^https:\/\/t\.me\//);
|
|
15
|
-
expect(response["expires_at"]).toBeDefined();
|
|
16
|
-
});
|
|
17
|
-
});
|
|
18
|
-
|
|
19
|
-
test('connect | rejects an invalid signature', async () => {
|
|
20
|
-
await loginCustomer();
|
|
21
|
-
const me = await api.users.get();
|
|
22
|
-
await expect(api.users.telegram(me["id"]).connect({
|
|
23
|
-
chat_id: '12345',
|
|
24
|
-
username: 'someuser',
|
|
25
|
-
expires_at: Math.floor(Date.now() / 1000) + 600,
|
|
26
|
-
signature: 'not-a-real-signature',
|
|
27
|
-
})).rejects.toMatchObject({ status: 422 });
|
|
28
|
-
});
|
|
29
|
-
|
|
30
|
-
test('connect | missing params returns a validation error', async () => {
|
|
31
|
-
await loginCustomer();
|
|
32
|
-
const me = await api.users.get();
|
|
33
|
-
await expect(api.users.telegram(me["id"]).connect({}))
|
|
34
|
-
.rejects.toMatchObject({ status: 422 });
|
|
35
|
-
});
|
|
36
|
-
});
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { api, loginAdmin } from '../../../helpers.js';
|
|
2
|
-
|
|
3
|
-
describe('api/v1/zoom/meetings', () => {
|
|
4
|
-
test('get | authenticated', async () => {
|
|
5
|
-
await loginAdmin();
|
|
6
|
-
await api.zoom.meetings().get()
|
|
7
|
-
.then(response => {
|
|
8
|
-
response = Object.values(response);
|
|
9
|
-
expect(Array.isArray(response)).toBe(true);
|
|
10
|
-
response.forEach(meeting => {
|
|
11
|
-
expect(meeting["id"]).toBeDefined();
|
|
12
|
-
expect(meeting["created_at"]).toBeDefined();
|
|
13
|
-
expect(meeting["updated_at"]).toBeDefined();
|
|
14
|
-
});
|
|
15
|
-
});
|
|
16
|
-
});
|
|
17
|
-
});
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { readFileSync } from 'fs';
|
|
2
|
-
import { resolve } from 'path';
|
|
3
|
-
|
|
4
|
-
try {
|
|
5
|
-
const content = readFileSync(resolve(process.cwd(), '.env.test'), 'utf8');
|
|
6
|
-
for (const line of content.split('\n')) {
|
|
7
|
-
const trimmed = line.trim();
|
|
8
|
-
if (!trimmed || trimmed.startsWith('#')) continue;
|
|
9
|
-
const eq = trimmed.indexOf('=');
|
|
10
|
-
if (eq > 0) {
|
|
11
|
-
process.env[trimmed.slice(0, eq).trim()] = trimmed.slice(eq + 1).trim();
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
} catch {
|
|
15
|
-
// .env.test not found — tests will use existing process.env
|
|
16
|
-
}
|