import { describe, expect, it } from 'vitest' import { controllerIdFromParams, controllerIdFromPath, controllerPath, parseControllerId, pluginKey, } from '../../src/app/controllerRoutes' describe('controller routes (D-10)', () => { it('parses a three-segment controller id', () => { expect(parseControllerId('acme.demo.widgets')).toEqual({ vendor: 'acme', plugin: 'demo', controller: 'widgets' }) expect(parseControllerId('a_b.c-d.E9')).toEqual({ vendor: 'a_b', plugin: 'c-d', controller: 'E9' }) }) it.each(['', 'acme.demo', 'acme.demo.widgets.extra', 'acme..widgets', 'acme.demo.wid gets', 'acme/demo/widgets', '../x.y.z'])( 'rejects %j', (id) => { expect(parseControllerId(id)).toBeNull() expect(controllerPath(id)).toBeNull() expect(pluginKey(id)).toBeNull() }, ) it('maps ids and paths both ways', () => { expect(controllerPath('acme.demo.widgets')).toBe('/acme/demo/widgets') expect(controllerIdFromParams({ vendor: 'acme', plugin: 'demo', controller: 'widgets' })).toBe('acme.demo.widgets') expect(controllerIdFromPath('/acme/demo/widgets')).toBe('acme.demo.widgets') expect(controllerIdFromPath('/acme/demo/widgets/12')).toBe('acme.demo.widgets') expect(controllerIdFromPath('acme/demo/widgets/')).toBe('acme.demo.widgets') expect(controllerIdFromPath('/settings')).toBeNull() expect(controllerIdFromPath('/a/b')).toBeNull() expect(controllerIdFromPath('/a/b c/d')).toBeNull() }) it('names the owning plugin of a controller', () => { expect(pluginKey('acme.demo.widgets')).toBe('acme.demo') }) })