Enhance testing and integration for checkbox-list custom field
Some checks failed
RenovateBot / renovate (push) Successful in 27s
Test / Basic (push) Failing after 1m43s
Test / E2E (push) Has been skipped

- Updated Gitea workflow to trigger on pushes to the master branch and refined job configurations for testing and E2E processes.
- Added Jest and Playwright configurations for integration and E2E testing.
- Introduced new checkbox-item API with corresponding controller, service, and routes.
- Created integration tests for the checkbox-list functionality, ensuring proper handling of required fields and default values.
- Updated package.json and package-lock.json to include necessary dependencies for testing.
This commit is contained in:
2026-02-05 15:38:25 +00:00
parent 0c71c44599
commit ee32dedf61
12 changed files with 3271 additions and 12 deletions

View File

@@ -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']);
});
});