From 151e4937c4c4722a2d1d35e2fb70fc2a6a60f659 Mon Sep 17 00:00:00 2001 From: echarp Date: Tue, 2 Sep 2014 01:02:51 +0200 Subject: [PATCH] Couverture de tests --- Gemfile | 4 ++ Gemfile.lock | 9 +++- app/helpers/events_helper.rb | 2 +- app/models/event.rb | 21 ++------ test/controllers/events_controller_test.rb | 42 +++++++--------- test/fixtures/events.yml | 8 +-- test/models/event_test.rb | 58 +++++++++++++++++++++- test/test_helper.rb | 4 ++ 8 files changed, 101 insertions(+), 47 deletions(-) diff --git a/Gemfile b/Gemfile index 2843b36f..dd743f74 100644 --- a/Gemfile +++ b/Gemfile @@ -105,6 +105,10 @@ group :development do gem 'guard-brakeman' end +group :test do + gem 'simplecov' +end + group :production do # Use mysql as the database for Active Record gem 'mysql2' diff --git a/Gemfile.lock b/Gemfile.lock index 8c7c7c52..d60ff37f 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,6 +1,6 @@ GIT remote: git://github.com/gregbell/active_admin.git - revision: 759a9bb7f8dab1b4cb9e23832febf7d0c370ebe4 + revision: 28c5ca569acddc162e1179326872da17a934dbb7 specs: activeadmin (1.0.0.pre) arbre (~> 1.0, >= 1.0.2) @@ -100,6 +100,7 @@ GEM warden (~> 1.2.3) devise-i18n (0.11.0) differ (0.1.2) + docile (1.1.5) em-websocket (0.5.1) eventmachine (>= 0.12.9) http_parser.rb (~> 0.6.0) @@ -266,6 +267,11 @@ GEM sexp_processor (4.4.4) simple_calendar (1.1.5) rails (>= 3.0) + simplecov (0.9.0) + docile (~> 1.1.0) + multi_json + simplecov-html (~> 0.8.0) + simplecov-html (0.8.0) slim (2.0.3) temple (~> 0.6.6) tilt (>= 1.3.3, < 2.1) @@ -348,6 +354,7 @@ DEPENDENCIES sdoc (~> 0.4.0) select2-rails simple_calendar + simplecov spring sqlite3 therubyracer diff --git a/app/helpers/events_helper.rb b/app/helpers/events_helper.rb index cdc42f2c..6b16c3c8 100644 --- a/app/helpers/events_helper.rb +++ b/app/helpers/events_helper.rb @@ -25,7 +25,7 @@ module EventsHelper end def display_date(event = @event) - if event.same_day? + if event.start_time.to_date == event.end_time.to_date t 'date.formats.same_day', date: l(event.start_time.to_date, format: :long), start: l(event.start_time, format: :hours), diff --git a/app/models/event.rb b/app/models/event.rb index 3a7887d7..224ee69c 100644 --- a/app/models/event.rb +++ b/app/models/event.rb @@ -22,18 +22,11 @@ class Event < ActiveRecord::Base scope :moderated, -> { where moderated: true } scope :unmoderated, -> { where moderated: false } - scope :last_year, -> { where 'start_time >= ?', 360.days.ago } - scope :past, (lambda do - where('end_time < ?', DateTime.now).order start_time: :desc - end) - scope :future, (lambda do - where('? <= end_time', DateTime.now).order start_time: :asc - end) - scope :future_in, (lambda do |days| - days ||= '30' - where('? <= start_time and end_time <= ?', - DateTime.now, days.to_i.days.from_now) - .order :start_time + scope :last_year, -> { where '? <= end_time', 360.days.ago } + scope :past, -> { where 'start_time <= ?', DateTime.now } + scope :future, -> { where '? <= end_time', DateTime.now } + scope :future_in, (lambda do |days = 30| + future.where('end_time <= ?', days.to_i.days.from_now).order :start_time end) scope :year, (lambda do |year| where '? <= end_time and start_time <= ?', @@ -76,10 +69,6 @@ class Event < ActiveRecord::Base end end - def same_day? - start_time.to_date == end_time.to_date - end - def to_json { type: 'Feature', properties: { name: title, diff --git a/test/controllers/events_controller_test.rb b/test/controllers/events_controller_test.rb index 0849c31d..87894651 100644 --- a/test/controllers/events_controller_test.rb +++ b/test/controllers/events_controller_test.rb @@ -19,20 +19,17 @@ class EventsControllerTest < ActionController::TestCase assert_response :success end - test 'should preview event' do + test 'should preview event creation' do assert_no_difference 'Event.count' do - patch :preview_create, event: { + post :preview_create, event: { title: @event.title, start_time: @event.start_time, end_time: @event.end_time, description: @event.description, city: @event.city, region: @event.related_region, - locality: @event.locality, url: @event.url, - contact: @event.contact, - submitter: @event.submitter, - tags: @event.tags + contact: @event.contact } assert_empty assigns(:event).errors @@ -50,11 +47,8 @@ class EventsControllerTest < ActionController::TestCase description: @event.description, city: @event.city, region: @event.related_region, - locality: @event.locality, url: @event.url, - contact: @event.contact, - submitter: @event.submitter, - tags: @event.tags + contact: @event.contact } assert_empty assigns(:event).errors.messages @@ -78,22 +72,22 @@ class EventsControllerTest < ActionController::TestCase assert_redirected_to root_url end + test 'should preview' do + assert_no_difference 'Event.count' do + patch :preview, id: @event, secret: 'MyString', event: { + title: @event.title + } + + assert_empty assigns(:event).errors + end + + assert_response :success + end + test 'should update event' do patch :update, id: @event, secret: 'MyString', event: { - title: @event.title, - start_time: @event.start_time, - end_time: @event.end_time, - description: @event.description, - city: @event.city, - region: @event.related_region, - locality: @event.locality, - url: @event.url, - contact: @event.contact, - moderated: @event.moderated, - secret: @event.secret, - submission_time: @event.submission_time, - submitter: @event.submitter, - tags: @event.tags } + title: @event.title + } assert_empty assigns(:event).errors.messages assert_redirected_to :root diff --git a/test/fixtures/events.yml b/test/fixtures/events.yml index c1ad414b..5886ee9a 100644 --- a/test/fixtures/events.yml +++ b/test/fixtures/events.yml @@ -3,8 +3,8 @@ one: title: MyString description: MyText - start_time: 2013-12-28 16:04:56 - end_time: 2013-12-28 16:04:56 + start_time: <%= 2.hours.from_now %> + end_time: <%= 2.hours.from_now %> city: city_one.name related_region: region_one locality: 1 @@ -14,8 +14,8 @@ one: moderated: 1 tags: MyString secret: MyString - decision_time: 2013-12-28 16:04:56 - submission_time: 2013-12-28 16:04:56 + decision_time: <%= 2.days.ago %> + submission_time: <%= 3.days.ago %> moderator_mail_id: MyString submitter_mail_id: MyString diff --git a/test/models/event_test.rb b/test/models/event_test.rb index 31eb693f..d1160a98 100644 --- a/test/models/event_test.rb +++ b/test/models/event_test.rb @@ -2,6 +2,22 @@ require 'test_helper' # Test events, which are the application central part class EventTest < ActiveSupport::TestCase + setup do + @event = events :one + + Geocoder.configure lookup: :test + + Geocoder::Lookup::Test.set_default_stub [{ + 'latitude' => 40.7143528, + 'longitude' => -74.0059731, + 'address' => 'New York, NY, USA', + 'state' => 'New York', + 'state_code' => 'NY', + 'country' => 'United States', + 'country_code' => 'US' + }] + end + test 'basic event' do @event = Event.new( title: 'hello world', @@ -65,8 +81,48 @@ class EventTest < ActiveSupport::TestCase assert @event.save, @event.errors.messages assert !@event.moderated? - @event.update(moderated: 1) + @event.update moderated: 1 assert @event.moderated?, @event.errors.messages end + + test 'named scope future_in' do + assert Event.respond_to? :future_in + assert_match(/<= end_time/, Event.future_in.where_values[0]) + assert_match(/end_time <=/, Event.future_in.where_values[1]) + end + + test 'named scope year' do + assert Event.respond_to? :year + assert_match(/<= end_time/, Event.year(2014).where_values[0]) + assert_match(/start_time <=/, Event.year(2014).where_values[0]) + end + + test 'geo data reset' do + # Setup geo data + @event.latitude = 3 + @event.longitude = 3 + + # Change address to ensure geo data is reset + @event.address = 'hello world' + + assert @event.valid? + assert @event.save + assert_nil @event.latitude + assert_nil @event.longitude + end + + test 'json transform' do + assert_not_nil @event.to_json + + assert_equal 'Feature', @event.to_json[:type] + assert_equal 'Point', @event.to_json[:geometry][:type] + end + + test 'full address' do + @event.address = 'hello' + @event.city = 'world' + @event.related_region.name = 'all' + assert_equal 'hello, world, all', @event.full_address + end end diff --git a/test/test_helper.rb b/test/test_helper.rb index 043e8d3f..c47e4c42 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -2,6 +2,10 @@ ENV['RAILS_ENV'] ||= 'test' require File.expand_path('../../config/environment', __FILE__) require 'rails/test_help' +require 'simplecov' + +SimpleCov.start 'rails' + module ActiveSupport # Standard helper class for almost all tests class TestCase