Skip to content

Commit 47c7c25

Browse files
authored
Merge pull request #6529 from AudTheCodeWitch/acook/6527/fix-broken-change-password-button
Fix All CASA Admin "Change Password" button
2 parents 9a0e664 + ea8249e commit 47c7c25

File tree

4 files changed

+135
-2
lines changed

4 files changed

+135
-2
lines changed

app/views/all_casa_admins/edit.html.erb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,13 @@
1919

2020
<div class="actions">
2121
<%= form.button "Update Profile", type: "submit", class: "main-btn primary-btn btn-hover" %>
22-
<button class="main-btn primary-btn btn-hover" id="accordionExample" type="button" data-toggle="collapse" data-target="#collapseOne" aria-expanded="true" aria-controls="collapseOne">
22+
<button class="main-btn primary-btn btn-hover" type="button" data-bs-toggle="collapse" data-bs-target="#collapseOne" aria-expanded="false" aria-controls="collapseOne">
2323
Change Password
2424
</button>
2525
</div>
2626
<% end %>
2727
<br>
28-
<div id="collapseOne" class="collapse" aria-labelledby="headingOne" data-parent="#accordionExample">
28+
<div id="collapseOne" class="collapse" aria-labelledby="headingOne">
2929
<%= form_with(model: @user, scope: :all_casa_admin, url: {action: "update_password"}, method: :patch) do |f| %>
3030
<div class="input-style-1">
3131
<%= f.label :password, "Password" %><br>
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
# frozen_string_literal: true
2+
3+
require "rails_helper"
4+
5+
RSpec.describe "AllCasaAdmin edit page", type: :system do
6+
let(:admin) { create(:all_casa_admin) }
7+
8+
before do
9+
sign_in admin
10+
visit edit_all_casa_admins_path
11+
end
12+
13+
it "shows the password section only after clicking 'Change Password'", :aggregate_failures, :js do
14+
expect_password_section_hidden
15+
16+
# Click the Change Password button
17+
click_button "Change Password"
18+
19+
# Password section should now be visible
20+
expect_password_section_visible
21+
end
22+
23+
private
24+
25+
def expect_password_section_hidden
26+
expect(page).to have_selector("#collapseOne.collapse:not(.show)", visible: :all)
27+
end
28+
29+
def expect_password_section_visible
30+
expect(page).to have_selector("#collapseOne.collapse.show")
31+
expect(page).to have_field("all_casa_admin[password]")
32+
expect(page).to have_field("all_casa_admin[password_confirmation]")
33+
expect(page).to have_button("Update Password")
34+
end
35+
end
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
# frozen_string_literal: true
2+
3+
require "rails_helper"
4+
5+
RSpec.describe "AllCasaAdmin password change", type: :system do
6+
let(:admin) { create(:all_casa_admin, email: "[email protected]", password: "12345678") }
7+
8+
before do
9+
sign_in admin
10+
visit edit_all_casa_admins_path
11+
click_button "Change Password"
12+
end
13+
14+
it "shows error when password fields are blank", :aggregate_failures, :js do
15+
click_button "Update Password"
16+
expect(page).to have_selector("#error_explanation.alert")
17+
expect(page).to have_text("Password can't be blank")
18+
end
19+
20+
it "shows error when password confirmation doesn't match", :aggregate_failures, :js do
21+
fill_in "all_casa_admin[password]", with: "newpassword"
22+
fill_in "all_casa_admin[password_confirmation]", with: "wrongconfirmation"
23+
click_button "Update Password"
24+
expect(page).to have_selector("#error_explanation.alert")
25+
expect(page).to have_text("Password confirmation doesn't match Password")
26+
end
27+
28+
it "shows success flash when password is updated", :aggregate_failures, :js do
29+
fill_in "all_casa_admin[password]", with: "newpassword"
30+
fill_in "all_casa_admin[password_confirmation]", with: "newpassword"
31+
click_button "Update Password"
32+
expect(page).to have_selector(".header-flash")
33+
expect(page).to have_text("Password was successfully updated.")
34+
end
35+
end
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
# frozen_string_literal: true
2+
3+
require "rails_helper"
4+
5+
RSpec.describe "all_casa_admins/edit", type: :view do
6+
let(:user) { build_stubbed(:all_casa_admin) }
7+
8+
before do
9+
assign(:user, user)
10+
render
11+
end
12+
13+
it "renders the edit profile form", :aggregate_failures do
14+
expect(rendered).to have_selector("form[action='#{all_casa_admins_path}'][method='post']")
15+
expect(rendered).to have_field("all_casa_admin[email]")
16+
expect(rendered).to have_button("Update Profile")
17+
end
18+
19+
it "renders the change password collapse section, hidden by default", :aggregate_failures do
20+
expect(rendered).to have_selector("#collapseOne.collapse")
21+
expect(rendered).not_to include('class="collapse show"')
22+
expect(rendered).to have_field("all_casa_admin[password]")
23+
expect(rendered).to have_field("all_casa_admin[password_confirmation]")
24+
expect(rendered).to have_button("Update Password")
25+
end
26+
27+
context "when there are error and flash messages" do
28+
before do
29+
user.errors.add(:email, "can't be blank")
30+
flash[:notice] = "Profile updated"
31+
render
32+
end
33+
34+
it "renders error and flash messages partials", :aggregate_failures do
35+
expect(rendered).to have_selector("#error_explanation.alert")
36+
expect(rendered).to have_text("can't be blank")
37+
expect(rendered).to have_selector(".header-flash")
38+
expect(rendered).to have_text("Profile updated")
39+
end
40+
end
41+
42+
context "when submitting the password change form" do
43+
before do
44+
sign_in user
45+
assign(:user, user)
46+
render
47+
end
48+
49+
it "shows error when password fields are blank", :aggregate_failures do
50+
user.errors.add(:password, "can't be blank")
51+
render
52+
expect(rendered).to have_selector("#error_explanation.alert")
53+
expect(rendered).to have_text("can't be blank")
54+
end
55+
56+
it "shows error when password confirmation does not match", :aggregate_failures do
57+
user.errors.add(:password_confirmation, "doesn't match Password")
58+
render
59+
expect(rendered).to have_selector("#error_explanation.alert")
60+
expect(rendered).to have_text("doesn't match Password")
61+
end
62+
end
63+
end

0 commit comments

Comments
 (0)