Skip to content

Commit 1eaded1

Browse files
Dave Connisbegedin
authored andcommitted
Write conversation part reopened component for messages (#1689)
Add conversation-part-reopened component
1 parent 7bfd335 commit 1eaded1

File tree

6 files changed

+121
-2
lines changed

6 files changed

+121
-2
lines changed
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import Component from '@ember/component';
2+
import { inject as service } from '@ember/service';
3+
import { computed, get } from '@ember/object';
4+
import { alias } from '@ember/object/computed';
5+
6+
export default Component.extend({
7+
classNames: ['conversation-part', 'conversation-part--reopened'],
8+
classNameBindings: ['isSelf:conversation-part-reopened--is-self'],
9+
10+
currentUser: service(),
11+
12+
author: null,
13+
reopenedAt: null,
14+
15+
user: alias('currentUser.user'),
16+
17+
isSelf: computed('author', 'user', function() {
18+
return get(this, 'author.id') === get(this, 'user.id');
19+
})
20+
});

app/models/conversation-part.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { belongsTo } from 'ember-data/relationships';
44

55
export default Model.extend({
66
body: attr(),
7+
closedAt: attr(),
78
insertedAt: attr(),
89
readAt: attr(),
910
updatedAt: attr(),
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<div class="conversation-part__message-wrapper">
2+
<div class="conversation-part__timestamps-wrapper">
3+
<div class="conversation-part__timestamps">
4+
<span data-test-reopened-at>
5+
{{#if isSelf}}
6+
You reopened this {{moment-from-now reopenedAt interval=60000}}
7+
{{else}}
8+
{{author.username}} reopened this {{moment-from-now reopenedAt interval=60000}}
9+
{{/if}}
10+
</span>
11+
</div>
12+
</div>
13+
</div>

app/templates/components/conversations/conversation-thread.hbs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,18 @@
1010
{{/if}}
1111
{{#each sortedConversationParts as |conversationPart|}}
1212
{{#if conversationPart.isLoaded}}
13-
{{#if (eq conversationPart.partType 'isClosed')}}
13+
{{#if (eq conversationPart.partType 'closed')}}
1414
{{conversation/conversation-part-closed
1515
author=conversationPart.author
1616
closedAt=conversationPart.insertedAt
1717
}}
18+
{{else if (eq conversationPart.partType 'reopened')}}
19+
{{conversations/conversation-part-comment
20+
author=conversationPart.author
21+
body=conversationPart.body
22+
readAt=conversationPart.readAt
23+
sentAt=conversationPart.insertedAt
24+
}}
1825
{{else}}
1926
{{conversations/conversation-part-comment
2027
author=conversationPart.author
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
import { moduleForComponent, test } from 'ember-qunit';
2+
import hbs from 'htmlbars-inline-precompile';
3+
import { set } from '@ember/object';
4+
import PageObject from 'ember-cli-page-object';
5+
import component from 'code-corps-ember/tests/pages/components/conversations/conversation-part';
6+
import stubService from 'code-corps-ember/tests/helpers/stub-service';
7+
import moment from 'moment';
8+
9+
let page = PageObject.create(component);
10+
11+
function renderPage() {
12+
page.render(hbs`
13+
{{conversations/conversation-part-reopened
14+
author=author
15+
reopenedAt=reopenedAt
16+
}}
17+
`);
18+
}
19+
20+
moduleForComponent('conversations/conversation-part-reopened', 'Integration | Component | conversations/conversation part reopened', {
21+
integration: true,
22+
beforeEach() {
23+
page.setContext(this);
24+
},
25+
afterEach() {
26+
page.removeContext();
27+
}
28+
});
29+
30+
test('if current user reopens message, "You reopened this" is rendered', function(assert) {
31+
assert.expect(1);
32+
33+
let user = {
34+
id: 1,
35+
username: 'testuser'
36+
};
37+
set(this, 'author', user);
38+
stubService(this, 'current-user', { user });
39+
40+
let twoMinutesAgo = moment().subtract(2, 'minutes');
41+
let twoMinutesAgoFriendly = twoMinutesAgo.from();
42+
set(this, 'reopenedAt', twoMinutesAgo);
43+
44+
renderPage();
45+
46+
let expectedText = `You reopened this ${twoMinutesAgoFriendly}`;
47+
assert.equal(page.reopenedAt.text, expectedText, 'The reopened at timestamp is rendered');
48+
});
49+
50+
test('if someone other than the current user reopens the message, "Author.username reopened this at" is rendered', function(assert) {
51+
assert.expect(1);
52+
53+
let user = {
54+
id: 1,
55+
username: 'currentuser'
56+
};
57+
stubService(this, 'current-user', { user });
58+
59+
let author = {
60+
id: 2,
61+
username: 'authoruser'
62+
};
63+
set(this, 'author', author);
64+
65+
let twoMinutesAgo = moment().subtract(2, 'minutes');
66+
let twoMinutesAgoFriendly = twoMinutesAgo.from();
67+
set(this, 'reopenedAt', twoMinutesAgo);
68+
69+
renderPage();
70+
71+
let expectedText = `${author.username} reopened this ${twoMinutesAgoFriendly}`;
72+
assert.equal(page.reopenedAt.text, expectedText, 'The reopened at timestamp is rendered');
73+
});

tests/pages/components/conversations/conversation-part.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,10 @@ export default {
1515
scope: '[data-test-closed-at]'
1616
},
1717

18+
isByCurrentUser: hasClass('conversation-part--is-self'),
1819
isComment: hasClass('conversation-part--comment'),
1920
isClosed: hasClass('conversation-part--closed'),
20-
isByCurrentUser: hasClass('conversation-part--is-self'),
21+
isReopened: hasClass('conversation-part--reopened'),
2122

2223
photo: {
2324
scope: '[data-test-target-photo]',
@@ -29,6 +30,10 @@ export default {
2930
mouseenter: triggerable('mouseenter')
3031
},
3132

33+
reopenedAt: {
34+
scope: '[data-test-reopened-at]'
35+
},
36+
3237
sentAt: {
3338
scope: '[data-test-sent-at]'
3439
}

0 commit comments

Comments
 (0)