From 3597ed9003c3f6cbdc7c43e6f16b173fd737a5e8 Mon Sep 17 00:00:00 2001 From: daveconnis Date: Mon, 8 Jan 2018 16:44:27 -0500 Subject: [PATCH 1/3] Write conversation-part-reopened component --- .../conversation-part-reopened.js | 22 ++++++ app/models/conversation-part.js | 1 + .../conversation-part-reopened.hbs | 13 ++++ .../conversations/conversation-thread.hbs | 6 ++ .../conversation-part-closed-test.js | 1 - .../conversation-part-reopened-test.js | 73 +++++++++++++++++++ 6 files changed, 115 insertions(+), 1 deletion(-) create mode 100644 app/components/conversations/conversation-part-reopened.js create mode 100644 app/templates/components/conversations/conversation-part-reopened.hbs create mode 100644 tests/integration/components/conversations/conversation-part-reopened-test.js diff --git a/app/components/conversations/conversation-part-reopened.js b/app/components/conversations/conversation-part-reopened.js new file mode 100644 index 000000000..bf07e443d --- /dev/null +++ b/app/components/conversations/conversation-part-reopened.js @@ -0,0 +1,22 @@ +import Component from '@ember/component'; +import { inject as service } from '@ember/service'; +import { computed, get } from '@ember/object'; +import { alias } from '@ember/object/computed'; + +export default Component.extend({ + + author: null, + + classNames: ['conversation-part-reopened'], + classNameBindings: ['isSelf:conversation-part-reopened--is-self'], + + reopenedAt: null, + + currentUser: service(), + + isSelf: computed('author', 'user', function() { + return get(this, 'author.id') === get(this, 'user.id'); + }), + + user: alias('currentUser.user') +}); diff --git a/app/models/conversation-part.js b/app/models/conversation-part.js index e65141d85..c0a38d47a 100644 --- a/app/models/conversation-part.js +++ b/app/models/conversation-part.js @@ -8,6 +8,7 @@ export default Model.extend({ readAt: attr(), updatedAt: attr(), closedAt: attr(), + reopenedAt: attr(), author: belongsTo('user', { async: true }), conversation: belongsTo('conversation', { async: true }) diff --git a/app/templates/components/conversations/conversation-part-reopened.hbs b/app/templates/components/conversations/conversation-part-reopened.hbs new file mode 100644 index 000000000..44d46d90c --- /dev/null +++ b/app/templates/components/conversations/conversation-part-reopened.hbs @@ -0,0 +1,13 @@ +
+
+
+ + {{#if isSelf}} + You reopened this {{moment-from-now reopendAt interval=60000}} + {{else}} + {{author.username}} reopened this {{moment-from-now reopenedAt interval=60000}} + {{/if}} + +
+
+
diff --git a/app/templates/components/conversations/conversation-thread.hbs b/app/templates/components/conversations/conversation-thread.hbs index 2fe0d6c1a..3d5181045 100644 --- a/app/templates/components/conversations/conversation-thread.hbs +++ b/app/templates/components/conversations/conversation-thread.hbs @@ -15,6 +15,11 @@ author=conversationPart.author closedAt=conversationPart.insertedAt }} + {{#if (eq conversationPart.partType 'Reopened')}} + {{conversations/conversation-part-reopened + author=conversationPart.author + reopenedAt=conversationPart.insertedAt + }} {{else}} {{conversations/conversation-part-comment author=conversationPart.author @@ -22,6 +27,7 @@ readAt=conversationPart.readAt sentAt=conversationPart.insertedAt }} + {{/if}} {{/if}} {{/if}} {{/each}} diff --git a/tests/integration/components/conversations/conversation-part-closed-test.js b/tests/integration/components/conversations/conversation-part-closed-test.js index eefdaa36b..2497025e7 100644 --- a/tests/integration/components/conversations/conversation-part-closed-test.js +++ b/tests/integration/components/conversations/conversation-part-closed-test.js @@ -1,7 +1,6 @@ import { moduleForComponent, test } from 'ember-qunit'; import hbs from 'htmlbars-inline-precompile'; import { set } from '@ember/object'; -import { run } from '@ember/runloop'; import PageObject from 'ember-cli-page-object'; import component from 'code-corps-ember/tests/pages/components/conversations/conversation-part-closed'; import stubService from 'code-corps-ember/tests/helpers/stub-service'; diff --git a/tests/integration/components/conversations/conversation-part-reopened-test.js b/tests/integration/components/conversations/conversation-part-reopened-test.js new file mode 100644 index 000000000..63ce62b33 --- /dev/null +++ b/tests/integration/components/conversations/conversation-part-reopened-test.js @@ -0,0 +1,73 @@ +import { moduleForComponent, test } from 'ember-qunit'; +import hbs from 'htmlbars-inline-precompile'; +import { set } from '@ember/object'; +import PageObject from 'ember-cli-page-object'; +import component from 'code-corps-ember/tests/pages/components/conversations/conversation-part-closed'; +import stubService from 'code-corps-ember/tests/helpers/stub-service'; +import moment from 'moment'; + +let page = PageObject.create(component); + +function renderPage() { + page.render(hbs` + {{conversations/conversation-part-reopened + author=author + reopenedAt=reopenedAt + }} + `); +} + +moduleForComponent('conversations/conversation-part-reopened', 'Integration | Component | conversations/conversation part closed', { + integration: true, + beforeEach() { + page.setContext(this); + }, + afterEach() { + page.removeContext(); + } +}); + +test('if current user reopens message, "You reopened this" is rendered', function(assert) { + assert.expect(1); + + let user = { + id: 1, + username: 'testuser' + }; + set(this, 'author', user); + stubService(this, 'current-user', { user }); + + let twoMinutesAgo = moment().subtract(2, 'minutes'); + let twoMinutesAgoFriendly = twoMinutesAgo.from(); + set(this, 'reopenedAt', twoMinutesAgo); + + renderPage(); + + let text = `You reopened this ${twoMinutesAgoFriendly}`; + assert.equal(page.reopenedAt.text, text, 'The reopened at timestamp is rendered'); +}); + +test('if someone other than the current user reopens the message, "Author.username closed this at" is rendered', function(assert) { + assert.expect(1); + + let user = { + id: 1, + username: 'currentuser' + }; + stubService(this, 'current-user', { user }); + + let author = { + id: 2, + username: 'authoruser' + }; + set(this, 'author', author); + + let twoMinutesAgo = moment().subtract(2, 'minutes'); + let twoMinutesAgoFriendly = twoMinutesAgo.from(); + set(this, 'reopenedAt', twoMinutesAgo); + + renderPage(); + + let text = `${author.username} reopened this ${twoMinutesAgoFriendly}`; + assert.equal(page.reopenedAt.text, text, 'The reopened at timestamp is rendered'); +}); From 526718535a4a278674300fce412fad5f418cf058 Mon Sep 17 00:00:00 2001 From: daveconnis Date: Tue, 9 Jan 2018 16:26:24 -0500 Subject: [PATCH 2/3] fix some failing tests --- .../conversations/conversation-thread.hbs | 25 +++++++++---------- .../conversation-part-reopened-test.js | 6 ++--- 2 files changed, 15 insertions(+), 16 deletions(-) diff --git a/app/templates/components/conversations/conversation-thread.hbs b/app/templates/components/conversations/conversation-thread.hbs index 3d5181045..74e54b27f 100644 --- a/app/templates/components/conversations/conversation-thread.hbs +++ b/app/templates/components/conversations/conversation-thread.hbs @@ -11,23 +11,22 @@ {{#each conversation.conversationParts as |conversationPart|}} {{#if conversationPart.isLoaded}} {{#if (eq conversationPart.partType 'Closed')}} - {{conversation/conversation-part-closed - author=conversationPart.author - closedAt=conversationPart.insertedAt + {{conversations/conversation-part-closed + author=conversationPart.author + closedAt=conversationPart.insertedAt + }} + {{else if (eq conversationPart.partType 'Reopened')}} + {{conversations/conversation-part-reopened + author=conversationPart.author + reopenedAt=conversationPart.insertedAt }} - {{#if (eq conversationPart.partType 'Reopened')}} - {{conversations/conversation-part-reopened - author=conversationPart.author - reopenedAt=conversationPart.insertedAt - }} {{else}} {{conversations/conversation-part-comment - author=conversationPart.author - body=conversationPart.body - readAt=conversationPart.readAt - sentAt=conversationPart.insertedAt + author=conversationPart.author + body=conversationPart.body + readAt=conversationPart.readAt + sentAt=conversationPart.insertedAt }} - {{/if}} {{/if}} {{/if}} {{/each}} diff --git a/tests/integration/components/conversations/conversation-part-reopened-test.js b/tests/integration/components/conversations/conversation-part-reopened-test.js index 63ce62b33..40ee3d57c 100644 --- a/tests/integration/components/conversations/conversation-part-reopened-test.js +++ b/tests/integration/components/conversations/conversation-part-reopened-test.js @@ -2,7 +2,7 @@ import { moduleForComponent, test } from 'ember-qunit'; import hbs from 'htmlbars-inline-precompile'; import { set } from '@ember/object'; import PageObject from 'ember-cli-page-object'; -import component from 'code-corps-ember/tests/pages/components/conversations/conversation-part-closed'; +import component from 'code-corps-ember/tests/pages/components/conversations/conversation-part-reopened'; import stubService from 'code-corps-ember/tests/helpers/stub-service'; import moment from 'moment'; @@ -17,7 +17,7 @@ function renderPage() { `); } -moduleForComponent('conversations/conversation-part-reopened', 'Integration | Component | conversations/conversation part closed', { +moduleForComponent('conversations/conversation-part-reopened', 'Integration | Component | conversations/conversation part reopened', { integration: true, beforeEach() { page.setContext(this); @@ -47,7 +47,7 @@ test('if current user reopens message, "You reopened this" is rendered', functio assert.equal(page.reopenedAt.text, text, 'The reopened at timestamp is rendered'); }); -test('if someone other than the current user reopens the message, "Author.username closed this at" is rendered', function(assert) { +test('if someone other than the current user reopens the message, "Author.username reopened this at" is rendered', function(assert) { assert.expect(1); let user = { From 8c76cda48c9cde6de32b45394a3cdf9e34b9dea5 Mon Sep 17 00:00:00 2001 From: daveconnis Date: Thu, 11 Jan 2018 12:50:55 -0500 Subject: [PATCH 3/3] fix syntax --- app/components/conversations/conversation-part-reopened.js | 2 +- .../components/conversations/conversation-part-reopened-test.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/components/conversations/conversation-part-reopened.js b/app/components/conversations/conversation-part-reopened.js index bf07e443d..b07344d9c 100644 --- a/app/components/conversations/conversation-part-reopened.js +++ b/app/components/conversations/conversation-part-reopened.js @@ -7,7 +7,7 @@ export default Component.extend({ author: null, - classNames: ['conversation-part-reopened'], + classNames: ['conversation-part', 'conversation-part--reopened'], classNameBindings: ['isSelf:conversation-part-reopened--is-self'], reopenedAt: null, diff --git a/tests/integration/components/conversations/conversation-part-reopened-test.js b/tests/integration/components/conversations/conversation-part-reopened-test.js index 40ee3d57c..a037c5719 100644 --- a/tests/integration/components/conversations/conversation-part-reopened-test.js +++ b/tests/integration/components/conversations/conversation-part-reopened-test.js @@ -10,7 +10,7 @@ let page = PageObject.create(component); function renderPage() { page.render(hbs` - {{conversations/conversation-part-reopened + {{conversations/conversation-part--reopened author=author reopenedAt=reopenedAt }}