Skip to content

Commit

Permalink
Added initial features tests
Browse files Browse the repository at this point in the history
  • Loading branch information
bimovidia committed Apr 2, 2014
1 parent a11013c commit eb9c472
Show file tree
Hide file tree
Showing 22 changed files with 319 additions and 33 deletions.
2 changes: 2 additions & 0 deletions Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,11 @@ group :test do
gem 'factory_girl_rails'
gem 'forgery'
gem 'capybara'
gem 'selenium-webdriver'
gem 'database_cleaner'
gem 'rack_session_access'
gem 'mocha', require: false
gem 'zeus', require: false
end

group :development do
Expand Down
15 changes: 15 additions & 0 deletions Gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,8 @@ GEM
rack (>= 1.0.0)
rack-test (>= 0.5.4)
xpath (~> 2.0)
childprocess (0.5.1)
ffi (~> 1.0, >= 1.0.11)
coderay (1.1.0)
coffee-rails (4.0.1)
coffee-script (>= 2.2.0)
Expand Down Expand Up @@ -115,6 +117,7 @@ GEM
faye-websocket (0.7.2)
eventmachine (>= 0.12.0)
websocket-driver (>= 0.3.1)
ffi (1.9.3)
font-awesome-rails (4.0.3.1)
railties (>= 3.2, < 5.0)
forgery (0.5.0)
Expand All @@ -133,6 +136,7 @@ GEM
mime-types (~> 1.16)
treetop (~> 1.4.8)
metaclass (0.0.4)
method_source (0.8.2)
mime-types (1.25.1)
mini_portile (0.5.3)
minitest (4.7.5)
Expand Down Expand Up @@ -200,6 +204,7 @@ GEM
rspec-core (~> 2.14.0)
rspec-expectations (~> 2.14.0)
rspec-mocks (~> 2.14.0)
rubyzip (1.1.0)
safe_yaml (1.0.1)
sass (3.2.18)
sass-rails (4.0.2)
Expand All @@ -210,6 +215,11 @@ GEM
sdoc (0.4.0)
json (~> 1.8)
rdoc (~> 4.0, < 5.0)
selenium-webdriver (2.39.0)
childprocess (>= 0.2.5)
multi_json (~> 1.0)
rubyzip (~> 1.0)
websocket (~> 1.0.4)
sprockets (2.11.0)
hike (~> 1.2)
multi_json (~> 1.0)
Expand Down Expand Up @@ -246,10 +256,13 @@ GEM
uglifier (2.5.0)
execjs (>= 0.3.0)
json (>= 1.8.0)
websocket (1.0.7)
websocket-driver (0.3.2)
xpath (2.0.0)
nokogiri (~> 1.3)
yui-compressor (0.12.0)
zeus (0.13.3)
method_source (>= 0.6.7)

PLATFORMS
ruby
Expand Down Expand Up @@ -280,8 +293,10 @@ DEPENDENCIES
rspec-rails
sass-rails (~> 4.0.0)
sdoc
selenium-webdriver
therubyracer
thin
turbolinks
uglifier (>= 1.0.3)
yui-compressor
zeus
12 changes: 10 additions & 2 deletions app/controllers/application_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,16 @@ def user_signed_in?
!!session[:user]
end

rescue_from PivotalTracker::Client::NoToken do |exception|
def rescue_steps(message)
reset_session
redirect_to login_path, alert: t('flashes.sessions.signin')
redirect_to login_path, alert: message
end

rescue_from PivotalTracker::Client::NoToken do |exception|
rescue_steps t('flashes.sessions.token')
end

rescue_from RestClient::Unauthorized do |exception|
rescue_steps t('flashes.sessions.unauthorized')
end
end
11 changes: 3 additions & 8 deletions app/controllers/sessions_controller.rb
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
class SessionsController < ApplicationController
rescue_from RestClient::Unauthorized, with: :login_redirect

def new
redirect_to :root if user_signed_in?
Expand All @@ -16,13 +15,13 @@ def create

redirect_to :root, notice: t('flashes.sessions.success')
else
login_redirect
redirect_to :login, alert: t('flashes.sessions.failed')
end
end

def destroy
reset_session
redirect_to login_path, notice: t('flashes.sessions.destroy')
redirect_to :login, notice: t('flashes.sessions.destroy')
end

private
Expand All @@ -32,8 +31,4 @@ def session_params
:username, :password
)
end

def login_redirect
redirect_to login_path, alert: t('flashes.sessions.failed')
end
end
end
4 changes: 4 additions & 0 deletions app/helpers/application_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -39,4 +39,8 @@ def encoded_user
Base64.strict_encode64(current_user[:username])
end

def comma_separated(array)
array.split(',').join(', ')
end

end
6 changes: 3 additions & 3 deletions app/views/application/_authenticated.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
<i class="fa fa-circle-o fa-stack-2x"></i>
<i class="fa fa-heart fa-stack-1x"></i>
</span>
Planning<span>Poker</span>
<%= t('planning') %><span><%= t('poker') %></span>
</h1>
<div id="header-links" class="text-right col-md-2">
<%= link_to logout_path, method: :delete, class: 'white header-links' do %>
Expand All @@ -25,8 +25,8 @@
<div class="text-center default-state">
<span class="fa fa-rocket"></span>
<h2>
You do not own or have any projects assigned.
<small>Please create a project in Pivotal Tracker first!</small>
<%= t('dashboard.empty.title') %>
<small><%= t('dashboard.empty.subtitle') %></small>
</h2>
</div>
</div>
Expand Down
2 changes: 1 addition & 1 deletion app/views/application/_unauthenticated.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
<i class="fa fa-circle-o fa-stack-2x green"></i>
<i class="fa fa-heart fa-stack-1x"></i>
</span>
Planning<span>Poker</span>
<%= t('planning') %><span><%= t('poker') %></span>
</h1>
</div>
</div>
Expand Down
4 changes: 2 additions & 2 deletions app/views/dashboard/stories/_project.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@
<%= t('projects.labels') %>
</div>
<div class="col-md-8">
<%= project.labels.split(',').join(', ') %>
<%= comma_separated project.labels %>
</div>
</div>
</li>
Expand All @@ -50,7 +50,7 @@
<%= t('projects.scale') %>
</div>
<div class="col-md-8">
<%= project.point_scale.split(',').join(', ') %>
<%= comma_separated project.point_scale %>
</div>
</div>
</li>
Expand Down
19 changes: 14 additions & 5 deletions config/locales/en.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ en:
editable: "Editable"
na: "N/A"
owner: "Owner"
planning: "Planning"
poker: "Poker"
reset: "Reset"
requester: "Requester"
reveal: "Reveal"
Expand All @@ -13,6 +15,11 @@ en:
story: "Story"
unestimated: "Unestimated"

dashboard:
empty:
title: "You do not own or have any projects assigned."
subtitle: "Please create a project in Pivotal Tracker first!"

projects:
id: "Project ID"
info: "Project Info"
Expand All @@ -31,11 +38,13 @@ en:
# Flashes
flashes:
sessions:
destroy: "You have successfully logged out"
expired: "Your session has expired"
failed: "Invalid username or password"
signin: "You will need to sign in first"
success: "You have successfully logged in"
destroy: "You have successfully logged out"
expired: "Your session has expired"
failed: "Invalid username or password"
token: "Your API Key / Token is not yet set up. Please set one up in Pivotal Tracker!"
signin: "You will need to sign in first"
success: "You have successfully logged in"
unauthorized: "No API Key / Token found. Please re-login!"

stories:
update: "Story ID#%{id} has been updated successfully"
14 changes: 7 additions & 7 deletions spec/factories.rb
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
FactoryGirl.define do

factory :user do
username { Forgery(:internet).email_address }
password { Forgery(:basic).encrypt }
salt { Forgery(:basic).encrypt }
token { Forgery(:basic).encrypt }
username { Forgery::Internet.email_address }
password { Forgery::Basic.encrypt }
salt { Forgery::Basic.encrypt }
token { Forgery::Basic.encrypt }
end

factory :vote do
user Forgery(:internet).email_address
story_id Forgery(:basic).number(at_least: 1, at_most: 20)
vote Forgery(:basic).number(at_least: 1, at_most: 5)
user Forgery::Internet.email_address
story_id Forgery::Basic.number(at_least: 1, at_most: 20)
vote Forgery::Basic.number(at_least: 1, at_most: 5)
end

end
34 changes: 34 additions & 0 deletions spec/features/dashboard/projects_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
require 'spec_helper'

describe 'Dashboard::Projects' do
before { skip_authentication(DashboardController) }

context 'empty' do
before do
stub_projects
visit root_path
end

specify { page.should have_content t('dashboard.empty.title') }
specify { page.should have_content t('dashboard.empty.subtitle') }
end

context 'projects' do
let(:projects) { (1..5).map { |i| init_object(project_params) }}
let(:project) { projects.first }

before do
stub_projects(projects)
stub_stories(project)
visit root_path
end

specify { project_nodes.size.should eq 5}
specify { story_nodes.size.should eq 10}
specify { page.should have_content project.name }
specify { page.should have_content project.velocity_scheme }
specify { page.should have_content project.labels.split(',').join(', ') }
specify { page.should have_content project.point_scale.split(',').join(', ') }
end

end
40 changes: 40 additions & 0 deletions spec/features/sessions/exceptions_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
require 'spec_helper'

describe 'Sessions::Exceptions' do
let(:user) { FactoryGirl.create(:user) }

context 'unauthenticated' do
before { visit root_path }

specify { current_path.should eq login_path }
specify { page.should have_content t('flashes.sessions.expired') }
end

context 'no token' do
before do
PivotalTracker::Client.stubs(:token).raises(
PivotalTracker::Client::NoToken
)

login
end

specify { page.should have_content t('flashes.sessions.token') }
end

context 'rest client unauthorized' do
before do
skip_authentication(DashboardController)

PivotalTracker::Project.stubs(:all).raises(
RestClient::Unauthorized
)

visit root_path
end

specify { current_path.should eq login_path }
specify { page.should have_content t('flashes.sessions.unauthorized') }
end

end
30 changes: 30 additions & 0 deletions spec/features/sessions/login_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
require 'spec_helper'

describe 'Sessions::Login' do
let(:user) { FactoryGirl.create(:user) }

context 'success' do
before do
stub_user(user)
stub_projects
login
end

specify { page.should have_content t('flashes.sessions.success') }
end

context 'failure' do
before do
stub_user
stub_projects
end

context 'login' do
before { login }

specify { current_path.should eq login_path }
specify { page.should have_content t('flashes.sessions.failed') }
end
end

end
16 changes: 16 additions & 0 deletions spec/features/sessions/logout_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
require 'spec_helper'

describe 'Sessions::Logout' do
before { skip_authentication(DashboardController) }

context 'success' do
before do
stub_projects
visit root_path
logout
end

specify { page.should have_content t('flashes.sessions.destroy') }
end

end
6 changes: 6 additions & 0 deletions spec/helpers/application_helper_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -13,4 +13,10 @@
helper.layout_class.should eq 'unauthenticated'
end
end

context '#comma_separated' do
it 'should return comma separated words' do
helper.comma_separated((1..5).to_a).should eq '1, 2, 3, 4, 5'
end
end
end
Loading

0 comments on commit eb9c472

Please sign in to comment.