diff --git a/app/components/admin/stats/budget_supporting_component.html.erb b/app/components/admin/stats/budget_supporting_component.html.erb
index c946d73bf..957908e9c 100644
--- a/app/components/admin/stats/budget_supporting_component.html.erb
+++ b/app/components/admin/stats/budget_supporting_component.html.erb
@@ -30,7 +30,7 @@
-<%= render Admin::Stats::ChartComponent.new(name: "user_supported_budgets", event: "", count: user_count) %>
+<%= render Admin::Stats::ChartComponent.new(chart) %>
diff --git a/app/components/admin/stats/budget_supporting_component.rb b/app/components/admin/stats/budget_supporting_component.rb
index 249deed5c..9626b033f 100644
--- a/app/components/admin/stats/budget_supporting_component.rb
+++ b/app/components/admin/stats/budget_supporting_component.rb
@@ -28,4 +28,8 @@ class Admin::Stats::BudgetSupportingComponent < ApplicationComponent
[heading, headings_stats[heading.id][:total_participants_support_phase]]
end
end
+
+ def chart
+ @chart ||= Ahoy::Chart.new("user_supported_budgets")
+ end
end
diff --git a/app/components/admin/stats/chart_component.html.erb b/app/components/admin/stats/chart_component.html.erb
index f31b0e21a..99f2ec4bf 100644
--- a/app/components/admin/stats/chart_component.html.erb
+++ b/app/components/admin/stats/chart_component.html.erb
@@ -1,4 +1,4 @@
-
<%= t "admin.stats.graph.#{name || event}" %> (<%= count %>)
- <%= chart_tag id: name, event: event %>
+ <%= t "admin.stats.graph.#{event}" %> (<%= count %>)
+ <%= chart_tag %>
diff --git a/app/components/admin/stats/chart_component.rb b/app/components/admin/stats/chart_component.rb
index 2528e1e49..94c729910 100644
--- a/app/components/admin/stats/chart_component.rb
+++ b/app/components/admin/stats/chart_component.rb
@@ -1,25 +1,21 @@
class Admin::Stats::ChartComponent < ApplicationComponent
- attr_reader :name, :event, :count
+ attr_reader :chart
- def initialize(name:, event:, count:)
- @name = name
- @event = event
- @count = count
+ def initialize(chart)
+ @chart = chart
end
private
- def chart_tag(opt = {})
- opt[:data] ||= {}
- opt[:data][:graph] = admin_api_stats_path(chart_data(opt))
- tag.div(**opt)
+ def count
+ chart.count
end
- def chart_data(opt = {})
- if opt[:id].present?
- { opt[:id] => true }
- elsif opt[:event].present?
- { event: opt[:event] }
- end
+ def event
+ chart.event_name
+ end
+
+ def chart_tag
+ tag.div("data-graph": admin_api_stats_path(event: event))
end
end
diff --git a/app/controllers/admin/api/stats_controller.rb b/app/controllers/admin/api/stats_controller.rb
index b025e3195..577d11fff 100644
--- a/app/controllers/admin/api/stats_controller.rb
+++ b/app/controllers/admin/api/stats_controller.rb
@@ -1,30 +1,9 @@
class Admin::Api::StatsController < Admin::Api::BaseController
def show
- if params[:event].blank? &&
- params[:visits].blank? &&
- params[:budget_investments].blank? &&
- params[:user_supported_budgets].blank?
- return render json: {}, status: :bad_request
- end
-
- ds = Ahoy::DataSource.new
-
if params[:event].present?
- ds.add params[:event].titleize, Ahoy::Chart.new(params[:event]).group_by_day(:time).count
+ render json: Ahoy::Chart.new(params[:event]).data_points
+ else
+ render json: {}, status: :bad_request
end
-
- if params[:visits].present?
- ds.add "Visits", Visit.group_by_day(:started_at).count
- end
-
- if params[:budget_investments].present?
- ds.add "Budget Investments", Budget::Investment.group_by_day(:created_at).count
- end
-
- if params[:user_supported_budgets].present?
- ds.add "User supported budgets",
- Vote.where(votable_type: "Budget::Investment").group_by_day(:updated_at).count
- end
- render json: ds.build
end
end
diff --git a/app/controllers/admin/stats_controller.rb b/app/controllers/admin/stats_controller.rb
index fbfc06618..4cd913f27 100644
--- a/app/controllers/admin/stats_controller.rb
+++ b/app/controllers/admin/stats_controller.rb
@@ -30,14 +30,7 @@ class Admin::StatsController < Admin::BaseController
end
def graph
- @name = params[:id]
- @event = params[:event]
-
- if params[:event]
- @count = Ahoy::Chart.new(params[:event]).count
- else
- @count = params[:count]
- end
+ @chart = Ahoy::Chart.new(params[:event])
end
def proposal_notifications
diff --git a/app/controllers/concerns/commentable_actions.rb b/app/controllers/concerns/commentable_actions.rb
index 8a47f509e..f02a7bcf2 100644
--- a/app/controllers/concerns/commentable_actions.rb
+++ b/app/controllers/concerns/commentable_actions.rb
@@ -59,10 +59,6 @@ module CommentableActions
private
- def track_event
- ahoy.track :"#{resource_name}_created", "#{resource_name}_id": resource.id
- end
-
def tag_cloud
TagCloud.new(resource_model, params[:search])
end
diff --git a/app/controllers/debates_controller.rb b/app/controllers/debates_controller.rb
index e2b1a1efb..0bf0f3e04 100644
--- a/app/controllers/debates_controller.rb
+++ b/app/controllers/debates_controller.rb
@@ -24,7 +24,6 @@ class DebatesController < ApplicationController
@debate.author = current_user
if @debate.save
- track_event
redirect_to debate_path(@debate), notice: t("flash.actions.create.debate")
else
render :new
diff --git a/app/controllers/legislation/annotations_controller.rb b/app/controllers/legislation/annotations_controller.rb
index ba1b55f89..ce83d684b 100644
--- a/app/controllers/legislation/annotations_controller.rb
+++ b/app/controllers/legislation/annotations_controller.rb
@@ -51,7 +51,6 @@ class Legislation::AnnotationsController < Legislation::BaseController
@annotation = @draft_version.annotations.new(annotation_params)
@annotation.author = current_user
if @annotation.save
- track_event
render json: @annotation.to_json
else
render json: @annotation.errors.full_messages, status: :unprocessable_entity
@@ -100,12 +99,6 @@ class Legislation::AnnotationsController < Legislation::BaseController
[:quote, :text, ranges: [:start, :startOffset, :end, :endOffset]]
end
- def track_event
- ahoy.track :legislation_annotation_created,
- legislation_annotation_id: @annotation.id,
- legislation_draft_version_id: @draft_version.id
- end
-
def convert_ranges_parameters
annotation = params[:legislation_annotation]
if annotation && annotation[:ranges] && annotation[:ranges].is_a?(String)
diff --git a/app/controllers/legislation/answers_controller.rb b/app/controllers/legislation/answers_controller.rb
index 3c718617f..bbe55c3a8 100644
--- a/app/controllers/legislation/answers_controller.rb
+++ b/app/controllers/legislation/answers_controller.rb
@@ -12,7 +12,6 @@ class Legislation::AnswersController < Legislation::BaseController
if @process.debate_phase.open?
@answer.user = current_user
@answer.save!
- track_event
respond_to do |format|
format.js
format.html { redirect_to legislation_process_question_path(@process, @question) }
@@ -35,11 +34,4 @@ class Legislation::AnswersController < Legislation::BaseController
def allowed_params
[:legislation_question_option_id]
end
-
- def track_event
- ahoy.track :legislation_answer_created,
- legislation_answer_id: @answer.id,
- legislation_question_option_id: @answer.legislation_question_option_id,
- legislation_question_id: @answer.legislation_question_id
- end
end
diff --git a/app/controllers/management/proposals_controller.rb b/app/controllers/management/proposals_controller.rb
index 83bfadb5c..d319d24a5 100644
--- a/app/controllers/management/proposals_controller.rb
+++ b/app/controllers/management/proposals_controller.rb
@@ -17,7 +17,6 @@ class Management::ProposalsController < Management::BaseController
published_at: Time.current))
if @resource.save
- track_event
redirect_path = url_for(controller: controller_name, action: :show, id: @resource.id)
redirect_to redirect_path, notice: t("flash.actions.create.#{resource_name.underscore}")
else
diff --git a/app/controllers/verification/sms_controller.rb b/app/controllers/verification/sms_controller.rb
index 2dc628f6b..57d51ed09 100644
--- a/app/controllers/verification/sms_controller.rb
+++ b/app/controllers/verification/sms_controller.rb
@@ -28,7 +28,6 @@ class Verification::SmsController < ApplicationController
@sms = Verification::Sms.new(sms_params.merge(user: current_user))
if @sms.verified?
current_user.update!(confirmed_phone: current_user.unconfirmed_phone)
- ahoy.track(:level_2_user, user_id: current_user.id) rescue nil
if VerifiedUser.phone?(current_user)
current_user.update(verified_at: Time.current)
diff --git a/app/helpers/stats_helper.rb b/app/helpers/stats_helper.rb
index 30facd211..89046e525 100644
--- a/app/helpers/stats_helper.rb
+++ b/app/helpers/stats_helper.rb
@@ -1,10 +1,4 @@
module StatsHelper
- def budget_investments_chart_tag(opt = {})
- opt[:data] ||= {}
- opt[:data][:graph] = admin_api_stats_path(budget_investments: true)
- tag.div(**opt)
- end
-
def number_to_stats_percentage(number, options = {})
number_to_percentage(number, { strip_insignificant_zeros: true, precision: 2 }.merge(options))
end
diff --git a/app/models/ahoy/chart.rb b/app/models/ahoy/chart.rb
index fa71186e7..d4ff7c739 100644
--- a/app/models/ahoy/chart.rb
+++ b/app/models/ahoy/chart.rb
@@ -1,20 +1,59 @@
module Ahoy
class Chart
attr_reader :event_name
- delegate :count, :group_by_day, to: :events
+ delegate :count, to: :records
def initialize(event_name)
@event_name = event_name
end
def self.active_event_names
- Ahoy::Event.distinct.order(:name).pluck(:name)
+ event_names_with_collections.select { |name, collection| collection.any? }.keys
+ end
+
+ def self.event_names_with_collections
+ {
+ budget_investment_created: Budget::Investment.with_hidden,
+ debate_created: Debate.with_hidden,
+ legislation_annotation_created: Legislation::Annotation.with_hidden,
+ legislation_answer_created: Legislation::Answer.with_hidden,
+ level_3_user: User.with_hidden.level_three_verified,
+ proposal_created: Proposal.with_hidden
+ }
+ end
+
+ def data_points
+ ds = Ahoy::DataSource.new
+ ds.add event_name.to_s.titleize, records_by_day.count
+
+ ds.build
end
private
- def events
- Ahoy::Event.where(name: event_name)
+ def records
+ case event_name.to_sym
+ when :user_supported_budgets
+ Vote.where(votable_type: "Budget::Investment")
+ when :visits
+ Visit.all
+ else
+ self.class.event_names_with_collections[event_name.to_sym]
+ end
+ end
+
+ def records_by_day
+ raise "Unknown event #{event_name}" unless records.respond_to?(:group_by_day)
+
+ records.group_by_day(date_field)
+ end
+
+ def date_field
+ if event_name.to_sym == :level_3_user
+ :verified_at
+ else
+ :created_at
+ end
end
end
end
diff --git a/app/models/visit.rb b/app/models/visit.rb
index 9bcf891d7..f34d979a1 100644
--- a/app/models/visit.rb
+++ b/app/models/visit.rb
@@ -1,4 +1,5 @@
class Visit < ApplicationRecord
+ alias_attribute :created_at, :started_at
has_many :ahoy_events, class_name: "Ahoy::Event"
belongs_to :user
end
diff --git a/app/views/admin/stats/graph.html.erb b/app/views/admin/stats/graph.html.erb
index 85c8395de..de76aee54 100644
--- a/app/views/admin/stats/graph.html.erb
+++ b/app/views/admin/stats/graph.html.erb
@@ -4,4 +4,4 @@
<%= back_link_to admin_stats_path %>
-<%= render Admin::Stats::ChartComponent.new(name: @name, event: @event, count: @count) %>
+<%= render Admin::Stats::ChartComponent.new(@chart) %>
diff --git a/app/views/admin/stats/show.html.erb b/app/views/admin/stats/show.html.erb
index 0e8594da9..7c06341ef 100644
--- a/app/views/admin/stats/show.html.erb
+++ b/app/views/admin/stats/show.html.erb
@@ -1,7 +1,3 @@
-<% content_for :head do %>
- <%= javascript_include_tag "stat_graphs", "data-turbolinks-track" => "reload" %>
-<% end %>
-
@@ -28,7 +24,7 @@
<%= link_to t("admin.stats.show.summary.visits"),
- graph_admin_stats_path(id: "visits", count: @visits) %>
+ graph_admin_stats_path(event: "visits") %>
<%= number_with_delimiter(@visits) %>
@@ -115,11 +111,6 @@
<%= render Admin::Stats::EventLinksComponent.new(@event_names) %>
-
- <% if feature?(:budgets) %>
-
<%= t "admin.stats.show.budgets_title" %>
- <%= budget_investments_chart_tag id: "budget_investments" %>
- <% end %>
diff --git a/config/locales/en/admin.yml b/config/locales/en/admin.yml
index 727be148e..333bd6bcd 100644
--- a/config/locales/en/admin.yml
+++ b/config/locales/en/admin.yml
@@ -1480,7 +1480,6 @@ en:
verified_users_who_didnt_vote_proposals: Verified users who didn't votes proposals
visits: Visits
votes: Total votes
- budgets_title: Participatory budgeting
participatory_budgets: Participatory Budgets
direct_messages: Direct messages
proposal_notifications: Proposal notifications
@@ -1488,9 +1487,10 @@ en:
polls: Polls
sdg: SDG
graph:
+ budget_investment_created: Budget investments created
debate_created: Debates
visit: Visits
- level_2_user: Level 2 users
+ level_3_user: Level 3 users
proposal_created: Citizen proposals
title: Graphs
budgets:
diff --git a/config/locales/es/admin.yml b/config/locales/es/admin.yml
index c562e63a3..bac399ade 100644
--- a/config/locales/es/admin.yml
+++ b/config/locales/es/admin.yml
@@ -1480,7 +1480,6 @@ es:
verified_users_who_didnt_vote_proposals: Usuarios verificados que no han votado propuestas
visits: Visitas
votes: Votos
- budgets_title: Presupuestos participativos
participatory_budgets: Presupuestos Participativos
direct_messages: Mensajes directos
proposal_notifications: Notificaciones de propuestas
@@ -1488,9 +1487,10 @@ es:
polls: Votaciones
sdg: ODS
graph:
+ budget_investment_created: Proyectos de gasto creados
debate_created: Debates
visit: Visitas
- level_2_user: Usuarios nivel 2
+ level_3_user: Usuarios nivel 3
proposal_created: Propuestas Ciudadanas
title: Gráficos
budgets:
diff --git a/spec/controllers/admin/api/stats_controller_spec.rb b/spec/controllers/admin/api/stats_controller_spec.rb
index ee9fd7605..b30008bed 100644
--- a/spec/controllers/admin/api/stats_controller_spec.rb
+++ b/spec/controllers/admin/api/stats_controller_spec.rb
@@ -17,51 +17,19 @@ describe Admin::Api::StatsController, :admin do
time_2 = Time.zone.local(2015, 01, 02)
time_3 = Time.zone.local(2015, 01, 03)
- create(:ahoy_event, name: "foo", time: time_1)
- create(:ahoy_event, name: "foo", time: time_1)
- create(:ahoy_event, name: "foo", time: time_2)
- create(:ahoy_event, name: "bar", time: time_1)
- create(:ahoy_event, name: "bar", time: time_3)
- create(:ahoy_event, name: "bar", time: time_3)
+ create(:proposal, created_at: time_1)
+ create(:proposal, created_at: time_1)
+ create(:proposal, created_at: time_2)
+ create(:debate, created_at: time_1)
+ create(:debate, created_at: time_3)
+ create(:debate, created_at: time_3)
end
it "returns single events formated for working with c3.js" do
- get :show, params: { event: "foo" }
+ get :show, params: { event: "proposal_created" }
expect(response).to be_ok
- expect(response.parsed_body).to eq "x" => ["2015-01-01", "2015-01-02"], "Foo" => [2, 1]
- end
- end
-
- context "visits present" do
- it "returns visits formated for working with c3.js" do
- time_1 = Time.zone.local(2015, 01, 01)
- time_2 = Time.zone.local(2015, 01, 02)
-
- create(:visit, started_at: time_1)
- create(:visit, started_at: time_1)
- create(:visit, started_at: time_2)
-
- get :show, params: { visits: true }
-
- expect(response).to be_ok
- expect(response.parsed_body).to eq "x" => ["2015-01-01", "2015-01-02"], "Visits" => [2, 1]
- end
- end
-
- context "budget investments present" do
- it "returns budget investments formated for working with c3.js" do
- time_1 = Time.zone.local(2017, 04, 01)
- time_2 = Time.zone.local(2017, 04, 02)
-
- create(:budget_investment, created_at: time_1)
- create(:budget_investment, created_at: time_2)
- create(:budget_investment, created_at: time_2)
-
- get :show, params: { budget_investments: true }
-
- expect(response).to be_ok
- expect(response.parsed_body).to eq "x" => ["2017-04-01", "2017-04-02"], "Budget Investments" => [1, 2]
+ expect(response.parsed_body).to eq "x" => ["2015-01-01", "2015-01-02"], "Proposal Created" => [2, 1]
end
end
end
diff --git a/spec/controllers/debates_controller_spec.rb b/spec/controllers/debates_controller_spec.rb
index c3d96dcea..a9ed78059 100644
--- a/spec/controllers/debates_controller_spec.rb
+++ b/spec/controllers/debates_controller_spec.rb
@@ -9,34 +9,6 @@ describe DebatesController do
end
end
- describe "POST create" do
- before do
- InvisibleCaptcha.timestamp_enabled = false
- end
-
- after do
- InvisibleCaptcha.timestamp_enabled = true
- end
-
- it "creates an ahoy event" do
- debate_attributes = {
- terms_of_service: "1",
- translations_attributes: {
- "0" => {
- title: "A sample debate",
- description: "this is a sample debate",
- locale: "en"
- }
- }
- }
- sign_in create(:user)
-
- post :create, params: { debate: debate_attributes }
- expect(Ahoy::Event.where(name: :debate_created).count).to eq 1
- expect(Ahoy::Event.last.properties["debate_id"]).to eq Debate.last.id
- end
- end
-
describe "PUT mark_featured" do
it "ignores query parameters" do
debate = create(:debate)
diff --git a/spec/controllers/legislation/annotations_controller_spec.rb b/spec/controllers/legislation/annotations_controller_spec.rb
index 575e9626d..cbefc4721 100644
--- a/spec/controllers/legislation/annotations_controller_spec.rb
+++ b/spec/controllers/legislation/annotations_controller_spec.rb
@@ -36,27 +36,6 @@ describe Legislation::AnnotationsController do
end
let(:user) { create(:user, :level_two) }
- it "creates an ahoy event" do
- sign_in user
-
- post :create, params: {
- process_id: legal_process.id,
- draft_version_id: draft_version.id,
- legislation_annotation: {
- "quote" => "ipsum",
- "ranges" => [{
- "start" => "/p[1]",
- "startOffset" => 6,
- "end" => "/p[1]",
- "endOffset" => 11
- }],
- "text" => "una anotacion"
- }
- }
- expect(Ahoy::Event.where(name: :legislation_annotation_created).count).to eq 1
- expect(Ahoy::Event.last.properties["legislation_annotation_id"]).to eq Legislation::Annotation.last.id
- end
-
it "does not create an annotation if the draft version is a final version" do
sign_in user
diff --git a/spec/controllers/legislation/answers_controller_spec.rb b/spec/controllers/legislation/answers_controller_spec.rb
index 04bc21dce..11dc1bc2a 100644
--- a/spec/controllers/legislation/answers_controller_spec.rb
+++ b/spec/controllers/legislation/answers_controller_spec.rb
@@ -10,20 +10,6 @@ describe Legislation::AnswersController do
let(:question_option) { create(:legislation_question_option, question: question, value: "Yes") }
let(:user) { create(:user, :level_two) }
- it "creates an ahoy event" do
- sign_in user
-
- post :create, params: {
- process_id: legal_process.id,
- question_id: question.id,
- legislation_answer: {
- legislation_question_option_id: question_option.id
- }
- }
- expect(Ahoy::Event.where(name: :legislation_answer_created).count).to eq 1
- expect(Ahoy::Event.last.properties["legislation_answer_id"]).to eq Legislation::Answer.last.id
- end
-
it "creates an answer if the process debate phase is open" do
sign_in user
diff --git a/spec/factories/analytics.rb b/spec/factories/analytics.rb
index 0d564336e..8afd58ffa 100644
--- a/spec/factories/analytics.rb
+++ b/spec/factories/analytics.rb
@@ -1,10 +1,4 @@
FactoryBot.define do
- factory :ahoy_event, class: "Ahoy::Event" do
- id { SecureRandom.uuid }
- time { DateTime.current }
- sequence(:name) { |n| "Event #{n} type" }
- end
-
factory :visit do
id { SecureRandom.uuid }
started_at { DateTime.current }
diff --git a/spec/models/ahoy/chart_spec.rb b/spec/models/ahoy/chart_spec.rb
new file mode 100644
index 000000000..086e340b1
--- /dev/null
+++ b/spec/models/ahoy/chart_spec.rb
@@ -0,0 +1,76 @@
+require "rails_helper"
+
+describe Ahoy::Chart do
+ describe "#data_points" do
+ it "raises an exception for unknown events" do
+ chart = Ahoy::Chart.new(:mystery)
+
+ expect { chart.data_points }.to raise_exception "Unknown event mystery"
+ end
+
+ it "returns data associated with the event" do
+ time_1 = Time.zone.local(2015, 01, 01)
+ time_2 = Time.zone.local(2015, 01, 02)
+ time_3 = Time.zone.local(2015, 01, 03)
+
+ create(:proposal, created_at: time_1)
+ create(:proposal, created_at: time_1)
+ create(:proposal, created_at: time_2)
+ create(:debate, created_at: time_1)
+ create(:debate, created_at: time_3)
+
+ chart = Ahoy::Chart.new(:proposal_created)
+
+ expect(chart.data_points).to eq x: ["2015-01-01", "2015-01-02"], "Proposal Created" => [2, 1]
+ end
+
+ it "accepts strings as the event name" do
+ create(:proposal, created_at: Time.zone.local(2015, 01, 01))
+ create(:debate, created_at: Time.zone.local(2015, 01, 02))
+
+ chart = Ahoy::Chart.new("proposal_created")
+
+ expect(chart.data_points).to eq x: ["2015-01-01"], "Proposal Created" => [1]
+ end
+
+ it "returns visits data for the visits event" do
+ time_1 = Time.zone.local(2015, 01, 01)
+ time_2 = Time.zone.local(2015, 01, 02)
+
+ create(:visit, started_at: time_1)
+ create(:visit, started_at: time_1)
+ create(:visit, started_at: time_2)
+
+ chart = Ahoy::Chart.new(:visits)
+
+ expect(chart.data_points).to eq x: ["2015-01-01", "2015-01-02"], "Visits" => [2, 1]
+ end
+
+ it "returns user supports for the user_supported_budgets event" do
+ time_1 = Time.zone.local(2017, 04, 01)
+ time_2 = Time.zone.local(2017, 04, 02)
+
+ create(:vote, votable: create(:budget_investment), created_at: time_1)
+ create(:vote, votable: create(:budget_investment), created_at: time_2)
+ create(:vote, votable: create(:budget_investment), created_at: time_2)
+ create(:vote, votable: create(:proposal), created_at: time_2)
+
+ chart = Ahoy::Chart.new(:user_supported_budgets)
+
+ expect(chart.data_points).to eq x: ["2017-04-01", "2017-04-02"], "User Supported Budgets" => [1, 2]
+ end
+
+ it "returns level three verified dates for the level_3_user event" do
+ time_1 = Time.zone.local(2001, 01, 01)
+ time_2 = Time.zone.local(2001, 01, 02)
+
+ create(:user, :level_two, level_two_verified_at: time_1)
+ create(:user, :level_three, verified_at: time_2)
+ create(:user, :level_three, verified_at: time_2, level_two_verified_at: time_1)
+
+ chart = Ahoy::Chart.new(:level_3_user)
+
+ expect(chart.data_points).to eq x: ["2001-01-02"], "Level 3 User" => [2]
+ end
+ end
+end
diff --git a/spec/models/ahoy/data_source_spec.rb b/spec/models/ahoy/data_source_spec.rb
index df8d2756d..2766d1391 100644
--- a/spec/models/ahoy/data_source_spec.rb
+++ b/spec/models/ahoy/data_source_spec.rb
@@ -2,18 +2,9 @@ require "rails_helper"
describe Ahoy::DataSource do
describe "#build" do
- before do
- time_1 = Time.zone.local(2015, 01, 01)
- time_2 = Time.zone.local(2015, 01, 02)
- time_3 = Time.zone.local(2015, 01, 03)
-
- create(:ahoy_event, name: "foo", time: time_1)
- create(:ahoy_event, name: "foo", time: time_1)
- create(:ahoy_event, name: "foo", time: time_2)
- create(:ahoy_event, name: "bar", time: time_1)
- create(:ahoy_event, name: "bar", time: time_3)
- create(:ahoy_event, name: "bar", time: time_3)
- end
+ let(:january_first) { Time.zone.local(2015, 01, 01) }
+ let(:january_second) { Time.zone.local(2015, 01, 02) }
+ let(:january_third) { Time.zone.local(2015, 01, 03) }
it "works without data sources" do
ds = Ahoy::DataSource.new
@@ -22,14 +13,14 @@ describe Ahoy::DataSource do
it "works with single data sources" do
ds = Ahoy::DataSource.new
- ds.add "foo", Ahoy::Event.where(name: "foo").group_by_day(:time).count
+ ds.add "foo", { january_first => 2, january_second => 1 }
expect(ds.build).to eq :x => ["2015-01-01", "2015-01-02"], "foo" => [2, 1]
end
it "combines data sources" do
ds = Ahoy::DataSource.new
- ds.add "foo", Ahoy::Event.where(name: "foo").group_by_day(:time).count
- ds.add "bar", Ahoy::Event.where(name: "bar").group_by_day(:time).count
+ ds.add "foo", { january_first => 2, january_second => 1 }
+ ds.add "bar", { january_first => 1, january_third => 2 }
expect(ds.build).to eq :x => ["2015-01-01", "2015-01-02", "2015-01-03"],
"foo" => [2, 1, 0],
"bar" => [1, 0, 2]
diff --git a/spec/system/admin/stats_spec.rb b/spec/system/admin/stats_spec.rb
index 86a7a8afa..085f71c15 100644
--- a/spec/system/admin/stats_spec.rb
+++ b/spec/system/admin/stats_spec.rb
@@ -72,18 +72,6 @@ describe "Stats", :admin do
expect(page).to have_content "UNVERIFIED USERS\n1"
expect(page).to have_content "TOTAL USERS\n1"
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 TWO USERS\n1"
- end
end
describe "Budget investments" do
@@ -150,15 +138,9 @@ describe "Stats", :admin do
end
end
- context "graphs" do
- scenario "event graphs", :with_frozen_time do
- visit new_debate_path
- fill_in_new_debate_title with: "A title for a debate"
- fill_in_ckeditor "Initial debate text", with: "This is very important because..."
- check "debate_terms_of_service"
- click_button "Start a debate"
-
- expect(page).to have_content "Debate created successfully."
+ describe "graphs", :with_frozen_time do
+ scenario "event graphs" do
+ create(:debate)
visit admin_stats_path
@@ -172,6 +154,19 @@ describe "Stats", :admin do
expect(page).to have_content Date.current.strftime("%Y-%m-%d")
end
end
+
+ scenario "Level 3 user Graph" do
+ create(:user, :level_three)
+
+ visit admin_stats_path
+ click_link "level_3_user"
+
+ expect(page).to have_content "Level 3 User (1)"
+
+ within("#graph") do
+ expect(page).to have_content Date.current.strftime("%Y-%m-%d")
+ end
+ end
end
context "Proposal notifications" do