Enhance testing and integration for checkbox-list custom field
- 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:
163
playground/tests/integration/checkbox-list.test.js
Normal file
163
playground/tests/integration/checkbox-list.test.js
Normal 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']);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user