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

View file

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

View file

@ -1,2 +1,16 @@
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

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
== render 'navbar'
.container
== render 'flash_messages'
.container-fluid
= yield

View file

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

View file

@ -34,6 +34,12 @@ describe UsersController, type: :controller do
expect(response).to redirect_to signin_path
end
it 'should send a notice flash message' do
post :create, user: data
expect(flash[:notice]).to be_present
end
end
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