Browse Source

test(server): Create e2e tests for administrator resolver operations

Michael Bromley 7 years ago
parent
commit
5a933830ea

+ 64 - 0
server/e2e/__snapshots__/administrator.e2e-spec.ts.snap

@@ -0,0 +1,64 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`Administrator resolver createAdministrator 1`] = `
+Object {
+  "emailAddress": "test@test.com",
+  "firstName": "First",
+  "id": "2",
+  "lastName": "Last",
+  "user": Object {
+    "id": "3",
+    "identifier": "test@test.com",
+    "lastLogin": null,
+    "roles": Array [
+      Object {
+        "code": "__super_admin_role__",
+        "description": "SuperAdmin",
+        "permissions": Array [
+          "Authenticated",
+          "CreateAdministrator",
+          "CreateCatalog",
+          "CreateCustomer",
+          "CreateOrder",
+          "DeleteAdministrator",
+          "DeleteCatalog",
+          "DeleteCustomer",
+          "DeleteOrder",
+          "ReadAdministrator",
+          "ReadCatalog",
+          "ReadCustomer",
+          "ReadOrder",
+          "SuperAdmin",
+          "UpdateAdministrator",
+          "UpdateCatalog",
+          "UpdateCustomer",
+          "UpdateOrder",
+        ],
+      },
+    ],
+  },
+}
+`;
+
+exports[`Administrator resolver updateAdministrator 1`] = `
+Object {
+  "emailAddress": "new-email",
+  "firstName": "new first",
+  "id": "2",
+  "lastName": "new last",
+  "user": Object {
+    "id": "3",
+    "identifier": "test@test.com",
+    "lastLogin": null,
+    "roles": Array [
+      Object {
+        "code": "__customer_role__",
+        "description": "Customer",
+        "permissions": Array [
+          "Authenticated",
+        ],
+      },
+    ],
+  },
+}
+`;

+ 2 - 2
server/e2e/__snapshots__/role.e2e-spec.ts.snap

@@ -1,6 +1,6 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
-exports[`Product resolver createRole creates a new role 1`] = `
+exports[`Role resolver createRole 1`] = `
 Object {
   "channels": Array [
     Object {
@@ -19,7 +19,7 @@ Object {
 }
 `;
 
-exports[`Product resolver updateRole updates existing role 1`] = `
+exports[`Role resolver updateRole 1`] = `
 Object {
   "channels": Array [
     Object {

+ 108 - 0
server/e2e/administrator.e2e-spec.ts

@@ -0,0 +1,108 @@
+import {
+    Administrator,
+    CreateAdministrator,
+    CreateAdministratorVariables,
+    GetAdministrator,
+    GetAdministrators,
+    GetAdministratorsVariables,
+    GetAdministratorVariables,
+    UpdateAdministrator,
+    UpdateAdministratorVariables,
+} from 'shared/generated-types';
+
+import {
+    CREATE_ADMINISTRATOR,
+    GET_ADMINISTRATOR,
+    GET_ADMINISTRATORS,
+    UPDATE_ADMINISTRATOR,
+} from '../../admin-ui/src/app/data/definitions/administrator-definitions';
+
+import { TestClient } from './test-client';
+import { TestServer } from './test-server';
+
+describe('Administrator resolver', () => {
+    const client = new TestClient();
+    const server = new TestServer();
+    let createdAdmin: Administrator;
+
+    beforeAll(async () => {
+        const token = await server.init({
+            productCount: 1,
+            customerCount: 1,
+        });
+        await client.init();
+    }, 30000);
+
+    afterAll(async () => {
+        await server.destroy();
+    });
+
+    it('administrators', async () => {
+        const result = await client.query<GetAdministrators, GetAdministratorsVariables>(GET_ADMINISTRATORS);
+        expect(result.administrators.items.length).toBe(1);
+        expect(result.administrators.totalItems).toBe(1);
+    });
+
+    it('createAdministrator', async () => {
+        const result = await client.query<CreateAdministrator, CreateAdministratorVariables>(
+            CREATE_ADMINISTRATOR,
+            {
+                input: {
+                    emailAddress: 'test@test.com',
+                    firstName: 'First',
+                    lastName: 'Last',
+                    password: 'password',
+                    roleIds: ['1'],
+                },
+            },
+        );
+
+        createdAdmin = result.createAdministrator;
+        expect(createdAdmin).toMatchSnapshot();
+    });
+
+    it('administrator', async () => {
+        const result = await client.query<GetAdministrator, GetAdministratorVariables>(GET_ADMINISTRATOR, {
+            id: createdAdmin.id,
+        });
+        expect(result.administrator).toEqual(createdAdmin);
+    });
+
+    it('updateAdministrator', async () => {
+        const result = await client.query<UpdateAdministrator, UpdateAdministratorVariables>(
+            UPDATE_ADMINISTRATOR,
+            {
+                input: {
+                    id: createdAdmin.id,
+                    emailAddress: 'new-email',
+                    firstName: 'new first',
+                    lastName: 'new last',
+                    password: 'new password',
+                    roleIds: ['2'],
+                },
+            },
+        );
+        expect(result.updateAdministrator).toMatchSnapshot();
+    });
+
+    it('updateAdministrator throws with invalid roleId', async () => {
+        try {
+            const result = await client.query<UpdateAdministrator, UpdateAdministratorVariables>(
+                UPDATE_ADMINISTRATOR,
+                {
+                    input: {
+                        id: createdAdmin.id,
+                        emailAddress: 'new-email',
+                        firstName: 'new first',
+                        lastName: 'new last',
+                        password: 'new password',
+                        roleIds: ['999'],
+                    },
+                },
+            );
+            fail(`Should throw`);
+        } catch (err) {
+            expect(err.message).toEqual(expect.stringContaining(`No Role with the id '999' could be found`));
+        }
+    });
+});

+ 1 - 8
server/e2e/auth.e2e-spec.ts

@@ -179,19 +179,12 @@ describe('Authorization & permissions', () => {
                     firstName: code,
                     lastName: 'Admin',
                     password,
+                    roleIds: [role.id],
                 },
             },
         );
         const admin = adminResult.createAdministrator;
 
-        await client.query<AssignRoleToAdministrator, AssignRoleToAdministratorVariables>(
-            ASSIGN_ROLE_TO_ADMINISTRATOR,
-            {
-                administratorId: admin.id,
-                roleId: role.id,
-            },
-        );
-
         return {
             identifier,
             password,

+ 5 - 5
server/e2e/role.e2e-spec.ts

@@ -22,7 +22,7 @@ import {
 import { TestClient } from './test-client';
 import { TestServer } from './test-server';
 
-describe('Product resolver', () => {
+describe('Role resolver', () => {
     const client = new TestClient();
     const server = new TestServer();
     let createdRole: Role;
@@ -40,7 +40,7 @@ describe('Product resolver', () => {
         await server.destroy();
     });
 
-    it('roles list returns default roles', async () => {
+    it('roles', async () => {
         const result = await client.query<GetRoles, GetRolesVariables>(GET_ROLES);
 
         defaultRoles = result.roles.items;
@@ -48,7 +48,7 @@ describe('Product resolver', () => {
         expect(result.roles.totalItems).toBe(2);
     });
 
-    it('createRole creates a new role', async () => {
+    it('createRole', async () => {
         const result = await client.query<CreateRole, CreateRoleVariables>(CREATE_ROLE, {
             input: {
                 code: 'test',
@@ -61,12 +61,12 @@ describe('Product resolver', () => {
         expect(createdRole).toMatchSnapshot();
     });
 
-    it('role returns a role', async () => {
+    it('role', async () => {
         const result = await client.query<GetRole, GetRoleVariables>(GET_ROLE, { id: createdRole.id });
         expect(result.role).toEqual(createdRole);
     });
 
-    it('updateRole updates existing role', async () => {
+    it('updateRole', async () => {
         const result = await client.query<UpdateRole, UpdateRoleVariables>(UPDATE_ROLE, {
             input: {
                 id: createdRole.id,

+ 1 - 1
server/src/api/administrator/administrator.resolver.ts

@@ -22,7 +22,7 @@ export class AdministratorResolver {
     @Allow(Permission.ReadAdministrator)
     @ApplyIdCodec()
     administrators(@Args() args: GetAdministratorsVariables): Promise<PaginatedList<Administrator>> {
-        return this.administratorService.findAll(args.options);
+        return this.administratorService.findAll(args.options || undefined);
     }
 
     @Query()

+ 1 - 1
server/src/service/administrator.service.ts

@@ -26,7 +26,7 @@ export class AdministratorService {
         await this.ensureSuperAdminExists();
     }
 
-    findAll(options: ListQueryOptions<Administrator>): Promise<PaginatedList<Administrator>> {
+    findAll(options?: ListQueryOptions<Administrator>): Promise<PaginatedList<Administrator>> {
         return buildListQuery(this.connection, Administrator, options, ['user', 'user.roles'])
             .getManyAndCount()
             .then(([items, totalItems]) => ({