# 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.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") end it "mostra il trend anche su più giorni" 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 ) 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("\"pageviews\":5") expect(response.body).to include("\"pageviews\":12") 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