Przeglądaj źródła

refactor(core): Move test plugin into external file

Michael Bromley 5 lat temu
rodzic
commit
721bbd0454

+ 3 - 117
packages/core/e2e/database-transactions.e2e-spec.ts

@@ -1,126 +1,12 @@
-import { Injectable } from '@nestjs/common';
-import { Args, Mutation, Query, Resolver } from '@nestjs/graphql';
-import {
-    Administrator,
-    Ctx,
-    InternalServerError,
-    mergeConfig,
-    NativeAuthenticationMethod,
-    PluginCommonModule,
-    RequestContext,
-    Transaction,
-    TransactionalConnection,
-    User,
-    VendurePlugin,
-} from '@vendure/core';
+import { mergeConfig } from '@vendure/core';
 import { createTestEnvironment } from '@vendure/testing';
 import gql from 'graphql-tag';
 import path from 'path';
 
 import { initialData } from '../../../e2e-common/e2e-initial-data';
-import { TEST_SETUP_TIMEOUT_MS, testConfig } from '../../../e2e-common/test-config';
+import { testConfig, TEST_SETUP_TIMEOUT_MS } from '../../../e2e-common/test-config';
 
-@Injectable()
-class TestUserService {
-    constructor(private connection: TransactionalConnection) {}
-
-    async createUser(ctx: RequestContext, identifier: string) {
-        const authMethod = await this.connection.getRepository(ctx, NativeAuthenticationMethod).save(
-            new NativeAuthenticationMethod({
-                identifier,
-                passwordHash: 'abc',
-            }),
-        );
-        const user = await this.connection.getRepository(ctx, User).save(
-            new User({
-                authenticationMethods: [authMethod],
-                identifier,
-                roles: [],
-                verified: true,
-            }),
-        );
-        return user;
-    }
-}
-
-@Injectable()
-class TestAdminService {
-    constructor(private connection: TransactionalConnection, private userService: TestUserService) {}
-
-    async createAdministrator(ctx: RequestContext, emailAddress: string, fail: boolean) {
-        const user = await this.userService.createUser(ctx, emailAddress);
-        if (fail) {
-            throw new InternalServerError('Failed!');
-        }
-        const admin = await this.connection.getRepository(ctx, Administrator).save(
-            new Administrator({
-                emailAddress,
-                user,
-                firstName: 'jim',
-                lastName: 'jiminy',
-            }),
-        );
-        return admin;
-    }
-}
-
-@Resolver()
-class TestResolver {
-    constructor(private testAdminService: TestAdminService, private connection: TransactionalConnection) {}
-
-    @Mutation()
-    @Transaction()
-    createTestAdministrator(@Ctx() ctx: RequestContext, @Args() args: any) {
-        return this.testAdminService.createAdministrator(ctx, args.emailAddress, args.fail);
-    }
-
-    @Mutation()
-    @Transaction('manual')
-    async createTestAdministrator2(@Ctx() ctx: RequestContext, @Args() args: any) {
-        await this.connection.startTransaction(ctx);
-        return this.testAdminService.createAdministrator(ctx, args.emailAddress, args.fail);
-    }
-
-    @Mutation()
-    @Transaction('manual')
-    async createTestAdministrator3(@Ctx() ctx: RequestContext, @Args() args: any) {
-        // no transaction started
-        return this.testAdminService.createAdministrator(ctx, args.emailAddress, args.fail);
-    }
-
-    @Query()
-    async verify() {
-        const admins = await this.connection.getRepository(Administrator).find();
-        const users = await this.connection.getRepository(User).find();
-        return {
-            admins,
-            users,
-        };
-    }
-}
-
-@VendurePlugin({
-    imports: [PluginCommonModule],
-    providers: [TestAdminService, TestUserService],
-    adminApiExtensions: {
-        schema: gql`
-            extend type Mutation {
-                createTestAdministrator(emailAddress: String!, fail: Boolean!): Administrator
-                createTestAdministrator2(emailAddress: String!, fail: Boolean!): Administrator
-                createTestAdministrator3(emailAddress: String!, fail: Boolean!): Administrator
-            }
-            type VerifyResult {
-                admins: [Administrator!]!
-                users: [User!]!
-            }
-            extend type Query {
-                verify: VerifyResult!
-            }
-        `,
-        resolvers: [TestResolver],
-    },
-})
-class TransactionTestPlugin {}
+import { TransactionTestPlugin } from './fixtures/test-plugins/transaction-test-plugin';
 
 describe('Transaction infrastructure', () => {
     const { server, adminClient } = createTestEnvironment(

+ 117 - 0
packages/core/e2e/fixtures/test-plugins/transaction-test-plugin.ts

@@ -0,0 +1,117 @@
+import { Injectable } from '@nestjs/common';
+import { Args, Mutation, Query, Resolver } from '@nestjs/graphql';
+import {
+    Administrator,
+    Ctx,
+    InternalServerError,
+    NativeAuthenticationMethod,
+    PluginCommonModule,
+    RequestContext,
+    Transaction,
+    TransactionalConnection,
+    User,
+    VendurePlugin,
+} from '@vendure/core';
+import gql from 'graphql-tag';
+
+@Injectable()
+class TestUserService {
+    constructor(private connection: TransactionalConnection) {}
+
+    async createUser(ctx: RequestContext, identifier: string) {
+        const authMethod = await this.connection.getRepository(ctx, NativeAuthenticationMethod).save(
+            new NativeAuthenticationMethod({
+                identifier,
+                passwordHash: 'abc',
+            }),
+        );
+        const user = await this.connection.getRepository(ctx, User).save(
+            new User({
+                authenticationMethods: [authMethod],
+                identifier,
+                roles: [],
+                verified: true,
+            }),
+        );
+        return user;
+    }
+}
+
+@Injectable()
+class TestAdminService {
+    constructor(private connection: TransactionalConnection, private userService: TestUserService) {}
+
+    async createAdministrator(ctx: RequestContext, emailAddress: string, fail: boolean) {
+        const user = await this.userService.createUser(ctx, emailAddress);
+        if (fail) {
+            throw new InternalServerError('Failed!');
+        }
+        const admin = await this.connection.getRepository(ctx, Administrator).save(
+            new Administrator({
+                emailAddress,
+                user,
+                firstName: 'jim',
+                lastName: 'jiminy',
+            }),
+        );
+        return admin;
+    }
+}
+
+@Resolver()
+class TestResolver {
+    constructor(private testAdminService: TestAdminService, private connection: TransactionalConnection) {}
+
+    @Mutation()
+    @Transaction()
+    createTestAdministrator(@Ctx() ctx: RequestContext, @Args() args: any) {
+        return this.testAdminService.createAdministrator(ctx, args.emailAddress, args.fail);
+    }
+
+    @Mutation()
+    @Transaction('manual')
+    async createTestAdministrator2(@Ctx() ctx: RequestContext, @Args() args: any) {
+        await this.connection.startTransaction(ctx);
+        return this.testAdminService.createAdministrator(ctx, args.emailAddress, args.fail);
+    }
+
+    @Mutation()
+    @Transaction('manual')
+    async createTestAdministrator3(@Ctx() ctx: RequestContext, @Args() args: any) {
+        // no transaction started
+        return this.testAdminService.createAdministrator(ctx, args.emailAddress, args.fail);
+    }
+
+    @Query()
+    async verify() {
+        const admins = await this.connection.getRepository(Administrator).find();
+        const users = await this.connection.getRepository(User).find();
+        return {
+            admins,
+            users,
+        };
+    }
+}
+
+@VendurePlugin({
+    imports: [PluginCommonModule],
+    providers: [TestAdminService, TestUserService],
+    adminApiExtensions: {
+        schema: gql`
+            extend type Mutation {
+                createTestAdministrator(emailAddress: String!, fail: Boolean!): Administrator
+                createTestAdministrator2(emailAddress: String!, fail: Boolean!): Administrator
+                createTestAdministrator3(emailAddress: String!, fail: Boolean!): Administrator
+            }
+            type VerifyResult {
+                admins: [Administrator!]!
+                users: [User!]!
+            }
+            extend type Query {
+                verify: VerifyResult!
+            }
+        `,
+        resolvers: [TestResolver],
+    },
+})
+export class TransactionTestPlugin {}