decidim-comments 0.0.2 → 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/app/assets/javascripts/decidim/comments/bundle.js +15 -15
- data/app/assets/javascripts/decidim/comments/bundle.js.map +1 -1
- data/app/commands/decidim/comments/create_comment.rb +2 -1
- data/app/forms/decidim/comments/comment_form.rb +1 -0
- data/app/frontend/application/apollo_client.js +1 -1
- data/app/frontend/application/application.component.jsx +1 -1
- data/app/frontend/comments/add_comment_form.component.jsx +76 -20
- data/app/frontend/comments/add_comment_form.component.test.jsx +77 -22
- data/app/frontend/comments/add_comment_form.fragment.graphql +6 -0
- data/app/frontend/comments/add_comment_form.mutation.graphql +2 -2
- data/app/frontend/comments/comment.component.jsx +15 -15
- data/app/frontend/comments/comment.component.test.jsx +42 -41
- data/app/frontend/comments/comment_order_selector.component.jsx +1 -1
- data/app/frontend/comments/comment_thread.component.jsx +7 -7
- data/app/frontend/comments/comment_thread.component.test.jsx +21 -19
- data/app/frontend/comments/comments.component.jsx +21 -17
- data/app/frontend/comments/comments.component.test.jsx +47 -32
- data/app/frontend/comments/comments.query.graphql +6 -3
- data/app/frontend/comments/down_vote_button.component.jsx +21 -10
- data/app/frontend/comments/up_vote_button.component.jsx +23 -12
- data/app/frontend/comments/vote_button.component.jsx +15 -7
- data/app/frontend/comments/vote_button_component.test.jsx +7 -2
- data/app/frontend/entry.js +1 -8
- data/app/frontend/support/generate_user_data.js +13 -0
- data/app/frontend/support/generate_user_group_data.js +14 -0
- data/app/helpers/decidim/comments/comments_helper.rb +10 -15
- data/app/models/decidim/comments/comment.rb +5 -7
- data/app/types/decidim/comments/comment_type.rb +5 -1
- data/config/locales/ca.yml +5 -1
- data/config/locales/en.yml +4 -1
- data/config/locales/es.yml +5 -1
- data/db/migrate/20170123102043_add_user_group_id_to_comments.rb +5 -0
- data/lib/decidim/comments/engine.rb +0 -1
- data/lib/decidim/comments/mutation_extensions.rb +2 -1
- metadata +10 -28
- data/app/frontend/support/generate_current_user_data.js +0 -13
- data/app/types/decidim/comments/author_type.rb +0 -15
@@ -1,5 +1,5 @@
|
|
1
|
-
mutation addComment($commentableId: String!, $commentableType: String!, $body: String!, $alignment: Int) {
|
2
|
-
addComment(commentableId: $commentableId, commentableType: $commentableType, body: $body, alignment: $alignment) {
|
1
|
+
mutation addComment($commentableId: String!, $commentableType: String!, $body: String!, $alignment: Int, $userGroupId: ID) {
|
2
|
+
addComment(commentableId: $commentableId, commentableType: $commentableType, body: $body, alignment: $alignment, userGroupId: $userGroupId) {
|
3
3
|
...CommentThread
|
4
4
|
}
|
5
5
|
}
|
@@ -68,12 +68,12 @@ class Comment extends Component {
|
|
68
68
|
* @returns {Void|DOMElement} - Render the reply button or not if user can reply
|
69
69
|
*/
|
70
70
|
_renderReplyButton() {
|
71
|
-
const { comment: { canHaveReplies },
|
71
|
+
const { comment: { canHaveReplies }, session } = this.props;
|
72
72
|
const { showReplyForm } = this.state;
|
73
73
|
|
74
|
-
if (
|
74
|
+
if (session && canHaveReplies) {
|
75
75
|
return (
|
76
|
-
<button
|
76
|
+
<button
|
77
77
|
className="comment__reply muted-link"
|
78
78
|
aria-controls="comment1-reply"
|
79
79
|
onClick={() => this.setState({ showReplyForm: !showReplyForm })}
|
@@ -92,10 +92,10 @@ class Comment extends Component {
|
|
92
92
|
* @returns {Void|DOMElement} - Render the reply button or not if user can reply
|
93
93
|
*/
|
94
94
|
_renderAdditionalReplyButton() {
|
95
|
-
const { comment: { canHaveReplies, hasReplies },
|
95
|
+
const { comment: { canHaveReplies, hasReplies }, session, isRootComment } = this.props;
|
96
96
|
const { showReplyForm } = this.state;
|
97
|
-
|
98
|
-
if (
|
97
|
+
|
98
|
+
if (session && canHaveReplies) {
|
99
99
|
if (hasReplies && isRootComment) {
|
100
100
|
|
101
101
|
return (
|
@@ -140,9 +140,9 @@ class Comment extends Component {
|
|
140
140
|
* @returns {Void|DomElement} - A wrapper element with comment replies inside
|
141
141
|
*/
|
142
142
|
_renderReplies() {
|
143
|
-
const { comment: { id, replies },
|
143
|
+
const { comment: { id, replies }, session, votable, articleClassName } = this.props;
|
144
144
|
let replyArticleClassName = 'comment comment--nested';
|
145
|
-
|
145
|
+
|
146
146
|
if (articleClassName === 'comment comment--nested') {
|
147
147
|
replyArticleClassName = `${replyArticleClassName} comment--nested--alt`;
|
148
148
|
}
|
@@ -155,7 +155,7 @@ class Comment extends Component {
|
|
155
155
|
<Comment
|
156
156
|
key={`comment_${id}_reply_${reply.id}`}
|
157
157
|
comment={reply}
|
158
|
-
|
158
|
+
session={session}
|
159
159
|
votable={votable}
|
160
160
|
articleClassName={replyArticleClassName}
|
161
161
|
/>
|
@@ -164,7 +164,7 @@ class Comment extends Component {
|
|
164
164
|
</div>
|
165
165
|
);
|
166
166
|
}
|
167
|
-
|
167
|
+
|
168
168
|
return null;
|
169
169
|
}
|
170
170
|
|
@@ -174,7 +174,7 @@ class Comment extends Component {
|
|
174
174
|
* @returns {Void|ReactElement} - Render the AddCommentForm component or not
|
175
175
|
*/
|
176
176
|
_renderReplyForm() {
|
177
|
-
const {
|
177
|
+
const { session, comment } = this.props;
|
178
178
|
const { showReplyForm } = this.state;
|
179
179
|
|
180
180
|
if (showReplyForm) {
|
@@ -182,7 +182,7 @@ class Comment extends Component {
|
|
182
182
|
<AddCommentForm
|
183
183
|
commentableId={comment.id}
|
184
184
|
commentableType="Decidim::Comments::Comment"
|
185
|
-
|
185
|
+
session={session}
|
186
186
|
showTitle={false}
|
187
187
|
submitButtonClassName="button small hollow"
|
188
188
|
onCommentAdded={() => this.setState({ showReplyForm: false })}
|
@@ -207,7 +207,7 @@ class Comment extends Component {
|
|
207
207
|
});
|
208
208
|
|
209
209
|
let label = '';
|
210
|
-
|
210
|
+
|
211
211
|
if (alignment === 1) {
|
212
212
|
label = I18n.t('components.comment.alignment.in_favor');
|
213
213
|
} else {
|
@@ -251,8 +251,8 @@ Comment.propTypes = {
|
|
251
251
|
propType(Comment.fragments.comment).isRequired,
|
252
252
|
propType(Comment.fragments.commentData).isRequired
|
253
253
|
]).isRequired,
|
254
|
-
|
255
|
-
|
254
|
+
session: PropTypes.shape({
|
255
|
+
user: PropTypes.any.isRequired
|
256
256
|
}),
|
257
257
|
articleClassName: PropTypes.string.isRequired,
|
258
258
|
isRootComment: PropTypes.bool,
|
@@ -1,25 +1,25 @@
|
|
1
1
|
/* eslint-disable no-unused-expressions */
|
2
|
-
import { shallow, mount }
|
3
|
-
import { filter }
|
4
|
-
import gql
|
2
|
+
import { shallow, mount } from 'enzyme';
|
3
|
+
import { filter } from 'graphql-anywhere';
|
4
|
+
import gql from 'graphql-tag';
|
5
5
|
|
6
|
-
import Comment
|
7
|
-
import AddCommentForm
|
8
|
-
import UpVoteButton
|
9
|
-
import DownVoteButton
|
6
|
+
import Comment from './comment.component';
|
7
|
+
import AddCommentForm from './add_comment_form.component';
|
8
|
+
import UpVoteButton from './up_vote_button.component';
|
9
|
+
import DownVoteButton from './down_vote_button.component';
|
10
10
|
|
11
|
-
import commentFragment
|
12
|
-
import commentDataFragment
|
13
|
-
import upVoteFragment
|
14
|
-
import downVoteFragment
|
11
|
+
import commentFragment from './comment.fragment.graphql';
|
12
|
+
import commentDataFragment from './comment_data.fragment.graphql';
|
13
|
+
import upVoteFragment from './up_vote.fragment.graphql';
|
14
|
+
import downVoteFragment from './down_vote.fragment.graphql';
|
15
15
|
|
16
|
-
import stubComponent
|
17
|
-
import generateCommentsData
|
18
|
-
import
|
16
|
+
import stubComponent from '../support/stub_component';
|
17
|
+
import generateCommentsData from '../support/generate_comments_data';
|
18
|
+
import generateUserData from '../support/generate_user_data';
|
19
19
|
|
20
20
|
describe("<Comment />", () => {
|
21
21
|
let comment = {};
|
22
|
-
let
|
22
|
+
let session = null;
|
23
23
|
|
24
24
|
stubComponent(AddCommentForm);
|
25
25
|
stubComponent(UpVoteButton);
|
@@ -28,8 +28,7 @@ describe("<Comment />", () => {
|
|
28
28
|
beforeEach(() => {
|
29
29
|
let commentsData = generateCommentsData(1);
|
30
30
|
commentsData[0].replies = generateCommentsData(3);
|
31
|
-
|
32
|
-
|
31
|
+
|
33
32
|
const fragment = gql`
|
34
33
|
${commentFragment}
|
35
34
|
${commentDataFragment}
|
@@ -38,44 +37,46 @@ describe("<Comment />", () => {
|
|
38
37
|
`;
|
39
38
|
|
40
39
|
comment = filter(fragment, commentsData[0]);
|
41
|
-
|
40
|
+
session = {
|
41
|
+
user: generateUserData()
|
42
|
+
}
|
42
43
|
});
|
43
44
|
|
44
45
|
it("should render an article with class comment", () => {
|
45
|
-
const wrapper = shallow(<Comment comment={comment}
|
46
|
+
const wrapper = shallow(<Comment comment={comment} session={session} />);
|
46
47
|
expect(wrapper.find('article.comment')).to.present();
|
47
48
|
});
|
48
49
|
|
49
50
|
it("should render a time tag with comment's created at", () => {
|
50
|
-
const wrapper = shallow(<Comment comment={comment}
|
51
|
+
const wrapper = shallow(<Comment comment={comment} session={session} />);
|
51
52
|
expect(wrapper.find('time')).to.have.text(comment.created_at);
|
52
53
|
});
|
53
54
|
|
54
55
|
it("should render author's name in a link with class author__name", () => {
|
55
|
-
const wrapper = shallow(<Comment comment={comment}
|
56
|
+
const wrapper = shallow(<Comment comment={comment} session={session} />);
|
56
57
|
expect(wrapper.find('a.author__name')).to.have.text(comment.author.name);
|
57
58
|
});
|
58
59
|
|
59
60
|
it("should render author's avatar as a image tag", () => {
|
60
|
-
const wrapper = shallow(<Comment comment={comment}
|
61
|
+
const wrapper = shallow(<Comment comment={comment} session={session} />);
|
61
62
|
expect(wrapper.find('a.author__avatar img')).to.have.attr('src').equal(comment.author.avatarUrl);
|
62
63
|
});
|
63
64
|
|
64
65
|
it("should render comment's body on a div with class comment__content", () => {
|
65
|
-
const wrapper = shallow(<Comment comment={comment}
|
66
|
+
const wrapper = shallow(<Comment comment={comment} session={session} />);
|
66
67
|
expect(wrapper.find('div.comment__content')).to.have.text(comment.body);
|
67
68
|
});
|
68
69
|
|
69
70
|
it("should initialize with a state property showReplyForm as false", () => {
|
70
|
-
const wrapper = shallow(<Comment comment={comment}
|
71
|
+
const wrapper = shallow(<Comment comment={comment} session={session} />);
|
71
72
|
expect(wrapper).to.have.state('showReplyForm', false);
|
72
73
|
});
|
73
74
|
|
74
75
|
it("should render a AddCommentForm component with the correct props when clicking the reply button", () => {
|
75
|
-
const wrapper = shallow(<Comment comment={comment}
|
76
|
+
const wrapper = shallow(<Comment comment={comment} session={session} />);
|
76
77
|
expect(wrapper.find(AddCommentForm)).not.to.be.present();
|
77
78
|
wrapper.find('button.comment__reply').simulate('click');
|
78
|
-
expect(wrapper.find(AddCommentForm)).to.have.prop('
|
79
|
+
expect(wrapper.find(AddCommentForm)).to.have.prop('session').deep.equal(session);
|
79
80
|
expect(wrapper.find(AddCommentForm)).to.have.prop('commentableId').equal(comment.id);
|
80
81
|
expect(wrapper.find(AddCommentForm)).to.have.prop('commentableType').equal("Decidim::Comments::Comment");
|
81
82
|
expect(wrapper.find(AddCommentForm)).to.have.prop('showTitle').equal(false);
|
@@ -84,89 +85,89 @@ describe("<Comment />", () => {
|
|
84
85
|
|
85
86
|
it("should not render the reply button if the comment cannot have replies", () => {
|
86
87
|
comment.canHaveReplies = false;
|
87
|
-
const wrapper = shallow(<Comment comment={comment}
|
88
|
+
const wrapper = shallow(<Comment comment={comment} session={session} />);
|
88
89
|
expect(wrapper.find('button.comment__reply')).not.to.be.present();
|
89
90
|
});
|
90
91
|
|
91
92
|
it("should not render the additional reply button if the parent comment has no replies and isRootcomment", () => {
|
92
93
|
comment.canHaveReplies = true;
|
93
94
|
comment.hasReplies = false;
|
94
|
-
const wrapper = shallow(<Comment comment={comment}
|
95
|
+
const wrapper = shallow(<Comment comment={comment} session={session} isRootComment />);
|
95
96
|
expect(wrapper.find('div.comment__additionalreply')).not.to.be.present();
|
96
97
|
});
|
97
98
|
|
98
99
|
it("should not render the additional reply button if the parent comment has replies and not isRootcomment", () => {
|
99
100
|
comment.canHaveReplies = true;
|
100
101
|
comment.hasReplies = true;
|
101
|
-
const wrapper = shallow(<Comment comment={comment}
|
102
|
+
const wrapper = shallow(<Comment comment={comment} session={session} />);
|
102
103
|
expect(wrapper.find('div.comment__additionalreply')).not.to.be.present();
|
103
104
|
});
|
104
105
|
|
105
106
|
it("should render the additional reply button if the parent comment has replies and isRootcomment", () => {
|
106
107
|
comment.canHaveReplies = true;
|
107
108
|
comment.hasReplies = true;
|
108
|
-
const wrapper = shallow(<Comment comment={comment}
|
109
|
+
const wrapper = shallow(<Comment comment={comment} session={session} isRootComment />);
|
109
110
|
expect(wrapper.find('div.comment__additionalreply')).to.be.present();
|
110
111
|
});
|
111
112
|
|
112
113
|
it("should render comment replies a separate Comment components", () => {
|
113
|
-
const wrapper = shallow(<Comment comment={comment}
|
114
|
+
const wrapper = shallow(<Comment comment={comment} session={session} votable />);
|
114
115
|
wrapper.find(Comment).forEach((node, idx) => {
|
115
116
|
expect(node).to.have.prop("comment").deep.equal(comment.replies[idx]);
|
116
|
-
expect(node).to.have.prop("
|
117
|
+
expect(node).to.have.prop("session").deep.equal(session);
|
117
118
|
expect(node).to.have.prop("articleClassName").equal("comment comment--nested")
|
118
119
|
expect(node).to.have.prop("votable").equal(true);
|
119
120
|
});
|
120
121
|
});
|
121
122
|
|
122
123
|
it("should render comment replies with articleClassName as 'comment comment--nested comment--nested--alt' when articleClassName is 'comment comment--nested'", () => {
|
123
|
-
const wrapper = shallow(<Comment comment={comment}
|
124
|
+
const wrapper = shallow(<Comment comment={comment} session={session} articleClassName="comment comment--nested" />);
|
124
125
|
wrapper.find(Comment).forEach((node) => {
|
125
126
|
expect(node).to.have.prop("articleClassName").equal("comment comment--nested comment--nested--alt")
|
126
127
|
});
|
127
128
|
});
|
128
129
|
|
129
130
|
it("should have a default prop articleClassName with value 'comment'", () => {
|
130
|
-
const wrapper = mount(<Comment comment={comment}
|
131
|
+
const wrapper = mount(<Comment comment={comment} session={session} />);
|
131
132
|
expect(wrapper).to.have.prop("articleClassName").equal("comment");
|
132
133
|
});
|
133
134
|
|
134
135
|
it("should have a default prop isRootComment with value false", () => {
|
135
|
-
const wrapper = mount(<Comment comment={comment}
|
136
|
+
const wrapper = mount(<Comment comment={comment} session={session} />);
|
136
137
|
expect(wrapper).to.have.prop("isRootComment").equal(false);
|
137
138
|
});
|
138
139
|
|
139
140
|
describe("when user is not logged in", () => {
|
140
141
|
beforeEach(() => {
|
141
|
-
|
142
|
+
session = null;
|
142
143
|
});
|
143
144
|
|
144
145
|
it("should not render reply button", () => {
|
145
|
-
const wrapper = shallow(<Comment comment={comment}
|
146
|
+
const wrapper = shallow(<Comment comment={comment} session={session} />);
|
146
147
|
expect(wrapper.find('button.comment__reply')).not.to.be.present();
|
147
148
|
});
|
148
149
|
});
|
149
150
|
|
150
151
|
it("should render a 'in favor' badge if comment's alignment is 1", () => {
|
151
152
|
comment.alignment = 1;
|
152
|
-
const wrapper = shallow(<Comment comment={comment}
|
153
|
+
const wrapper = shallow(<Comment comment={comment} session={session} />);
|
153
154
|
expect(wrapper.find('span.success.label')).to.have.text('In favor');
|
154
155
|
});
|
155
156
|
|
156
157
|
it("should render a 'against' badge if comment's alignment is -1", () => {
|
157
158
|
comment.alignment = -1;
|
158
|
-
const wrapper = shallow(<Comment comment={comment}
|
159
|
+
const wrapper = shallow(<Comment comment={comment} session={session} />);
|
159
160
|
expect(wrapper.find('span.alert.label')).to.have.text('Against');
|
160
161
|
});
|
161
162
|
|
162
163
|
describe("when the comment is votable", () => {
|
163
164
|
it("should render an UpVoteButton component", () => {
|
164
|
-
const wrapper = shallow(<Comment comment={comment}
|
165
|
+
const wrapper = shallow(<Comment comment={comment} session={session} votable />);
|
165
166
|
expect(wrapper.find(UpVoteButton)).to.have.prop("comment").deep.equal(comment);
|
166
167
|
})
|
167
168
|
|
168
169
|
it("should render an DownVoteButton component", () => {
|
169
|
-
const wrapper = shallow(<Comment comment={comment}
|
170
|
+
const wrapper = shallow(<Comment comment={comment} session={session} votable />);
|
170
171
|
expect(wrapper.find(DownVoteButton)).to.have.prop("comment").deep.equal(comment);
|
171
172
|
})
|
172
173
|
});
|
@@ -28,7 +28,7 @@ class CommentOrderSelector extends Component {
|
|
28
28
|
<span className="order-by__text">{ I18n.t("components.comment_order_selector.title") }</span>
|
29
29
|
<ul className="dropdown menu" data-dropdown-menu>
|
30
30
|
<li>
|
31
|
-
<a>{ I18n.t(`components.comment_order_selector.${orderBy}`) }</a>
|
31
|
+
<a>{ I18n.t(`components.comment_order_selector.order.${orderBy}`) }</a>
|
32
32
|
<ul className="menu">
|
33
33
|
<li>
|
34
34
|
<a href="" className="test" onClick={(event) => this._updateOrder(event, "best_rated")} >
|
@@ -15,15 +15,15 @@ import commentThreadFragment from './comment_thread.fragment.graphql'
|
|
15
15
|
*/
|
16
16
|
class CommentThread extends Component {
|
17
17
|
render() {
|
18
|
-
const { comment,
|
18
|
+
const { comment, session, votable } = this.props;
|
19
19
|
|
20
20
|
return (
|
21
21
|
<div>
|
22
22
|
{this._renderTitle()}
|
23
23
|
<div className="comment-thread">
|
24
|
-
<Comment
|
25
|
-
comment={filter(Comment.fragments.comment, comment)}
|
26
|
-
|
24
|
+
<Comment
|
25
|
+
comment={filter(Comment.fragments.comment, comment)}
|
26
|
+
session={session}
|
27
27
|
votable={votable}
|
28
28
|
isRootComment
|
29
29
|
/>
|
@@ -39,7 +39,7 @@ class CommentThread extends Component {
|
|
39
39
|
*/
|
40
40
|
_renderTitle() {
|
41
41
|
const { comment: { author, hasReplies } } = this.props;
|
42
|
-
|
42
|
+
|
43
43
|
if (hasReplies) {
|
44
44
|
return (
|
45
45
|
<h6 className="comment-thread__title">
|
@@ -60,8 +60,8 @@ CommentThread.fragments = {
|
|
60
60
|
};
|
61
61
|
|
62
62
|
CommentThread.propTypes = {
|
63
|
-
|
64
|
-
|
63
|
+
session: PropTypes.shape({
|
64
|
+
user: PropTypes.any.isRequired
|
65
65
|
}),
|
66
66
|
comment: propType(CommentThread.fragments.comment).isRequired,
|
67
67
|
votable: PropTypes.bool
|
@@ -2,18 +2,18 @@ import { shallow } from 'enzyme';
|
|
2
2
|
import { filter } from 'graphql-anywhere';
|
3
3
|
import gql from 'graphql-tag';
|
4
4
|
|
5
|
-
import CommentThread
|
6
|
-
import Comment
|
5
|
+
import CommentThread from './comment_thread.component';
|
6
|
+
import Comment from './comment.component';
|
7
7
|
|
8
|
-
import commentThreadFragment
|
8
|
+
import commentThreadFragment from './comment_thread.fragment.graphql'
|
9
9
|
|
10
|
-
import stubComponent
|
11
|
-
import generateCommentsData
|
12
|
-
import
|
10
|
+
import stubComponent from '../support/stub_component';
|
11
|
+
import generateCommentsData from '../support/generate_comments_data';
|
12
|
+
import generateCUserData from '../support/generate_user_data';
|
13
13
|
|
14
14
|
describe('<CommentThread />', () => {
|
15
15
|
let comment = {};
|
16
|
-
let
|
16
|
+
let session = null;
|
17
17
|
|
18
18
|
const commentFragment = gql`
|
19
19
|
fragment Comment on Comment {
|
@@ -29,19 +29,21 @@ describe('<CommentThread />', () => {
|
|
29
29
|
|
30
30
|
beforeEach(() => {
|
31
31
|
const commentsData = generateCommentsData(1);
|
32
|
-
|
32
|
+
|
33
33
|
const fragment = gql`
|
34
34
|
${commentThreadFragment}
|
35
35
|
${commentFragment}
|
36
36
|
`;
|
37
37
|
|
38
|
-
|
38
|
+
session = {
|
39
|
+
user: generateCUserData()
|
40
|
+
};
|
39
41
|
comment = filter(fragment, commentsData[0]);
|
40
42
|
});
|
41
43
|
|
42
44
|
describe("when comment doesn't have replies", () => {
|
43
45
|
it("should not render a title with author name", () => {
|
44
|
-
const wrapper = shallow(<CommentThread comment={comment}
|
46
|
+
const wrapper = shallow(<CommentThread comment={comment} session={session} />);
|
45
47
|
expect(wrapper.find('h6.comment-thread__title')).not.to.present();
|
46
48
|
});
|
47
49
|
});
|
@@ -52,30 +54,30 @@ describe('<CommentThread />', () => {
|
|
52
54
|
});
|
53
55
|
|
54
56
|
it("should render a h6 comment-thread__title with author name", () => {
|
55
|
-
const wrapper = shallow(<CommentThread comment={comment}
|
57
|
+
const wrapper = shallow(<CommentThread comment={comment} session={session} />);
|
56
58
|
expect(wrapper.find('h6.comment-thread__title')).to.have.text(`Conversation with ${comment.author.name}`);
|
57
59
|
});
|
58
60
|
});
|
59
61
|
|
60
62
|
describe("should render a Comment", () => {
|
61
|
-
it("and pass the
|
62
|
-
const wrapper = shallow(<CommentThread comment={comment}
|
63
|
-
expect(wrapper.find(Comment).first()).to.have.prop("
|
63
|
+
it("and pass the session as a prop to it", () => {
|
64
|
+
const wrapper = shallow(<CommentThread comment={comment} session={session} />);
|
65
|
+
expect(wrapper.find(Comment).first()).to.have.prop("session").deep.equal(session);
|
64
66
|
});
|
65
67
|
|
66
68
|
it("and pass filter comment data as a prop to it", () => {
|
67
|
-
const wrapper = shallow(<CommentThread comment={comment}
|
69
|
+
const wrapper = shallow(<CommentThread comment={comment} session={session} />);
|
68
70
|
expect(wrapper.find(Comment).first()).to.have.prop("comment").deep.equal(filter(commentFragment, comment));
|
69
71
|
});
|
70
72
|
|
71
73
|
it("and pass the votable as a prop to it", () => {
|
72
|
-
const wrapper = shallow(<CommentThread comment={comment}
|
74
|
+
const wrapper = shallow(<CommentThread comment={comment} session={session} votable />);
|
73
75
|
expect(wrapper.find(Comment).first()).to.have.prop("votable").equal(true);
|
74
76
|
});
|
75
|
-
|
77
|
+
|
76
78
|
it("and pass the isRootComment equal true", () => {
|
77
|
-
const wrapper = shallow(<CommentThread comment={comment}
|
79
|
+
const wrapper = shallow(<CommentThread comment={comment} session={session} votable isRootComment />);
|
78
80
|
expect(wrapper.find(Comment).first()).to.have.prop("isRootComment").equal(true);
|
79
81
|
});
|
80
|
-
});
|
82
|
+
});
|
81
83
|
});
|