Leon4gr45's picture
Upload folder using huggingface_hub (part 6)
6778ee0 verified
Raw
History Blame Contribute Delete
6.81 kB
defmodule PlausibleWeb.Api.StatsController.CitiesTest do
use PlausibleWeb.ConnCase
defp query_cities(conn, site, opts) do
always_on_filters = ["is_not", "visit:city", [0]]
params = %{
"dimensions" => Keyword.get(opts, :dimensions, ["visit:city", "visit:city_name"]),
"date_range" => Keyword.get(opts, :date_range, "all"),
"filters" => [
always_on_filters
| Keyword.get(opts, :filters, [])
],
"metrics" => Keyword.get(opts, :metrics, ["visitors", "percentage"]),
"include" => Keyword.get(opts, :include, nil),
"pagination" => Keyword.get(opts, :pagination, nil),
"order_by" => Keyword.get(opts, :order_by, nil)
}
conn
|> post("/api/stats/#{site.domain}/query", params)
|> json_response(200)
end
describe "querying for cities with POST /query" do
defp seed(%{site: site}) do
populate_stats(site, [
build(:pageview,
country_code: "EE",
subdivision1_code: "EE-37",
city_geoname_id: 588_409
),
build(:pageview,
country_code: "EE",
subdivision1_code: "EE-37",
city_geoname_id: 588_409
),
build(:pageview,
country_code: "EE",
subdivision1_code: "EE-37",
city_geoname_id: 588_409
),
build(:pageview,
country_code: "EE",
subdivision1_code: "EE-39",
city_geoname_id: 591_632
),
build(:pageview,
country_code: "EE",
subdivision1_code: "EE-39",
city_geoname_id: 591_632
)
])
end
setup [:create_user, :log_in, :create_site, :create_legacy_site_import, :seed]
test "returns top cities by visitors", %{conn: conn, site: site} do
response = query_cities(conn, site, date_range: "day")
assert response["results"] == [
%{"dimensions" => [588_409, "Tallinn"], "metrics" => [3, 60.0]},
%{"dimensions" => [591_632, "Kärdla"], "metrics" => [2, 40.0]}
]
end
test "when list is filtered returns one city only", %{conn: conn, site: site} do
response =
query_cities(conn, site,
date_range: "day",
filters: [["is", "visit:city", [591_632]]]
)
assert response["results"] == [
%{"dimensions" => [591_632, "Kärdla"], "metrics" => [2, 100.0]}
]
end
test "does not return missing cities from imported data", %{conn: conn, site: site} do
populate_stats(site, [
build(:imported_locations, country: "EE", region: "EE-37", city: 588_409),
build(:imported_locations, country: nil, region: nil, city: 0),
build(:imported_locations, country: nil, region: nil, city: nil)
])
response =
query_cities(conn, site,
date_range: "day",
include: %{"imports" => true}
)
assert response["results"] == [
%{"dimensions" => [588_409, "Tallinn"], "metrics" => [4, 66.67]},
%{"dimensions" => [591_632, "Kärdla"], "metrics" => [2, 33.33]}
]
end
@tag :ee_only
test "return revenue metrics for cities breakdown", %{conn: conn, site: site} do
populate_stats(site, [
build(:pageview,
user_id: 1,
country_code: "EE",
subdivision1_code: "EE-37",
city_geoname_id: 588_409
),
build(:event,
name: "Payment",
user_id: 1,
revenue_reporting_amount: Decimal.new("1000"),
revenue_reporting_currency: "USD"
),
build(:pageview,
user_id: 2,
country_code: "EE",
subdivision1_code: "EE-37",
city_geoname_id: 588_409
),
build(:event,
name: "Payment",
user_id: 2,
revenue_reporting_amount: Decimal.new("2000"),
revenue_reporting_currency: "USD"
),
build(:pageview,
user_id: 3,
country_code: "EE",
subdivision1_code: "EE-37",
city_geoname_id: 588_409
),
build(:pageview,
user_id: 4,
country_code: "EE",
subdivision1_code: "EE-39",
city_geoname_id: 591_632
),
build(:event,
name: "Payment",
user_id: 4,
revenue_reporting_amount: Decimal.new("500"),
revenue_reporting_currency: "USD"
),
build(:pageview,
user_id: 5,
country_code: "EE",
subdivision1_code: "EE-39",
city_geoname_id: 591_632
),
build(:pageview, user_id: 6),
build(:event,
name: "Payment",
user_id: 6,
revenue_reporting_amount: Decimal.new("600"),
revenue_reporting_currency: "USD"
),
build(:pageview, user_id: 7),
build(:event,
name: "Payment",
user_id: 7,
revenue_reporting_amount: nil
)
])
insert(:goal, %{site: site, event_name: "Payment", currency: :USD})
response =
query_cities(conn, site,
date_range: "day",
filters: [["is", "event:goal", ["Payment"]]],
metrics: [
"visitors",
"total_visitors",
"group_conversion_rate",
"average_revenue",
"total_revenue"
],
order_by: [["visitors", "desc"], ["visit:city", "asc"]]
)
assert response["results"] == [
%{
"dimensions" => [588_409, "Tallinn"],
"metrics" => [
2,
6,
33.33,
%{
"currency" => "USD",
"long" => "$1,500.00",
"short" => "$1.5K",
"value" => 1500.0
},
%{
"currency" => "USD",
"long" => "$3,000.00",
"short" => "$3.0K",
"value" => 3000.0
}
]
},
%{
"dimensions" => [591_632, "Kärdla"],
"metrics" => [
1,
4,
25.0,
%{
"currency" => "USD",
"long" => "$500.00",
"short" => "$500.0",
"value" => 500.0
},
%{
"currency" => "USD",
"long" => "$500.00",
"short" => "$500.0",
"value" => 500.0
}
]
}
]
end
end
end