diff --git a/src/js/models/card-node.js b/src/js/models/card-node.js index 20c4feabf..8f61055e6 100644 --- a/src/js/models/card-node.js +++ b/src/js/models/card-node.js @@ -22,8 +22,11 @@ export default class CardNode { this.mode = mode; let method = mode === 'display' ? 'render' : 'edit'; + method = this.card[method]; - let rendered = this.card[method]({ + assert(`Card is missing "${method}" (tried to render mode: "${mode}")`, + !!method); + let rendered = method({ env: this.env, options: this.options, payload: this.section.payload diff --git a/tests/unit/editor/editor-events-test.js b/tests/unit/editor/editor-events-test.js index dbb79c785..650fd984a 100644 --- a/tests/unit/editor/editor-events-test.js +++ b/tests/unit/editor/editor-events-test.js @@ -161,6 +161,43 @@ test('postDidChange callback fired when post is modified via user input', (asser assert.equal(postChanged, 1, 'postDidChange fired once'); }); +test('postDidChange callback fired when card payload changes', (assert) => { + let env; + let cards = [{ + name: 'simple-card', + type: 'dom', + render({env: _env}) { + env = _env; + return $('
simple-card (display)
')[0]; + }, + edit({env: _env}) { + env = _env; + return $('
simple-card (edit)
')[0]; + } + }]; + editor = Helpers.mobiledoc.renderInto(editorElement, ({post, cardSection}) => { + return post([cardSection('simple-card')]); + }, { cards }); + + let postDidChange = 0; + editor.postDidChange(() => postDidChange++); + + env.save({}); + assert.equal(postDidChange, 1, 'postDidChange called after save'); + + postDidChange = 0; + env.edit(); + assert.equal(postDidChange, 0, 'postDidChange not called after edit'); + + postDidChange = 0; + env.cancel(); + assert.equal(postDidChange, 0, 'postDidChange not called after cancel'); + + postDidChange = 0; + env.remove(); + assert.equal(postDidChange, 1, 'postDidChange called after remove'); +}); + test('stateDidChange callback fired when markup is toggled and there is a selection', (assert) => { let done = assert.async(); assert.expect(1);