These variables can be considered a block, and so removing them doesn't make the test much harder to undestand. Sometimes these variables formed the setup, sometimes they formed an isolated part of the setup, and sometimes they were the part of the test that made the test different from other tests.
152 lines
5.1 KiB
Ruby
152 lines
5.1 KiB
Ruby
require "rails_helper"
|
|
|
|
describe "Communities" do
|
|
|
|
context "Show" do
|
|
|
|
scenario "Should display default content" do
|
|
proposal = create(:proposal)
|
|
community = proposal.community
|
|
user = create(:user)
|
|
login_as(user)
|
|
|
|
visit community_path(community)
|
|
|
|
expect(page).to have_content "Proposal community"
|
|
expect(page).to have_content proposal.title
|
|
expect(page).to have_content "Participate in the community of this proposal"
|
|
expect(page).to have_link("Create topic", href: new_community_topic_path(community))
|
|
end
|
|
|
|
scenario "Should display without_topics_text and participants when there are not topics" do
|
|
proposal = create(:proposal)
|
|
community = proposal.community
|
|
|
|
visit community_path(community)
|
|
|
|
expect(page).to have_content "Create the first community topic"
|
|
expect(page).to have_content "Participants (1)"
|
|
end
|
|
|
|
scenario "Should display order selector and topic content when there are topics" do
|
|
proposal = create(:proposal)
|
|
community = proposal.community
|
|
topic = create(:topic, community: community)
|
|
create(:comment, commentable: topic)
|
|
|
|
visit community_path(community)
|
|
|
|
expect(page).to have_selector ".wide-order-selector"
|
|
within "#topic_#{topic.id}" do
|
|
expect(page).to have_content topic.title
|
|
expect(page).to have_content "#{topic.comments_count} comment"
|
|
expect(page).to have_content I18n.l(topic.created_at.to_date)
|
|
expect(page).to have_content topic.author.name
|
|
end
|
|
end
|
|
|
|
scenario "Topic order" do
|
|
proposal = create(:proposal)
|
|
community = proposal.community
|
|
topic1 = create(:topic, community: community)
|
|
topic2 = create(:topic, community: community)
|
|
topic3 = create(:topic, community: community)
|
|
|
|
create(:comment, :with_confidence_score, commentable: topic1)
|
|
create(:comment, :with_confidence_score, commentable: topic3)
|
|
create(:comment, :with_confidence_score, commentable: topic3)
|
|
|
|
visit community_path(community, order: :most_commented)
|
|
|
|
expect(topic3.title).to appear_before(topic1.title)
|
|
expect(topic1.title).to appear_before(topic2.title)
|
|
|
|
visit community_path(community, order: :oldest)
|
|
|
|
expect(topic1.title).to appear_before(topic2.title)
|
|
expect(topic2.title).to appear_before(topic3.title)
|
|
|
|
visit community_path(community, order: :newest)
|
|
|
|
expect(topic3.title).to appear_before(topic2.title)
|
|
expect(topic2.title).to appear_before(topic1.title)
|
|
end
|
|
|
|
scenario "Should order by newest when order param is invalid" do
|
|
proposal = create(:proposal)
|
|
community = proposal.community
|
|
topic1 = create(:topic, community: community)
|
|
topic2 = create(:topic, community: community)
|
|
|
|
visit community_path(community, order: "invalid_param")
|
|
|
|
expect(topic2.title).to appear_before(topic1.title)
|
|
end
|
|
|
|
scenario "Should display topic edit button on topic show when author is logged" do
|
|
proposal = create(:proposal)
|
|
community = proposal.community
|
|
user = create(:user)
|
|
topic1 = create(:topic, community: community, author: user)
|
|
topic2 = create(:topic, community: community)
|
|
login_as(user)
|
|
|
|
visit community_topic_path(community, topic1)
|
|
expect(page).to have_link("Edit topic", href: edit_community_topic_path(community, topic1))
|
|
|
|
visit community_topic_path(community, topic2)
|
|
expect(page).not_to have_link("Edit topic", href: edit_community_topic_path(community, topic2))
|
|
end
|
|
|
|
scenario "Should display participant when there is topics" do
|
|
proposal = create(:proposal)
|
|
community = proposal.community
|
|
topic = create(:topic, community: community)
|
|
|
|
visit community_path(community)
|
|
|
|
within ".communities-participant" do
|
|
expect(page).to have_content "Participants (2)"
|
|
expect(page).to have_content topic.author.name
|
|
expect(page).to have_content proposal.author.name
|
|
end
|
|
end
|
|
|
|
scenario "Should display participants when there are topics and comments" do
|
|
proposal = create(:proposal)
|
|
community = proposal.community
|
|
topic = create(:topic, community: community)
|
|
comment = create(:comment, commentable: topic)
|
|
|
|
visit community_path(community)
|
|
|
|
within ".communities-participant" do
|
|
expect(page).to have_content "Participants (3)"
|
|
expect(page).to have_content topic.author.name
|
|
expect(page).to have_content comment.author.name
|
|
expect(page).to have_content proposal.author.name
|
|
end
|
|
end
|
|
|
|
scenario "Should redirect root path when communities are disabled" do
|
|
Setting["feature.community"] = nil
|
|
proposal = create(:proposal)
|
|
community = proposal.community
|
|
|
|
visit community_path(community)
|
|
|
|
expect(page).to have_current_path(root_path)
|
|
end
|
|
|
|
scenario "Accesing a community without associated communitable" do
|
|
proposal = create(:proposal)
|
|
community = proposal.community
|
|
proposal.really_destroy!
|
|
community.reload
|
|
|
|
expect { visit community_path(community) }.to raise_error(ActionController::RoutingError)
|
|
end
|
|
end
|
|
|
|
end
|