From 7a8d0d0a851d5e380c10d3364c6cff7e944528f4 Mon Sep 17 00:00:00 2001 From: pieter-v Date: Wed, 1 Apr 2020 08:39:06 +0200 Subject: [PATCH] clear relationships during delete --- .../inverse-relationships-test.js | 41 +++++++++++++++++++ .../record-data/addon/-private/record-data.ts | 1 + 2 files changed, 42 insertions(+) diff --git a/packages/-ember-data/tests/integration/relationships/inverse-relationships-test.js b/packages/-ember-data/tests/integration/relationships/inverse-relationships-test.js index 513856c8b7f..8c6d5d968cb 100644 --- a/packages/-ember-data/tests/integration/relationships/inverse-relationships-test.js +++ b/packages/-ember-data/tests/integration/relationships/inverse-relationships-test.js @@ -1,3 +1,5 @@ +import { settled } from '@ember/test-helpers'; + import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; @@ -650,4 +652,43 @@ module('integration/relationships/inverse_relationships - Inverse Relationships' assert.equal(comment.inverseFor('user'), null, 'Defaults to a null inverse'); }); + + test('Unload a destroyed record should clean the relations', async function(assert) { + assert.expect(3); + + class Post extends Model { + @hasMany('comment', { async: true }) + comments; + } + + class Comment extends Model { + @belongsTo('post', { async: true }) + post; + } + + register('model:Post', Post); + register('model:Comment', Comment); + + const comment = store.createRecord('comment'); + const post = store.createRecord('post'); + + post.get('comments').pushObject(comment); + + await comment.destroyRecord(); + comment.unloadRecord(); + + await settled(); + + assert.deepEqual( + comment._internalModel.__recordData.__relationships.initializedRelationships, + {}, + 'relationships are cleared' + ); + assert.equal( + comment._internalModel.__recordData.__implicitRelationships, + null, + 'implicitRelationships are cleared' + ); + assert.ok(comment._internalModel.__recordData.isDestroyed, 'recordData is destroyed'); + }); }); diff --git a/packages/record-data/addon/-private/record-data.ts b/packages/record-data/addon/-private/record-data.ts index 3480fc05c7b..1b65a174177 100644 --- a/packages/record-data/addon/-private/record-data.ts +++ b/packages/record-data/addon/-private/record-data.ts @@ -693,6 +693,7 @@ export default class RecordDataDefault implements RelationshipRecordData { rel.clear(); } }); + this.__relationships = null; let implicitRelationships = this._implicitRelationships; this.__implicitRelationships = null;