From 68521c318a6c7c4f2de24617fbde953f06c11df1 Mon Sep 17 00:00:00 2001
From: Jure Triglav <juretriglav@gmail.com>
Date: Thu, 24 Jan 2019 12:13:18 +1300
Subject: [PATCH] test(base-model): test relationship and deletion hook

---
 .../data-model-component/src/graphql/index.js |  4 ++--
 .../data-model-component/src/manuscript.js    | 22 ++++++++++++++----
 packages/base-model/test/manuscript_test.js   | 23 +++++++++++++++++++
 3 files changed, 43 insertions(+), 6 deletions(-)

diff --git a/packages/base-model/test/data-model-component/src/graphql/index.js b/packages/base-model/test/data-model-component/src/graphql/index.js
index d4301e0ad..327558b70 100644
--- a/packages/base-model/test/data-model-component/src/graphql/index.js
+++ b/packages/base-model/test/data-model-component/src/graphql/index.js
@@ -3,8 +3,8 @@ const resolvers = {
     manuscript(_, { id }, ctx) {
       return ctx.connectors.Manuscript.fetchOne(id, ctx)
     },
-    manuscripts(_, { id }, ctx) {
-      return ctx.connectors.Manuscript.fetchAll(ctx)
+    manuscripts(_, { where }, ctx) {
+      return ctx.connectors.Manuscript.fetchAll(where, ctx)
     },
   },
   Mutation: {
diff --git a/packages/base-model/test/data-model-component/src/manuscript.js b/packages/base-model/test/data-model-component/src/manuscript.js
index 76c741882..679c28b38 100644
--- a/packages/base-model/test/data-model-component/src/manuscript.js
+++ b/packages/base-model/test/data-model-component/src/manuscript.js
@@ -25,12 +25,26 @@ class Manuscript extends BaseModel {
     }
   }
 
-  async $beforeDelete() {
-    const { model: Team } = require('@pubsweet/model-team')
+  static get relationMappings() {
+    return {
+      teams: {
+        relation: BaseModel.HasManyRelation,
+        modelClass: require.resolve('@pubsweet/model-team/src/team'),
+        beforeInsert(model) {
+          model.objectType = 'Manuscript'
+        },
+        filter: { objectType: 'Manuscript' },
+        join: {
+          from: 'manuscripts.id',
+          to: 'teams.objectId',
+        },
+      },
+    }
+  }
 
-    await Team.deleteAssociated(this.type, this.id)
+  async $beforeDelete() {
+    return this.$relatedQuery('teams').delete()
   }
 }
 
-Manuscript.type = 'manuscript'
 module.exports = Manuscript
diff --git a/packages/base-model/test/manuscript_test.js b/packages/base-model/test/manuscript_test.js
index 903d4e1c0..61a3f1401 100644
--- a/packages/base-model/test/manuscript_test.js
+++ b/packages/base-model/test/manuscript_test.js
@@ -11,6 +11,8 @@ process.env.NODE_CONFIG = `{"pubsweet":{
 }}`
 
 const { model: Manuscript } = require('./data-model-component')
+const { Team } = require('@pubsweet/models')
+
 const { dbCleaner } = require('pubsweet-server/test')
 
 describe('Manuscript', () => {
@@ -103,4 +105,25 @@ describe('Manuscript', () => {
       'Data Integrity Error property updated',
     )
   })
+
+  it('deletes the related teams when deleted', async () => {
+    const manuscript = await new Manuscript({ title: 'Test' }).save()
+
+    await new Team({
+      role: 'test',
+      name: 'Test',
+      objectId: manuscript.id,
+      objectType: 'Manuscript',
+    }).save()
+
+    await new Team({
+      role: 'test',
+      name: 'not associated',
+    }).save()
+
+    await manuscript.delete()
+
+    const teams = await Team.query()
+    expect(teams).toHaveLength(1)
+  })
 })
-- 
GitLab