Skip to content

Commit cff9398

Browse files
joshsmithbegedin
authored andcommitted
Sort conversations by updatedAt timestamp (#1643)
* Sort conversations by updatedAt timestamp * Expand existing acceptance test to cover ordering and timestamp formatting
1 parent f50cdb0 commit cff9398

5 files changed

Lines changed: 65 additions & 7 deletions

File tree

app/templates/conversations.hbs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
<div class="conversations">
44
<aside>
5-
{{#each conversations as |conversation|}}
5+
{{#each (sort-by "updatedAt:desc" conversations) as |conversation|}}
66
{{conversations/conversation-list-item-with-project
77
conversation=conversation
88
}}

app/templates/project/conversations.hbs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
<div class="conversations">
1010
<aside>
11-
{{#each conversations as |conversation|}}
11+
{{#each (sort-by "updatedAt:desc" conversations) as |conversation|}}
1212
{{conversations/conversation-list-item-with-user
1313
conversation=conversation
1414
close=(action 'close')

tests/acceptance/project-conversations-test.js

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ import moduleForAcceptance from 'code-corps-ember/tests/helpers/module-for-accep
44
import { authenticateSession } from 'code-corps-ember/tests/helpers/ember-simple-auth';
55
import page from 'code-corps-ember/tests/pages/project/conversations';
66

7+
const hour = 3600 * 1000;
8+
79
function createConversations(count, project, user) {
810
return [...Array(count)].map(() => {
911
let message = server.create('message', { project });
@@ -45,12 +47,22 @@ test('Page requires current user to be admin', function(assert) {
4547
});
4648

4749
test('Project admin can view list of conversations', function(assert) {
48-
assert.expect(1);
50+
assert.expect(2);
4951

5052
let { project, user } = server.create('project-user', { role: 'admin' });
5153
authenticateSession(this.application, { user_id: user.id });
5254

53-
createConversations(3, project, user);
55+
let [message1, message2, message3] = server.createList('message', 3, { project });
56+
57+
let [date1, date2, date3] = [
58+
Date.now(),
59+
Date.now() - 5 * hour,
60+
Date.now() - 1 * hour
61+
];
62+
63+
server.create('conversation', { message: message1, user, updatedAt: date1 });
64+
server.create('conversation', { message: message2, user, updatedAt: date2 });
65+
server.create('conversation', { message: message3, user, updatedAt: date3 });
5466

5567
page.visit({
5668
organization: project.organization.slug,
@@ -59,6 +71,23 @@ test('Project admin can view list of conversations', function(assert) {
5971

6072
andThen(() => {
6173
assert.equal(page.conversations().count, 3, 'Conversations are rendered');
74+
let renderedTimeStampOrder = [
75+
page.conversations(0).updatedAt.text,
76+
page.conversations(1).updatedAt.text,
77+
page.conversations(2).updatedAt.text
78+
];
79+
80+
let expectedTimeStampOrder = [
81+
'a few seconds ago',
82+
'an hour ago',
83+
'5 hours ago'
84+
];
85+
86+
assert.deepEqual(
87+
renderedTimeStampOrder,
88+
expectedTimeStampOrder,
89+
'Items are rendered in correct order with properly formatted timestamps.'
90+
);
6291
});
6392
});
6493

tests/acceptance/user-conversations-test.js

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ import moduleForAcceptance from 'code-corps-ember/tests/helpers/module-for-accep
44
import { authenticateSession } from 'code-corps-ember/tests/helpers/ember-simple-auth';
55
import page from 'code-corps-ember/tests/pages/conversations';
66

7+
const hour = 3600 * 1000;
8+
79
moduleForAcceptance('Acceptance | User Conversations');
810

911
test('Page requires authentication', function(assert) {
@@ -17,17 +19,42 @@ test('Page requires authentication', function(assert) {
1719
});
1820

1921
test('User can view list of their own conversations', function(assert) {
20-
assert.expect(1);
22+
assert.expect(2);
2123

2224
let user = server.create('user');
2325
authenticateSession(this.application, { user_id: user.id });
2426

25-
server.createList('conversation', 3, { user });
27+
let [date1, date2, date3] = [
28+
Date.now(),
29+
Date.now() - 5 * hour,
30+
Date.now() - 1 * hour
31+
];
32+
33+
server.create('conversation', { user, updatedAt: date1 });
34+
server.create('conversation', { user, updatedAt: date2 });
35+
server.create('conversation', { user, updatedAt: date3 });
2636

2737
page.visit();
2838

2939
andThen(() => {
3040
assert.equal(page.conversations().count, 3, 'Conversations are rendered');
41+
let renderedTimeStampOrder = [
42+
page.conversations(0).updatedAt.text,
43+
page.conversations(1).updatedAt.text,
44+
page.conversations(2).updatedAt.text
45+
];
46+
47+
let expectedTimeStampOrder = [
48+
'a few seconds ago',
49+
'an hour ago',
50+
'5 hours ago'
51+
];
52+
53+
assert.deepEqual(
54+
renderedTimeStampOrder,
55+
expectedTimeStampOrder,
56+
'Items are rendered in correct order with properly formatted timestamps.'
57+
);
3158
});
3259
});
3360

tests/pages/conversations.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,14 @@ import {
44
visitable
55
} from 'ember-cli-page-object';
66
import conversationThread from 'code-corps-ember/tests/pages/components/conversations/conversation-thread';
7+
import conversationListItemWithProject from 'code-corps-ember/tests/pages/components/conversations/conversation-list-item-with-project';
78

89
export default create({
910
visit: visitable('/conversations'),
1011

1112
conversations: collection({
12-
itemScope: '.conversation-list-item'
13+
itemScope: '.conversation-list-item',
14+
item: conversationListItemWithProject
1315
}),
1416

1517
conversationThread

0 commit comments

Comments
 (0)