Skip to content

Commit 23a4c57

Browse files
committed
Fix tests broken by Phoenix 1.8 and LiveView 1.1 upgrade
Phoenix 1.8 renders boolean HTML attributes as attr="" instead of attr="attr". lazy_html (new LiveView 1.1 test dep) enforces stricter CSS selector parsing than Floki. Changes: - Replace disabled="disabled" / checked="checked" assertions with disabled="" / checked="" throughout - Replace [attr='attr'] CSS selectors with presence-only [attr] selectors - Fix malformed attribute selectors missing closing quotes that Floki accepted silently but lazy_html rejects (e.g. [id='...id]) - Fix comma-separated attributes in single brackets to chained brackets (e.g. [a='x', b='y'] -> [a='x'][b='y']) - Replace tbody:first-child selectors (now semantically enforced by lazy_html) with tbody:first-of-type or scoped ID selectors - Replace selected="selected" option assertions with selected="" - Fix save_is_disabled? helper to use List.keymember? instead of checking for {"disabled", "disabled"} tuple - Replace ErrorViewTest with tests for ErrorHTML and ErrorJSON, including integration tests that exercise the full request cycle
1 parent bbdec7b commit 23a4c57

10 files changed

Lines changed: 79 additions & 64 deletions

File tree

test/lightning/workflow_versions_test.exs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ defmodule Lightning.WorkflowVersionsTest do
66

77
alias Lightning.Repo
88
alias Lightning.WorkflowVersions
9-
alias Lightning.Workflows.{Workflow, WorkflowVersion}
9+
alias Lightning.Workflows.{WorkflowVersion}
1010

1111
@a "aaaaaaaaaaaa"
1212
@b "bbbbbbbbbbbb"

test/lightning_web/live/ai_assistant_live_test.exs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -310,10 +310,10 @@ defmodule LightningWeb.AiAssistantLiveTest do
310310
)
311311

312312
assert has_element?(input_element)
313-
refute render(input_element) =~ "disabled=\"disabled\""
313+
refute render(input_element) =~ "disabled=\"\""
314314
assert has_element?(submit_btn)
315315
# Submit button should be disabled when no content is entered
316-
assert render(submit_btn) =~ "disabled=\"disabled\""
316+
assert render(submit_btn) =~ "disabled=\"\""
317317

318318
html =
319319
view
@@ -367,9 +367,9 @@ defmodule LightningWeb.AiAssistantLiveTest do
367367
)
368368

369369
assert has_element?(input_element)
370-
assert render(input_element) =~ "disabled=\"disabled\""
370+
assert render(input_element) =~ "disabled=\"\""
371371
assert has_element?(submit_btn)
372-
assert render(submit_btn) =~ "disabled=\"disabled\""
372+
assert render(submit_btn) =~ "disabled=\"\""
373373

374374
html =
375375
view
@@ -431,9 +431,9 @@ defmodule LightningWeb.AiAssistantLiveTest do
431431
)
432432

433433
assert has_element?(input_element)
434-
assert render(input_element) =~ "disabled=\"disabled\""
434+
assert render(input_element) =~ "disabled=\"\""
435435
assert has_element?(submit_btn)
436-
assert render(submit_btn) =~ "disabled=\"disabled\""
436+
assert render(submit_btn) =~ "disabled=\"\""
437437

438438
assert render(input_element) =~
439439
~s(placeholder="Save your workflow first to use the AI Assistant")
@@ -2077,7 +2077,7 @@ defmodule LightningWeb.AiAssistantLiveTest do
20772077
create_btn_after = element(view, "#create_workflow_btn")
20782078
create_btn_html_after = render(create_btn_after)
20792079

2080-
refute create_btn_html_after =~ "disabled=\"disabled\"",
2080+
refute create_btn_html_after =~ "disabled=\"\"",
20812081
"Create button should be enabled after template selection"
20822082
end
20832083

@@ -2353,9 +2353,9 @@ defmodule LightningWeb.AiAssistantLiveTest do
23532353
"#ai-assistant-form-submit-btn-chat-input-new-workflow-panel-assistant"
23542354
)
23552355

2356-
refute render(input_element) =~ "disabled=\"disabled\""
2356+
refute render(input_element) =~ "disabled=\"\""
23572357
# Submit button should be disabled when no content is entered
2358-
assert render(submit_btn) =~ "disabled=\"disabled\""
2358+
assert render(submit_btn) =~ "disabled=\"\""
23592359

23602360
refute render(input_element) =~ "Save your workflow first"
23612361
end

test/lightning_web/live/credential_live_test.exs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2865,7 +2865,7 @@ defmodule LightningWeb.CredentialLiveTest do
28652865

28662866
refute view
28672867
|> has_element?(
2868-
"span[phx-hook='Tooltip', aria-label='OAuth client not found']"
2868+
"span[phx-hook='Tooltip'][aria-label='OAuth client not found']"
28692869
)
28702870

28712871
# Now lets delete the oauth client

test/lightning_web/live/project_live_test.exs

Lines changed: 15 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1835,14 +1835,10 @@ defmodule LightningWeb.ProjectLiveTest do
18351835
assert html =~ "Project settings"
18361836

18371837
assert view
1838-
|> has_element?(
1839-
"input[disabled='disabled'][name='project[raw_name]']"
1840-
)
1838+
|> has_element?("input[disabled][name='project[raw_name]']")
18411839

18421840
assert view
1843-
|> has_element?(
1844-
"textarea[disabled='disabled'][name='project[description]']"
1845-
)
1841+
|> has_element?("textarea[disabled][name='project[description]']")
18461842

18471843
assert view |> has_element?("button[disabled][type=submit]")
18481844

@@ -1869,14 +1865,10 @@ defmodule LightningWeb.ProjectLiveTest do
18691865
assert html =~ "Project settings"
18701866

18711867
assert view
1872-
|> has_element?(
1873-
"input[disabled='disabled'][name='project[raw_name]']"
1874-
)
1868+
|> has_element?("input[disabled][name='project[raw_name]']")
18751869

18761870
assert view
1877-
|> has_element?(
1878-
"textarea[disabled='disabled'][name='project[description]']"
1879-
)
1871+
|> has_element?("textarea[disabled][name='project[description]']")
18801872

18811873
assert view |> has_element?("button[disabled][type=submit]")
18821874

@@ -2755,7 +2747,7 @@ defmodule LightningWeb.ProjectLiveTest do
27552747
assert html =~ "Should OpenFn store input/output data for workflow runs?"
27562748

27572749
# retain_all is the default
2758-
assert ["checked"] ==
2750+
assert [""] ==
27592751
view
27602752
|> element("#retain_all")
27612753
|> render()
@@ -2770,7 +2762,7 @@ defmodule LightningWeb.ProjectLiveTest do
27702762
# |> Floki.parse_fragment!()
27712763
# |> Floki.attribute("input", "checked")
27722764

2773-
refute ["checked"] ==
2765+
assert [] ==
27742766
view
27752767
|> element("#erase_all")
27762768
|> render()
@@ -2783,7 +2775,7 @@ defmodule LightningWeb.ProjectLiveTest do
27832775
# 3 radio buttons descriptions
27842776
assert "Retain input/output data for all workflow runs" =
27852777
view
2786-
|> element(~s{label#[for="retain_all"]})
2778+
|> element(~s{label[for="retain_all"]})
27872779
|> render()
27882780
|> Floki.parse_fragment!()
27892781
|> Floki.text()
@@ -2800,7 +2792,7 @@ defmodule LightningWeb.ProjectLiveTest do
28002792

28012793
assert "Never retain input/output data (zero-persistence)" =
28022794
view
2803-
|> element(~s{label#[for="erase_all"]})
2795+
|> element(~s{label[for="erase_all"]})
28042796
|> render()
28052797
|> Floki.parse_fragment!()
28062798
|> Floki.text()
@@ -2841,7 +2833,7 @@ defmodule LightningWeb.ProjectLiveTest do
28412833
)
28422834
|> render_change()
28432835

2844-
assert ["checked"] ==
2836+
assert [""] ==
28452837
view
28462838
|> element("#erase_all")
28472839
|> render()
@@ -2873,7 +2865,7 @@ defmodule LightningWeb.ProjectLiveTest do
28732865
)
28742866
|> render_change()
28752867

2876-
assert ["checked"] ==
2868+
assert [""] ==
28772869
view
28782870
|> element("#erase_all")
28792871
|> render()
@@ -2886,7 +2878,7 @@ defmodule LightningWeb.ProjectLiveTest do
28862878
|> render_click()
28872879

28882880
# Verify it resets back to retain_all (the default)
2889-
assert ["checked"] ==
2881+
assert [""] ==
28902882
view
28912883
|> element("#retain_all")
28922884
|> render()
@@ -2972,7 +2964,7 @@ defmodule LightningWeb.ProjectLiveTest do
29722964
)
29732965
|> render_change()
29742966

2975-
assert ["checked"] ==
2967+
assert [""] ==
29762968
view
29772969
|> element("#" <> policy)
29782970
|> render()
@@ -2998,7 +2990,7 @@ defmodule LightningWeb.ProjectLiveTest do
29982990
{:ok, view, _html} =
29992991
live(conn, ~p"/projects/#{project.id}/settings#data-storage")
30002992

3001-
assert ["checked"] ==
2993+
assert [""] ==
30022994
view
30032995
|> element("#" <> policy)
30042996
|> render()
@@ -5217,7 +5209,7 @@ defmodule LightningWeb.ProjectLiveTest do
52175209
"Connect Branch & Initiate First Sync"
52185210
)
52195211

5220-
assert render(submit_btn) =~ "disabled=\"disabled\""
5212+
assert render(submit_btn) =~ "disabled=\"\""
52215213
end
52225214

52235215
@tag :capture_log
@@ -6229,7 +6221,7 @@ defmodule LightningWeb.ProjectLiveTest do
62296221
button = element(view, "#initiate-sync-button")
62306222
assert has_element?(button)
62316223

6232-
assert render(button) =~ "disabled=\"disabled\""
6224+
assert render(button) =~ "disabled=\"\""
62336225
end
62346226
end
62356227

test/lightning_web/live/sandbox_live/form_component_test.exs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ defmodule LightningWeb.SandboxLive.FormComponentTest do
121121
)
122122

123123
html = render(view)
124-
assert html =~ ~s(<button disabled="disabled" type="submit")
124+
assert html =~ ~s(<button disabled="" type="submit")
125125
assert html =~ "can&#39;t be blank"
126126

127127
# Verify the validation error only appears once (fixes #4490)

test/lightning_web/live/work_order_live_test.exs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -998,7 +998,7 @@ defmodule LightningWeb.WorkOrderLiveTest do
998998

999999
div =
10001000
view
1001-
|> element("tbody:first-child")
1001+
|> element("#work-orders-table")
10021002
|> render_async()
10031003

10041004
refute div =~ "workflow 1"
@@ -1008,7 +1008,7 @@ defmodule LightningWeb.WorkOrderLiveTest do
10081008

10091009
div =
10101010
view
1011-
|> element("tbody:first-child")
1011+
|> element("#work-orders-table")
10121012
|> render_async()
10131013

10141014
assert div =~ "workflow 1"
@@ -1110,7 +1110,9 @@ defmodule LightningWeb.WorkOrderLiveTest do
11101110

11111111
div =
11121112
view
1113-
|> element("tbody:first-child td.text-right:nth-child(8)")
1113+
|> element(
1114+
"tbody#workorder-#{work_order_two.id} td.text-right:nth-child(8)"
1115+
)
11141116
|> render()
11151117

11161118
assert div =~ "Failed"
@@ -1807,7 +1809,7 @@ defmodule LightningWeb.WorkOrderLiveTest do
18071809
def workflow_displayed(view, name) do
18081810
elem =
18091811
view
1810-
|> element("tbody:first-child")
1812+
|> element("#work-orders-table")
18111813

18121814
if elem |> has_element?() do
18131815
elem |> render() =~ name

test/lightning_web/live/workflow_live/edit_test.exs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -522,7 +522,7 @@ defmodule LightningWeb.WorkflowLive.EditTest do
522522

523523
refute view
524524
|> element("#create_workflow_btn")
525-
|> render() =~ "disabled=\"disabled\""
525+
|> render() =~ "disabled=\"\""
526526

527527
# Test with invalid payload (missing required fields)
528528
invalid_payload = %{
@@ -542,7 +542,7 @@ defmodule LightningWeb.WorkflowLive.EditTest do
542542

543543
assert view
544544
|> element("#create_workflow_btn")
545-
|> render() =~ "disabled=\"disabled\""
545+
|> render() =~ "disabled=\"\""
546546
end
547547

548548
@tag role: :editor
@@ -725,7 +725,7 @@ defmodule LightningWeb.WorkflowLive.EditTest do
725725

726726
refute view
727727
|> has_element?(
728-
"[id='version-switcher-canvas-#{workflow.id}][data-version='latest']"
728+
"[id='version-switcher-canvas-#{workflow.id}'][data-version='latest']"
729729
)
730730

731731
view |> fill_workflow_name("#{workflow.name} v2")
@@ -763,7 +763,7 @@ defmodule LightningWeb.WorkflowLive.EditTest do
763763
)
764764

765765
refute view
766-
|> has_element?("[id='version-switcher-inspector-#{job.id}]")
766+
|> has_element?("[id='version-switcher-inspector-#{job.id}']")
767767

768768
refute view
769769
|> has_element?(
@@ -890,7 +890,7 @@ defmodule LightningWeb.WorkflowLive.EditTest do
890890
# )
891891

892892
assert view
893-
|> has_element?("[id='version-switcher-toggle-#{job.id}]")
893+
|> has_element?("[id='version-switcher-toggle-#{job.id}']")
894894

895895
assert view |> save_is_disabled?()
896896
end)
@@ -1664,13 +1664,13 @@ defmodule LightningWeb.WorkflowLive.EditTest do
16641664
assert form_html =~ "Label"
16651665

16661666
assert form_html =~
1667-
~S[<option selected="selected" value="always">Always</option><option value="js_expression">Matches a Javascript Expression</option></select>]
1667+
~S[<option selected="" value="always">Always</option><option value="js_expression">Matches a Javascript Expression</option></select>]
16681668

16691669
edge_on_edit = Enum.at(workflow.edges, 1)
16701670
form_html = view |> select_node(edge_on_edit, workflow.lock_version)
16711671

16721672
assert form_html =~
1673-
~S[<option selected="selected" value="on_job_success">On Success</option>]
1673+
~S[<option selected="" value="on_job_success">On Success</option>]
16741674

16751675
form_html =
16761676
view
@@ -1684,7 +1684,7 @@ defmodule LightningWeb.WorkflowLive.EditTest do
16841684
assert form_html =~ "Label"
16851685

16861686
assert form_html =~
1687-
~S[<option selected="selected" value="js_expression">Matches a Javascript Expression</option>]
1687+
~S[<option selected="" value="js_expression">Matches a Javascript Expression</option>]
16881688

16891689
view
16901690
|> form("#workflow-form", %{
@@ -2947,7 +2947,7 @@ defmodule LightningWeb.WorkflowLive.EditTest do
29472947

29482948
assert view
29492949
|> element("button#submit-btn-github-sync-modal")
2950-
|> render() =~ "disabled=\"disabled\""
2950+
|> render() =~ "disabled=\"\""
29512951
end
29522952
end
29532953

test/lightning_web/live/workflow_live/editor_test.exs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1317,11 +1317,11 @@ defmodule LightningWeb.WorkflowLive.EditorTest do
13171317
live_children(view) |> Enum.each(&render_async/1)
13181318

13191319
# user gets no option to rerun
1320-
assert has_element?(view, "button[disabled='disabled']", "Run (Retry)")
1320+
assert has_element?(view, "button[disabled]", "Run (Retry)")
13211321

13221322
assert has_element?(
13231323
view,
1324-
"button[disabled='disabled']",
1324+
"button[disabled]",
13251325
"Run"
13261326
)
13271327

0 commit comments

Comments
 (0)