Leon4gr45 commited on
Commit
34ba691
·
verified ·
1 Parent(s): fbbb318

Delete test/plausible_web/live/shared_link_settings/form_test.exs with huggingface_hub

Browse files
test/plausible_web/live/shared_link_settings/form_test.exs DELETED
@@ -1,468 +0,0 @@
1
- defmodule PlausibleWeb.Live.SharedLinkSettings.FormTest do
2
- use PlausibleWeb.ConnCase, async: true
3
- import Phoenix.LiveViewTest
4
-
5
- describe "Shared link form" do
6
- setup [:create_user, :log_in, :create_site]
7
-
8
- setup %{user: user, site: site} do
9
- subscribe_to_growth_plan(user)
10
- {:ok, session: %{"site_id" => site.id, "domain" => site.domain}}
11
- end
12
-
13
- test "renders form fields for creating a shared link", %{
14
- conn: conn,
15
- session: session
16
- } do
17
- lv = get_liveview(conn, session)
18
-
19
- lv |> element("button#add-shared-link-button") |> render_click()
20
- html = render(lv)
21
-
22
- assert html =~ "New shared link"
23
- assert html =~ "Password protect"
24
- assert html =~ "Limit to segment"
25
- assert element_exists?(html, ~s|button[role="switch"]#password-protect-|)
26
- assert element_exists?(html, ~s|button[role="switch"]#limit-view-|)
27
- assert element_exists?(html, ~s|input[name="shared_link[name]"]|)
28
- assert element_exists?(html, ~s|input[name="shared_link[password]"][type="password"]|)
29
- assert element_exists?(html, ~s|input[name="shared_link[segment_id]"]|)
30
- assert element_exists?(html, ~s|button[type="submit"]|)
31
-
32
- assert element_exists?(
33
- html,
34
- ~s|a[href="https://plausible.io/docs/filters-segments#how-to-save-a-segment"]|
35
- )
36
- end
37
-
38
- test "renders error on empty submission", %{conn: conn, session: session} do
39
- lv = get_liveview(conn, session)
40
-
41
- lv |> element("button#add-shared-link-button") |> render_click()
42
-
43
- html = lv |> find_form() |> render_submit()
44
-
45
- assert html =~ "can't be blank"
46
- end
47
-
48
- test "creates a shared link without password", %{conn: conn, site: site, session: session} do
49
- lv = get_liveview(conn, session)
50
- refute render(lv) =~ "My Shared Link"
51
-
52
- lv |> element("button#add-shared-link-button") |> render_click()
53
-
54
- lv
55
- |> find_form()
56
- |> render_submit(%{shared_link: %{name: "My Shared Link"}})
57
-
58
- html = render(lv)
59
- assert html =~ "My Shared Link"
60
- assert html =~ "Shared link saved"
61
-
62
- shared_link =
63
- Plausible.Repo.get_by(Plausible.Site.SharedLink, name: "My Shared Link", site_id: site.id)
64
-
65
- assert shared_link
66
- refute shared_link.password_hash
67
- end
68
-
69
- test "creates a shared link limited to segment", %{conn: conn, site: site, session: session} do
70
- segment = insert(:segment, type: :site, site: site, name: "Scandinavia")
71
- lv = get_liveview(conn, session)
72
-
73
- lv |> element("button#add-shared-link-button") |> render_click()
74
-
75
- lv
76
- |> find_form()
77
- |> render_submit(%{shared_link: %{name: "Limited to Scandinavia", segment_id: segment.id}})
78
-
79
- html = render(lv)
80
- assert html =~ "Limited to Scandinavia"
81
- assert html =~ "Shared link saved"
82
-
83
- shared_link =
84
- Plausible.Repo.get_by(Plausible.Site.SharedLink,
85
- name: "Limited to Scandinavia",
86
- site_id: site.id,
87
- segment_id: segment.id
88
- )
89
-
90
- assert shared_link
91
- refute shared_link.password_hash
92
- end
93
-
94
- test "creates a shared link with password", %{conn: conn, site: site, session: session} do
95
- lv = get_liveview(conn, session)
96
- refute render(lv) =~ "Protected Link"
97
-
98
- lv |> element("button#add-shared-link-button") |> render_click()
99
-
100
- lv
101
- |> find_form()
102
- |> render_submit(%{shared_link: %{name: "Protected Link", password: "secret123"}})
103
-
104
- html = render(lv)
105
- assert html =~ "Protected Link"
106
- assert html =~ "Shared link saved"
107
-
108
- shared_link =
109
- Plausible.Repo.get_by(Plausible.Site.SharedLink, name: "Protected Link", site_id: site.id)
110
-
111
- assert shared_link
112
- assert shared_link.password_hash
113
- end
114
-
115
- test "renders form fields for editing a shared link (not limited to segment, not protected)",
116
- %{
117
- conn: conn,
118
- site: site,
119
- session: session
120
- } do
121
- shared_link = insert(:shared_link, site: site, name: "Existing Link")
122
-
123
- lv = get_liveview(conn, session)
124
-
125
- lv
126
- |> element(~s/button[phx-click="edit-shared-link"][phx-value-slug="#{shared_link.slug}"]/)
127
- |> render_click()
128
-
129
- html = render(lv)
130
- assert html =~ "Edit shared link"
131
- assert element_exists?(html, ~s|input[name="shared_link[name]"]|)
132
- assert html =~ ~s|value="#{shared_link.name}"|
133
- refute html =~ "Password protect"
134
- assert html =~ "Limit to segment"
135
- refute element_exists?(html, ~s|button#password-protect-[role="switch"]|)
136
- refute element_exists?(html, ~s|input[name="shared_link[password]"][type="password"]|)
137
- assert element_exists?(html, ~s|input[name="shared_link[segment_id]"][value=""]|)
138
-
139
- assert element_exists?(
140
- html,
141
- ~s|a[href="https://plausible.io/docs/filters-segments#how-to-save-a-segment"]|
142
- )
143
- end
144
-
145
- test "renders form fields for editing a shared link (limited to segment, protected)", %{
146
- conn: conn,
147
- site: site,
148
- session: session
149
- } do
150
- segment = insert(:segment, type: :site, site: site, name: "Scandinavia")
151
-
152
- shared_link =
153
- insert(:shared_link,
154
- site: site,
155
- name: "Existing Link",
156
- segment: segment,
157
- password: "secret123"
158
- )
159
-
160
- lv = get_liveview(conn, session)
161
-
162
- lv
163
- |> element(~s/button[phx-click="edit-shared-link"][phx-value-slug="#{shared_link.slug}"]/)
164
- |> render_click()
165
-
166
- html = render(lv)
167
- assert html =~ "Edit shared link"
168
- assert element_exists?(html, ~s|input[name="shared_link[name]"]|)
169
- assert html =~ ~s|value="#{shared_link.name}"|
170
- refute html =~ "Password protect"
171
- assert html =~ "Limit to segment"
172
- assert element_exists?(html, ~s|input[name="shared_link[segment_id]"]|)
173
- refute element_exists?(html, ~s|input[name="shared_link[password]"][type="password"]|)
174
-
175
- assert element_exists?(
176
- html,
177
- ~s|input[name="shared_link[segment_id]"][value="#{segment.id}"]|
178
- )
179
-
180
- assert html =~ ~s|value="#{segment.name}"|
181
- end
182
-
183
- test "updates a shared link name", %{conn: conn, site: site, session: session} do
184
- shared_link = insert(:shared_link, site: site, name: "Original Name")
185
-
186
- lv = get_liveview(conn, session)
187
-
188
- lv
189
- |> element(~s/button[phx-click="edit-shared-link"][phx-value-slug="#{shared_link.slug}"]/)
190
- |> render_click()
191
-
192
- lv
193
- |> find_form()
194
- |> render_submit(%{shared_link: %{name: "Updated Name"}})
195
-
196
- html = render(lv)
197
- assert html =~ "Updated Name"
198
- assert html =~ "Shared link saved"
199
- refute html =~ "Original Name"
200
-
201
- updated = Plausible.Repo.get!(Plausible.Site.SharedLink, shared_link.id)
202
- assert updated.name == "Updated Name"
203
- assert updated.id == shared_link.id
204
- end
205
-
206
- test "updates a shared link password", %{conn: conn, site: site, session: session} do
207
- shared_link = insert(:shared_link, site: site, name: "Test Link", password: "old_password")
208
-
209
- lv = get_liveview(conn, session)
210
-
211
- lv
212
- |> element(~s/button[phx-click="edit-shared-link"][phx-value-slug="#{shared_link.slug}"]/)
213
- |> render_click()
214
-
215
- old_hash = shared_link.password_hash
216
-
217
- lv
218
- |> find_form()
219
- |> render_submit(%{shared_link: %{name: "Test Link", password: "new_password123"}})
220
-
221
- _html = render(lv)
222
-
223
- updated = Plausible.Repo.get!(Plausible.Site.SharedLink, shared_link.id)
224
- assert updated.password_hash != old_hash
225
- assert updated.password_hash
226
- end
227
-
228
- test "removes password when password field is left empty on update", %{
229
- conn: conn,
230
- site: site,
231
- session: session
232
- } do
233
- shared_link = insert(:shared_link, site: site, name: "Test Link", password: "old_password")
234
-
235
- lv = get_liveview(conn, session)
236
-
237
- lv
238
- |> element(~s/button[phx-click="edit-shared-link"][phx-value-slug="#{shared_link.slug}"]/)
239
- |> render_click()
240
-
241
- lv
242
- |> find_form()
243
- |> render_submit(%{shared_link: %{name: "Test Link", password: ""}})
244
-
245
- _html = render(lv)
246
-
247
- updated = Plausible.Repo.get!(Plausible.Site.SharedLink, shared_link.id)
248
- refute updated.password_hash
249
- end
250
-
251
- test "renders error when shared link name is invalid", %{
252
- conn: conn,
253
- session: session
254
- } do
255
- lv = get_liveview(conn, session)
256
-
257
- lv |> element("button#add-shared-link-button") |> render_click()
258
-
259
- html = lv |> find_form() |> render_submit(%{shared_link: %{name: ""}})
260
-
261
- assert html =~ "can't be blank"
262
- end
263
-
264
- test "attaches a valid same-site segment when editing a shared link", %{
265
- conn: conn,
266
- site: site,
267
- session: session
268
- } do
269
- segment = insert(:segment, type: :site, site: site, name: "Scandinavia")
270
- shared_link = insert(:shared_link, site: site, name: "My Link")
271
-
272
- lv = get_liveview(conn, session)
273
-
274
- lv
275
- |> element(~s/button[phx-click="edit-shared-link"][phx-value-slug="#{shared_link.slug}"]/)
276
- |> render_click()
277
-
278
- lv
279
- |> find_form()
280
- |> render_submit(%{shared_link: %{name: "My Link", segment_id: segment.id}})
281
-
282
- html = render(lv)
283
- assert html =~ "Shared link saved"
284
-
285
- updated = Plausible.Repo.reload!(shared_link)
286
- assert updated.segment_id == segment.id
287
- end
288
-
289
- test "clears a segment when editing a shared link with segment_id empty", %{
290
- conn: conn,
291
- site: site,
292
- session: session
293
- } do
294
- segment = insert(:segment, type: :site, site: site, name: "Scandinavia")
295
- shared_link = insert(:shared_link, site: site, name: "My Link", segment: segment)
296
-
297
- lv = get_liveview(conn, session)
298
-
299
- lv
300
- |> element(~s/button[phx-click="edit-shared-link"][phx-value-slug="#{shared_link.slug}"]/)
301
- |> render_click()
302
-
303
- # Toggle off → ComboBox submits segment_id: ""
304
- lv
305
- |> find_form()
306
- |> render_submit(%{shared_link: %{name: "My Link", segment_id: ""}})
307
-
308
- html = render(lv)
309
- assert html =~ "Shared link saved"
310
-
311
- updated = Plausible.Repo.reload!(shared_link)
312
- assert is_nil(updated.segment_id)
313
- end
314
-
315
- test "does not associate a segment from another site when creating a shared link", %{
316
- conn: conn,
317
- site: site,
318
- session: session
319
- } do
320
- victim_site = insert(:site)
321
- victim_segment = insert(:segment, type: :site, site: victim_site, name: "Victim Segment")
322
-
323
- lv = get_liveview(conn, session)
324
-
325
- lv |> element("button#add-shared-link-button") |> render_click()
326
-
327
- lv
328
- |> find_form()
329
- |> render_submit(%{
330
- shared_link: %{name: "Attacker Link", segment_id: victim_segment.id}
331
- })
332
-
333
- html = render(lv)
334
- assert html =~ "Attacker Link"
335
- assert html =~ "Shared link saved"
336
-
337
- # The shared link must NOT reference the foreign segment
338
- shared_link =
339
- Plausible.Repo.get_by(Plausible.Site.SharedLink,
340
- name: "Attacker Link",
341
- site_id: site.id
342
- )
343
-
344
- assert shared_link
345
- assert is_nil(shared_link.segment_id)
346
- end
347
-
348
- test "does not associate a segment from another site when editing a shared link", %{
349
- conn: conn,
350
- site: site,
351
- session: session
352
- } do
353
- own_segment = insert(:segment, type: :site, site: site, name: "Own Segment")
354
- shared_link = insert(:shared_link, site: site, name: "My Link", segment: own_segment)
355
-
356
- victim_site = insert(:site)
357
- victim_segment = insert(:segment, type: :site, site: victim_site, name: "Victim Segment")
358
-
359
- lv = get_liveview(conn, session)
360
-
361
- lv
362
- |> element(~s/button[phx-click="edit-shared-link"][phx-value-slug="#{shared_link.slug}"]/)
363
- |> render_click()
364
-
365
- lv
366
- |> find_form()
367
- |> render_submit(%{
368
- shared_link: %{name: "My Link", segment_id: victim_segment.id}
369
- })
370
-
371
- html = render(lv)
372
- assert html =~ "Shared link saved"
373
-
374
- # The shared link must NOT be updated to reference the foreign segment
375
- updated = Plausible.Repo.reload!(shared_link)
376
- assert is_nil(updated.segment_id)
377
- end
378
-
379
- test "keeps the segment when editing a link whose segment was downgraded to personal", %{
380
- conn: conn,
381
- site: site,
382
- session: session
383
- } do
384
- # A site segment is attached, then later downgraded to personal. Editing the
385
- # link (e.g. renaming) must NOT detach the now-personal segment.
386
- segment = insert(:segment, type: :site, site: site, name: "Scandinavia")
387
- shared_link = insert(:shared_link, site: site, name: "My Link", segment: segment)
388
-
389
- Plausible.Repo.update!(Ecto.Changeset.change(segment, type: :personal))
390
-
391
- lv = get_liveview(conn, session)
392
-
393
- lv
394
- |> element(~s/button[phx-click="edit-shared-link"][phx-value-slug="#{shared_link.slug}"]/)
395
- |> render_click()
396
-
397
- lv
398
- |> find_form()
399
- |> render_submit(%{shared_link: %{name: "Renamed Link", segment_id: segment.id}})
400
-
401
- html = render(lv)
402
- assert html =~ "Shared link saved"
403
-
404
- updated = Plausible.Repo.reload!(shared_link)
405
- assert updated.name == "Renamed Link"
406
-
407
- assert updated.segment_id == segment.id,
408
- "Downgraded segment must stay attached to the shared link"
409
- end
410
-
411
- test "cannot overwrite the shared link slug via form params", %{
412
- conn: conn,
413
- site: site,
414
- session: session
415
- } do
416
- shared_link = insert(:shared_link, site: site, name: "Original Link")
417
- original_slug = shared_link.slug
418
-
419
- lv = get_liveview(conn, session)
420
-
421
- lv
422
- |> element(~s/button[phx-click="edit-shared-link"][phx-value-slug="#{original_slug}"]/)
423
- |> render_click()
424
-
425
- # Attempt to inject a custom slug through the form params
426
- lv
427
- |> find_form()
428
- |> render_submit(%{shared_link: %{name: "Original Link", slug: "evil-custom-slug"}})
429
-
430
- html = render(lv)
431
- assert html =~ "Shared link saved"
432
-
433
- updated = Plausible.Repo.reload!(shared_link)
434
- assert updated.slug == original_slug, "Slug must remain unchanged after update"
435
- refute updated.slug == "evil-custom-slug"
436
- end
437
-
438
- test "shows upgrade required error when subscription doesn't include Shared Links", %{
439
- conn: conn,
440
- site: site,
441
- session: session
442
- } do
443
- site.team |> Plausible.Teams.Team.end_trial() |> Plausible.Repo.update!()
444
- insert(:starter_subscription, team: site.team)
445
-
446
- lv = get_liveview(conn, session)
447
-
448
- lv |> element("button#add-shared-link-button") |> render_click()
449
-
450
- html =
451
- lv
452
- |> find_form()
453
- |> render_submit(%{shared_link: %{name: "Test Link"}})
454
-
455
- assert html =~ "New shared link" or
456
- html =~ "Your current subscription plan does not include Shared Links"
457
- end
458
- end
459
-
460
- defp get_liveview(conn, session) do
461
- {:ok, lv, _html} = live_isolated(conn, PlausibleWeb.Live.SharedLinkSettings, session: session)
462
- lv
463
- end
464
-
465
- defp find_form(lv) do
466
- lv |> element("#shared-links-form-modalseq0 form")
467
- end
468
- end