From 9362931672daa2351229a4e2ba294f50a9c04b15 Mon Sep 17 00:00:00 2001 From: Fernando Castellanos Date: Wed, 4 Sep 2013 22:48:41 -0500 Subject: [PATCH 01/26] Styling code --- app/controllers/events_controller.rb | 16 +++++++++------- app/views/events/_event.html.haml | 4 ++-- app/views/home/show.html.haml | 2 +- config/routes.rb | 2 +- 4 files changed, 13 insertions(+), 11 deletions(-) diff --git a/app/controllers/events_controller.rb b/app/controllers/events_controller.rb index 69c0710..30dfdc9 100644 --- a/app/controllers/events_controller.rb +++ b/app/controllers/events_controller.rb @@ -20,12 +20,15 @@ def create def update @event = Event.find(params[:id]) + if @event.update_attributes(@params) - flash[:notice] = "Event updated successfully" + flash[:notice] = "Event updated successfully" + redirect_to events_path else - flash[:notice] = "Event wasn't updated as expected" - redirect_to :back + flash[:notice] = "Event wasn't updated as expected" + + redirect_to :back end end @@ -33,13 +36,12 @@ def destroy end private + def event_params @params = params.require(:event).permit(:name, :details, :location) end def find_event - @event = Event.find(params[:id]) - end - - + @event = Event.find(params[:id]) + end end diff --git a/app/views/events/_event.html.haml b/app/views/events/_event.html.haml index c1c0186..9163bb8 100644 --- a/app/views/events/_event.html.haml +++ b/app/views/events/_event.html.haml @@ -2,14 +2,14 @@ .name = event.name %span - %em + %em created by: = event.user_id publish date: = event.created_at.strftime('%y/%d/%m') .details = event.details - + = link_to 'Edit', edit_event_path(event) = link_to 'Show', event_path(event) = link_to 'Back', events_path diff --git a/app/views/home/show.html.haml b/app/views/home/show.html.haml index 6c8fdc8..51d8000 100644 --- a/app/views/home/show.html.haml +++ b/app/views/home/show.html.haml @@ -1,2 +1,2 @@ %h1 Hackd.mx -%p This is a dummy home page +%p This is a dummy home page diff --git a/config/routes.rb b/config/routes.rb index 6127559..289f48f 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,6 +1,6 @@ Hackd::Application.routes.draw do - scope :auth do + scope :auth do get 'github/callback'=> 'sessions#create' end From 597596c69d3033b3098948c9d88a15e8a3e8b490 Mon Sep 17 00:00:00 2001 From: Fernando Castellanos Date: Wed, 4 Sep 2013 23:13:32 -0500 Subject: [PATCH 02/26] Fix to be able to render new event form --- app/controllers/events_controller.rb | 1 + app/views/events/_form.html.haml | 1 + 2 files changed, 2 insertions(+) diff --git a/app/controllers/events_controller.rb b/app/controllers/events_controller.rb index 30dfdc9..22129bc 100644 --- a/app/controllers/events_controller.rb +++ b/app/controllers/events_controller.rb @@ -7,6 +7,7 @@ def index end def new + @event = Event.new end def edit diff --git a/app/views/events/_form.html.haml b/app/views/events/_form.html.haml index 08cf8cd..41d3d33 100644 --- a/app/views/events/_form.html.haml +++ b/app/views/events/_form.html.haml @@ -1,4 +1,5 @@ = render partial: 'layouts/error_messages', locals: { resource: @event} + = form_for @event do |f| = f.label :name = f.text_field :name From c3a242e8e20b829dbb1c79d84278e4678670efca Mon Sep 17 00:00:00 2001 From: Fernando Castellanos Date: Thu, 5 Sep 2013 10:10:45 -0500 Subject: [PATCH 03/26] Add and configure fabrication gem --- Gemfile | 1 + Gemfile.lock | 2 ++ config/initializers/fabrication.rb | 5 +++++ 3 files changed, 8 insertions(+) create mode 100644 config/initializers/fabrication.rb diff --git a/Gemfile b/Gemfile index 63c6216..fba1826 100644 --- a/Gemfile +++ b/Gemfile @@ -19,6 +19,7 @@ group :development, :test do gem 'rspec-rails', '~> 2.0' gem 'capybara-webkit' gem 'capybara' + gem 'fabrication' end group :development do diff --git a/Gemfile.lock b/Gemfile.lock index b559923..503dbf5 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -50,6 +50,7 @@ GEM erubis (2.7.0) execjs (1.4.0) multi_json (~> 1.0) + fabrication (2.8.0) faraday (0.8.8) multipart-post (~> 1.2.0) git-pair (0.1.0) @@ -180,6 +181,7 @@ DEPENDENCIES capybara capybara-webkit coffee-rails (~> 4.0.0) + fabrication git-pair haml-rails (~> 0.4) httparty diff --git a/config/initializers/fabrication.rb b/config/initializers/fabrication.rb new file mode 100644 index 0000000..0eb0711 --- /dev/null +++ b/config/initializers/fabrication.rb @@ -0,0 +1,5 @@ +Fabrication.configure do |config| + config.fabricator_path = 'spec/fabricators' + config.path_prefix = Rails.root + config.sequence_start = 10000 +end \ No newline at end of file From cc56c09e14b61a3beb61f2b84e06bea61f63438a Mon Sep 17 00:00:00 2001 From: Fernando Castellanos Date: Mon, 16 Sep 2013 08:40:28 -0700 Subject: [PATCH 04/26] Create specs for events_controller and event model - Create fabricator for event model --- spec/controllers/events_controller_spec.rb | 54 +++++++++++++++++++++- spec/fabricators/event_fabricator.rb | 4 ++ spec/models/event_spec.rb | 26 ++++++++++- 3 files changed, 82 insertions(+), 2 deletions(-) create mode 100644 spec/fabricators/event_fabricator.rb diff --git a/spec/controllers/events_controller_spec.rb b/spec/controllers/events_controller_spec.rb index b78af62..f76f495 100644 --- a/spec/controllers/events_controller_spec.rb +++ b/spec/controllers/events_controller_spec.rb @@ -1,5 +1,57 @@ require 'spec_helper' describe EventsController do - pending + describe 'GET #index' do + it 'responds successfully with an HTTP 200 status code' do + get :index + + expect(response).to be_success + expect(response.status).to eq(200) + end + + it 'renders the index template' do + get :index + + expect(response).to render_template('index') + end + + it 'loads all of the events into @events' do + event1, event2 = Fabricate(:event), Fabricate(:event) + + get :index + + expect(assigns(:events)).to match_array([event1, event2]) + end + end + + describe '#new' do + it 'responds successfully with an HTTP 200 status code' do + get :new + + expect(response).to be_success + expect(response.status).to eq(200) + end + + it 'renders the new template' do + get :new + + expect(response).to render_template("new") + end + end + + describe '#create' do + context 'when success' do + it 'responds successfully with an HTTP 200 status code' do + end + + it 'redirects to events index' do + # test redirection + # test template? + end + end + + context 'when failure' do + it 'responds with error and an HTTP 200 status code' + end + end end diff --git a/spec/fabricators/event_fabricator.rb b/spec/fabricators/event_fabricator.rb new file mode 100644 index 0000000..8a5cdac --- /dev/null +++ b/spec/fabricators/event_fabricator.rb @@ -0,0 +1,4 @@ +Fabricator(:event) do + name 'Event x' + user_id 1 +end \ No newline at end of file diff --git a/spec/models/event_spec.rb b/spec/models/event_spec.rb index efb7dd5..46fbcc3 100644 --- a/spec/models/event_spec.rb +++ b/spec/models/event_spec.rb @@ -1,5 +1,29 @@ require 'spec_helper' describe Event do - pending "add some examples to (or delete) #{__FILE__}" + context 'validations' do + context 'when missing required fields' do + it 'should return a list of validation errors' do + full_error_messages = [ + "Name can't be blank", + "User can't be blank" + ] + + subject.valid? + + subject.errors.full_messages.should eql full_error_messages + end + end + + context 'when all required fields are given' do + it 'should have no errors' do + subject.name = 'First meeting' + subject.user_id = 1 + + subject.valid? + + subject.errors.empty?.should be_true + end + end + end end From 747561bb4dab271e22477bc742ee7c2b10916af4 Mon Sep 17 00:00:00 2001 From: Fernando Castellanos Date: Mon, 16 Sep 2013 08:42:47 -0700 Subject: [PATCH 05/26] Very basic event form, WIP --- app/models/event.rb | 5 ++++- app/views/events/_form.html.haml | 24 +++++++++++++++++------- 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/app/models/event.rb b/app/models/event.rb index e6a471f..34d3df2 100644 --- a/app/models/event.rb +++ b/app/models/event.rb @@ -1,3 +1,6 @@ class Event < ActiveRecord::Base - validates_presence_of :name, :details, :user_id + validates_presence_of :name, :user_id + + # Note: Make sure that this doesn't conflict with ActiveRecord + attr_accessor :where end diff --git a/app/views/events/_form.html.haml b/app/views/events/_form.html.haml index 41d3d33..6ec0fa7 100644 --- a/app/views/events/_form.html.haml +++ b/app/views/events/_form.html.haml @@ -1,10 +1,20 @@ = render partial: 'layouts/error_messages', locals: { resource: @event} = form_for @event do |f| - = f.label :name - = f.text_field :name - = f.label :details - = f.text_area :details - = f.label :location - = f.text_field :location_name - = f.submit + %p + = f.label :name + = f.text_field :name + %p + = f.label :information + = f.text_area :details + %p + = f.label :location_name + = f.text_field :location_name + %p + = f.label :where + = f.text_field :where + %p + = f.label :when + = f.text_field :scheduled_at + %p + = f.submit From 47d00ae120bbc958ff58900a53412910c1ed84b6 Mon Sep 17 00:00:00 2001 From: Victor Velazquez Date: Mon, 16 Sep 2013 17:00:54 -0500 Subject: [PATCH 06/26] Add ruby_version file --- .ruby-version | 1 + 1 file changed, 1 insertion(+) create mode 100644 .ruby-version diff --git a/.ruby-version b/.ruby-version new file mode 100644 index 0000000..c82eec7 --- /dev/null +++ b/.ruby-version @@ -0,0 +1 @@ +1.9.3-p448 From d9d040ee0b53bc9f9c35735b6d4a1a3466830b10 Mon Sep 17 00:00:00 2001 From: Victor Velazquez Date: Mon, 16 Sep 2013 17:01:27 -0500 Subject: [PATCH 07/26] Add database cleaner to clean test suite * Preventing increasing of the test database --- Gemfile | 1 + Gemfile.lock | 2 ++ spec/spec_helper.rb | 5 +++++ 3 files changed, 8 insertions(+) diff --git a/Gemfile b/Gemfile index fba1826..ed649ce 100644 --- a/Gemfile +++ b/Gemfile @@ -20,6 +20,7 @@ group :development, :test do gem 'capybara-webkit' gem 'capybara' gem 'fabrication' + gem 'database_cleaner' end group :development do diff --git a/Gemfile.lock b/Gemfile.lock index 503dbf5..5b50138 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -46,6 +46,7 @@ GEM coffee-script-source execjs coffee-script-source (1.6.2) + database_cleaner (1.1.1) diff-lcs (1.2.1) erubis (2.7.0) execjs (1.4.0) @@ -181,6 +182,7 @@ DEPENDENCIES capybara capybara-webkit coffee-rails (~> 4.0.0) + database_cleaner fabrication git-pair haml-rails (~> 0.4) diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index b6a1dfa..3995c8b 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -1,5 +1,6 @@ require 'capybara/rspec' require 'simplecov' +require 'database_cleaner' SimpleCov.start 'rails' ENV["RAILS_ENV"] ||= 'test' @@ -13,6 +14,10 @@ Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f} +DatabaseCleaner.strategy = :truncation + +DatabaseCleaner.clean + ActiveRecord::Migration.check_pending! if defined?(ActiveRecord::Migration) RSpec.configure do |config| From 49c91e11aaf502f4582d35d3c1947bb69669e425 Mon Sep 17 00:00:00 2001 From: Victor Velazquez Date: Mon, 16 Sep 2013 17:57:38 -0500 Subject: [PATCH 08/26] Quiet Assets turns off the Rails asset pipeline log * Also use the thin gem to use instead of webrick in development --- Gemfile | 2 ++ Gemfile.lock | 10 ++++++++++ config/application.rb | 2 +- 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index ed649ce..8c4a44b 100644 --- a/Gemfile +++ b/Gemfile @@ -26,6 +26,8 @@ end group :development do gem 'git-pair' gem 'pry' + gem 'quiet_assets' + gem 'thin' end group :doc do diff --git a/Gemfile.lock b/Gemfile.lock index 5b50138..f3d22f7 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -46,9 +46,11 @@ GEM coffee-script-source execjs coffee-script-source (1.6.2) + daemons (1.1.9) database_cleaner (1.1.1) diff-lcs (1.2.1) erubis (2.7.0) + eventmachine (1.0.3) execjs (1.4.0) multi_json (~> 1.0) fabrication (2.8.0) @@ -106,6 +108,8 @@ GEM coderay (~> 1.0.5) method_source (~> 0.8) slop (~> 3.4) + quiet_assets (1.0.2) + railties (>= 3.1, < 5.0) rack (1.5.2) rack-test (0.6.2) rack (>= 1.0) @@ -158,6 +162,10 @@ GEM actionpack (>= 3.0) activesupport (>= 3.0) sprockets (~> 2.8) + thin (1.5.1) + daemons (>= 1.0.9) + eventmachine (>= 0.12.6) + rack (>= 1.0.0) thor (0.18.1) thread_safe (0.1.0) atomic @@ -191,10 +199,12 @@ DEPENDENCIES omniauth-github pg pry + quiet_assets rails (= 4.0.0) rspec-rails (~> 2.0) sass-rails (~> 4.0.0) sdoc simplecov + thin turbolinks uglifier (>= 1.3.0) diff --git a/config/application.rb b/config/application.rb index 34ee5b8..ccfe08f 100644 --- a/config/application.rb +++ b/config/application.rb @@ -5,7 +5,6 @@ # Require the gems listed in Gemfile, including any gems # you've limited to :test, :development, or :production. Bundler.require(:default, Rails.env) - module Hackd class Application < Rails::Application # Settings in config/environments/* take precedence over those specified here. @@ -15,6 +14,7 @@ class Application < Rails::Application # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone. # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC. # config.time_zone = 'Central Time (US & Canada)' + #config.quiet_assets = false # The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded. # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s] From 5e3e5f6e8124a0f8d67b6a50065fa55dbde885c3 Mon Sep 17 00:00:00 2001 From: Victor Velazquez Date: Mon, 16 Sep 2013 18:01:25 -0500 Subject: [PATCH 09/26] Implement annotate GEM --- Gemfile | 1 + Gemfile.lock | 3 +++ 2 files changed, 4 insertions(+) diff --git a/Gemfile b/Gemfile index 8c4a44b..2958711 100644 --- a/Gemfile +++ b/Gemfile @@ -28,6 +28,7 @@ group :development do gem 'pry' gem 'quiet_assets' gem 'thin' + gem 'annotate', ">=2.5.0" end group :doc do diff --git a/Gemfile.lock b/Gemfile.lock index f3d22f7..bd4072d 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -26,6 +26,8 @@ GEM thread_safe (~> 0.1) tzinfo (~> 0.3.37) angularjs-rails (1.0.7) + annotate (2.5.0) + rake arel (4.0.0) atomic (1.1.10) builder (3.1.4) @@ -187,6 +189,7 @@ PLATFORMS DEPENDENCIES angularjs-rails + annotate (>= 2.5.0) capybara capybara-webkit coffee-rails (~> 4.0.0) From 2fc53d8b999a92161d6054e7007ee7996e077f54 Mon Sep 17 00:00:00 2001 From: Victor Velazquez Date: Mon, 16 Sep 2013 18:01:45 -0500 Subject: [PATCH 10/26] Usage of the annotate gem in the models and routes --- app/models/event.rb | 16 ++++++++++++++++ config/routes.rb | 15 +++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/app/models/event.rb b/app/models/event.rb index 34d3df2..e8099f8 100644 --- a/app/models/event.rb +++ b/app/models/event.rb @@ -1,3 +1,19 @@ +# == Schema Information +# +# Table name: events +# +# id :integer not null, primary key +# name :string(255) +# details :text +# user_id :integer +# latitude :string(255) +# longitude :string(255) +# location_name :string(255) +# scheduled_at :datetime +# created_at :datetime +# updated_at :datetime +# + class Event < ActiveRecord::Base validates_presence_of :name, :user_id diff --git a/config/routes.rb b/config/routes.rb index 289f48f..db2a7ef 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -10,3 +10,18 @@ root to: 'events#index' end +#== Route Map +# Generated on 16 Sep 2013 18:00 +# +# github_callback GET /auth/github/callback(.:format) sessions#create +# sessions POST /sessions(.:format) sessions#create +# session DELETE /sessions/:id(.:format) sessions#destroy +# events GET /events(.:format) events#index +# POST /events(.:format) events#create +# new_event GET /events/new(.:format) events#new +# edit_event GET /events/:id/edit(.:format) events#edit +# event GET /events/:id(.:format) events#show +# PATCH /events/:id(.:format) events#update +# PUT /events/:id(.:format) events#update +# DELETE /events/:id(.:format) events#destroy +# root GET / events#index From 9986bf5de38fa4891ec971015ab7725e078b6cba Mon Sep 17 00:00:00 2001 From: Victor Velazquez Date: Tue, 17 Sep 2013 13:07:47 -0500 Subject: [PATCH 11/26] Keep with testing and event creation --- app/controllers/events_controller.rb | 23 ++++--- spec/controllers/events_controller_spec.rb | 75 +++++++++++++++++++--- spec/helpers/events_helper_spec.rb | 1 - 3 files changed, 82 insertions(+), 17 deletions(-) diff --git a/app/controllers/events_controller.rb b/app/controllers/events_controller.rb index 22129bc..63f7bca 100644 --- a/app/controllers/events_controller.rb +++ b/app/controllers/events_controller.rb @@ -10,26 +10,33 @@ def new @event = Event.new end - def edit - end - def show end def create + @event = Event.new event_params + if @event.save + flash[:notice] = 'Successfully created' + redirect_to events_path + else + flash[:error] = "Something went wrong" + render new_event_path + end + end + + def edit + @event = Event.find(params[:id]) end def update @event = Event.find(params[:id]) - if @event.update_attributes(@params) + if @event.update event_params flash[:notice] = "Event updated successfully" - - redirect_to events_path + redirect_to action: :index else flash[:notice] = "Event wasn't updated as expected" - - redirect_to :back + render edit_event_path end end diff --git a/spec/controllers/events_controller_spec.rb b/spec/controllers/events_controller_spec.rb index f76f495..3db1ebc 100644 --- a/spec/controllers/events_controller_spec.rb +++ b/spec/controllers/events_controller_spec.rb @@ -41,17 +41,76 @@ describe '#create' do context 'when success' do - it 'responds successfully with an HTTP 200 status code' do - end - it 'redirects to events index' do - # test redirection - # test template? + post :create, event: { + name: 'Hackd', + details: 'Hackd this wednesday', + location_name: 'Baticueva' + } + + expect(response).to be_success + expect(response.status).to eq(200) end end - context 'when failure' do - it 'responds with error and an HTTP 200 status code' - end + context 'when failure' do + it 'should not redirect to events index' do + count = Event.count + post :create, event: { + name: '', + details: '', + location_name: '' + } + + assert Event.count == count, 'Something went wrong' + end + end + end + + describe '#edit' do + it' should edit a event' do + event = Event.create( + name: 'test', + id: 1, + details: 'test', + location_name: 'test_location' + ) + + get :edit, id: event.id + expect(response).to render_template("edit") + end end + + describe '#update' do + before do + @event = Event.create( + name: 'test', + id: 1, + details: "test", + location_name: "test_location" + ) + end + + context 'valid information' do + it 'redirects to index page' do + put :update, id: @event.id, event: { + name: 'test', + id: 1, + details: 'test', + location_name: 'test_location' + } + expect(response).to redirect_to events_path + end + end + + context 'invalid information' do + it 'renders the edit page' do + put :update, id: @event.id, event: { name: '' } + + expect(response).to render_template("edit") + end + end + + end + end diff --git a/spec/helpers/events_helper_spec.rb b/spec/helpers/events_helper_spec.rb index ec309cc..464f87a 100644 --- a/spec/helpers/events_helper_spec.rb +++ b/spec/helpers/events_helper_spec.rb @@ -11,5 +11,4 @@ # end # end describe EventsHelper do - pending "add some examples to (or delete) #{__FILE__}" end From 0e54fc408b6195eec961de72a5aa1562920bff63 Mon Sep 17 00:00:00 2001 From: Victor Velazquez Date: Wed, 18 Sep 2013 23:56:14 -0500 Subject: [PATCH 12/26] Refactor specs WIP --- app/controllers/events_controller.rb | 7 ++-- db/schema.rb | 3 ++ spec/controllers/events_controller_spec.rb | 42 +++++++++------------- 3 files changed, 24 insertions(+), 28 deletions(-) diff --git a/app/controllers/events_controller.rb b/app/controllers/events_controller.rb index 63f7bca..7c0686c 100644 --- a/app/controllers/events_controller.rb +++ b/app/controllers/events_controller.rb @@ -29,11 +29,12 @@ def edit end def update - @event = Event.find(params[:id]) + + find_event if @event.update event_params flash[:notice] = "Event updated successfully" - redirect_to action: :index + redirect_to events_path else flash[:notice] = "Event wasn't updated as expected" render edit_event_path @@ -46,7 +47,7 @@ def destroy private def event_params - @params = params.require(:event).permit(:name, :details, :location) + @params = params.require(:event).permit! end def find_event diff --git a/db/schema.rb b/db/schema.rb index 8c837a2..364f063 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -13,6 +13,9 @@ ActiveRecord::Schema.define(version: 20130905041409) do + # These are extensions that must be enabled in order to support this database + enable_extension "plpgsql" + create_table "events", force: true do |t| t.string "name" t.text "details" diff --git a/spec/controllers/events_controller_spec.rb b/spec/controllers/events_controller_spec.rb index 3db1ebc..4deb1aa 100644 --- a/spec/controllers/events_controller_spec.rb +++ b/spec/controllers/events_controller_spec.rb @@ -1,6 +1,15 @@ require 'spec_helper' describe EventsController do + def valid_attributes + { + id: 1, + name: 'test', + details: 'test', + location_name: 'test_location' + } + end + describe 'GET #index' do it 'responds successfully with an HTTP 200 status code' do get :index @@ -69,43 +78,26 @@ describe '#edit' do it' should edit a event' do - event = Event.create( - name: 'test', - id: 1, - details: 'test', - location_name: 'test_location' - ) - - get :edit, id: event.id - expect(response).to render_template("edit") + event = Event.create! valid_attributes + get :edit, { id: event.to_param } + expect(response).to render_template("edit") end end describe '#update' do - before do - @event = Event.create( - name: 'test', - id: 1, - details: "test", - location_name: "test_location" - ) - end - context 'valid information' do it 'redirects to index page' do - put :update, id: @event.id, event: { - name: 'test', - id: 1, - details: 'test', - location_name: 'test_location' - } + event = Event.create! valid_attributes + put :update, { user_id: 1, id: event.to_param, event: valid_attributes } + expect(response).to redirect_to events_path end end context 'invalid information' do it 'renders the edit page' do - put :update, id: @event.id, event: { name: '' } + event = Event.create! valid_attributes + put :update, { user_id: 1, id: event.to_param, event: { name: "invalid value" } } expect(response).to render_template("edit") end From 7217d1173a9282ee15fe4059d05e9e88f7f85cf6 Mon Sep 17 00:00:00 2001 From: Victor Velazquez Date: Thu, 19 Sep 2013 00:08:55 -0500 Subject: [PATCH 13/26] Refactor rspec WIP --- spec/controllers/events_controller_spec.rb | 30 ++++++++-------------- 1 file changed, 11 insertions(+), 19 deletions(-) diff --git a/spec/controllers/events_controller_spec.rb b/spec/controllers/events_controller_spec.rb index 4deb1aa..da3df52 100644 --- a/spec/controllers/events_controller_spec.rb +++ b/spec/controllers/events_controller_spec.rb @@ -3,7 +3,6 @@ describe EventsController do def valid_attributes { - id: 1, name: 'test', details: 'test', location_name: 'test_location' @@ -34,16 +33,16 @@ def valid_attributes end describe '#new' do - it 'responds successfully with an HTTP 200 status code' do - get :new + before do + get :new + end + it 'responds successfully with an HTTP 200 status code' do expect(response).to be_success expect(response.status).to eq(200) end it 'renders the new template' do - get :new - expect(response).to render_template("new") end end @@ -51,27 +50,19 @@ def valid_attributes describe '#create' do context 'when success' do it 'redirects to events index' do - post :create, event: { - name: 'Hackd', - details: 'Hackd this wednesday', - location_name: 'Baticueva' - } + post :create, { event: valid_attributes } expect(response).to be_success expect(response.status).to eq(200) end end - context 'when failure' do + context 'when is invalid' do it 'should not redirect to events index' do - count = Event.count - post :create, event: { - name: '', - details: '', - location_name: '' - } - - assert Event.count == count, 'Something went wrong' + Event.any_instance.stub(:save).and_return(false) + post :create, { event: { name: "invalid value" } } + + expect(response).to render_template("new") end end end @@ -80,6 +71,7 @@ def valid_attributes it' should edit a event' do event = Event.create! valid_attributes get :edit, { id: event.to_param } + expect(response).to render_template("edit") end end From bb61d98b8d18a63c9ed6778e91772d5057316ff9 Mon Sep 17 00:00:00 2001 From: Victor Velazquez Date: Wed, 2 Oct 2013 21:36:13 -0500 Subject: [PATCH 14/26] Add last modifications to user model and the schema --- app/models/user.rb | 1 + db/schema.rb | 3 --- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/app/models/user.rb b/app/models/user.rb index 4a57cf0..a13798e 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -1,2 +1,3 @@ class User < ActiveRecord::Base + has_many :events end diff --git a/db/schema.rb b/db/schema.rb index df59585..bdc6053 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -16,9 +16,6 @@ # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" - # These are extensions that must be enabled in order to support this database - enable_extension "plpgsql" - create_table "events", force: true do |t| t.string "name" t.text "details" From fbee4cfd89330ea366efd0479507d2f0ad568ba2 Mon Sep 17 00:00:00 2001 From: David Vega Date: Wed, 2 Oct 2013 21:55:59 -0500 Subject: [PATCH 15/26] add fivemat to the gemfile --- Gemfile | 1 + Gemfile.lock | 2 ++ 2 files changed, 3 insertions(+) diff --git a/Gemfile b/Gemfile index 2958711..eeef8ce 100644 --- a/Gemfile +++ b/Gemfile @@ -14,6 +14,7 @@ gem 'turbolinks' gem 'uglifier', '>= 1.3.0' gem 'omniauth-github' gem 'httparty' +gem 'fivemat' group :development, :test do gem 'rspec-rails', '~> 2.0' diff --git a/Gemfile.lock b/Gemfile.lock index bd4072d..809cbc6 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -58,6 +58,7 @@ GEM fabrication (2.8.0) faraday (0.8.8) multipart-post (~> 1.2.0) + fivemat (1.2.1) git-pair (0.1.0) haml (4.0.3) tilt @@ -195,6 +196,7 @@ DEPENDENCIES coffee-rails (~> 4.0.0) database_cleaner fabrication + fivemat git-pair haml-rails (~> 0.4) httparty From 58212df460d23780a31cbbbc0e5e1194dc56d60c Mon Sep 17 00:00:00 2001 From: David Vega Date: Thu, 3 Oct 2013 00:24:36 -0500 Subject: [PATCH 16/26] pry debugger gem --- Gemfile | 1 + Gemfile.lock | 11 +++++++++++ 2 files changed, 12 insertions(+) diff --git a/Gemfile b/Gemfile index eeef8ce..b1828af 100644 --- a/Gemfile +++ b/Gemfile @@ -22,6 +22,7 @@ group :development, :test do gem 'capybara' gem 'fabrication' gem 'database_cleaner' + gem 'pry-debugger' end group :development do diff --git a/Gemfile.lock b/Gemfile.lock index 809cbc6..188ddda 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -48,8 +48,15 @@ GEM coffee-script-source execjs coffee-script-source (1.6.2) + columnize (0.3.6) daemons (1.1.9) database_cleaner (1.1.1) + debugger (1.6.2) + columnize (>= 0.3.1) + debugger-linecache (~> 1.2.0) + debugger-ruby_core_source (~> 1.2.3) + debugger-linecache (1.2.0) + debugger-ruby_core_source (1.2.3) diff-lcs (1.2.1) erubis (2.7.0) eventmachine (1.0.3) @@ -111,6 +118,9 @@ GEM coderay (~> 1.0.5) method_source (~> 0.8) slop (~> 3.4) + pry-debugger (0.2.2) + debugger (~> 1.3) + pry (~> 0.9.10) quiet_assets (1.0.2) railties (>= 3.1, < 5.0) rack (1.5.2) @@ -204,6 +214,7 @@ DEPENDENCIES omniauth-github pg pry + pry-debugger quiet_assets rails (= 4.0.0) rspec-rails (~> 2.0) From 96b4c8ae21e42999e8d2f6da720f328d050790e4 Mon Sep 17 00:00:00 2001 From: David Vega Date: Thu, 3 Oct 2013 00:30:26 -0500 Subject: [PATCH 17/26] complete event asociation with user --- app/controllers/events_controller.rb | 4 +-- app/models/.keep | 0 app/models/event.rb | 1 + spec/controllers/events_controller_spec.rb | 41 +++++++++++----------- spec/fabricators/event_fabricator.rb | 6 ++-- spec/fabricators/user_fabricator.rb | 6 ++++ 6 files changed, 32 insertions(+), 26 deletions(-) delete mode 100644 app/models/.keep create mode 100644 spec/fabricators/user_fabricator.rb diff --git a/app/controllers/events_controller.rb b/app/controllers/events_controller.rb index 7c0686c..14e71bb 100644 --- a/app/controllers/events_controller.rb +++ b/app/controllers/events_controller.rb @@ -37,7 +37,7 @@ def update redirect_to events_path else flash[:notice] = "Event wasn't updated as expected" - render edit_event_path + render action: 'edit' end end @@ -47,7 +47,7 @@ def destroy private def event_params - @params = params.require(:event).permit! + @params = params.require(:event).permit! end def find_event diff --git a/app/models/.keep b/app/models/.keep deleted file mode 100644 index e69de29..0000000 diff --git a/app/models/event.rb b/app/models/event.rb index e8099f8..5e764cd 100644 --- a/app/models/event.rb +++ b/app/models/event.rb @@ -15,6 +15,7 @@ # class Event < ActiveRecord::Base + belongs_to :user validates_presence_of :name, :user_id # Note: Make sure that this doesn't conflict with ActiveRecord diff --git a/spec/controllers/events_controller_spec.rb b/spec/controllers/events_controller_spec.rb index da3df52..973fb5c 100644 --- a/spec/controllers/events_controller_spec.rb +++ b/spec/controllers/events_controller_spec.rb @@ -8,14 +8,15 @@ def valid_attributes location_name: 'test_location' } end + let(:event){ Fabricate :event } describe 'GET #index' do - it 'responds successfully with an HTTP 200 status code' do - get :index + it 'responds successfully with an HTTP 200 status code' do + get :index - expect(response).to be_success - expect(response.status).to eq(200) - end + expect(response).to be_success + expect(response.status).to eq(200) + end it 'renders the index template' do get :index @@ -24,11 +25,11 @@ def valid_attributes end it 'loads all of the events into @events' do - event1, event2 = Fabricate(:event), Fabricate(:event) + event1, event2 = Fabricate(:event), Fabricate(:event) - get :index + get :index - expect(assigns(:events)).to match_array([event1, event2]) + expect(assigns(:events)).to include(event1, event2) end end @@ -37,10 +38,10 @@ def valid_attributes get :new end - it 'responds successfully with an HTTP 200 status code' do - expect(response).to be_success - expect(response.status).to eq(200) - end + it 'responds successfully with an HTTP 200 status code' do + expect(response).to be_success + expect(response.status).to eq(200) + end it 'renders the new template' do expect(response).to render_template("new") @@ -48,14 +49,14 @@ def valid_attributes end describe '#create' do - context 'when success' do - it 'redirects to events index' do + context 'when success' do + it 'redirects to events index' do post :create, { event: valid_attributes } expect(response).to be_success expect(response.status).to eq(200) - end - end + end + end context 'when is invalid' do it 'should not redirect to events index' do @@ -69,7 +70,6 @@ def valid_attributes describe '#edit' do it' should edit a event' do - event = Event.create! valid_attributes get :edit, { id: event.to_param } expect(response).to render_template("edit") @@ -79,8 +79,7 @@ def valid_attributes describe '#update' do context 'valid information' do it 'redirects to index page' do - event = Event.create! valid_attributes - put :update, { user_id: 1, id: event.to_param, event: valid_attributes } + put :update, { event: event.attributes, id: event.to_param } expect(response).to redirect_to events_path end @@ -88,8 +87,8 @@ def valid_attributes context 'invalid information' do it 'renders the edit page' do - event = Event.create! valid_attributes - put :update, { user_id: 1, id: event.to_param, event: { name: "invalid value" } } + params = { id: event.to_param, event: { name: nil } } + put :update, params expect(response).to render_template("edit") end diff --git a/spec/fabricators/event_fabricator.rb b/spec/fabricators/event_fabricator.rb index 8a5cdac..e80a0e2 100644 --- a/spec/fabricators/event_fabricator.rb +++ b/spec/fabricators/event_fabricator.rb @@ -1,4 +1,4 @@ -Fabricator(:event) do +Fabricator :event do name 'Event x' - user_id 1 -end \ No newline at end of file + user { Fabricate :user } +end diff --git a/spec/fabricators/user_fabricator.rb b/spec/fabricators/user_fabricator.rb new file mode 100644 index 0000000..c1db897 --- /dev/null +++ b/spec/fabricators/user_fabricator.rb @@ -0,0 +1,6 @@ +Fabricator :user do + email { sequence { |n| "user_#{n}@hackdmx.com" } } + first_name 'Jane' + last_name 'Doe' + gender 'female' +end From 5834b22c813cb9774d8d38525e6a012e5ff49b2a Mon Sep 17 00:00:00 2001 From: Sergio Morales Date: Thu, 3 Oct 2013 00:52:42 -0500 Subject: [PATCH 18/26] Remove weird message from database schema --- db/schema.rb | 3 --- 1 file changed, 3 deletions(-) diff --git a/db/schema.rb b/db/schema.rb index bdc6053..d360214 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -13,9 +13,6 @@ ActiveRecord::Schema.define(version: 20130919043416) do - # These are extensions that must be enabled in order to support this database - enable_extension "plpgsql" - create_table "events", force: true do |t| t.string "name" t.text "details" From 7764419510adeca7e05954bd8022b6b33fc44a1b Mon Sep 17 00:00:00 2001 From: Ignacio Galindo Date: Thu, 3 Oct 2013 01:49:44 -0500 Subject: [PATCH 19/26] Remove weird message from database schema [ci skip] --- db/schema.rb | 3 --- 1 file changed, 3 deletions(-) diff --git a/db/schema.rb b/db/schema.rb index bdc6053..d360214 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -13,9 +13,6 @@ ActiveRecord::Schema.define(version: 20130919043416) do - # These are extensions that must be enabled in order to support this database - enable_extension "plpgsql" - create_table "events", force: true do |t| t.string "name" t.text "details" From 41df701b9c0223ca100117eef20d861d00a98962 Mon Sep 17 00:00:00 2001 From: Victor Velazquez Date: Wed, 6 Nov 2013 21:12:43 -0600 Subject: [PATCH 20/26] Remove thin server --- Gemfile | 1 - Gemfile.lock | 7 ------- 2 files changed, 8 deletions(-) diff --git a/Gemfile b/Gemfile index e4858e9..b35d3bc 100644 --- a/Gemfile +++ b/Gemfile @@ -29,7 +29,6 @@ group :development do gem 'git-pair' gem 'pry' gem 'quiet_assets' - gem 'thin' gem 'annotate', ">=2.5.0" gem 'rails-erd' end diff --git a/Gemfile.lock b/Gemfile.lock index e4ef099..4334497 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -50,7 +50,6 @@ GEM execjs coffee-script-source (1.6.2) columnize (0.3.6) - daemons (1.1.9) database_cleaner (1.1.1) debugger (1.6.2) columnize (>= 0.3.1) @@ -60,7 +59,6 @@ GEM debugger-ruby_core_source (1.2.3) diff-lcs (1.2.1) erubis (2.7.0) - eventmachine (1.0.3) execjs (1.4.0) multi_json (~> 1.0) fabrication (2.8.0) @@ -182,10 +180,6 @@ GEM actionpack (>= 3.0) activesupport (>= 3.0) sprockets (~> 2.8) - thin (1.5.1) - daemons (>= 1.0.9) - eventmachine (>= 0.12.6) - rack (>= 1.0.0) thor (0.18.1) thread_safe (0.1.0) atomic @@ -229,6 +223,5 @@ DEPENDENCIES sass-rails (~> 4.0.0) sdoc simplecov - thin turbolinks uglifier (>= 1.3.0) From 303d96e7e40371dc99919a9b14be932b325a4aa0 Mon Sep 17 00:00:00 2001 From: David Vega Date: Wed, 6 Nov 2013 22:37:07 -0600 Subject: [PATCH 21/26] users are able to create events --- app/controllers/events_controller.rb | 6 +++--- app/models/user.rb | 1 + spec/controllers/events_controller_spec.rb | 10 +++++++--- spec/fabricators/user_fabricator.rb | 2 +- 4 files changed, 12 insertions(+), 7 deletions(-) diff --git a/app/controllers/events_controller.rb b/app/controllers/events_controller.rb index 14e71bb..289cdfc 100644 --- a/app/controllers/events_controller.rb +++ b/app/controllers/events_controller.rb @@ -14,12 +14,12 @@ def show end def create - @event = Event.new event_params - if @event.save + @event = current_user.events.new event_params + if current_user.save! flash[:notice] = 'Successfully created' redirect_to events_path else - flash[:error] = "Something went wrong" + flash[:error] = 'Something went wrong' render new_event_path end end diff --git a/app/models/user.rb b/app/models/user.rb index fa31b6b..c5da68c 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -1,4 +1,5 @@ class User < ActiveRecord::Base + has_many :events def self.create_with_omniauth auth create! do |user| diff --git a/spec/controllers/events_controller_spec.rb b/spec/controllers/events_controller_spec.rb index 973fb5c..dcb7a8e 100644 --- a/spec/controllers/events_controller_spec.rb +++ b/spec/controllers/events_controller_spec.rb @@ -9,6 +9,11 @@ def valid_attributes } end let(:event){ Fabricate :event } + let(:user){ event.user } + + before do + controller.stub(:current_user).and_return user + end describe 'GET #index' do it 'responds successfully with an HTTP 200 status code' do @@ -52,9 +57,8 @@ def valid_attributes context 'when success' do it 'redirects to events index' do post :create, { event: valid_attributes } - - expect(response).to be_success - expect(response.status).to eq(200) + + response.should be_success end end diff --git a/spec/fabricators/user_fabricator.rb b/spec/fabricators/user_fabricator.rb index c1db897..276c1a1 100644 --- a/spec/fabricators/user_fabricator.rb +++ b/spec/fabricators/user_fabricator.rb @@ -1,5 +1,5 @@ Fabricator :user do - email { sequence { |n| "user_#{n}@hackdmx.com" } } + email { sequence { |n| "user_#{n}@example.com" } } first_name 'Jane' last_name 'Doe' gender 'female' From 802b3d36c2ae7b7d7bbe0ffb111bcfc5c3f092a6 Mon Sep 17 00:00:00 2001 From: David Vega Date: Wed, 6 Nov 2013 23:28:28 -0600 Subject: [PATCH 22/26] specs fixed and fivemat moved to test group --- Gemfile | 2 +- app/controllers/events_controller.rb | 2 +- spec/controllers/events_controller_spec.rb | 9 ++++----- 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/Gemfile b/Gemfile index b35d3bc..312581a 100644 --- a/Gemfile +++ b/Gemfile @@ -14,7 +14,6 @@ gem 'turbolinks' gem 'uglifier', '>= 1.3.0' gem 'omniauth-github' gem 'httparty' -gem 'fivemat' group :development, :test do gem 'rspec-rails', '~> 2.0' @@ -38,5 +37,6 @@ group :doc do end group :test do + gem 'fivemat' gem 'simplecov', require: false end diff --git a/app/controllers/events_controller.rb b/app/controllers/events_controller.rb index 289cdfc..5117119 100644 --- a/app/controllers/events_controller.rb +++ b/app/controllers/events_controller.rb @@ -15,7 +15,7 @@ def show def create @event = current_user.events.new event_params - if current_user.save! + if current_user.save flash[:notice] = 'Successfully created' redirect_to events_path else diff --git a/spec/controllers/events_controller_spec.rb b/spec/controllers/events_controller_spec.rb index dcb7a8e..662592f 100644 --- a/spec/controllers/events_controller_spec.rb +++ b/spec/controllers/events_controller_spec.rb @@ -57,17 +57,16 @@ def valid_attributes context 'when success' do it 'redirects to events index' do post :create, { event: valid_attributes } - - response.should be_success + + response.should redirect_to events_path end end context 'when is invalid' do it 'should not redirect to events index' do - Event.any_instance.stub(:save).and_return(false) - post :create, { event: { name: "invalid value" } } + post :create, { event: { name: ''} } - expect(response).to render_template("new") + response.should render_template 'new' end end end From 15be8a675569ac900521d74bdb0126fc0db0beaf Mon Sep 17 00:00:00 2001 From: David Vega Date: Wed, 6 Nov 2013 23:52:49 -0600 Subject: [PATCH 23/26] use expectation and also use the before filter on controller --- app/controllers/events_controller.rb | 5 +---- spec/models/event_spec.rb | 4 ++-- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/app/controllers/events_controller.rb b/app/controllers/events_controller.rb index 5117119..aaab7f3 100644 --- a/app/controllers/events_controller.rb +++ b/app/controllers/events_controller.rb @@ -1,5 +1,5 @@ class EventsController < ApplicationController - before_action :find_event, only: [ :edit, :show ] + before_action :find_event, only: [ :edit, :show, :update ] before_action :event_params, only: [ :update ] def index @@ -29,9 +29,6 @@ def edit end def update - - find_event - if @event.update event_params flash[:notice] = "Event updated successfully" redirect_to events_path diff --git a/spec/models/event_spec.rb b/spec/models/event_spec.rb index 46fbcc3..aca76cc 100644 --- a/spec/models/event_spec.rb +++ b/spec/models/event_spec.rb @@ -9,7 +9,7 @@ "User can't be blank" ] - subject.valid? + subject.should_not be_valid subject.errors.full_messages.should eql full_error_messages end @@ -20,7 +20,7 @@ subject.name = 'First meeting' subject.user_id = 1 - subject.valid? + subject.should be_valid subject.errors.empty?.should be_true end From 27bfcf610eab90ec0665ed719f3c8dc0b22d7173 Mon Sep 17 00:00:00 2001 From: Victor Velazquez Date: Wed, 13 Nov 2013 02:56:34 -0600 Subject: [PATCH 24/26] Remove action in update method when fails * Avoiding redundancy * Using the path helper is breaking the test --- app/controllers/events_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/events_controller.rb b/app/controllers/events_controller.rb index aaab7f3..65102f9 100644 --- a/app/controllers/events_controller.rb +++ b/app/controllers/events_controller.rb @@ -34,7 +34,7 @@ def update redirect_to events_path else flash[:notice] = "Event wasn't updated as expected" - render action: 'edit' + render :edit end end From 6cd53bcf591f44251a587484fdb00398209df7e0 Mon Sep 17 00:00:00 2001 From: Victor Velazquez Date: Wed, 13 Nov 2013 03:09:02 -0600 Subject: [PATCH 25/26] Remove inconsistent labels and fields names --- app/views/events/_form.html.haml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/views/events/_form.html.haml b/app/views/events/_form.html.haml index 6ec0fa7..8fefc1f 100644 --- a/app/views/events/_form.html.haml +++ b/app/views/events/_form.html.haml @@ -2,11 +2,11 @@ = form_for @event do |f| %p - = f.label :name - = f.text_field :name + = f.label :event_name + = f.text_field :event_name %p = f.label :information - = f.text_area :details + = f.text_area :information_details %p = f.label :location_name = f.text_field :location_name From cccdeddd37f3b4a3e0db0c0169339e4e1f2f1d99 Mon Sep 17 00:00:00 2001 From: Victor Velazquez Date: Wed, 13 Nov 2013 03:13:34 -0600 Subject: [PATCH 26/26] Add expect implementation instead of should --- spec/controllers/events_controller_spec.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spec/controllers/events_controller_spec.rb b/spec/controllers/events_controller_spec.rb index 662592f..7d43408 100644 --- a/spec/controllers/events_controller_spec.rb +++ b/spec/controllers/events_controller_spec.rb @@ -58,7 +58,7 @@ def valid_attributes it 'redirects to events index' do post :create, { event: valid_attributes } - response.should redirect_to events_path + expect(response).to redirect_to events_path end end @@ -66,7 +66,7 @@ def valid_attributes it 'should not redirect to events index' do post :create, { event: { name: ''} } - response.should render_template 'new' + expect(response).to render_template 'new' end end end