Skip to content

Commit 2ff8ae4

Browse files
add credentials with single click (#3127)
* paste issue * add tests * CL
1 parent 46827eb commit 2ff8ae4

File tree

3 files changed

+51
-74
lines changed

3 files changed

+51
-74
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,8 @@ and this project adheres to
6767
[#3107](https://github.com/OpenFn/lightning/pull/3107)
6868
- Added a "BETA" label to the Kafka trigger type
6969
[#3098](https://github.com/OpenFn/lightning/pull/3098)
70+
- Simplified adding credentials to projects
71+
[#3034](https://github.com/OpenFn/lightning/issues/3034)
7072

7173
## [v2.11.2] - 2025-04-10
7274

lib/lightning_web/live/components/credentials.ex

Lines changed: 19 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -184,15 +184,13 @@ defmodule LightningWeb.Components.Credentials do
184184
%{
185185
select_id: "project-credentials-list-#{assigns.id}",
186186
prompt: "Grant projects access to this credential",
187-
add_project_id: "add-project-credential-button-#{assigns.id}",
188187
remove_project_id: "remove-project-credential-button-#{assigns.id}"
189188
}
190189

191190
:oauth_client ->
192191
%{
193192
select_id: "project-oauth-clients-list-#{assigns.id}",
194193
prompt: "Grant projects access to this OAuth client",
195-
add_project_id: "add-project-oauth-client-button-#{assigns.id}",
196194
remove_project_id: "remove-project-oauth-client-button-#{assigns.id}"
197195
}
198196
end
@@ -208,40 +206,25 @@ defmodule LightningWeb.Components.Credentials do
208206
>
209207
Project
210208
</label>
211-
212-
<div class="flex w-full items-center gap-2 pb-3 mt-1">
213-
<div class="grow">
214-
<select
215-
id={@select_id}
216-
name={:project_id}
217-
class={[
218-
"block w-full rounded-lg border border-secondary-300 bg-white",
219-
"sm:text-sm shadow-xs",
220-
"focus:border-primary-300 focus:ring focus:ring-primary-200 focus:ring-primary-200/50",
221-
"disabled:cursor-not-allowed "
222-
]}
223-
phx-change="select_project"
224-
phx-target={@phx_target}
225-
>
226-
<option value="">{@prompt}</option>
227-
{Phoenix.HTML.Form.options_for_select(
228-
map_projects_for_select(@available_projects),
229-
@selected
230-
)}
231-
</select>
232-
</div>
233-
234-
<div class="grow-0 items-right">
235-
<.button
236-
id={@add_project_id}
237-
disabled={disable_add_button(@available_projects, @selected_projects)}
238-
phx-target={@phx_target}
239-
phx-value-project_id={@selected}
240-
phx-click="add_selected_project"
241-
>
242-
Add
243-
</.button>
244-
</div>
209+
<div class="mt-1 pb-3">
210+
<select
211+
id={@select_id}
212+
name="project_id"
213+
class={[
214+
"block w-full rounded-lg border border-secondary-300 bg-white",
215+
"sm:text-sm shadow-xs",
216+
"focus:border-primary-300 focus:ring focus:ring-primary-200 focus:ring-primary-200/50",
217+
"disabled:cursor-not-allowed "
218+
]}
219+
phx-change="add_selected_project"
220+
phx-target={@phx_target}
221+
>
222+
<option value="">{@prompt}</option>
223+
{Phoenix.HTML.Form.options_for_select(
224+
map_projects_for_select(@available_projects),
225+
""
226+
)}
227+
</select>
245228
</div>
246229
247230
<div class="overflow-auto max-h-32">
@@ -275,10 +258,6 @@ defmodule LightningWeb.Components.Credentials do
275258
end)
276259
end
277260

278-
defp disable_add_button(available_projects, selected) do
279-
selected == "" or selected == nil or available_projects == []
280-
end
281-
282261
attr :users, :list, required: true
283262
attr :form, :map, required: true
284263

test/lightning_web/live/credential_live_test.exs

Lines changed: 30 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -368,13 +368,16 @@ defmodule LightningWeb.CredentialLiveTest do
368368
"#credential-form-new textarea[name='credential[body]']"
369369
)
370370

371+
# Select first project
371372
index_live
372373
|> element("#project-credentials-list-new")
373374
|> render_change(%{"project_id" => project1.id})
374375

375-
index_live
376-
|> element("#add-project-credential-button-new", "Add")
377-
|> render_click()
376+
# Verify project is added
377+
assert index_live
378+
|> has_element?(
379+
"#remove-project-credential-button-new-#{project1.id}"
380+
)
378381

379382
assert index_live
380383
|> form("#credential-form-new", credential: %{name: ""})
@@ -384,13 +387,16 @@ defmodule LightningWeb.CredentialLiveTest do
384387
|> form("#credential-form-new", credential: %{name: "MailChimp'24"})
385388
|> render_change() =~ "credential name has invalid format"
386389

390+
# Select second project
387391
index_live
388392
|> element("#project-credentials-list-new")
389393
|> render_change(%{"project_id" => project2.id})
390394

391-
index_live
392-
|> element("#add-project-credential-button-new", "Add")
393-
|> render_click()
395+
# Verify second project is added
396+
assert index_live
397+
|> has_element?(
398+
"#remove-project-credential-button-new-#{project2.id}"
399+
)
394400

395401
{:ok, _index_live, html} =
396402
index_live
@@ -446,10 +452,6 @@ defmodule LightningWeb.CredentialLiveTest do
446452
|> element("#project-credentials-list-new")
447453
|> render_change(%{"project_id" => project1.id})
448454

449-
index_live
450-
|> element("#add-project-credential-button-new", "Add")
451-
|> render_click()
452-
453455
assert index_live
454456
|> form("#credential-form-new", credential: %{name: ""})
455457
|> render_change() =~ "can&#39;t be blank"
@@ -462,10 +464,6 @@ defmodule LightningWeb.CredentialLiveTest do
462464
|> element("#project-credentials-list-new")
463465
|> render_change(%{"project_id" => project2.id})
464466

465-
index_live
466-
|> element("#add-project-credential-button-new", "Add")
467-
|> render_click()
468-
469467
{:ok, _index_live, html} =
470468
index_live
471469
|> form("#credential-form-new", credential: @create_attrs)
@@ -771,7 +769,7 @@ defmodule LightningWeb.CredentialLiveTest do
771769
assert html =~ "some updated name"
772770
end
773771

774-
test "adds new project with access", %{
772+
test "Edit adds new project with access", %{
775773
conn: conn,
776774
user: user
777775
} do
@@ -800,9 +798,11 @@ defmodule LightningWeb.CredentialLiveTest do
800798
|> element("#project-credentials-list-#{credential.id}")
801799
|> render_change(%{"project_id" => project.id})
802800

803-
view
804-
|> element("#add-project-credential-button-#{credential.id}")
805-
|> render_click()
801+
# Verify project is added
802+
assert view
803+
|> has_element?(
804+
"#remove-project-credential-button-#{credential.id}-#{project.id}"
805+
)
806806

807807
view |> form("#credential-form-#{credential.id}") |> render_submit()
808808

@@ -928,18 +928,19 @@ defmodule LightningWeb.CredentialLiveTest do
928928
|> element("#project-credentials-list-#{credential.id}")
929929
|> render_change(%{"project_id" => project.id})
930930

931-
html =
932-
view
933-
|> element("#add-project-credential-button-#{credential.id}")
934-
|> render_click()
931+
html = view |> render()
935932

936933
assert html =~ project.name,
937934
"adding an existing project doesn't break anything"
938935

939-
assert view |> delete_credential_button(project.id) |> has_element?()
936+
# Verify the project is added to the credential's projects list
937+
assert view
938+
|> has_element?(
939+
"#remove-project-credential-button-#{credential.id}-#{project.id}"
940+
),
941+
"project should be added to credential's projects list"
940942

941943
# Let's remove the project and add it back again
942-
943944
view
944945
|> delete_credential_button(project.id)
945946
|> render_click()
@@ -952,12 +953,11 @@ defmodule LightningWeb.CredentialLiveTest do
952953
|> element("#project-credentials-list-#{credential.id}")
953954
|> render_change(%{"project_id" => project.id})
954955

955-
view
956-
|> element("#add-project-credential-button-#{credential.id}")
957-
|> render_click()
958-
959-
assert view |> delete_credential_button(project.id) |> has_element?(),
960-
"project is added back"
956+
assert view
957+
|> has_element?(
958+
"#remove-project-credential-button-#{credential.id}-#{project.id}"
959+
),
960+
"project should be added back to credential's projects list"
961961

962962
view |> form("#credential-form-#{credential.id}") |> render_submit()
963963

@@ -1299,10 +1299,6 @@ defmodule LightningWeb.CredentialLiveTest do
12991299
view
13001300
|> element("#project-credentials-list-new")
13011301
|> render_change(%{"project_id" => project.id})
1302-
1303-
view
1304-
|> element("#add-project-credential-button-new", "Add")
1305-
|> render_click()
13061302
end)
13071303

13081304
view

0 commit comments

Comments
 (0)