Leon4gr45 commited on
Commit
da52ee0
·
verified ·
1 Parent(s): cf932a3

Delete test/plausible/stats/query/query_optimizer_test.exs with huggingface_hub

Browse files
test/plausible/stats/query/query_optimizer_test.exs DELETED
@@ -1,376 +0,0 @@
1
- defmodule Plausible.Stats.Query.QueryOptimizerTest do
2
- use Plausible.DataCase, async: true
3
-
4
- alias Plausible.Stats.{Query, QueryOptimizer, DateTimeRange, ApiQueryParser}
5
-
6
- @default_params %{metrics: [:visitors]}
7
-
8
- def perform(params) do
9
- params = Map.merge(@default_params, params) |> Map.to_list()
10
- struct!(Query, params) |> QueryOptimizer.optimize()
11
- end
12
-
13
- describe "add_missing_order_by" do
14
- test "does nothing if order_by passed" do
15
- assert perform(%{order_by: [visitors: :desc]}).order_by == [{:visitors, :desc}]
16
- end
17
-
18
- test "adds first metric to order_by if order_by not specified" do
19
- assert perform(%{metrics: [:pageviews, :visitors]}).order_by == [{:pageviews, :desc}]
20
-
21
- assert perform(%{metrics: [:pageviews, :visitors], dimensions: ["event:page"]}).order_by ==
22
- [{:pageviews, :desc}]
23
- end
24
-
25
- test "adds time and first metric to order_by if order_by not specified" do
26
- assert perform(%{
27
- utc_time_range: DateTimeRange.new!(~D[2022-01-01], ~D[2022-01-31], "UTC"),
28
- metrics: [:pageviews, :visitors],
29
- dimensions: ["time", "event:page"]
30
- }).order_by ==
31
- [{"time:day", :asc}, {:pageviews, :desc}]
32
- end
33
- end
34
-
35
- describe "update_group_by_time" do
36
- test "does nothing if `time` dimension not passed" do
37
- assert perform(%{
38
- utc_time_range: DateTimeRange.new!(~D[2022-01-01], ~D[2022-01-04], "UTC"),
39
- dimensions: ["time:month"]
40
- }).dimensions == ["time:month"]
41
- end
42
-
43
- test "updating time dimension" do
44
- assert perform(%{
45
- utc_time_range:
46
- DateTimeRange.new!(
47
- DateTime.new!(~D[2022-01-01], ~T[00:00:00], "UTC"),
48
- DateTime.new!(~D[2022-01-01], ~T[05:00:00], "UTC")
49
- ),
50
- dimensions: ["time"]
51
- }).dimensions == ["time:hour"]
52
-
53
- assert perform(%{
54
- utc_time_range: DateTimeRange.new!(~D[2022-01-01], ~D[2022-01-01], "UTC"),
55
- dimensions: ["time"]
56
- }).dimensions == ["time:hour"]
57
-
58
- assert perform(%{
59
- utc_time_range: DateTimeRange.new!(~D[2022-01-01], ~D[2022-01-02], "UTC"),
60
- dimensions: ["time"]
61
- }).dimensions == ["time:hour"]
62
-
63
- assert perform(%{
64
- utc_time_range: DateTimeRange.new!(~D[2022-01-01], ~D[2022-01-03], "UTC"),
65
- dimensions: ["time"]
66
- }).dimensions == ["time:day"]
67
-
68
- assert perform(%{
69
- utc_time_range: DateTimeRange.new!(~D[2022-01-01], ~D[2022-01-10], "UTC"),
70
- dimensions: ["time"]
71
- }).dimensions == ["time:day"]
72
-
73
- assert perform(%{
74
- utc_time_range: DateTimeRange.new!(~D[2022-01-01], ~D[2022-01-16], "UTC"),
75
- dimensions: ["time"]
76
- }).dimensions == ["time:day"]
77
-
78
- assert perform(%{
79
- utc_time_range: DateTimeRange.new!(~D[2022-01-01], ~D[2022-02-16], "UTC"),
80
- dimensions: ["time"]
81
- }).dimensions == ["time:week"]
82
-
83
- assert perform(%{
84
- utc_time_range: DateTimeRange.new!(~D[2022-01-01], ~D[2022-03-16], "UTC"),
85
- dimensions: ["time"]
86
- }).dimensions == ["time:week"]
87
-
88
- assert perform(%{
89
- utc_time_range: DateTimeRange.new!(~D[2022-01-01], ~D[2022-03-16], "UTC"),
90
- dimensions: ["time"]
91
- }).dimensions == ["time:week"]
92
-
93
- assert perform(%{
94
- utc_time_range: DateTimeRange.new!(~D[2022-01-01], ~D[2023-11-16], "UTC"),
95
- dimensions: ["time"]
96
- }).dimensions == ["time:month"]
97
-
98
- assert perform(%{
99
- utc_time_range: DateTimeRange.new!(~D[2022-01-01], ~D[2024-01-16], "UTC"),
100
- dimensions: ["time"]
101
- }).dimensions == ["time:month"]
102
-
103
- assert perform(%{
104
- utc_time_range: DateTimeRange.new!(~D[2022-01-01], ~D[2026-01-01], "UTC"),
105
- dimensions: ["time"]
106
- }).dimensions == ["time:month"]
107
- end
108
- end
109
-
110
- describe "update_time_in_order_by" do
111
- test "updates explicit time dimension in order_by" do
112
- assert perform(%{
113
- utc_time_range:
114
- DateTimeRange.new!(
115
- DateTime.new!(~D[2022-01-01], ~T[00:00:00], "UTC"),
116
- DateTime.new!(~D[2022-01-01], ~T[05:00:00], "UTC")
117
- ),
118
- dimensions: ["time:hour"],
119
- order_by: [{"time", :asc}]
120
- }).order_by == [{"time:hour", :asc}]
121
- end
122
- end
123
-
124
- describe "extend_hostname_filters_to_visit" do
125
- test "updates filters it filtering by event:hostname and visit:referrer and visit:exit_page dimensions" do
126
- assert perform(%{
127
- utc_time_range: Date.range(~N[2022-01-01 00:00:00], ~N[2022-01-01 05:00:00]),
128
- filters: [
129
- [:is, "event:hostname", ["example.com"]],
130
- [:matches_wildcard, "event:hostname", ["*.com"]]
131
- ],
132
- dimensions: ["visit:referrer", "visit:exit_page"]
133
- }).filters == [
134
- [:is, "event:hostname", ["example.com"]],
135
- [:matches_wildcard, "event:hostname", ["*.com"]],
136
- [:is, "visit:entry_page_hostname", ["example.com"]],
137
- [:matches_wildcard, "visit:entry_page_hostname", ["*.com"]],
138
- [:is, "visit:exit_page_hostname", ["example.com"]],
139
- [:matches_wildcard, "visit:exit_page_hostname", ["*.com"]]
140
- ]
141
- end
142
-
143
- test "does not update filters if not needed" do
144
- assert perform(%{
145
- utc_time_range: Date.range(~N[2022-01-01 00:00:00], ~N[2022-01-01 05:00:00]),
146
- filters: [
147
- [:is, "event:hostname", ["example.com"]]
148
- ],
149
- dimensions: ["time", "event:hostname"]
150
- }).filters == [
151
- [:is, "event:hostname", ["example.com"]]
152
- ]
153
- end
154
- end
155
-
156
- describe "trim_relative_date_range" do
157
- test "trims current month period when flag is set" do
158
- now = DateTime.new!(~D[2024-01-15], ~T[12:00:00], "UTC")
159
-
160
- result =
161
- perform(%{
162
- utc_time_range: DateTimeRange.new!(~D[2024-01-01], ~D[2024-01-31], "UTC"),
163
- input_date_range: :month,
164
- now: now,
165
- timezone: "UTC",
166
- include: Map.put(ApiQueryParser.default_include(), :trim_relative_date_range, true)
167
- })
168
-
169
- assert result.utc_time_range.first == ~U[2024-01-01 00:00:00Z]
170
- assert result.utc_time_range.last == ~U[2024-01-15 23:59:59Z]
171
- end
172
-
173
- test "trims current year period when flag is set" do
174
- now = DateTime.new!(~D[2024-03-15], ~T[12:00:00], "UTC")
175
-
176
- result =
177
- perform(%{
178
- utc_time_range: DateTimeRange.new!(~D[2024-01-01], ~D[2024-12-31], "UTC"),
179
- input_date_range: :year,
180
- now: now,
181
- timezone: "UTC",
182
- include: Map.put(ApiQueryParser.default_include(), :trim_relative_date_range, true)
183
- })
184
-
185
- assert result.utc_time_range.first == ~U[2024-01-01 00:00:00Z]
186
- assert result.utc_time_range.last == ~U[2024-03-15 23:59:59Z]
187
- end
188
-
189
- test "trims current day period to current hour when flag is set" do
190
- now = DateTime.new!(~D[2024-01-15], ~T[14:30:00], "UTC")
191
-
192
- result =
193
- perform(%{
194
- utc_time_range: DateTimeRange.new!(~D[2024-01-15], ~D[2024-01-15], "UTC"),
195
- input_date_range: :day,
196
- now: now,
197
- timezone: "UTC",
198
- include: Map.put(ApiQueryParser.default_include(), :trim_relative_date_range, true)
199
- })
200
-
201
- assert result.utc_time_range.first == ~U[2024-01-15 00:00:00Z]
202
- assert result.utc_time_range.last == ~U[2024-01-15 14:59:59Z]
203
- end
204
-
205
- test "does not trim historical month periods even when flag is set" do
206
- now = DateTime.new!(~D[2024-01-15], ~T[12:00:00], "UTC")
207
- original_range = DateTimeRange.new!(~D[2023-06-01], ~D[2023-06-30], "UTC")
208
-
209
- result =
210
- perform(%{
211
- utc_time_range: original_range,
212
- input_date_range: :month,
213
- now: now,
214
- timezone: "UTC",
215
- include: Map.put(ApiQueryParser.default_include(), :trim_relative_date_range, true)
216
- })
217
-
218
- assert result.utc_time_range == original_range
219
- end
220
-
221
- test "does not trim historical year periods even when flag is set" do
222
- now = DateTime.new!(~D[2024-03-15], ~T[12:00:00], "UTC")
223
- original_range = DateTimeRange.new!(~D[2023-01-01], ~D[2023-12-31], "UTC")
224
-
225
- result =
226
- perform(%{
227
- utc_time_range: original_range,
228
- input_date_range: :year,
229
- now: now,
230
- timezone: "UTC",
231
- include: Map.put(ApiQueryParser.default_include(), :trim_relative_date_range, true)
232
- })
233
-
234
- assert result.utc_time_range == original_range
235
- end
236
-
237
- test "does not trim historical day periods even when flag is set" do
238
- now = DateTime.new!(~D[2024-01-15], ~T[14:30:00], "UTC")
239
- original_range = DateTimeRange.new!(~D[2024-01-10], ~D[2024-01-10], "UTC")
240
-
241
- result =
242
- perform(%{
243
- utc_time_range: original_range,
244
- input_date_range: :day,
245
- now: now,
246
- timezone: "UTC",
247
- include: Map.put(ApiQueryParser.default_include(), :trim_relative_date_range, true)
248
- })
249
-
250
- assert result.utc_time_range == original_range
251
- end
252
-
253
- test "does not trim day when comparisons are set" do
254
- now = DateTime.new!(~D[2024-01-15], ~T[12:00:00], "UTC")
255
- original_range = DateTimeRange.new!(~D[2024-01-01], ~D[2024-01-31], "UTC")
256
-
257
- result =
258
- perform(%{
259
- utc_time_range: original_range,
260
- input_date_range: :day,
261
- now: now,
262
- timezone: "UTC",
263
- include:
264
- Map.merge(
265
- ApiQueryParser.default_include(),
266
- %{comparisons: %{mode: "previous_period"}, trim_relative_date_range: true}
267
- )
268
- })
269
-
270
- assert result.utc_time_range == original_range
271
- end
272
-
273
- test "trims month when comparisons are set" do
274
- now = DateTime.new!(~D[2024-01-15], ~T[12:00:00], "UTC")
275
-
276
- result =
277
- perform(%{
278
- utc_time_range: DateTimeRange.new!(~D[2024-01-01], ~D[2024-01-31], "UTC"),
279
- input_date_range: :month,
280
- now: now,
281
- timezone: "UTC",
282
- include:
283
- Map.merge(
284
- ApiQueryParser.default_include(),
285
- %{comparisons: %{mode: "previous_period"}, trim_relative_date_range: true}
286
- )
287
- })
288
-
289
- assert result.utc_time_range.first == ~U[2024-01-01 00:00:00Z]
290
- assert result.utc_time_range.last == ~U[2024-01-15 23:59:59Z]
291
- end
292
-
293
- test "does not trim when flag is false" do
294
- now = DateTime.new!(~D[2024-01-15], ~T[12:00:00], "UTC")
295
- original_range = DateTimeRange.new!(~D[2024-01-01], ~D[2024-01-31], "UTC")
296
-
297
- result =
298
- perform(%{
299
- utc_time_range: original_range,
300
- input_date_range: :month,
301
- now: now,
302
- timezone: "UTC",
303
- include: Map.put(ApiQueryParser.default_include(), :trim_relative_date_range, false)
304
- })
305
-
306
- assert result.utc_time_range == original_range
307
- end
308
-
309
- test "does not trim when flag is not set" do
310
- now = DateTime.new!(~D[2024-01-15], ~T[12:00:00], "UTC")
311
- original_range = DateTimeRange.new!(~D[2024-01-01], ~D[2024-01-31], "UTC")
312
-
313
- result =
314
- perform(%{
315
- utc_time_range: original_range,
316
- input_date_range: :month,
317
- now: now,
318
- timezone: "UTC",
319
- include: ApiQueryParser.default_include()
320
- })
321
-
322
- assert result.utc_time_range == original_range
323
- end
324
-
325
- test "does not trim non-current periods like custom date ranges" do
326
- now = DateTime.new!(~D[2024-01-15], ~T[12:00:00], "UTC")
327
-
328
- original_range = DateTimeRange.new!(~D[2024-01-10], ~D[2024-01-16], "UTC")
329
-
330
- result =
331
- perform(%{
332
- utc_time_range: original_range,
333
- input_date_range: {:last_n_days, 7},
334
- now: now,
335
- timezone: "UTC",
336
- include: Map.put(ApiQueryParser.default_include(), :trim_relative_date_range, true)
337
- })
338
-
339
- assert result.utc_time_range == original_range
340
- end
341
-
342
- test "handles timezone correctly when trimming year periods" do
343
- now = DateTime.new!(~D[2024-03-15], ~T[12:00:00], "UTC")
344
-
345
- result =
346
- perform(%{
347
- utc_time_range:
348
- DateTimeRange.new!(~D[2024-01-01], ~D[2024-12-31], "America/New_York")
349
- |> DateTimeRange.to_timezone("Etc/UTC"),
350
- input_date_range: :year,
351
- now: now,
352
- timezone: "America/New_York",
353
- include: Map.put(ApiQueryParser.default_include(), :trim_relative_date_range, true)
354
- })
355
-
356
- nyc_mar_15_end =
357
- DateTimeRange.new!(~D[2024-03-15], ~D[2024-03-15], "America/New_York")
358
- |> DateTimeRange.to_timezone("Etc/UTC")
359
- |> Map.get(:last)
360
-
361
- assert result.utc_time_range.last == nyc_mar_15_end
362
- end
363
- end
364
-
365
- describe "set_sql_join_type" do
366
- test "updates sql_join_type to :full if time:minute or time:hour dimension is present" do
367
- assert perform(%{dimensions: ["time:minute"]}).sql_join_type == :full
368
- assert perform(%{dimensions: ["time:hour"]}).sql_join_type == :full
369
- end
370
-
371
- test "keeps default sql_join_type otherwise" do
372
- assert perform(%{dimensions: ["time:day"]}).sql_join_type == :left
373
- assert perform(%{dimensions: []}).sql_join_type == :left
374
- end
375
- end
376
- end