mirror of
https://github.com/plausible/analytics.git
synced 2024-11-26 23:27:54 +03:00
198 lines
6.0 KiB
Elixir
198 lines
6.0 KiB
Elixir
defmodule Plausible.Workers.ImportGoogleAnalyticsTest do
|
|
use Plausible.DataCase
|
|
use Bamboo.Test
|
|
import Double
|
|
|
|
alias Plausible.Workers.ImportGoogleAnalytics
|
|
|
|
@moduletag capture_log: true
|
|
|
|
@imported_data %Plausible.Site.ImportedData{
|
|
start_date: Timex.today() |> Timex.shift(days: -7),
|
|
end_date: Timex.today(),
|
|
source: "Google Analytics",
|
|
status: "importing"
|
|
}
|
|
|
|
test "updates the imported_data field for the site after successful import" do
|
|
user = insert(:user, trial_expiry_date: Timex.today() |> Timex.shift(days: 1))
|
|
site = insert(:site, members: [user], imported_data: @imported_data)
|
|
|
|
api_stub =
|
|
stub(Plausible.Google.Api, :import_analytics, fn _site,
|
|
_date_range,
|
|
_view_id,
|
|
_access_token ->
|
|
:ok
|
|
end)
|
|
|
|
ImportGoogleAnalytics.perform(
|
|
%Oban.Job{
|
|
args: %{
|
|
"site_id" => site.id,
|
|
"view_id" => "view_id",
|
|
"start_date" => "2020-01-01",
|
|
"end_date" => "2022-01-01",
|
|
"access_token" => "token"
|
|
}
|
|
},
|
|
api_stub
|
|
)
|
|
|
|
assert Repo.reload!(site).imported_data.status == "ok"
|
|
end
|
|
|
|
test "updates the stats_start_date field for the site after successful import" do
|
|
user = insert(:user, trial_expiry_date: Timex.today() |> Timex.shift(days: 1))
|
|
site = insert(:site, members: [user], imported_data: @imported_data)
|
|
|
|
api_stub =
|
|
stub(Plausible.Google.Api, :import_analytics, fn _site,
|
|
_date_range,
|
|
_view_id,
|
|
_access_token ->
|
|
:ok
|
|
end)
|
|
|
|
ImportGoogleAnalytics.perform(
|
|
%Oban.Job{
|
|
args: %{
|
|
"site_id" => site.id,
|
|
"view_id" => "view_id",
|
|
"start_date" => "2020-01-01",
|
|
"end_date" => "2022-01-01",
|
|
"access_token" => "token"
|
|
}
|
|
},
|
|
api_stub
|
|
)
|
|
|
|
assert Repo.reload!(site).stats_start_date == @imported_data.start_date
|
|
end
|
|
|
|
test "sends email to owner after successful import" do
|
|
user = insert(:user, trial_expiry_date: Timex.today() |> Timex.shift(days: 1))
|
|
site = insert(:site, members: [user], imported_data: @imported_data)
|
|
|
|
api_stub =
|
|
stub(Plausible.Google.Api, :import_analytics, fn _site,
|
|
_date_range,
|
|
_view_id,
|
|
_access_token ->
|
|
:ok
|
|
end)
|
|
|
|
ImportGoogleAnalytics.perform(
|
|
%Oban.Job{
|
|
args: %{
|
|
"site_id" => site.id,
|
|
"view_id" => "view_id",
|
|
"start_date" => "2020-01-01",
|
|
"end_date" => "2022-01-01",
|
|
"access_token" => "token"
|
|
}
|
|
},
|
|
api_stub
|
|
)
|
|
|
|
assert_email_delivered_with(
|
|
to: [user],
|
|
subject: "Google Analytics data imported for #{site.domain}"
|
|
)
|
|
end
|
|
|
|
test "updates site record after failed import" do
|
|
user = insert(:user, trial_expiry_date: Timex.today() |> Timex.shift(days: 1))
|
|
site = insert(:site, members: [user], imported_data: @imported_data)
|
|
|
|
api_stub =
|
|
stub(Plausible.Google.Api, :import_analytics, fn _site,
|
|
_date_range,
|
|
_view_id,
|
|
_access_token ->
|
|
{:error, "Something went wrong"}
|
|
end)
|
|
|
|
ImportGoogleAnalytics.perform(
|
|
%Oban.Job{
|
|
args: %{
|
|
"site_id" => site.id,
|
|
"view_id" => "view_id",
|
|
"start_date" => "2020-01-01",
|
|
"end_date" => "2022-01-01",
|
|
"access_token" => "token"
|
|
}
|
|
},
|
|
api_stub
|
|
)
|
|
|
|
assert Repo.reload!(site).imported_data.status == "error"
|
|
end
|
|
|
|
test "clears any orphaned data during import" do
|
|
user = insert(:user, trial_expiry_date: Timex.today() |> Timex.shift(days: 1))
|
|
site = insert(:site, members: [user], imported_data: @imported_data)
|
|
|
|
populate_stats(site, [
|
|
build(:imported_visitors, pageviews: 10)
|
|
])
|
|
|
|
api_stub =
|
|
stub(Plausible.Google.Api, :import_analytics, fn _site,
|
|
_date_range,
|
|
_view_id,
|
|
_access_token ->
|
|
{:error, "Something went wrong"}
|
|
end)
|
|
|
|
ImportGoogleAnalytics.perform(
|
|
%Oban.Job{
|
|
args: %{
|
|
"site_id" => site.id,
|
|
"view_id" => "view_id",
|
|
"start_date" => "2020-01-01",
|
|
"end_date" => "2022-01-01",
|
|
"access_token" => "token"
|
|
}
|
|
},
|
|
api_stub
|
|
)
|
|
|
|
assert eventually(fn ->
|
|
count = Plausible.Stats.Clickhouse.imported_pageview_count(site)
|
|
{count == 0, count}
|
|
end)
|
|
end
|
|
|
|
test "sends email to owner after failed import" do
|
|
user = insert(:user, trial_expiry_date: Timex.today() |> Timex.shift(days: 1))
|
|
site = insert(:site, members: [user], imported_data: @imported_data)
|
|
|
|
api_stub =
|
|
stub(Plausible.Google.Api, :import_analytics, fn _site,
|
|
_date_range,
|
|
_view_id,
|
|
_access_token ->
|
|
{:error, "Something went wrong"}
|
|
end)
|
|
|
|
ImportGoogleAnalytics.perform(
|
|
%Oban.Job{
|
|
args: %{
|
|
"site_id" => site.id,
|
|
"view_id" => "view_id",
|
|
"start_date" => "2020-01-01",
|
|
"end_date" => "2022-01-01",
|
|
"access_token" => "token"
|
|
}
|
|
},
|
|
api_stub
|
|
)
|
|
|
|
assert_email_delivered_with(
|
|
to: [user],
|
|
subject: "Google Analytics import failed for #{site.domain}"
|
|
)
|
|
end
|
|
end
|