otwarchive-symphonyarchive/spec/helpers/comments_helper_spec.rb

126 lines
4.3 KiB
Ruby
Raw Normal View History

2026-03-11 22:22:11 +00:00
require "spec_helper"
describe CommentsHelper do
describe "#comment_link_with_commentable_name" do
context "when ultimate parent is AdminPost" do
let(:comment) { create(:comment, :on_admin_post) }
it "links to comment" do
text = "Comment on the news post #{comment.ultimate_parent.commentable_name}"
expect(helper.comment_link_with_commentable_name(comment)).to eq(link_to(text, comment_path(comment)))
end
end
context "when ultimate parent is Tag" do
let(:comment) { create(:comment, :on_tag) }
it "links to comment" do
text = "Comment on the tag #{comment.ultimate_parent.commentable_name}"
expect(helper.comment_link_with_commentable_name(comment)).to eq(link_to(text, comment_path(comment)))
end
end
context "when ultimate parent is Work" do
let(:comment) { create(:comment) }
it "links to comment" do
text = "Comment on the work #{comment.ultimate_parent.commentable_name}"
expect(helper.comment_link_with_commentable_name(comment)).to eq(link_to(text, comment_path(comment)))
end
end
context "when ultimate parent is unknown" do
let(:comment) { create(:comment) }
before do
comment.parent.delete
comment.reload
end
it "links to comment" do
text = "Comment on unknown item"
expect(helper.comment_link_with_commentable_name(comment)).to eq(link_to(text, comment_path(comment)))
end
end
end
describe "#commenter_id_for_css_classes" do
context "when commenter is a user" do
let(:user) { create(:user) }
let(:comment) { create(:comment, pseud: user.default_pseud) }
it "returns commenter id css class name" do
expect(helper.commenter_id_for_css_classes(comment)).to eq("user-#{user.id}")
end
context "when commenter is creator of work inside anonymous collection" do
let(:anonymous_collection) { create(:anonymous_collection) }
let(:work) { create(:work, authors: [user.default_pseud], collections: [anonymous_collection]) }
let(:comment) { create(:comment, pseud: user.default_pseud, commentable: work.last_posted_chapter) }
it "returns nil" do
expect(helper.commenter_id_for_css_classes(comment)).to eq(nil)
end
end
end
context "when commenter is a visitor" do
let(:comment) { create(:comment, :by_guest) }
it "returns nil" do
expect(helper.commenter_id_for_css_classes(comment)).to eq(nil)
end
end
context "when comment is deleted" do
let(:comment) { create(:comment, is_deleted: true) }
it "returns nil" do
expect(helper.commenter_id_for_css_classes(comment)).to eq(nil)
end
end
context "when comment is hidden by admin" do
let(:comment) { create(:comment, hidden_by_admin: true) }
it "returns nil" do
expect(helper.commenter_id_for_css_classes(comment)).to eq(nil)
end
end
end
describe "#css_classes_for_comment" do
context "when comment exists" do
let(:user) { create(:user) }
let(:comment) { create(:comment, pseud: user.default_pseud) }
let(:unreviewed_comment) { create(:comment, :unreviewed, pseud: user.default_pseud) }
it "has classes" do
expect(helper.css_classes_for_comment(comment)).to eq("comment group user-#{user.id}")
end
it "includes unreviewed class when comment is unreviewed" do
expect(helper.css_classes_for_comment(unreviewed_comment)).to eq("unreviewed comment group user-#{user.id}")
end
end
context "when commenter is an official" do
let(:official_user) { create(:official_user) }
let(:comment) { create(:comment, pseud: official_user.default_pseud) }
it "has official class" do
expect(helper.css_classes_for_comment(comment)).to match("official")
end
context "commenter is also creator of a work inside anonymous collection" do
let(:work) { create(:work, authors: [official_user.default_pseud], collections: [create(:anonymous_collection)]) }
let(:comment) { create(:comment, pseud: official_user.default_pseud, commentable: work.last_posted_chapter) }
it "does not have official class" do
expect(helper.css_classes_for_comment(comment)).not_to match("official")
end
end
end
end
end