require 'rails_helper' feature 'Stats' do background do admin = create(:administrator) login_as(admin.user) visit root_path end context 'Summary' do scenario 'General' do create(:debate) 2.times { create(:proposal) } 3.times { create(:comment, commentable: Debate.first) } 4.times { create(:visit) } visit admin_stats_path expect(page).to have_content "Debates 1" expect(page).to have_content "Proposals 2" expect(page).to have_content "Comments 3" expect(page).to have_content "Visits 4" end scenario 'Votes' do debate = create(:debate) create(:vote, votable: debate) proposal = create(:proposal) 2.times { create(:vote, votable: proposal) } comment = create(:comment) 3.times { create(:vote, votable: comment) } visit admin_stats_path expect(page).to have_content "Debate votes 1" expect(page).to have_content "Proposal votes 2" expect(page).to have_content "Comment votes 3" expect(page).to have_content "Total votes 6" end end context "Users" do scenario 'Summary' do 1.times { create(:user, :level_three) } 2.times { create(:user, :level_two) } 3.times { create(:user) } visit admin_stats_path expect(page).to have_content "Level three users 1" expect(page).to have_content "Level two users 2" expect(page).to have_content "Verified users 3" expect(page).to have_content "Unverified users 4" expect(page).to have_content "Total users 7" end scenario "Do not count erased users" do 1.times { create(:user, :level_three, erased_at: Time.current) } 2.times { create(:user, :level_two, erased_at: Time.current) } 3.times { create(:user, erased_at: Time.current) } visit admin_stats_path expect(page).to have_content "Level three users 0" expect(page).to have_content "Level two users 0" expect(page).to have_content "Verified users 0" expect(page).to have_content "Unverified users 1" expect(page).to have_content "Total users 1" end scenario "Do not count hidden users" do 1.times { create(:user, :level_three, hidden_at: Time.current) } 2.times { create(:user, :level_two, hidden_at: Time.current) } 3.times { create(:user, hidden_at: Time.current) } visit admin_stats_path expect(page).to have_content "Level three users 0" expect(page).to have_content "Level two users 0" expect(page).to have_content "Verified users 0" expect(page).to have_content "Unverified users 1" expect(page).to have_content "Total users 1" end scenario 'Level 2 user Graph' do create(:geozone) visit account_path click_link 'Verify my account' verify_residence confirm_phone visit admin_stats_path expect(page).to have_content "Level 2 User (1)" end end context "Proposal notifications" do scenario "Summary stats" do proposal = create(:proposal) create(:proposal_notification, proposal: proposal) create(:proposal_notification, proposal: proposal) create(:proposal_notification) visit admin_stats_path click_link "Proposal notifications" within("#proposal_notifications_count") do expect(page).to have_content "3" end within("#proposals_with_notifications_count") do expect(page).to have_content "2" end end scenario "Index" do 3.times { create(:proposal_notification) } visit admin_stats_path click_link "Proposal notifications" expect(page).to have_css(".proposal_notification", count: 3) ProposalNotification.all.each do |proposal_notification| expect(page).to have_content proposal_notification.title expect(page).to have_content proposal_notification.body end end end context "Direct messages" do scenario "Summary stats" do sender = create(:user, :level_two) create(:direct_message, sender: sender) create(:direct_message, sender: sender) create(:direct_message) visit admin_stats_path click_link "Direct messages" within("#direct_messages_count") do expect(page).to have_content "3" end within("#users_who_have_sent_message_count") do expect(page).to have_content "2" end end end context "Polls" do scenario "Total participants by origin" do oa = create(:poll_officer_assignment) 3.times { create(:poll_voter, origin: "web") } visit admin_stats_path within(".stats") do click_link "Polls" end within("#web_participants") do expect(page).to have_content "3" end end scenario "Total participants" do user = create(:user, :level_two) 3.times { create(:poll_voter, user: user) } create(:poll_voter) visit admin_stats_path within(".stats") do click_link "Polls" end within("#participants") do expect(page).to have_content "2" end end scenario "Participants by poll" do oa = create(:poll_officer_assignment) poll1 = create(:poll) poll2 = create(:poll) 1.times { create(:poll_voter, poll: poll1, origin: "web") } 2.times { create(:poll_voter, poll: poll2, origin: "web") } visit admin_stats_path within(".stats") do click_link "Polls" end within("#polls") do within("#poll_#{poll1.id}") do expect(page).to have_content "1" end within("#poll_#{poll2.id}") do expect(page).to have_content "2" end end end scenario "Participants by poll question" do user1 = create(:user, :level_two) user2 = create(:user, :level_two) poll = create(:poll) question1 = create(:poll_question, :with_answers, poll: poll) question2 = create(:poll_question, :with_answers, poll: poll) create(:poll_answer, question: question1, author: user1) create(:poll_answer, question: question2, author: user1) create(:poll_answer, question: question2, author: user2) visit admin_stats_path within(".stats") do click_link "Polls" end within("#poll_question_#{question1.id}") do expect(page).to have_content "1" end within("#poll_question_#{question2.id}") do expect(page).to have_content "2" end within("#poll_#{poll.id}_questions_total") do expect(page).to have_content "2" end end end end