diff --git a/plugins/auth-backend-module-vmware-cloud-provider/package.json b/plugins/auth-backend-module-vmware-cloud-provider/package.json index 396f9bca10..137c1e8064 100644 --- a/plugins/auth-backend-module-vmware-cloud-provider/package.json +++ b/plugins/auth-backend-module-vmware-cloud-provider/package.json @@ -32,14 +32,11 @@ "passport-oauth2": "^1.6.1" }, "devDependencies": { - "@backstage/backend-app-api": "workspace:^", "@backstage/backend-defaults": "workspace:^", "@backstage/backend-test-utils": "workspace:^", "@backstage/cli": "workspace:^", - "@backstage/config": "workspace:^", "@backstage/plugin-auth-backend": "workspace:^", - "express": "^4.18.2", - "express-session": "^1.17.3", + "@types/passport-oauth2": "^1.4.15", "msw": "^2.0.8", "supertest": "^6.3.3" }, diff --git a/plugins/auth-backend-module-vmware-cloud-provider/src/module.test.ts b/plugins/auth-backend-module-vmware-cloud-provider/src/module.test.ts index 47c902391e..9bed931da1 100644 --- a/plugins/auth-backend-module-vmware-cloud-provider/src/module.test.ts +++ b/plugins/auth-backend-module-vmware-cloud-provider/src/module.test.ts @@ -13,170 +13,16 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { - createHttpServer, - createSpecializedBackend, - DefaultRootHttpRouter, - ExtendedHttpServer, - HostDiscovery, - MiddlewareFactory, -} from '@backstage/backend-app-api'; -import { - BackendFeature, - coreServices, - createServiceFactory, -} from '@backstage/backend-plugin-api'; -import { - mockServices, - TestBackend, - TestBackendOptions, -} from '@backstage/backend-test-utils'; -import { ConfigReader } from '@backstage/config'; +import { mockServices, startTestBackend } from '@backstage/backend-test-utils'; import { decodeOAuthState } from '@backstage/plugin-auth-node'; -import express from 'express'; -import session from 'express-session'; import request from 'supertest'; import { Config } from '../config'; import { authModuleVmwareCloudProvider } from './module'; -function isPromise(value: unknown | Promise): value is Promise { - return ( - typeof value === 'object' && - value !== null && - 'then' in value && - typeof value.then === 'function' - ); -} - -function unwrapFeature( - feature: BackendFeature | (() => BackendFeature), -): BackendFeature { - return typeof feature === 'function' ? feature() : feature; -} - -const defaultServiceFactories = [ - mockServices.cache.factory(), - mockServices.rootConfig.factory(), - mockServices.database.factory(), - mockServices.httpRouter.factory(), - mockServices.identity.factory(), - mockServices.lifecycle.factory(), - mockServices.logger.factory(), - mockServices.permissions.factory(), - mockServices.rootLifecycle.factory(), - mockServices.rootLogger.factory(), - mockServices.scheduler.factory(), - mockServices.tokenManager.factory(), - mockServices.urlReader.factory(), -]; - -async function createBackendWithSession( - options: TestBackendOptions, -): Promise { - const { extensionPoints, ...otherOptions } = options; - - // Unpack input into awaited plain BackendFeatures - const features: BackendFeature[] = await Promise.all( - options.features?.map(async val => { - if (isPromise(val)) { - const { default: feature } = await val; - return unwrapFeature(feature); - } - return unwrapFeature(val); - }) ?? [], - ); - - let server: ExtendedHttpServer; - - const rootHttpRouterFactory = createServiceFactory({ - service: coreServices.rootHttpRouter, - deps: { - config: coreServices.rootConfig, - lifecycle: coreServices.rootLifecycle, - rootLogger: coreServices.rootLogger, - }, - async factory({ config, lifecycle, rootLogger }) { - const router = DefaultRootHttpRouter.create(); - const logger = rootLogger.child({ service: 'rootHttpRouter' }); - - const app = express(); - - const middleware = MiddlewareFactory.create({ config, logger }); - const testSecret = 'secret'; - - app.use( - session({ - secret: testSecret, - resave: false, - saveUninitialized: false, - }), - ); - app.use(router.handler()); - app.use(middleware.notFound()); - app.use(middleware.error()); - - server = await createHttpServer( - app, - { listen: { host: '', port: 0 } }, - { logger }, - ); - - lifecycle.addShutdownHook(() => server.stop(), { logger }); - - await server.start(); - - return router; - }, - }); - - const discoveryFactory = createServiceFactory({ - service: coreServices.discovery, - deps: { - rootHttpRouter: coreServices.rootHttpRouter, - }, - async factory() { - if (!server) { - throw new Error('Test server not started yet'); - } - const port = server.port(); - const discovery = HostDiscovery.fromConfig( - new ConfigReader({ - backend: { baseUrl: `http://localhost:${port}`, listen: { port } }, - }), - ); - return discovery; - }, - }); - - const backend = createSpecializedBackend({ - ...otherOptions, - defaultServiceFactories: [ - ...defaultServiceFactories, - rootHttpRouterFactory, - discoveryFactory, - ], - }); - - for (const feature of features) { - backend.add(feature); - } - - await backend.start(); - - return Object.assign(backend, { - get server() { - if (!server) { - throw new Error('TestBackend server is not available'); - } - return server; - }, - }); -} - describe('authModuleVmwareCloudProvider', () => { it('should start', async () => { - const backend = await createBackendWithSession({ + const backend = await startTestBackend({ features: [ import('@backstage/plugin-auth-backend'), authModuleVmwareCloudProvider, @@ -186,6 +32,7 @@ describe('authModuleVmwareCloudProvider', () => { baseUrl: 'http://localhost:3000', }, auth: { + session: { secret: 'test' }, providers: { vmwareCloudServices: { development: { diff --git a/yarn.lock b/yarn.lock index ab1541dfa2..59f75b23ad 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4844,19 +4844,16 @@ __metadata: version: 0.0.0-use.local resolution: "@backstage/plugin-auth-backend-module-vmware-cloud-provider@workspace:plugins/auth-backend-module-vmware-cloud-provider" dependencies: - "@backstage/backend-app-api": "workspace:^" "@backstage/backend-common": "workspace:^" "@backstage/backend-defaults": "workspace:^" "@backstage/backend-plugin-api": "workspace:^" "@backstage/backend-test-utils": "workspace:^" "@backstage/catalog-model": "workspace:^" "@backstage/cli": "workspace:^" - "@backstage/config": "workspace:^" "@backstage/errors": "workspace:^" "@backstage/plugin-auth-backend": "workspace:^" "@backstage/plugin-auth-node": "workspace:^" - express: ^4.18.2 - express-session: ^1.17.3 + "@types/passport-oauth2": ^1.4.15 jose: ^4.6.0 msw: ^2.0.8 passport-oauth2: ^1.6.1 @@ -18689,14 +18686,14 @@ __metadata: languageName: node linkType: hard -"@types/passport-oauth2@npm:*, @types/passport-oauth2@npm:^1.4.11": - version: 1.4.11 - resolution: "@types/passport-oauth2@npm:1.4.11" +"@types/passport-oauth2@npm:*, @types/passport-oauth2@npm:^1.4.11, @types/passport-oauth2@npm:^1.4.15": + version: 1.4.15 + resolution: "@types/passport-oauth2@npm:1.4.15" dependencies: "@types/express": "*" "@types/oauth": "*" "@types/passport": "*" - checksum: 09d047a6c09a05c036f7db0cf8f8c09bf5878fdd15949bb1baa09a35f439929d471048fa6595f09ea4a4ea25396ce3918b362136579cf4a2b2ee29a92c0dd1ce + checksum: 352c4e2d09a86f8fc0dcf2c917c221f302a35a14e7467e2fa3a1653c0a9a1f842c910a4e52f799856536522e6359c20d1afc319579d9edf4b2ac7ea11b183b52 languageName: node linkType: hard