master
 1require "rails_helper"
 2
 3describe My::PasswordsController do
 4  describe "#update" do
 5    context "when not logged in" do
 6      let(:user) { create(:user) }
 7
 8      it "redirects you to the login page" do
 9        put :update, params: { id: user.id }
10        expect(response).to redirect_to(login_path)
11      end
12    end
13
14    context "when logged in" do
15      let(:user) { create(:user) }
16
17      before { http_login(user) }
18
19      context "when the new password and the confirmation password does not match" do
20        before :each do
21          put :update, params: {
22            id: user.id,
23            user: {
24              password: "foobar",
25              password_confirmation: "barfoo"
26            }
27          }
28        end
29
30        it "displays an error on the page" do
31          error_message = I18n.t("my.passwords.passwords_do_not_match")
32          expect(flash[:error]).to eql(error_message)
33        end
34
35        it "renders the show template" do
36          expect(response).to render_template(:index)
37        end
38      end
39
40      context "when the password and confirmation match" do
41        let(:new_password) { "booyakasham" }
42
43        before :each do
44          put :update, params: {
45            id: user.id,
46            user: {
47              password: new_password,
48              password_confirmation: new_password
49            }
50          }
51        end
52
53        it "updates the users password" do
54          expect(user.reload.authenticate(new_password)).to be_truthy
55        end
56      end
57    end
58  end
59
60  describe "#index" do
61    context "when logged in" do
62      let(:user) { create(:user) }
63
64      before :each do
65        http_login(user)
66        get :index
67      end
68
69      context "when displaying a form to change the current password" do
70        it "loads the user" do
71          expect(assigns(:user)).to eql(user)
72        end
73      end
74    end
75  end
76end