File size: 2,592 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 | defmodule Plausible.Stats.Query.QueryResultTest do
use Plausible.DataCase, async: true
alias Plausible.Stats.{Query, QueryRunner, QueryResult, QueryOptimizer}
setup do
user = insert(:user)
site =
new_site(
owner: user,
inserted_at: ~N[2020-01-01T00:00:00],
stats_start_date: ~D[2020-01-01]
)
{:ok, site: site}
end
test "parse_and_build!/2 raises on error on site_id mismatch", %{site: site} do
assert_raise FunctionClauseError, fn ->
Query.parse_and_build!(
site,
%{
"site_id" => "different"
}
)
end
end
test "parse_and_build!/2 raises on schema validation error", %{site: site} do
assert_raise RuntimeError,
~s/Failed to build query: "#: Required properties metrics, date_range were not present."/,
fn ->
Query.parse_and_build!(
site,
%{
"site_id" => site.domain
}
)
end
end
test "serializing query to JSON keeps keys ordered", %{site: site} do
query =
Query.parse_and_build!(
site,
%{
"site_id" => site.domain,
"metrics" => ["pageviews"],
"date_range" => ["2024-01-01", "2024-02-01"],
"include" => %{"imports" => true}
}
)
query = QueryOptimizer.optimize(query)
query_result_json =
%QueryRunner{site: site, results: [], main_query: query}
|> QueryResult.from()
|> Jason.encode!(pretty: true)
|> String.replace(site.domain, "dummy.site")
assert query_result_json == """
{
"results": [],
"meta": {
"imports_included": false,
"imports_skip_reason": "no_imported_data"
},
"query": {
"site_id": "dummy.site",
"metrics": [
"pageviews"
],
"date_range": [
"2024-01-01T00:00:00Z",
"2024-02-01T23:59:59Z"
],
"filters": [],
"dimensions": [],
"order_by": [
[
"pageviews",
"desc"
]
],
"include": {
"imports": true
},
"pagination": {
"offset": 0,
"limit": 10000
}
}
}\
"""
end
end
|