118 lines
3.5 KiB
Ruby
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
|