@insignia-education/api-sdk-js 0.15.72 → 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/.env +0 -1
- package/.env.test +0 -5
- 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/coverage/clover.xml +0 -380
- package/coverage/coverage-final.json +0 -3
- package/coverage/lcov-report/Client.js.html +0 -463
- package/coverage/lcov-report/base.css +0 -224
- package/coverage/lcov-report/block-navigation.js +0 -87
- package/coverage/lcov-report/favicon.png +0 -0
- package/coverage/lcov-report/index.html +0 -131
- package/coverage/lcov-report/prettify.css +0 -1
- package/coverage/lcov-report/prettify.js +0 -2
- package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
- package/coverage/lcov-report/sorter.js +0 -210
- package/coverage/lcov-report/src/Client.js.html +0 -478
- package/coverage/lcov-report/src/api/index.html +0 -116
- package/coverage/lcov-report/src/api/index.js.html +0 -127
- package/coverage/lcov-report/src/api/v1/Accounts.js.html +0 -151
- package/coverage/lcov-report/src/api/v1/Admin.js.html +0 -121
- package/coverage/lcov-report/src/api/v1/Auth.js.html +0 -157
- package/coverage/lcov-report/src/api/v1/Categories.js.html +0 -121
- package/coverage/lcov-report/src/api/v1/Changelogs.js.html +0 -118
- package/coverage/lcov-report/src/api/v1/Configs.js.html +0 -121
- package/coverage/lcov-report/src/api/v1/ContactForms.js.html +0 -121
- package/coverage/lcov-report/src/api/v1/ConversationalTopics.js.html +0 -121
- package/coverage/lcov-report/src/api/v1/Countries.js.html +0 -112
- package/coverage/lcov-report/src/api/v1/Coupons.js.html +0 -175
- package/coverage/lcov-report/src/api/v1/Courses.js.html +0 -460
- package/coverage/lcov-report/src/api/v1/Currencies.js.html +0 -118
- package/coverage/lcov-report/src/api/v1/Dashboard.js.html +0 -115
- package/coverage/lcov-report/src/api/v1/EducationCenter.js.html +0 -115
- package/coverage/lcov-report/src/api/v1/Employee.js.html +0 -169
- package/coverage/lcov-report/src/api/v1/Files.js.html +0 -160
- package/coverage/lcov-report/src/api/v1/Forums.js.html +0 -175
- package/coverage/lcov-report/src/api/v1/Hashes.js.html +0 -121
- package/coverage/lcov-report/src/api/v1/Insignias.js.html +0 -121
- package/coverage/lcov-report/src/api/v1/Languages.js.html +0 -121
- package/coverage/lcov-report/src/api/v1/MailBlacklist.js.html +0 -118
- package/coverage/lcov-report/src/api/v1/MailingLists.js.html +0 -127
- package/coverage/lcov-report/src/api/v1/Offers.js.html +0 -142
- package/coverage/lcov-report/src/api/v1/Organizations.js.html +0 -199
- package/coverage/lcov-report/src/api/v1/PaymentMethods.js.html +0 -121
- package/coverage/lcov-report/src/api/v1/Payments.js.html +0 -310
- package/coverage/lcov-report/src/api/v1/Premiums.js.html +0 -121
- package/coverage/lcov-report/src/api/v1/Quizzes.js.html +0 -214
- package/coverage/lcov-report/src/api/v1/Sales.js.html +0 -157
- package/coverage/lcov-report/src/api/v1/Search.js.html +0 -115
- package/coverage/lcov-report/src/api/v1/ShortLinks.js.html +0 -127
- package/coverage/lcov-report/src/api/v1/Surveys.js.html +0 -181
- package/coverage/lcov-report/src/api/v1/Taxes.js.html +0 -121
- package/coverage/lcov-report/src/api/v1/Teacher.js.html +0 -322
- package/coverage/lcov-report/src/api/v1/Telegram.js.html +0 -142
- package/coverage/lcov-report/src/api/v1/TwoFactor.js.html +0 -145
- package/coverage/lcov-report/src/api/v1/UserSessionTypes.js.html +0 -112
- package/coverage/lcov-report/src/api/v1/UserTypes.js.html +0 -121
- package/coverage/lcov-report/src/api/v1/Users.js.html +0 -778
- package/coverage/lcov-report/src/api/v1/Utm.js.html +0 -151
- package/coverage/lcov-report/src/api/v1/Webauthn.js.html +0 -190
- package/coverage/lcov-report/src/api/v1/Zoom.js.html +0 -124
- package/coverage/lcov-report/src/api/v1/index.html +0 -116
- package/coverage/lcov-report/src/api/v1/index.js.html +0 -373
- package/coverage/lcov-report/src/index.html +0 -116
- package/coverage/lcov-report/src/index.js.html +0 -109
- package/coverage/lcov-report/tests/helpers.js.html +0 -145
- package/coverage/lcov-report/tests/index.html +0 -116
- package/coverage/lcov.info +0 -553
- package/coverage/test-report.html +0 -277
- 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,31 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
api,
|
|
3
|
-
loginCustomer,
|
|
4
|
-
loginAdmin
|
|
5
|
-
} from '../../../helpers.js';
|
|
6
|
-
|
|
7
|
-
describe('api/v1/accounts', () => {
|
|
8
|
-
// Client#request() throws on non-2xx (err.status, err.data) rather than
|
|
9
|
-
// resolving — assert against a rejected promise, not a resolved
|
|
10
|
-
// {success, status}.
|
|
11
|
-
test('get | unauthenticated', async () => {
|
|
12
|
-
await expect(api.accounts.get()).rejects.toMatchObject({ status: 401 });
|
|
13
|
-
});
|
|
14
|
-
test('get | authenticated but other type', async () => {
|
|
15
|
-
await loginCustomer();
|
|
16
|
-
await expect(api.accounts.get()).rejects.toMatchObject({ status: 403 });
|
|
17
|
-
});
|
|
18
|
-
test('get | authenticated', async () => {
|
|
19
|
-
await loginAdmin();
|
|
20
|
-
await api.accounts.get()
|
|
21
|
-
.then(response => {
|
|
22
|
-
response = Object.values(response);
|
|
23
|
-
expect(response.length > 0).toBe(true);
|
|
24
|
-
response.forEach(account => {
|
|
25
|
-
expect(account["id"]).toBeDefined();
|
|
26
|
-
expect(account["cod"]).toBeDefined();
|
|
27
|
-
expect(account["title"]).toBeDefined();
|
|
28
|
-
});
|
|
29
|
-
});
|
|
30
|
-
});
|
|
31
|
-
});
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
api,
|
|
3
|
-
loginAdmin,
|
|
4
|
-
} from '../../../../helpers.js';
|
|
5
|
-
|
|
6
|
-
describe('api/v1/auth/login', () => {
|
|
7
|
-
// Client#request() throws on non-2xx (err.status, err.data) rather than
|
|
8
|
-
// resolving — assert against a rejected promise, not a resolved
|
|
9
|
-
// {success, status, errors}. Also no logout() before these — a fresh
|
|
10
|
-
// `api` client (one per test file) starts out unauthenticated, and
|
|
11
|
-
// logout() itself throws 401 when there's no session to clear.
|
|
12
|
-
test('POST | failure | no email validation', async () => {
|
|
13
|
-
const password = process.env.TEST_PASSWORD;
|
|
14
|
-
await expect(api.auth.login({ password })).rejects.toMatchObject({
|
|
15
|
-
status: 422,
|
|
16
|
-
data: { errors: expect.objectContaining({ email: expect.anything() }) },
|
|
17
|
-
});
|
|
18
|
-
});
|
|
19
|
-
|
|
20
|
-
test('POST | failure | no password validation', async () => {
|
|
21
|
-
const email = process.env.TEST_EMAIL;
|
|
22
|
-
await expect(api.auth.login({ email })).rejects.toMatchObject({
|
|
23
|
-
status: 422,
|
|
24
|
-
data: { errors: expect.objectContaining({ password: expect.anything() }) },
|
|
25
|
-
});
|
|
26
|
-
});
|
|
27
|
-
|
|
28
|
-
test('POST | success', async () => {
|
|
29
|
-
await loginAdmin()
|
|
30
|
-
.then(response => {
|
|
31
|
-
expect(response["success"]).toBeDefined();
|
|
32
|
-
expect(response["success"]).toBe("ok");
|
|
33
|
-
});
|
|
34
|
-
});
|
|
35
|
-
|
|
36
|
-
test('POST | double login', async () => {
|
|
37
|
-
await loginAdmin()
|
|
38
|
-
.then(() => loginAdmin()
|
|
39
|
-
.then(response => {
|
|
40
|
-
expect(response["success"]).toBeDefined();
|
|
41
|
-
expect(response["success"]).toBe("ok");
|
|
42
|
-
}));
|
|
43
|
-
});
|
|
44
|
-
});
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
api,
|
|
3
|
-
loginCustomer,
|
|
4
|
-
loginAdmin
|
|
5
|
-
} from '../../../helpers.js';
|
|
6
|
-
|
|
7
|
-
describe('api/v1/changelogs', () => {
|
|
8
|
-
test('get | authenticated', async () => {
|
|
9
|
-
await loginAdmin();
|
|
10
|
-
await api.changelogs.get()
|
|
11
|
-
.then(response => {
|
|
12
|
-
response = Object.values(response);
|
|
13
|
-
expect(Array.isArray(response)).toBe(true);
|
|
14
|
-
response.forEach(changelog => {
|
|
15
|
-
expect(changelog["id"]).toBeDefined();
|
|
16
|
-
expect(changelog["created_at"]).toBeDefined();
|
|
17
|
-
expect(changelog["updated_at"]).toBeDefined();
|
|
18
|
-
});
|
|
19
|
-
});
|
|
20
|
-
});
|
|
21
|
-
});
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
api,
|
|
3
|
-
loginCustomer,
|
|
4
|
-
loginAdmin
|
|
5
|
-
} from '../../../helpers.js';
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
describe('api/v1/contact-forms', () => {
|
|
9
|
-
test('get | authenticated', async () => {
|
|
10
|
-
await loginAdmin();
|
|
11
|
-
await api.contactForms.get()
|
|
12
|
-
.then(response => {
|
|
13
|
-
response = Object.values(response);
|
|
14
|
-
expect(Array.isArray(response)).toBe(true);
|
|
15
|
-
response.forEach(form => {
|
|
16
|
-
expect(form["id"]).toBeDefined();
|
|
17
|
-
expect(form["name"]).toBeDefined();
|
|
18
|
-
expect(form["email"]).toBeDefined();
|
|
19
|
-
expect(form["message"]).toBeDefined();
|
|
20
|
-
expect(form["created_at"]).toBeDefined();
|
|
21
|
-
});
|
|
22
|
-
});
|
|
23
|
-
});
|
|
24
|
-
});
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { api, loginAdmin } from '../../../helpers.js';
|
|
2
|
-
|
|
3
|
-
describe('api/v1/conversational-topics', () => {
|
|
4
|
-
test('get', async () => {
|
|
5
|
-
await loginAdmin();
|
|
6
|
-
await api.conversationalTopics.get()
|
|
7
|
-
.then(response => {
|
|
8
|
-
response = Object.values(response);
|
|
9
|
-
expect(response.length > 0).toBe(true);
|
|
10
|
-
response.forEach(topic => {
|
|
11
|
-
expect(topic["id"]).toBeDefined();
|
|
12
|
-
expect(topic["title"]).toBeDefined();
|
|
13
|
-
expect(topic["date"]).toBeDefined();
|
|
14
|
-
});
|
|
15
|
-
});
|
|
16
|
-
});
|
|
17
|
-
});
|
|
@@ -1,20 +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
|
-
describe('api/v1/countries', () => {
|
|
7
|
-
test('get', async () => {
|
|
8
|
-
await api.countries.get()
|
|
9
|
-
.then(response => {
|
|
10
|
-
response = Object.values(response);
|
|
11
|
-
expect(response.length > 0).toBe(true);
|
|
12
|
-
response.forEach(country => {
|
|
13
|
-
expect(country["id"]).toBeDefined();
|
|
14
|
-
expect(country["cod"]).toBeDefined();
|
|
15
|
-
expect(country["domain"]).toBeDefined();
|
|
16
|
-
expect(country["phone_prefix"]).toBeDefined();
|
|
17
|
-
})
|
|
18
|
-
});
|
|
19
|
-
});
|
|
20
|
-
});
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { api, loginAdmin } from '../../../helpers.js';
|
|
2
|
-
|
|
3
|
-
describe('api/v1/coupons', () => {
|
|
4
|
-
test('get | authenticated', async () => {
|
|
5
|
-
await loginAdmin();
|
|
6
|
-
await api.coupons.get()
|
|
7
|
-
.then(response => {
|
|
8
|
-
response = Object.values(response);
|
|
9
|
-
expect(Array.isArray(response)).toBe(true);
|
|
10
|
-
response.forEach(coupon => {
|
|
11
|
-
expect(coupon["id"]).toBeDefined();
|
|
12
|
-
expect(coupon["cod"]).toBeDefined();
|
|
13
|
-
expect(coupon["enabled"]).toBeDefined();
|
|
14
|
-
expect(coupon["created_at"]).toBeDefined();
|
|
15
|
-
expect(coupon["updated_at"]).toBeDefined();
|
|
16
|
-
});
|
|
17
|
-
});
|
|
18
|
-
});
|
|
19
|
-
});
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
api,
|
|
3
|
-
loginCustomer,
|
|
4
|
-
loginAdmin
|
|
5
|
-
} from '../../../../helpers.js';
|
|
6
|
-
|
|
7
|
-
describe('api/v1/courses/cod/:cod', () => {
|
|
8
|
-
test('get by cod | returns matching course', async () => {
|
|
9
|
-
const firstPage = await api.courses.get();
|
|
10
|
-
const cod = firstPage["data"][0]["cod"];
|
|
11
|
-
await api.courses.getByCod(cod)
|
|
12
|
-
.then(response => {
|
|
13
|
-
expect(response["id"]).toBeDefined();
|
|
14
|
-
expect(response["cod"]).toBe(cod);
|
|
15
|
-
expect(response["title"]).toBeDefined();
|
|
16
|
-
expect(response["enabled"]).toBeDefined();
|
|
17
|
-
});
|
|
18
|
-
});
|
|
19
|
-
});
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
api,
|
|
3
|
-
loginCustomer,
|
|
4
|
-
loginAdmin
|
|
5
|
-
} from '../../../../helpers.js';
|
|
6
|
-
|
|
7
|
-
describe('api/v1/courses', () => {
|
|
8
|
-
test('get | returns paginated list', async () => {
|
|
9
|
-
await api.courses.get()
|
|
10
|
-
.then(response => {
|
|
11
|
-
console.log(response);
|
|
12
|
-
expect(response["data"]).toBeDefined();
|
|
13
|
-
expect(response["current_page"]).toBeDefined();
|
|
14
|
-
expect(response["last_page"]).toBeDefined();
|
|
15
|
-
expect(response["per_page"]).toBeDefined();
|
|
16
|
-
expect(response["total"]).toBeDefined();
|
|
17
|
-
expect(Array.isArray(response["data"])).toBe(true);
|
|
18
|
-
expect(response["data"].length > 0).toBe(true);
|
|
19
|
-
response["data"].forEach(course => {
|
|
20
|
-
expect(course["id"]).toBeDefined();
|
|
21
|
-
expect(course["cod"]).toBeDefined();
|
|
22
|
-
expect(course["title"]).toBeDefined();
|
|
23
|
-
expect(course["enabled"]).toBeDefined();
|
|
24
|
-
});
|
|
25
|
-
});
|
|
26
|
-
});
|
|
27
|
-
|
|
28
|
-
test('get | page 2', async () => {
|
|
29
|
-
await api.courses.get(null, { page: 2 })
|
|
30
|
-
.then(response => {
|
|
31
|
-
expect(response["data"]).toBeDefined();
|
|
32
|
-
expect(response["current_page"]).toBe(2);
|
|
33
|
-
});
|
|
34
|
-
});
|
|
35
|
-
|
|
36
|
-
test('get by id | returns single course', async () => {
|
|
37
|
-
const firstPage = await api.courses.get();
|
|
38
|
-
const id = firstPage["data"][0]["id"];
|
|
39
|
-
await api.courses.get(id)
|
|
40
|
-
.then(response => {
|
|
41
|
-
expect(response["id"]).toBe(id);
|
|
42
|
-
expect(response["cod"]).toBeDefined();
|
|
43
|
-
expect(response["title"]).toBeDefined();
|
|
44
|
-
});
|
|
45
|
-
});
|
|
46
|
-
});
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
api,
|
|
3
|
-
loginCustomer,
|
|
4
|
-
loginAdmin
|
|
5
|
-
} from '../../../../helpers.js';
|
|
6
|
-
|
|
7
|
-
describe('api/v1/currencies/{id}/history', () => {
|
|
8
|
-
|
|
9
|
-
test('get', async () => {
|
|
10
|
-
await loginAdmin();
|
|
11
|
-
await api.currencies.getHistory(1)
|
|
12
|
-
.then(response => {
|
|
13
|
-
response = Object.values(response);
|
|
14
|
-
response.forEach(value => {
|
|
15
|
-
expect(value["id"]).toBeDefined();
|
|
16
|
-
expect(value["currency_id"]).toBeDefined();
|
|
17
|
-
expect(value["value"]).toBeDefined();
|
|
18
|
-
expect(value["created_at"]).toBeDefined();
|
|
19
|
-
expect(value["updated_at"]).toBeDefined();
|
|
20
|
-
})
|
|
21
|
-
});
|
|
22
|
-
});
|
|
23
|
-
});
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
api,
|
|
3
|
-
loginCustomer,
|
|
4
|
-
loginAdmin
|
|
5
|
-
} from '../../../../helpers.js';
|
|
6
|
-
|
|
7
|
-
describe('api/v1/currencies', () => {
|
|
8
|
-
test('get', async () => {
|
|
9
|
-
await api.currencies.get()
|
|
10
|
-
.then(response => {
|
|
11
|
-
expect(response["1"]).toBeDefined();
|
|
12
|
-
expect(response["1"]["id"]).toBeDefined();
|
|
13
|
-
expect(response["1"]["country_id"]).toBeDefined();
|
|
14
|
-
expect(response["1"]["cod"]).toBeDefined();
|
|
15
|
-
expect(response["1"]["title"]).toBeDefined();
|
|
16
|
-
expect(response["1"]["enabled"]).toBeDefined();
|
|
17
|
-
expect(response["1"]["has_double_expression"]).toBeDefined();
|
|
18
|
-
expect(response["1"]["double_expression_by"]).toBeDefined();
|
|
19
|
-
expect(response["1"]["created_at"]).toBeDefined();
|
|
20
|
-
expect(response["1"]["updated_at"]).toBeDefined();
|
|
21
|
-
expect(response["1"]["deleted_at"]).toBeDefined();
|
|
22
|
-
});
|
|
23
|
-
});
|
|
24
|
-
});
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
api,
|
|
3
|
-
loginCustomer,
|
|
4
|
-
loginAdmin
|
|
5
|
-
} from '../../../../helpers.js';
|
|
6
|
-
|
|
7
|
-
describe('api/v1/currencies/values', () => {
|
|
8
|
-
|
|
9
|
-
test('get', async () => {
|
|
10
|
-
await api.currencies.getValues()
|
|
11
|
-
.then(response => {
|
|
12
|
-
response = Object.values(response);
|
|
13
|
-
expect(response.length > 0).toBe(true);
|
|
14
|
-
response.forEach(value => {
|
|
15
|
-
expect(value["id"]).toBeDefined();
|
|
16
|
-
expect(value["currency_id"]).toBeDefined();
|
|
17
|
-
expect(value["value"]).toBeDefined();
|
|
18
|
-
expect(value["created_at"]).toBeDefined();
|
|
19
|
-
expect(value["updated_at"]).toBeDefined();
|
|
20
|
-
})
|
|
21
|
-
|
|
22
|
-
});
|
|
23
|
-
});
|
|
24
|
-
});
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import { Blob } from 'buffer';
|
|
2
|
-
import { api, loginAdmin } from '../../../helpers.js';
|
|
3
|
-
|
|
4
|
-
// A real 1x1 transparent PNG (67 bytes) — the upload endpoint sniffs actual
|
|
5
|
-
// file content, not just the claimed Content-Type, so arbitrary text with an
|
|
6
|
-
// 'image/png' MIME hint gets rejected with "Unsupported file type".
|
|
7
|
-
const PNG_1X1 = Buffer.from(
|
|
8
|
-
'iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNk+A8AAQUBAScY42YAAAAASUVORK5CYII=',
|
|
9
|
-
'base64'
|
|
10
|
-
);
|
|
11
|
-
|
|
12
|
-
describe('api/v1/files', () => {
|
|
13
|
-
// list() (paginated), not get() — get(id) requires an id and hits
|
|
14
|
-
// /files/{id}, unlike most other resources' get(id = null).
|
|
15
|
-
test('list | authenticated', async () => {
|
|
16
|
-
await loginAdmin();
|
|
17
|
-
await api.files.list()
|
|
18
|
-
.then(response => {
|
|
19
|
-
const files = response["data"];
|
|
20
|
-
expect(Array.isArray(files)).toBe(true);
|
|
21
|
-
files.forEach(file => {
|
|
22
|
-
expect(file["id"]).toBeDefined();
|
|
23
|
-
expect(file["created_at"]).toBeDefined();
|
|
24
|
-
expect(file["updated_at"]).toBeDefined();
|
|
25
|
-
});
|
|
26
|
-
});
|
|
27
|
-
});
|
|
28
|
-
|
|
29
|
-
test('upload | authenticated', async () => {
|
|
30
|
-
await loginAdmin();
|
|
31
|
-
const blob = new Blob([PNG_1X1], { type: 'image/png' });
|
|
32
|
-
const fd = new FormData();
|
|
33
|
-
fd.append('file', blob, 'test.png');
|
|
34
|
-
fd.append('type', 'uploads');
|
|
35
|
-
await api.files.upload(fd)
|
|
36
|
-
.then(response => {
|
|
37
|
-
expect(response).toBeDefined();
|
|
38
|
-
expect(response['url']).toBeDefined();
|
|
39
|
-
expect(response['id']).toBeDefined();
|
|
40
|
-
});
|
|
41
|
-
});
|
|
42
|
-
});
|
|
@@ -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
|
-
|