From 1c8a7db6dd871cb371cede551d9c83f9429828b2 Mon Sep 17 00:00:00 2001 From: Dana Franklin Date: Wed, 11 Jan 2017 18:27:42 -0800 Subject: [PATCH] =?UTF-8?q?Add=20failing=20tests=20for=20previousAttribute?= =?UTF-8?q?s=20and=E2=80=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit …rollbackAttributes Current behavior is to stash an attribute’s value on EVERY call to .set(). The intent seems to be to rollback to the value fetched from the persistence layer. As illustrated by the tests: ``` post.get(‘excerpt’); // ‘Was a gambler.’ post.set('excerpt', 'Became the sheriff.'); post.set('excerpt', 'Became the chief.'); post.set('excerpt', 'Became the mayor.'); post.get('previousAttributes.excerpt’); // 'Became the chief.' ``` The previous value is simply the previous change ('Became the chief’) instead of the “original” value (“Was a gambler”). The new tests FAIL to show that “previousAttributes” and “rollbackAttributes” to not behave as expected. --- tests/unit/models/resource-test.js | 32 ++++++++++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/tests/unit/models/resource-test.js b/tests/unit/models/resource-test.js index e0b70ba..7c8991d 100644 --- a/tests/unit/models/resource-test.js +++ b/tests/unit/models/resource-test.js @@ -153,21 +153,36 @@ test('#changedAttributes', function(assert) { test('#previousAttributes', function(assert) { let post = createPost.call(this); + let previous; + assert.equal(post.get('excerpt'), 'Was a gambler.', 'excerpt is set to "Was a gambler."'); post.set('excerpt', 'Became a deputy.'); assert.equal(post.get('excerpt'), 'Became a deputy.', 'excerpt is set to "Became a deputy."'); - let previous = post.get('previousAttributes'); + previous = post.get('previousAttributes'); + assert.equal(Object.keys(previous).join(''), 'excerpt', 'previous attributes include only excerpt'); + assert.equal(previous.excerpt, 'Was a gambler.', 'previous excerpt value is "Was a gambler."'); + + // Several changes + post.set('excerpt', 'Became the sheriff.'); + post.set('excerpt', 'Became the chief.'); + post.set('excerpt', 'Became the mayor.'); + + previous = post.get('previousAttributes'); assert.equal(Object.keys(previous).join(''), 'excerpt', 'previous attributes include only excerpt'); assert.equal(previous.excerpt, 'Was a gambler.', 'previous excerpt value is "Was a gambler."'); }); test('#rollbackAttributes resets attributes based on #previousAttributes', function(assert) { let post = createPost.call(this); + let previous; + assert.equal(post.get('excerpt'), 'Was a gambler.', 'excerpt is set to "Was a gambler."'); post.set('excerpt', 'Became a deputy.'); assert.equal(post.get('excerpt'), 'Became a deputy.', 'excerpt is set to "Became a deputy."'); - let previous = post.get('previousAttributes'); + + previous = post.get('previousAttributes'); + assert.equal(previous.excerpt, 'Was a gambler.', 'previous excerpt value is "Was a gambler."'); assert.equal(Object.keys(previous).length, 1, 'previous attribues have one change tracked'); @@ -176,6 +191,19 @@ test('#rollbackAttributes resets attributes based on #previousAttributes', funct previous = post.get('previousAttributes'); assert.equal(post.get('excerpt'), 'Was a gambler.', 'excerpt is set to "Was a gambler."'); assert.equal(Object.keys(previous).length, 0, 'previous attribues are empty'); + + // Several changes + post.set('excerpt', 'Became the sheriff.'); + post.set('excerpt', 'Became the chief.'); + post.set('excerpt', 'Became the mayor.'); + + post.rollbackAttributes(); + + previous = post.get('previousAttributes'); + + // Should rollback to initially fetched value + assert.equal(post.get('excerpt'), 'Was a gambler.', 'excerpt is set to "Was a gambler."'); + assert.equal(Object.keys(previous).length, 0, 'previous attribues are empty'); }); test('#rollbackRelationships resets relationships', function(assert) {