Aggiunge il filtro Pagina (grafico) e il link Grafico in tabella, mantenendo Da/A/Device. Co-authored-by: Cursor <cursoragent@cursor.com>
131 lines
4.2 KiB
Ruby
131 lines
4.2 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require "rails_helper"
|
|
|
|
RSpec.describe "Admin analytics", type: :request do
|
|
let!(:admin) { AdminAccount.create!(username: "ops-analytics", password: "Password123") }
|
|
|
|
before do
|
|
post admin_login_path, params: { username: admin.username, password: "Password123" }
|
|
AnalyticsPageStat.delete_all
|
|
AnalyticsPageCell.delete_all
|
|
AnalyticsPageStat.create!(
|
|
day: Time.zone.today,
|
|
page_path: "/prezzi",
|
|
device: "desktop",
|
|
pageview_count: 12,
|
|
scroll_samples: 10,
|
|
scroll_sum_pct: 600,
|
|
max_scroll_pct: 90
|
|
)
|
|
AnalyticsPageCell.create!(
|
|
day: Time.zone.today,
|
|
page_path: "/prezzi",
|
|
device: "desktop",
|
|
cell_x: 10,
|
|
cell_y: 15,
|
|
click_count: 4,
|
|
move_count: 40
|
|
)
|
|
end
|
|
|
|
it "mostra l'elenco pagine" do
|
|
get admin_analytics_path
|
|
expect(response).to have_http_status(:ok)
|
|
expect(response.body).to include("/prezzi")
|
|
expect(response.body).to include("12")
|
|
expect(response.body).to include("40")
|
|
expect(response.body).to include("chart-analytics-trend")
|
|
expect(response.body).to include("adminAnalyticsTrend")
|
|
expect(response.body).to include(I18n.t("admin.analytics.index.hide_chart"))
|
|
expect(response.body).to include("hideChart")
|
|
expect(response.body).not_to include("clicks:")
|
|
end
|
|
|
|
it "il grafico rispetta i filtri data e aggrega pageview di tutte le pagine" do
|
|
AnalyticsPageStat.create!(
|
|
day: 1.day.ago.to_date,
|
|
page_path: "/prezzi",
|
|
device: "desktop",
|
|
pageview_count: 5,
|
|
scroll_samples: 0,
|
|
scroll_sum_pct: 0,
|
|
max_scroll_pct: 0
|
|
)
|
|
AnalyticsPageStat.create!(
|
|
day: Time.zone.today,
|
|
page_path: "/altro",
|
|
device: "desktop",
|
|
pageview_count: 7,
|
|
scroll_samples: 0,
|
|
scroll_sum_pct: 0,
|
|
max_scroll_pct: 0
|
|
)
|
|
|
|
get admin_analytics_path, params: { from: 2.days.ago.to_date, to: Time.zone.today }
|
|
expect(response).to have_http_status(:ok)
|
|
expect(response.body).to include(I18n.t("admin.analytics.index.trend_total_label"))
|
|
expect(response.body).to include(">24<")
|
|
expect(response.body).to include("\"pageviews\":5")
|
|
expect(response.body).to include("\"pageviews\":19")
|
|
end
|
|
|
|
it "filtra il grafico su una sola pagina" do
|
|
AnalyticsPageStat.create!(
|
|
day: Time.zone.today,
|
|
page_path: "/altro",
|
|
device: "desktop",
|
|
pageview_count: 7,
|
|
scroll_samples: 0,
|
|
scroll_sum_pct: 0,
|
|
max_scroll_pct: 0
|
|
)
|
|
|
|
get admin_analytics_path, params: { chart_path: "/prezzi" }
|
|
expect(response).to have_http_status(:ok)
|
|
expect(response.body).to include(I18n.t("admin.analytics.index.trend_total_label_path"))
|
|
expect(response.body).to include(">12<")
|
|
expect(response.body).to include(I18n.t("admin.analytics.index.chart_for_path"))
|
|
expect(response.body).to include("is-chart-focus")
|
|
expect(response.body).not_to include(">19<")
|
|
end
|
|
|
|
|
|
it "mostra la heatmap di una pagina con tab dispositivo" do
|
|
get admin_analytics_page_path, params: { page_path: "/prezzi" }
|
|
expect(response).to have_http_status(:ok)
|
|
expect(response.body).to include("admin-heatmap")
|
|
expect(response.body).to include("/prezzi")
|
|
expect(response.body).to include("is-active")
|
|
expect(response.body).to include(I18n.t("admin.analytics.devices.desktop"))
|
|
end
|
|
|
|
it "mostra solo i punti del dispositivo selezionato" do
|
|
AnalyticsPageCell.create!(
|
|
day: Time.zone.today,
|
|
page_path: "/prezzi",
|
|
device: "mobile",
|
|
cell_x: 5,
|
|
cell_y: 8,
|
|
click_count: 9,
|
|
move_count: 0
|
|
)
|
|
|
|
get admin_analytics_page_path, params: { page_path: "/prezzi", device: "mobile", layer: "click" }
|
|
expect(response).to have_http_status(:ok)
|
|
expect(response.body).to include("x":5")
|
|
expect(response.body).to include("c":9")
|
|
expect(response.body).not_to include("x":10")
|
|
end
|
|
|
|
it "attiva e disattiva l'anteprima staff" do
|
|
post admin_analytics_preview_path, params: { return_to: "/" }
|
|
expect(response).to redirect_to("/")
|
|
expect(response.cookies[Analytics::Suppress::COOKIE_NAME]).to eq("1")
|
|
|
|
delete admin_analytics_preview_path
|
|
expect(response).to redirect_to(admin_analytics_path)
|
|
expect(response.cookies[Analytics::Suppress::COOKIE_NAME]).to be_nil
|
|
end
|
|
end
|