tilde.news/spec/features/comment_spec.rb

118 lines
3.5 KiB
Ruby

# typed: false
require "rails_helper"
# uses page.driver.post because we're not running a full js engine,
# so the call can't just be click_on('delete'), etc.
RSpec.feature "Commenting" do
let(:user) { create(:user) }
let(:story) { create(:story, user: user) }
before(:each) { stub_login_as user }
scenario "posting a comment" do
visit "/s/#{story.short_id}"
expect(page).to have_button("Post")
fill_in "comment", with: "An example comment"
click_on "Post"
visit "/s/#{story.short_id}"
expect(page).to have_content("example comment")
end
feature "deleting comments" do
scenario "deleting a comment" do
comment = create(:comment,
user_id: user.id,
story_id: story.id,
created_at: 1.day.ago)
visit "/s/#{story.short_id}"
expect(page).to have_link("delete")
page.driver.post "/comments/#{comment.short_id}/delete"
visit "/s/#{story.short_id}"
expect(page).to have_link("undelete")
comment.reload
expect(comment.is_deleted?).to be(true)
end
scenario "trying to delete old comments" do
comment = create(:comment, user: user, story: story, created_at: 90.days.ago)
visit "/s/#{story.short_id}"
expect(page).not_to have_link("delete")
page.driver.post "/comments/#{comment.short_id}/delete"
comment.reload
expect(comment.is_deleted?).to be(false)
end
end
feature "disowning comments" do
scenario "disowning a comment" do
# bypass validations to create inactive-user:
create(:user, :inactive)
comment = create(:comment, user_id: user.id, story_id: story.id, created_at: 90.days.ago)
visit "/s/#{story.short_id}"
expect(page).to have_link("disown")
page.driver.post "/comments/#{comment.short_id}/disown"
comment.reload
expect(comment.user).not_to eq(user)
visit "/s/#{story.short_id}"
expect(page).to have_content("inactive-user")
end
scenario "trying to disown recent comments" do
comment = create(:comment, user_id: user.id, story_id: story.id, created_at: 1.day.ago)
visit "/s/#{story.short_id}"
expect(page).not_to have_link("disown")
page.driver.post "/comments/#{comment.short_id}/disown"
comment.reload
expect(comment.user).to eq(user)
end
end
feature "Merging story comments" do
scenario "upvote merged story comments" do
reader = create(:user)
hot_take = create(:story)
comment = create(
:comment,
user_id: user.id,
story_id: story.id,
created_at: 90.days.ago,
comment: "Cool story."
)
visit "/settings"
click_on "Logout"
stub_login_as reader
visit "/s/#{story.short_id}"
expect(page.find(:css, ".comment .comment_text")).to have_content("Cool story.")
expect(comment.score).to eq(1)
page.driver.post "/comments/#{comment.short_id}/upvote"
comment.reload
expect(comment.score).to eq(2)
story.update!(merged_stories: [hot_take])
visit "/s/#{story.short_id}"
expect(page.find(:css, ".comment.upvoted .score")).to have_content("2")
end
end
feature "user threads list" do
scenario "viewing user's threads" do
poster = create(:user)
parent = create(:comment, story: story, user: poster)
reply = create(:comment, story: story, user: user, parent_comment: parent)
visit "/threads/#{user.username}"
expect(page).to have_content(parent.comment)
expect(page).to have_content(reply.comment)
end
end
end