Skip to content

Commit

Permalink
User signup complete
Browse files Browse the repository at this point in the history
  • Loading branch information
MrEdwardo committed Jul 17, 2011
1 parent 230d5fe commit 009dcb1
Show file tree
Hide file tree
Showing 9 changed files with 204 additions and 3 deletions.
2 changes: 1 addition & 1 deletion I_AM_HERE.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
7.2.4 An Authentication method
8.4.1 integration tests with style
12 changes: 12 additions & 0 deletions app/controllers/users_controller.rb
Original file line number Diff line number Diff line change
@@ -1,11 +1,23 @@
class UsersController < ApplicationController

def new
@user = User.new
@title = "Sign up"
end

def show
@user = User.find(params[:id])
@title = @user.name
end

def create
@user = User.new(params[:user])
if @user.save
flash[:success] = "Welcome to the Sample App!"
redirect_to @user
else
@title = "Sign up"
render 'new'
end
end
end
3 changes: 3 additions & 0 deletions app/views/layouts/application.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,9 @@
<div class="container">
<%= render 'layouts/header' %>
<section class="round">
<% flash.each do |key, value| %>
<div class="flash" <%= key %>"><%= value %></div>
<% end %>
<%= yield %>
</section>
<%= render 'layouts/footer' %>
Expand Down
12 changes: 12 additions & 0 deletions app/views/shared/_error_messages.html.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<% if @user.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@user.errors.count, "error") %>
prohibited this user from being saved:</h2>
<p>There were problems with the following fields:</p>
<ul>
<% @user.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
26 changes: 24 additions & 2 deletions app/views/users/new.html.erb
Original file line number Diff line number Diff line change
@@ -1,2 +1,24 @@
<h1>Users#new</h1>
<p>Find me in app/views/users/new.html.erb</p>
<h1>Sign up</h1>

<%= form_for(@user) do |f| %>
<%= render 'shared/error_messages' %>
<div class="field">
<%= f.label :name %><br />
<%= f.text_field :name %>
</div>
<div class="field">
<%= f.label :email %><br />
<%= f.text_field :email %>
</div>
<div class="field">
<%= f.label :password %><br />
<%= f.password_field :password %>
</div>
<div class="field">
<%= f.label :password_confirmation, "Confirmation" %><br />
<%= f.password_field :password_confirmation %>
</div>
<div class="actions">
<%= f.submit "Sign up" %>
</div>
<% end %>
45 changes: 45 additions & 0 deletions public/stylesheets/custom.css
Original file line number Diff line number Diff line change
Expand Up @@ -137,3 +137,48 @@ td.sidebar {
border: 1px solid #999;
margin-bottom: -15px;
}

div.field, div.actions {
margin-bottom: 10px;
}

.field_with_errors {
margin-top: 10px;
padding: 2px;
background-color: red;
display: table;
}

.field_with_errors label {
color: #fff;
}

#error_explanation {
width: 400px;
border: 2px solid red;
padding: 7px;
padding-bottom: 12px;
margin-bottom: 20px;
background-color: #f0f0f0;
}

#error_explanation h2 {
text-align: left;
font-weight: bold;
padding: 5px 5px 5px 15px;
font-size: 12px;
margin: -7px;
background-color: #c00;
color: #fff;
}

#error_explanation p {
color: #333;
margin-bottom: 0;
padding: 5px;
}

#error_explanation ul li {
font-size: 12px;
list-style: square;
}
51 changes: 51 additions & 0 deletions spec/controllers/users_controller_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -46,4 +46,55 @@
response.should have_selector("title", :content => "Sign up")
end
end


describe "POST 'create'" do

describe "failure" do

before(:each) do
@attr = { :name => "", :email => "", :password => "",
:password_confirmation => "" }
end

it "should not create a user" do
lambda do
post :create, :user => @attr
end.should_not change(User, :count)
end

it "should have the right title" do
post :create, :user => @attr
response.should have_selector("title", :content => "Sign up")
end

it "should render the 'new' page" do
post :create, :user => @attr
response.should render_template('new')
end
end

describe "success" do
before(:each) do
@attr = { :name => "New User", :email => "[email protected]",
:password => "foobar", :password_confirmation => "foobar" }
end

it "should create a user" do
lambda do
post :create, :user => @attr
end.should change(User, :count).by(1)
end

it "should redirect to the user show page" do
post :create, :user => @attr
response.should redirect_to(user_path(assigns(:user)))
end

it "should have a welcome message" do
post :create, :user => @attr
flash[:success].should =~ /welcome to the sample app/i
end
end
end
end
40 changes: 40 additions & 0 deletions spec/requests/users_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
require 'spec_helper'

describe "Users" do

describe "signup" do

describe "failure" do

it "should not make a new user" do
lambda do
visit signup_path
fill_in "Name", :with => ""
fill_in "Email", :with => ""
fill_in "Password", :with => ""
fill_in "Confirmation", :with => ""
click_button
response.should render_template('users/new')
response.should have_selector("div#error_explanation")
end.should_not change(User, :count)
end
end

describe "success" do

it "should make a new user" do
lambda do
visit signup_path
fill_in "Name", :with => "Example User101"
fill_in "Email", :with => "[email protected]"
fill_in "Password", :with => "foobar"
fill_in "Confirmation", :with => "foobar"
click_button
response.should have_selector("div.flash.success",
:content => "Welcome")
response.should render_template('users/show')
end.should change(User, :count).by(1)
end
end
end
end
16 changes: 16 additions & 0 deletions webrat.log
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# Logfile created on 2011-07-17 21:47:19 +0100 by logger.rb/25413
REQUESTING PAGE: GET /signup with {} and HTTP headers {}
REQUESTING PAGE: POST /users with {"utf8"=>"\xE2\x9C\x93", "user"=>{"name"=>"", "email"=>"", "password"=>"", "password_confirmation"=>""}, "commit"=>"Sign up"} and HTTP headers {"HTTP_REFERER"=>"/signup"}
REQUESTING PAGE: GET /signup with {} and HTTP headers {}
REQUESTING PAGE: POST /users with {"utf8"=>"\xE2\x9C\x93", "user"=>{"name"=>"Example User", "email"=>"[email protected]", "password"=>"foobar", "password_confirmation"=>"foobar"}, "commit"=>"Sign up"} and HTTP headers {"HTTP_REFERER"=>"/signup"}
REQUESTING PAGE: GET http://www.example.com/users/1 with {} and HTTP headers {"HTTP_REFERER"=>"/users"}
REQUESTING PAGE: GET /signup with {} and HTTP headers {}
REQUESTING PAGE: POST /users with {"utf8"=>"\xE2\x9C\x93", "user"=>{"name"=>"", "email"=>"", "password"=>"", "password_confirmation"=>""}, "commit"=>"Sign up"} and HTTP headers {"HTTP_REFERER"=>"/signup"}
REQUESTING PAGE: GET /signup with {} and HTTP headers {}
REQUESTING PAGE: POST /users with {"utf8"=>"\xE2\x9C\x93", "user"=>{"name"=>"Example User101", "email"=>"[email protected]", "password"=>"foobar", "password_confirmation"=>"foobar"}, "commit"=>"Sign up"} and HTTP headers {"HTTP_REFERER"=>"/signup"}
REQUESTING PAGE: GET http://www.example.com/users/1 with {} and HTTP headers {"HTTP_REFERER"=>"/users"}
REQUESTING PAGE: GET /signup with {} and HTTP headers {}
REQUESTING PAGE: POST /users with {"utf8"=>"\xE2\x9C\x93", "user"=>{"name"=>"", "email"=>"", "password"=>"", "password_confirmation"=>""}, "commit"=>"Sign up"} and HTTP headers {"HTTP_REFERER"=>"/signup"}
REQUESTING PAGE: GET /signup with {} and HTTP headers {}
REQUESTING PAGE: POST /users with {"utf8"=>"\xE2\x9C\x93", "user"=>{"name"=>"Example User101", "email"=>"[email protected]", "password"=>"foobar", "password_confirmation"=>"foobar"}, "commit"=>"Sign up"} and HTTP headers {"HTTP_REFERER"=>"/signup"}
REQUESTING PAGE: GET http://www.example.com/users/1 with {} and HTTP headers {"HTTP_REFERER"=>"/users"}

0 comments on commit 009dcb1

Please sign in to comment.