Merge branch 'atomaka/feature/flash-messages' into 'master'

Add flash notices

Add ability to serve flash messages and add them for sign in, sign out, and sign up.

See merge request !6
This commit is contained in:
Andrew Tomaka 2015-07-10 16:46:31 -04:00
commit dd69e9a89b
9 changed files with 84 additions and 6 deletions

View file

@ -11,9 +11,9 @@ class UserSessionsController < ApplicationController
if authenticate_user?(user) if authenticate_user?(user)
create_user_session(user) create_user_session(user)
redirect_to root_path redirect_to root_path, notice: 'You have been logged in!'
else else
render :new redirect_to signin_path, alert: 'Username or password was incorrect!'
end end
end end
@ -21,7 +21,7 @@ class UserSessionsController < ApplicationController
cookies.permanent[:user_session] = nil cookies.permanent[:user_session] = nil
current_session.destroy if current_session current_session.destroy if current_session
redirect_to root_path redirect_to root_path, notice: 'You have been logged out!'
end end
private private

View file

@ -7,7 +7,7 @@ class UsersController < ApplicationController
@user = User.new(user_params) @user = User.new(user_params)
if @user.save if @user.save
redirect_to signin_path redirect_to signin_path, notice: 'Your user account has been created'
else else
render :new render :new
end end

View file

@ -1,2 +1,16 @@
module ApplicationHelper module ApplicationHelper
def bootstrap_class_for(flash_type)
bootstrap_classes[flash_type] || flash_type.to_s
end
private
def bootstrap_classes
{
'alert' => 'alert-warning',
'error' => 'alert-danger',
'notice' => 'alert-info',
'success' => 'alert-success'
}
end
end end

View file

@ -0,0 +1,5 @@
.alert.slide.up class=bootstrap_class_for(type)
button.close type='button' data-dismiss='alert'
span aria-hidden='true' &times;
span.sr-only Close
= message

View file

@ -0,0 +1,2 @@
- flash.each do |type, message|
= render 'flash_message', type: type, message: message

View file

@ -8,6 +8,8 @@ html
body body
== render 'navbar' == render 'navbar'
.container
== render 'flash_messages'
.container-fluid .container-fluid
= yield = yield

View file

@ -42,6 +42,12 @@ describe UserSessionsController, type: :controller do
expect(response).to redirect_to(root_path) expect(response).to redirect_to(root_path)
end end
it 'should send notice' do
post :create, user_session: data
expect(flash[:notice]).to be_present
end
end end
context 'with invalid credentials' do context 'with invalid credentials' do
@ -61,12 +67,20 @@ describe UserSessionsController, type: :controller do
end.to change(UserSession, :count).by(0) end.to change(UserSession, :count).by(0)
end end
it 'should render :new' do it 'should redirect to login page' do
data['username'] = '' data['username'] = ''
post :create, user_session: data post :create, user_session: data
expect(response).to render_template(:new) expect(response).to redirect_to signin_path
end
it 'should send an error flash message' do
data['username'] = ''
post :create, user_session: data
expect(flash[:alert]).to be_present
end end
end end
end end
@ -104,6 +118,12 @@ describe UserSessionsController, type: :controller do
expect(response).to redirect_to(root_path) expect(response).to redirect_to(root_path)
end end
it 'should send a notice' do
delete :destroy
expect(flash[:notice]).to be_present
end
end end
end end
end end

View file

@ -34,6 +34,12 @@ describe UsersController, type: :controller do
expect(response).to redirect_to signin_path expect(response).to redirect_to signin_path
end end
it 'should send a notice flash message' do
post :create, user: data
expect(flash[:notice]).to be_present
end
end end
context 'with invalid data' do context 'with invalid data' do

View file

@ -0,0 +1,29 @@
require 'rails_helper'
describe ApplicationHelper do
describe '#bootstrap_class_for' do
context 'when known flash_type' do
it 'should return the appropriate class for the alert flash_type' do
expect(helper.bootstrap_class_for('alert')).to eq('alert-warning')
end
it 'should return the appropriate class for the error flash_type' do
expect(helper.bootstrap_class_for('error')).to eq('alert-danger')
end
it 'should return the appropriate class for the notice flash_type' do
expect(helper.bootstrap_class_for('notice')).to eq('alert-info')
end
it 'should return the appropriate class for the success flash_type' do
expect(helper.bootstrap_class_for('success')).to eq('alert-success')
end
end
context 'when unknown flash_type' do
it 'should return the class as the flash_type that was given' do
expect(helper.bootstrap_class_for('test')).to eq('test')
end
end
end
end