File size: 4,502 Bytes
c9c49ab | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 | defmodule Plausible.Stats.QueryImportedTest do
use Plausible.DataCase
alias Plausible.Stats
alias Plausible.Stats.{ParsedQueryParams, QueryBuilder, QueryInclude}
@unsupported_query_warning Plausible.Stats.QueryResult.imports_warnings().unsupported_query
@no_imported_scroll_depth_warning Plausible.Stats.QueryResult.no_imported_scroll_depth_warning()
setup [:create_user, :create_site]
describe "behavioral filters" do
setup :create_site_import
test "imports are skipped when has_done filter is used", %{
site: site,
site_import: site_import
} do
populate_stats(site, site_import.id, [
build(:event, name: "pageview", user_id: 1, timestamp: ~N[2021-01-01 00:00:00]),
build(:event, name: "pageview", user_id: 2, timestamp: ~N[2021-01-01 00:00:00]),
build(:event, name: "Conversion", user_id: 3, timestamp: ~N[2021-01-01 00:00:00]),
build(:imported_pages,
page: "/blog",
pageviews: 5,
visitors: 3,
date: ~D[2023-01-01]
)
])
assert {:ok, query} =
QueryBuilder.build(site, %ParsedQueryParams{
metrics: [:visitors],
input_date_range: :all,
filters: [[:has_done, [:is, "event:name", ["pageview"]]]],
include: %QueryInclude{imports: true}
})
assert %Stats.QueryResult{results: results, meta: meta} = Stats.query(site, query)
assert results == [%{dimensions: [], metrics: [2]}]
refute meta[:imports_included]
assert meta[:imports_warning] == @unsupported_query_warning
end
test "imports are skipped when has_not_done filter is used", %{
site: site,
site_import: site_import
} do
populate_stats(site, site_import.id, [
build(:event, name: "pageview", user_id: 1, timestamp: ~N[2021-01-01 00:00:00]),
build(:event, name: "pageview", user_id: 2, timestamp: ~N[2021-01-01 00:00:00]),
build(:event, name: "Conversion", user_id: 3, timestamp: ~N[2021-01-01 00:00:00]),
build(:imported_pages,
page: "/blog",
pageviews: 5,
visitors: 3,
date: ~D[2023-01-01]
)
])
assert {:ok, query} =
QueryBuilder.build(site, %ParsedQueryParams{
metrics: [:visitors],
input_date_range: :all,
dimensions: ["event:goal"],
filters: [[:has_not_done, [:is, "event:name", ["pageview"]]]],
include: %QueryInclude{imports: true}
})
assert %Stats.QueryResult{results: results, meta: meta} = Stats.query(site, query)
assert results == []
refute meta[:imports_included]
assert meta[:imports_warning] == @unsupported_query_warning
end
end
describe "scroll depth metric warnings" do
test "returns warning when import without scroll depth in comparison range", %{
site: site
} do
site_import =
insert(:site_import, site: site, start_date: ~D[2021-02-01], end_date: ~D[2021-02-28])
populate_stats(site, site_import.id, [
build(:pageview, user_id: 123, pathname: "/", timestamp: ~N[2021-02-01 00:00:00]),
build(:engagement,
user_id: 123,
pathname: "/",
timestamp: ~N[2021-02-01 00:01:00],
scroll_depth: 70
),
build(:imported_pages, page: "/", date: ~D[2021-02-01]),
build(:imported_pages, page: "/", date: ~D[2021-02-28])
])
assert {:ok, query} =
QueryBuilder.build(site, %ParsedQueryParams{
metrics: [:visitors, :scroll_depth],
input_date_range: {:date_range, ~D[2022-01-01], ~D[2022-12-31]},
filters: [[:is, "event:page", ["/"]]],
include: %QueryInclude{imports: true, compare: :previous_period}
})
assert %Stats.QueryResult{results: results, meta: meta} = Stats.query(site, query)
assert results == [
%{
dimensions: [],
metrics: [0, nil],
comparison: %{
change: [-100, nil],
dimensions: [],
metrics: [3, 70]
}
}
]
assert meta[:imports_included] == true
assert meta[:metric_warnings] == %{
scroll_depth: @no_imported_scroll_depth_warning
}
end
end
end
|