diff --git a/packages/core/src/router/routing-table.ts b/packages/core/src/router/routing-table.ts index 859e49d58195..abe4a5364b81 100644 --- a/packages/core/src/router/routing-table.ts +++ b/packages/core/src/router/routing-table.ts @@ -242,7 +242,18 @@ export class ControllerRoute extends BaseRoute { protected readonly _controllerCtor: ControllerClass, methodName?: string, ) { - super(verb, path, spec); + super( + verb, + path, + // Add x-controller-name and x-operation-name if not present + Object.assign( + { + 'x-controller-name': _controllerCtor.name, + 'x-operation-name': methodName, + }, + spec, + ), + ); if (!methodName) { methodName = this.spec['x-operation-name']; diff --git a/packages/core/test/unit/application/application.open-api-spec.test.ts b/packages/core/test/unit/application/application.open-api-spec.test.ts index fca1c018d389..f2dc587b323d 100644 --- a/packages/core/test/unit/application/application.open-api-spec.test.ts +++ b/packages/core/test/unit/application/application.open-api-spec.test.ts @@ -56,6 +56,25 @@ describe('Application.getApiSpec()', () => { }); }); + it('returns routes registered via app.route(..., Controller, method)', () => { + class MyController { + greet() {} + } + + app.route('get', '/greet', {responses: {}}, MyController, 'greet'); + + const spec = app.getApiSpec(); + expect(spec.paths).to.eql({ + '/greet': { + get: { + responses: {}, + 'x-controller-name': 'MyController', + 'x-operation-name': 'greet', + }, + }, + }); + }); + it('returns routes registered via app.controller()', () => { class MyController { @get('/greet') @@ -68,6 +87,7 @@ describe('Application.getApiSpec()', () => { '/greet': { get: { responses: {}, + 'x-controller-name': 'MyController', 'x-operation-name': 'greet', }, }, diff --git a/packages/core/test/unit/router/routing-table.test.ts b/packages/core/test/unit/router/routing-table.test.ts index 56cc6c9534ae..c5219869fd95 100644 --- a/packages/core/test/unit/router/routing-table.test.ts +++ b/packages/core/test/unit/router/routing-table.test.ts @@ -35,7 +35,7 @@ describe('RoutingTable', () => { const route = table.find(request); expect(route).to.be.instanceOf(ControllerRoute); - expect(route).to.have.property('spec', spec.paths['/hello'].get); + expect(route).to.have.property('spec').containEql(spec.paths['/hello'].get); expect(route).to.have.property('pathParams'); expect(route.describe()).to.equal('TestController.greet'); });