summaryrefslogtreecommitdiff
path: root/playground/tests
diff options
context:
space:
mode:
Diffstat (limited to 'playground/tests')
-rw-r--r--playground/tests/integration/checkbox-list.test.js163
1 files changed, 163 insertions, 0 deletions
diff --git a/playground/tests/integration/checkbox-list.test.js b/playground/tests/integration/checkbox-list.test.js
new file mode 100644
index 0000000..0bcc402
--- /dev/null
+++ b/playground/tests/integration/checkbox-list.test.js
@@ -0,0 +1,163 @@
+const fs = require('fs');
+const path = require('path');
+const supertest = require('supertest');
+const { compileStrapi, createStrapi } = require('@strapi/core');
+
+const appRoot = path.resolve(__dirname, '..', '..');
+const dbFile = path.join(appRoot, '.tmp', 'test.db');
+
+const ensurePublicPermissions = async (strapi, actions) => {
+ const role = await strapi.db.query('plugin::users-permissions.role').findOne({
+ where: { type: 'public' },
+ });
+
+ if (!role) {
+ throw new Error('Public role not found');
+ }
+
+ const permissions = strapi.db.query('plugin::users-permissions.permission');
+
+ for (const action of actions) {
+ const existing = await permissions.findOne({
+ where: { action, role: role.id },
+ });
+
+ if (!existing) {
+ await permissions.create({
+ data: {
+ action,
+ role: role.id,
+ enabled: true,
+ },
+ });
+ continue;
+ }
+
+ if (!existing.enabled) {
+ await permissions.update({
+ where: { id: existing.id },
+ data: { enabled: true },
+ });
+ }
+ }
+};
+
+describe('checkbox-list custom field (API)', () => {
+ let strapi;
+ let request;
+
+ beforeAll(async () => {
+ process.chdir(appRoot);
+ process.env.NODE_ENV = 'test';
+ process.env.HOST = '127.0.0.1';
+ process.env.PORT = '1339';
+ process.env.STRAPI_DISABLE_ADMIN = 'true';
+ process.env.STRAPI_TELEMETRY_DISABLED = 'true';
+ process.env.DATABASE_FILENAME = '.tmp/test.db';
+ process.env.JWT_SECRET = process.env.JWT_SECRET || 'test-jwt-secret';
+ process.env.ADMIN_JWT_SECRET = process.env.ADMIN_JWT_SECRET || 'test-admin-jwt-secret';
+ process.env.APP_KEYS =
+ process.env.APP_KEYS || 'testKey1,testKey2,testKey3,testKey4';
+
+ if (fs.existsSync(dbFile)) {
+ fs.rmSync(dbFile);
+ }
+
+ const appContext = await compileStrapi();
+ strapi = createStrapi(appContext);
+ strapi.log.level = 'error';
+
+ await strapi.start();
+
+ request = supertest(`http://127.0.0.1:${process.env.PORT}`);
+
+ await ensurePublicPermissions(strapi, [
+ 'api::checkbox-item.checkbox-item.find',
+ 'api::checkbox-item.checkbox-item.findOne',
+ 'api::checkbox-item.checkbox-item.create',
+ 'api::checkbox-item.checkbox-item.update',
+ 'api::checkbox-item.checkbox-item.delete',
+ ]);
+ });
+
+ afterAll(async () => {
+ if (strapi) {
+ await strapi.destroy();
+ }
+ });
+
+ test('creates and reads entries with checkbox list values', async () => {
+ const createResponse = await request.post('/api/checkbox-items').send({
+ data: {
+ title: 'First',
+ choices: ['alpha', 'beta'],
+ choicesRequired: ['alpha'],
+ choicesPrivate: ['secret'],
+ choicesDefault: ['defaultA'],
+ },
+ });
+
+ expect([200, 201]).toContain(createResponse.status);
+ const documentId = createResponse.body?.data?.documentId;
+ expect(documentId).toBeTruthy();
+
+ const fetchResponse = await request.get(`/api/checkbox-items/${documentId}`);
+ expect(fetchResponse.status).toBe(200);
+ expect(fetchResponse.body?.data?.choices).toEqual(['alpha', 'beta']);
+ });
+
+ test('enforces required checkbox list field', async () => {
+ const response = await request.post('/api/checkbox-items').send({
+ data: {
+ title: 'Missing required',
+ choices: ['alpha'],
+ },
+ });
+
+ expect(response.status).toBe(400);
+ });
+
+ test('applies default values and hides private field', async () => {
+ const createResponse = await request.post('/api/checkbox-items').send({
+ data: {
+ title: 'Defaults',
+ choices: ['beta'],
+ choicesRequired: ['beta'],
+ },
+ });
+
+ expect([200, 201]).toContain(createResponse.status);
+ const documentId = createResponse.body?.data?.documentId;
+ expect(documentId).toBeTruthy();
+
+ const fetchResponse = await request.get(`/api/checkbox-items/${documentId}`);
+ expect(fetchResponse.status).toBe(200);
+
+ const data = fetchResponse.body?.data;
+ expect(data?.choicesDefault).toEqual(['defaultA']);
+ expect(data?.choicesPrivate).toBeUndefined();
+ });
+
+ test('updates entries with checkbox list values', async () => {
+ const createResponse = await request.post('/api/checkbox-items').send({
+ data: {
+ title: 'Update me',
+ choices: ['alpha'],
+ choicesRequired: ['alpha'],
+ },
+ });
+
+ const documentId = createResponse.body?.data?.documentId;
+ expect(documentId).toBeTruthy();
+
+ const updateResponse = await request.put(`/api/checkbox-items/${documentId}`).send({
+ data: {
+ choices: ['alpha', 'gamma'],
+ choicesRequired: ['alpha'],
+ },
+ });
+
+ expect(updateResponse.status).toBe(200);
+ expect(updateResponse.body?.data?.choices).toEqual(['alpha', 'gamma']);
+ });
+});