# 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 "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