159 lines
5.3 KiB
Ruby
159 lines
5.3 KiB
Ruby
require "rails_helper"
|
|
|
|
feature "Communities" do
|
|
|
|
background do
|
|
Setting["feature.community"] = true
|
|
end
|
|
|
|
after do
|
|
Setting["feature.community"] = nil
|
|
end
|
|
|
|
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)
|
|
topic2_comment = create(:comment, :with_confidence_score, commentable: topic2)
|
|
topic3 = create(:topic, community: community)
|
|
topic3_comment = create(:comment, :with_confidence_score, commentable: topic3)
|
|
topic3_comment = create(:comment, :with_confidence_score, commentable: topic3)
|
|
|
|
visit community_path(community, order: :most_commented)
|
|
|
|
expect(topic3.title).to appear_before(topic2.title)
|
|
expect(topic2.title).to appear_before(topic1.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
|