Files
directus/packages/utils/node/generate-extensions-entrypoint.test.ts
Rijk van Zanten 2bc226d16f Change license to BSL-1.1 (#18330)
* Change license to BSL1.1

* Mark major version

* Fix formatting

* Remove duplicate heading

* Update formatting

* Copy paste error

* Update license

* Update license

* Format covenants

* Update readme.md

* Update licenses for packages

* Update readme.md

* Update contributors.yml

OG... but to be clear, rijkvanzanten is the one who really built all of this ❤️

* Tweak license in openapi

* Update packages/specs/src/openapi.yaml

* Add MIT license headers

* Use v10 in examples

* Update additional examples

* Update generate-extensions-entrypoint.test.ts

* Update tests to use latest v9 and v10 versions

* use lowercase for naming consistency

* change casing for api license

* Update migrations doc

* Update dictionary

* Consistent ordering of license field in app/package.json

* Use major version in specs again (but as string)

So it's valid for all v10 versions

* Consolidate readme's

---------

Co-authored-by: Ben Haynes <ben@directus.io>
Co-authored-by: Pascal Jufer <pascal-jufer@bluewin.ch>
Co-authored-by: ian <licitdev@gmail.com>
Co-authored-by: Azri Kahar <42867097+azrikahar@users.noreply.github.com>
2023-04-26 14:10:42 -04:00

122 lines
4.4 KiB
TypeScript

import { describe, expect, it } from 'vitest';
import type { Extension } from '@directus/types';
import { generateExtensionsEntrypoint } from './generate-extensions-entrypoint.js';
describe('generateExtensionsEntrypoint', () => {
it('returns an empty extension entrypoint if there is no App, Hybrid or Bundle extension', () => {
const mockExtensions: Extension[] = [
{
path: './extensions/bundle',
name: 'mock-bundle0-extension',
version: '1.0.0',
type: 'bundle',
entrypoint: { app: 'app.js', api: 'api.js' },
entries: [],
host: '^10.0.0',
local: false,
},
];
expect(generateExtensionsEntrypoint(mockExtensions)).toBe(
`export const interfaces = [];export const displays = [];export const layouts = [];export const modules = [];export const panels = [];export const operations = [];`
);
});
it('returns an extension entrypoint exporting a single App extension', () => {
const mockExtensions: Extension[] = [
{ path: './extensions/panel', name: 'mock-panel-extension', type: 'panel', entrypoint: 'index.js', local: true },
];
expect(generateExtensionsEntrypoint(mockExtensions)).toBe(
`import panel0 from './extensions/panel/index.js';export const interfaces = [];export const displays = [];export const layouts = [];export const modules = [];export const panels = [panel0];export const operations = [];`
);
});
it('returns an extension entrypoint exporting a single Hybrid extension', () => {
const mockExtensions: Extension[] = [
{
path: './extensions/operation',
name: 'mock-operation-extension',
type: 'operation',
entrypoint: { app: 'app.js', api: 'api.js' },
local: true,
},
];
expect(generateExtensionsEntrypoint(mockExtensions)).toBe(
`import operation0 from './extensions/operation/app.js';export const interfaces = [];export const displays = [];export const layouts = [];export const modules = [];export const panels = [];export const operations = [operation0];`
);
});
it('returns an extension entrypoint exporting from a single Bundle extension', () => {
const mockExtensions: Extension[] = [
{
path: './extensions/bundle',
name: 'mock-bundle-extension',
version: '1.0.0',
type: 'bundle',
entrypoint: { app: 'app.js', api: 'api.js' },
entries: [
{ type: 'interface', name: 'mock-bundle-interface' },
{ type: 'operation', name: 'mock-bundle-operation' },
{ type: 'hook', name: 'mock-bundle-hook' },
],
host: '^10.0.0',
local: false,
},
];
expect(generateExtensionsEntrypoint(mockExtensions)).toBe(
`import {interfaces as interfaceBundle0,operations as operationBundle0} from './extensions/bundle/app.js';export const interfaces = [...interfaceBundle0];export const displays = [];export const layouts = [];export const modules = [];export const panels = [];export const operations = [...operationBundle0];`
);
});
it('returns an extension entrypoint exporting multiple extensions', () => {
const mockExtensions: Extension[] = [
{
path: './extensions/display',
name: 'mock-display-extension',
type: 'display',
entrypoint: 'index.js',
local: true,
},
{
path: './extensions/operation',
name: 'mock-operation-extension',
type: 'operation',
entrypoint: { app: 'app.js', api: 'api.js' },
local: true,
},
{
path: './extensions/bundle',
name: 'mock-bundle0-extension',
version: '1.0.0',
type: 'bundle',
entrypoint: { app: 'app.js', api: 'api.js' },
entries: [
{ type: 'layout', name: 'mock-bundle-layout' },
{ type: 'operation', name: 'mock-bundle-operation' },
{ type: 'hook', name: 'mock-bundle-hook' },
],
host: '^10.0.0',
local: false,
},
{
path: './extensions/bundle-no-app',
name: 'mock-bundle-no-app-extension',
version: '1.0.0',
type: 'bundle',
entrypoint: { app: 'app.js', api: 'api.js' },
entries: [{ type: 'endpoint', name: 'mock-bundle-no-app-endpoint' }],
host: '^10.0.0',
local: false,
},
];
expect(generateExtensionsEntrypoint(mockExtensions)).toBe(
`import display0 from './extensions/display/index.js';import operation0 from './extensions/operation/app.js';import {layouts as layoutBundle0,operations as operationBundle0} from './extensions/bundle/app.js';export const interfaces = [];export const displays = [display0];export const layouts = [...layoutBundle0];export const modules = [];export const panels = [];export const operations = [operation0,...operationBundle0];`
);
});
});