Leon4gr45 commited on
Commit
f334a8c
·
verified ·
1 Parent(s): b155c86

Delete test/plausible_web/live/change_domain_test.exs with huggingface_hub

Browse files
test/plausible_web/live/change_domain_test.exs DELETED
@@ -1,473 +0,0 @@
1
- defmodule PlausibleWeb.Live.ChangeDomainTest do
2
- use PlausibleWeb.ConnCase, async: false
3
-
4
- import Phoenix.LiveViewTest
5
-
6
- on_ee do
7
- import Mox
8
- end
9
-
10
- alias Plausible.Repo
11
-
12
- describe "ChangeDomain LiveView" do
13
- setup [:create_user, :log_in, :create_site]
14
-
15
- on_ee do
16
- setup do
17
- # mock all domains resolve
18
- Plausible.DnsLookup.Mock
19
- |> stub(:lookup, fn _domain, _type, _record, _opts, _timeout ->
20
- [{192, 168, 1, 2}]
21
- end)
22
-
23
- # Stub detection by default to prevent async task race conditions
24
- # Tests that need specific detection results can override this stub
25
- stub_detection_result(%{
26
- "v1Detected" => false,
27
- "gtmLikely" => false,
28
- "wordpressLikely" => false,
29
- "wordpressPlugin" => false
30
- })
31
-
32
- :ok
33
- end
34
- end
35
-
36
- test "mounts and renders form", %{conn: conn, site: site} do
37
- {:ok, _lv, html} = live(conn, "/#{site.domain}/change-domain")
38
-
39
- assert html =~ "Change your website domain"
40
- end
41
-
42
- test "form submission when no change is made", %{conn: conn, site: site} do
43
- {:ok, lv, _html} = live(conn, "/#{site.domain}/change-domain")
44
-
45
- html =
46
- lv
47
- |> element("form")
48
- |> render_submit(%{site: %{domain: site.domain}})
49
-
50
- assert html =~ "New domain must be different than the current one"
51
- end
52
-
53
- test "form submission to an existing domain", %{conn: conn, site: site} do
54
- another_site = insert(:site)
55
- {:ok, lv, _html} = live(conn, "/#{site.domain}/change-domain")
56
-
57
- html =
58
- lv
59
- |> element("form")
60
- |> render_submit(%{site: %{domain: another_site.domain}})
61
-
62
- assert html =~ "This domain cannot be registered"
63
-
64
- site = Repo.reload!(site)
65
- assert site.domain != another_site.domain
66
- assert is_nil(site.domain_changed_from)
67
- end
68
-
69
- test "form submission to a domain already owned by the same team shows a targeted error",
70
- %{conn: conn, site: site, user: user} do
71
- owned_site = new_site(owner: user)
72
- {:ok, lv, _html} = live(conn, "/#{site.domain}/change-domain")
73
-
74
- html =
75
- lv
76
- |> element("form")
77
- |> render_submit(%{site: %{domain: owned_site.domain}})
78
-
79
- assert html =~ "You already own this site"
80
-
81
- expected_settings_link =
82
- Routes.site_path(conn, :settings_general, owned_site.domain)
83
-
84
- assert html =~ expected_settings_link
85
-
86
- site = Repo.reload!(site)
87
- assert site.domain != owned_site.domain
88
- assert is_nil(site.domain_changed_from)
89
- end
90
-
91
- test "form submission to a domain in transition period", %{conn: conn, site: site} do
92
- _another_site = insert(:site, domain_changed_from: "foo.example.com")
93
- {:ok, lv, _html} = live(conn, "/#{site.domain}/change-domain")
94
-
95
- html =
96
- lv
97
- |> element("form")
98
- |> render_submit(%{site: %{domain: "foo.example.com"}})
99
-
100
- assert html =~ "This domain cannot be registered"
101
-
102
- site = Repo.reload!(site)
103
- assert site.domain != "foo.example.com"
104
- assert is_nil(site.domain_changed_from)
105
- end
106
-
107
- test "domain swap is allowed when both sites belong to the same team",
108
- %{conn: conn, site: site, user: user} do
109
- other_site = new_site(owner: user)
110
-
111
- {:ok, lv, _html} = live(conn, "/#{site.domain}/change-domain")
112
-
113
- new_domain = "tmp.#{site.domain}"
114
-
115
- lv
116
- |> element("form")
117
- |> render_submit(%{site: %{domain: new_domain}})
118
-
119
- on_ee do
120
- render_async(lv, 500)
121
- end
122
-
123
- assert_patch(lv, "/#{URI.encode_www_form(new_domain)}/change-domain/success")
124
-
125
- # Now swap: rename other_site to the original domain of site
126
- original_domain = site.domain
127
- other_original_domain = other_site.domain
128
- {:ok, lv2, _html} = live(conn, "/#{other_original_domain}/change-domain")
129
-
130
- lv2
131
- |> element("form")
132
- |> render_submit(%{site: %{domain: original_domain}})
133
-
134
- on_ee do
135
- render_async(lv2, 500)
136
- end
137
-
138
- assert_patch(lv2, "/#{URI.encode_www_form(original_domain)}/change-domain/success")
139
-
140
- assert Repo.reload!(other_site).domain == original_domain
141
- end
142
-
143
- for {role, membership_type} <- [
144
- {:editor, :site_guest},
145
- {:editor, :team_member},
146
- {:admin, :team_member},
147
- {:owner, :team_member}
148
- ] do
149
- test "#{Phoenix.Naming.humanize(membership_type)} with role #{role} can submit the form and it changes the record in the database",
150
- %{conn: conn, user: user} do
151
- site = new_site()
152
-
153
- add_site_guest_or_team_member(site,
154
- user: user,
155
- role: unquote(role),
156
- membership_type: unquote(membership_type)
157
- )
158
-
159
- original_domain = site.domain
160
- new_domain = "new.#{site.domain}"
161
- {:ok, lv, _html} = live(conn, "/#{site.domain}/change-domain")
162
-
163
- lv
164
- |> element("form")
165
- |> render_submit(%{site: %{domain: new_domain}})
166
-
167
- on_ee do
168
- render_async(lv, 500)
169
- end
170
-
171
- site = Repo.reload!(site)
172
- assert site.domain == new_domain
173
- assert site.domain_changed_from == original_domain
174
- end
175
- end
176
-
177
- test "successful form submission navigates to success page", %{conn: conn, site: site} do
178
- on_ee do
179
- stub_detection_result(%{
180
- "v1Detected" => false,
181
- "gtmLikely" => false,
182
- "wordpressLikely" => false,
183
- "wordpressPlugin" => false
184
- })
185
- end
186
-
187
- original_domain = site.domain
188
- new_domain = "new.#{site.domain}"
189
- {:ok, lv, _html} = live(conn, "/#{site.domain}/change-domain")
190
-
191
- lv
192
- |> element("form")
193
- |> render_submit(%{site: %{domain: new_domain}})
194
-
195
- assert_patch(lv, "/#{URI.encode_www_form(new_domain)}/change-domain/success")
196
-
197
- html = render_async(lv, 500)
198
- assert html =~ "Domain Changed Successfully"
199
- assert html =~ original_domain
200
- assert html =~ new_domain
201
- end
202
-
203
- test "form validation shows error for empty domain", %{conn: conn, site: site} do
204
- {:ok, lv, _html} = live(conn, "/#{site.domain}/change-domain")
205
-
206
- html =
207
- lv
208
- |> element("form")
209
- |> render_submit(%{site: %{domain: ""}})
210
-
211
- assert html =~ htmlize_quotes("can't be blank")
212
- end
213
-
214
- test "form validation shows error for invalid domain format", %{conn: conn, site: site} do
215
- {:ok, lv, _html} = live(conn, "/#{site.domain}/change-domain")
216
-
217
- html =
218
- lv
219
- |> element("form")
220
- |> render_submit(%{site: %{domain: "invalid domain with spaces"}})
221
-
222
- assert html =~ "only letters, numbers, slashes, underscores and period allowed"
223
- end
224
-
225
- test "renders back to settings link with correct path", %{conn: conn, site: site} do
226
- {:ok, _lv, html} = live(conn, "/#{site.domain}/change-domain")
227
-
228
- expected_link = Routes.site_path(conn, :settings_general, site.domain)
229
- assert html =~ expected_link
230
- end
231
-
232
- @tag :ee_only
233
- test "success page shows WordPress plugin notice when detected", %{conn: conn, site: site} do
234
- stub_detection_result(%{
235
- "v1Detected" => true,
236
- "gtmLikely" => false,
237
- "wordpressLikely" => true,
238
- "wordpressPlugin" => true
239
- })
240
-
241
- new_domain = "new.#{site.domain}"
242
- {:ok, lv, _html} = live(conn, "/#{site.domain}/change-domain")
243
-
244
- lv
245
- |> element("form")
246
- |> render_submit(%{site: %{domain: new_domain}})
247
-
248
- assert_patch(lv, "/#{URI.encode_www_form(new_domain)}/change-domain/success")
249
-
250
- html = render_async(lv, 500)
251
- assert html =~ "using our WordPress plugin"
252
- assert html =~ "also update the site"
253
- assert html =~ "Plausible Wordpress Plugin settings"
254
- assert html =~ "within 72 hours"
255
-
256
- assert element_exists?(
257
- html,
258
- "a[href='#{PlausibleWeb.Live.ChangeDomain.change_domain_docs_link()}']"
259
- )
260
- end
261
-
262
- @tag :ee_only
263
- test "success page shows generic v1 notice when detected but not WordPress", %{
264
- conn: conn,
265
- site: site
266
- } do
267
- stub_detection_result(%{
268
- "v1Detected" => true,
269
- "gtmLikely" => false,
270
- "wordpressLikely" => false,
271
- "wordpressPlugin" => false
272
- })
273
-
274
- new_domain = "new.#{site.domain}"
275
- {:ok, lv, _html} = live(conn, "/#{site.domain}/change-domain")
276
-
277
- lv
278
- |> element("form")
279
- |> render_submit(%{site: %{domain: new_domain}})
280
-
281
- assert_patch(lv, "/#{URI.encode_www_form(new_domain)}/change-domain/success")
282
-
283
- html = render_async(lv, 500)
284
- assert html =~ "using our legacy script"
285
- assert html =~ "update the site domain"
286
- assert html =~ "Plausible installation"
287
- assert html =~ "within 72 hours"
288
- refute html =~ "Wordpress"
289
-
290
- assert element_exists?(
291
- html,
292
- "a[href='#{PlausibleWeb.Live.ChangeDomain.change_domain_docs_link()}']"
293
- )
294
- end
295
-
296
- @tag :ee_only
297
- test "success page shows 'tracking works' notice when no v1 tracking detected", %{
298
- conn: conn,
299
- site: site
300
- } do
301
- stub_detection_result(%{
302
- "v1Detected" => false,
303
- "gtmLikely" => false,
304
- "wordpressLikely" => false,
305
- "wordpressPlugin" => false
306
- })
307
-
308
- new_domain = "new.#{site.domain}"
309
- {:ok, lv, _html} = live(conn, "/#{site.domain}/change-domain")
310
-
311
- lv
312
- |> element("form")
313
- |> render_submit(%{site: %{domain: new_domain}})
314
-
315
- assert_patch(lv, "/#{URI.encode_www_form(new_domain)}/change-domain/success")
316
-
317
- html = render_async(lv, 500)
318
- assert html =~ "Your new domain should be tracking nicely"
319
- assert html =~ "domain change checklist"
320
-
321
- assert element_exists?(
322
- html,
323
- "a[href='#{PlausibleWeb.Live.ChangeDomain.change_domain_checklist_docs_link()}']"
324
- )
325
-
326
- assert element_exists?(
327
- html,
328
- "a[href='#{PlausibleWeb.Live.ChangeDomain.change_domain_docs_link()}']"
329
- )
330
- end
331
-
332
- @tag :ee_only
333
- test "success page shows npm notice when detected", %{conn: conn, site: site} do
334
- stub_detection_result(%{
335
- "v1Detected" => false,
336
- "gtmLikely" => false,
337
- "npm" => true,
338
- "wordpressLikely" => false,
339
- "wordpressPlugin" => false
340
- })
341
-
342
- new_domain = "new.#{site.domain}"
343
- {:ok, lv, _html} = live(conn, "/#{site.domain}/change-domain")
344
-
345
- lv
346
- |> element("form")
347
- |> render_submit(%{site: %{domain: new_domain}})
348
-
349
- assert_patch(lv, "/#{URI.encode_www_form(new_domain)}/change-domain/success")
350
-
351
- html = render_async(lv, 500)
352
- assert html =~ "using our @plausible-analytics/tracker module"
353
- assert html =~ "Plausible installation"
354
- assert html =~ "within 72 hours"
355
-
356
- assert element_exists?(
357
- html,
358
- "a[href='#{PlausibleWeb.Live.ChangeDomain.change_domain_docs_link()}']"
359
- )
360
- end
361
-
362
- @tag ee_only: true, capture_log: true
363
- test "ratelimit is respected: browserless request isn't made and the notice is generic", %{
364
- conn: conn,
365
- site: site
366
- } do
367
- new_domain = "new.#{site.domain}"
368
-
369
- # exceed the rate limit for site detection
370
- Plausible.RateLimit.check_rate(
371
- Plausible.RateLimit,
372
- "site_detection:#{new_domain}",
373
- :timer.minutes(60),
374
- 1,
375
- 100
376
- )
377
-
378
- # stub won't be used, if it were used, the output would be different
379
- stub_detection_result(%{
380
- "v1Detected" => false,
381
- "gtmLikely" => false,
382
- "wordpressLikely" => false,
383
- "wordpressPlugin" => false
384
- })
385
-
386
- {:ok, lv, _html} = live(conn, "/#{site.domain}/change-domain")
387
-
388
- lv
389
- |> element("form")
390
- |> render_submit(%{site: %{domain: new_domain}})
391
-
392
- assert_patch(lv, "/#{URI.encode_www_form(new_domain)}/change-domain/success")
393
-
394
- html = render_async(lv, 500)
395
- assert html =~ "We could not reach your new domain"
396
- assert html =~ "Additional action may be required"
397
-
398
- assert element_exists?(
399
- html,
400
- "a[href='#{PlausibleWeb.Live.ChangeDomain.change_domain_docs_link()}']"
401
- )
402
- end
403
-
404
- @tag ee_only: true, capture_log: true
405
- test "success page handles detection error gracefully", %{conn: conn, site: site} do
406
- stub_detection_error()
407
-
408
- new_domain = "new.#{site.domain}"
409
- {:ok, lv, _html} = live(conn, "/#{site.domain}/change-domain")
410
-
411
- lv
412
- |> element("form")
413
- |> render_submit(%{site: %{domain: new_domain}})
414
-
415
- assert_patch(lv, "/#{URI.encode_www_form(new_domain)}/change-domain/success")
416
-
417
- html = render_async(lv, 500)
418
- assert html =~ "We could not reach your new domain"
419
- assert html =~ "Additional action may be required"
420
-
421
- assert element_exists?(
422
- html,
423
- "a[href='#{PlausibleWeb.Live.ChangeDomain.change_domain_docs_link()}']"
424
- )
425
- end
426
-
427
- @tag :ce_build_only
428
- test "success page shows generic v1 notice for CE", %{
429
- conn: conn,
430
- site: site
431
- } do
432
- new_domain = "new.#{site.domain}"
433
- {:ok, lv, _html} = live(conn, "/#{site.domain}/change-domain")
434
-
435
- lv
436
- |> element("form")
437
- |> render_submit(%{site: %{domain: new_domain}})
438
-
439
- assert_patch(lv, "/#{URI.encode_www_form(new_domain)}/change-domain/success")
440
-
441
- html = render_async(lv, 500)
442
-
443
- assert html =~ "Additional action may be required"
444
- assert html =~ "using our legacy snippet"
445
- assert html =~ "must also update the site domain"
446
- assert html =~ "72 hours"
447
-
448
- assert element_exists?(
449
- html,
450
- "a[href='#{PlausibleWeb.Live.ChangeDomain.change_domain_docs_link()}']"
451
- )
452
- end
453
- end
454
-
455
- defp stub_detection_result(js_data) do
456
- Req.Test.stub(Plausible.InstallationSupport.Checks.Detection, fn conn ->
457
- conn
458
- |> put_resp_content_type("application/json")
459
- |> send_resp(200, Jason.encode!(%{"data" => Map.put(js_data, "completed", true)}))
460
- end)
461
- end
462
-
463
- defp stub_detection_error do
464
- Req.Test.stub(Plausible.InstallationSupport.Checks.Detection, fn conn ->
465
- conn
466
- |> put_resp_content_type("application/json")
467
- |> send_resp(
468
- 200,
469
- Jason.encode!(%{"data" => %{"error" => %{"message" => "Simulated browser error"}}})
470
- )
471
- end)
472
- end
473
- end