From 690c1f79659e926e96febc062a993f190397f923 Mon Sep 17 00:00:00 2001 From: Dieter Stinglhamber Date: Wed, 1 Dec 2021 16:33:01 +0100 Subject: [PATCH 1/4] fix the attribute generation for the CT generator --- packages/generators/generators/lib/plops/content-type.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/generators/generators/lib/plops/content-type.js b/packages/generators/generators/lib/plops/content-type.js index 23cf92b1d0..65e7ce872f 100644 --- a/packages/generators/generators/lib/plops/content-type.js +++ b/packages/generators/generators/lib/plops/content-type.js @@ -93,7 +93,7 @@ module.exports = plop => { }, ]; - if (attributes.lenght > 0) { + if (Object.entries(attributes).length > 0) { baseActions.push({ type: 'modify', path: `${filePath}/content-types/{{ singularName }}/schema.json`, From 5b39f3fb3d72bf806d6a9f4b5f3402bf3dab128b Mon Sep 17 00:00:00 2001 From: Dieter Stinglhamber Date: Thu, 2 Dec 2021 14:23:11 +0100 Subject: [PATCH 2/4] add test for the content type generator --- .../generators/lib/plops/__tests__/.gitignore | 1 + .../lib/plops/__tests__/content-type.test.js | 179 ++++++++++++++++++ 2 files changed, 180 insertions(+) create mode 100644 packages/generators/generators/lib/plops/__tests__/.gitignore create mode 100644 packages/generators/generators/lib/plops/__tests__/content-type.test.js diff --git a/packages/generators/generators/lib/plops/__tests__/.gitignore b/packages/generators/generators/lib/plops/__tests__/.gitignore new file mode 100644 index 0000000000..53752db253 --- /dev/null +++ b/packages/generators/generators/lib/plops/__tests__/.gitignore @@ -0,0 +1 @@ +output diff --git a/packages/generators/generators/lib/plops/__tests__/content-type.test.js b/packages/generators/generators/lib/plops/__tests__/content-type.test.js new file mode 100644 index 0000000000..fafd46e661 --- /dev/null +++ b/packages/generators/generators/lib/plops/__tests__/content-type.test.js @@ -0,0 +1,179 @@ +'use strict'; + +const path = require('path'); +const { readFile, rm, stat } = require('fs/promises'); +const strapiGenerators = require('../../index'); + +describe('Content Type Generator', () => { + const outputDirectory = path.join(__dirname, 'output'); + + afterEach(async () => { + await rm(outputDirectory, { recursive: true, force: true }); + }); + + test('it generates the schema', async () => { + await strapiGenerators.generate( + 'content-type', + { + displayName: 'testContentType', + singularName: 'testContentType', + pluralName: 'testContentTypes', + kind: 'singleType', + id: 'testContentType', + useDraftAndPublish: false, + destination: 'new', + bootstrapApi: false, + attributes: [], + }, + { dir: outputDirectory } + ); + + const generatedSchemaPath = path.join( + outputDirectory, + 'src/api/testContentType', + 'content-types/testContentType/schema.json' + ); + + expect((await stat(generatedSchemaPath)).isFile()).toBeTruthy(); + + const fileContent = await readFile(generatedSchemaPath, 'utf-8'); + + expect(fileContent).not.toBeNull(); + + const schema = JSON.parse(fileContent.toString()); + + expect(schema).toStrictEqual({ + kind: 'singleType', + collectionName: 'test_content_types', + info: { + singularName: 'testContentType', + pluralName: 'testContentTypes', + displayName: 'testContentType', + }, + options: { + draftAndPublish: false, + comment: '', + }, + attributes: {}, + }); + }); + + test('it scaffolds a new API', async () => { + await strapiGenerators.generate( + 'content-type', + { + displayName: 'testContentType', + singularName: 'testContentType', + pluralName: 'testContentTypes', + kind: 'singleType', + id: 'testContentType', + useDraftAndPublish: false, + destination: 'new', + bootstrapApi: true, + attributes: [], + }, + { dir: outputDirectory } + ); + const generatedApiPath = path.join(outputDirectory, 'src/api/testContentType'); + + expect((await stat(generatedApiPath)).isDirectory()).toBeTruthy(); + expect( + (await stat(path.join(generatedApiPath, 'controllers/testContentType.js'))).isFile() + ).toBeTruthy(); + expect( + (await stat(path.join(generatedApiPath, 'services/testContentType.js'))).isFile() + ).toBeTruthy(); + expect( + (await stat(path.join(generatedApiPath, 'routes/testContentType.js'))).isFile() + ).toBeTruthy(); + + const controller = await readFile( + path.join(generatedApiPath, 'controllers/testContentType.js') + ); + const router = await readFile(path.join(generatedApiPath, 'routes/testContentType.js')); + const service = await readFile(path.join(generatedApiPath, 'services/testContentType.js')); + + expect(controller.toString()).toMatchInlineSnapshot(` + "'use strict'; + + /** + * testContentType controller + */ + + const { createCoreController } = require('@strapi/strapi').factories; + + module.exports = createCoreController('api::testContentType.testContentType'); + " + `); + expect(router.toString()).toMatchInlineSnapshot(` + "'use strict'; + + /** + * testContentType router. + */ + + const { createCoreRouter } = require('@strapi/strapi').factories; + + module.exports = createCoreRouter('api::testContentType.testContentType'); + " + `); + expect(service.toString()).toMatchInlineSnapshot(` + "'use strict'; + + /** + * testContentType service. + */ + + const { createCoreService } = require('@strapi/strapi').factories; + + module.exports = createCoreService('api::testContentType.testContentType'); + " + `); + }); + + test('it generates the schema, then adds the attributes', async () => { + await strapiGenerators.generate( + 'content-type', + { + displayName: 'testContentType', + singularName: 'testContentType', + pluralName: 'testContentTypes', + kind: 'singleType', + id: 'testContentType', + useDraftAndPublish: false, + destination: 'new', + bootstrapApi: false, + attributes: [ + { + attributeName: 'name', + attributeType: 'string', + }, + { + attributeName: 'email', + attributeType: 'string', + }, + ], + }, + { dir: outputDirectory } + ); + + const generatedSchemaPath = path.join( + outputDirectory, + 'src/api/testContentType', + 'content-types/testContentType/schema.json' + ); + + expect((await stat(generatedSchemaPath)).isFile()).toBeTruthy(); + + const fileContent = await readFile(generatedSchemaPath, 'utf-8'); + + expect(fileContent).not.toBeNull(); + + const schema = JSON.parse(fileContent.toString()); + + expect(schema.attributes).toStrictEqual({ + email: { type: 'string' }, + name: { type: 'string' }, + }); + }); +}); From bc384861888a9c82300ef77ef2c7adf135f3755d Mon Sep 17 00:00:00 2001 From: Dieter Stinglhamber Date: Thu, 2 Dec 2021 14:43:16 +0100 Subject: [PATCH 3/4] update fs package --- .../generators/lib/plops/__tests__/content-type.test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/generators/generators/lib/plops/__tests__/content-type.test.js b/packages/generators/generators/lib/plops/__tests__/content-type.test.js index fafd46e661..6f023b8f51 100644 --- a/packages/generators/generators/lib/plops/__tests__/content-type.test.js +++ b/packages/generators/generators/lib/plops/__tests__/content-type.test.js @@ -1,7 +1,7 @@ 'use strict'; const path = require('path'); -const { readFile, rm, stat } = require('fs/promises'); +const { readFile, rm, stat } = require('fs-extra'); const strapiGenerators = require('../../index'); describe('Content Type Generator', () => { From cf5af8b189efca95df01a59798f9b37ed173f31a Mon Sep 17 00:00:00 2001 From: Dieter Stinglhamber Date: Thu, 9 Dec 2021 08:54:39 +0100 Subject: [PATCH 4/4] update gitignore --- packages/generators/generators/.gitignore | 3 +++ packages/generators/generators/lib/plops/__tests__/.gitignore | 1 - 2 files changed, 3 insertions(+), 1 deletion(-) delete mode 100644 packages/generators/generators/lib/plops/__tests__/.gitignore diff --git a/packages/generators/generators/.gitignore b/packages/generators/generators/.gitignore index ca406e37f9..a727f059a3 100644 --- a/packages/generators/generators/.gitignore +++ b/packages/generators/generators/.gitignore @@ -8,3 +8,6 @@ package-lock.json .DS_Store npm-debug.log .idea + +# Tests related folders +**/__tests__/output diff --git a/packages/generators/generators/lib/plops/__tests__/.gitignore b/packages/generators/generators/lib/plops/__tests__/.gitignore deleted file mode 100644 index 53752db253..0000000000 --- a/packages/generators/generators/lib/plops/__tests__/.gitignore +++ /dev/null @@ -1 +0,0 @@ -output