test: Refactor module test to remove unnecesary code
Signed-off-by: Carlos Esteban Lopez <lcarlosesteb@vmware.com>
This commit is contained in:
@@ -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"
|
||||
},
|
||||
|
||||
@@ -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<T>(value: unknown | Promise<T>): value is Promise<T> {
|
||||
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<TExtensionPoints extends any[]>(
|
||||
options: TestBackendOptions<TExtensionPoints>,
|
||||
): Promise<TestBackend> {
|
||||
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: {
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user