File tree Expand file tree Collapse file tree 8 files changed +102
-0
lines changed
Expand file tree Collapse file tree 8 files changed +102
-0
lines changed Original file line number Diff line number Diff line change @@ -22,6 +22,7 @@ gem 'sqlite3'
2222gem 'turbolinks'
2323gem 'twitter-typeahead-rails'
2424gem 'uglifier'
25+ gem 'whenever'
2526
2627# Range limit gem for slider on Solr integer fields (year)
2728# Currently broken (9/2/2016)
@@ -43,5 +44,7 @@ group :development, :test do
4344 gem 'selenium-webdriver'
4445 gem 'simplecov'
4546 gem 'spring'
47+ gem 'timecop'
4648 gem 'web-console'
49+ gem 'whenever-test'
4750end
Original file line number Diff line number Diff line change 8989 capybara (>= 1.0 , < 4 )
9090 launchy
9191 childprocess (4.1.0 )
92+ chronic (0.10.2 )
9293 coderay (1.1.3 )
9394 concurrent-ruby (1.1.7 )
9495 config (2.2.1 )
381382 thor (1.0.1 )
382383 thread_safe (0.3.6 )
383384 tilt (2.0.10 )
385+ timecop (0.9.6 )
384386 turbolinks (5.2.1 )
385387 turbolinks-source (~> 5.2 )
386388 turbolinks-source (5.2.0 )
403405 websocket-driver (0.7.3 )
404406 websocket-extensions (>= 0.1.0 )
405407 websocket-extensions (0.1.5 )
408+ whenever (1.0.0 )
409+ chronic (>= 0.6.3 )
410+ whenever-test (1.0.1 )
411+ whenever
406412 xpath (3.2.0 )
407413 nokogiri (~> 1.8 )
408414
@@ -442,10 +448,13 @@ DEPENDENCIES
442448 solr_wrapper
443449 spring
444450 sqlite3
451+ timecop
445452 turbolinks
446453 twitter-typeahead-rails
447454 uglifier
448455 web-console
456+ whenever
457+ whenever-test
449458
450459BUNDLED WITH
451460 2.1.4
Original file line number Diff line number Diff line change 1+ # Use this file to easily define all of your cron jobs.
2+ #
3+ # It's helpful, but not entirely necessary to understand cron before proceeding.
4+ # http://en.wikipedia.org/wiki/Cron
5+
6+ # Example:
7+ #
8+ # set :output, "/path/to/my/cron_log.log"
9+ #
10+ # every 2.hours do
11+ # command "/usr/bin/some_great_command"
12+ # runner "MyModel.some_method"
13+ # rake "some:great:rake:task"
14+ # end
15+ #
16+ # every 4.days do
17+ # runner "AnotherModel.prune_old_records"
18+ # end
19+
20+ # Learn more: http://github.com/javan/whenever
21+
22+ every 1 . week do
23+ rake 'vacate_searches:vacate'
24+ end
Original file line number Diff line number Diff line change 1+ namespace :vacate_searches do
2+ desc 'Vacate week-old searches'
3+ task vacate : :environment do
4+ Search . where ( 'created_at < ?' , ( Date . today - 7 . days ) ) . destroy_all
5+ end
6+ end
Original file line number Diff line number Diff line change 1+ # frozen_string_literal: true
2+
3+ FactoryBot . define do
4+ factory :search do
5+ query_params { { q : 'test' } }
6+ end
7+ end
Original file line number Diff line number Diff line change 1+ require 'rake'
2+
3+ RSpec . configure do |config |
4+ config . before ( :suite ) do
5+ Rails . application . load_tasks
6+ end
7+ end
Original file line number Diff line number Diff line change 1+ require 'timecop'
2+
3+ RSpec . describe 'Vacate Searches' , type : :task do
4+ context 'vacate_searches:vacate' do
5+ before do
6+ # Freeze time as task is time-sensitive
7+ Timecop . freeze Time . now
8+ end
9+
10+ after { Timecop . return }
11+
12+ it 'deletes searches older than 1 week' do
13+ create ( :search , created_at : 2 . week . ago )
14+ expect { invoke_task } . to change { Search . count } . by ( -1 )
15+ end
16+
17+ it 'does not delete newer searches' do
18+ create ( :search , created_at : 2 . days . ago )
19+ expect { invoke_task } . not_to ( change { Search . count } )
20+ end
21+
22+ private
23+
24+ def invoke_task
25+ task = Rake ::Task [ 'vacate_searches:vacate' ]
26+ # Ensure task is re-enabled, as rake tasks by default are disabled
27+ # after running once within a process http://pivotallabs.com/how-i-test-rake-tasks/
28+ task . reenable
29+ task . invoke
30+ end
31+ end
32+ end
Original file line number Diff line number Diff line change 1+ # spec/whenever_spec.rb
2+ require 'spec_helper'
3+
4+ describe 'Whenever Schedule' do
5+ before do
6+ load 'Rakefile' # Makes sure rake tasks are loaded so you can assert in rake jobs
7+ end
8+
9+ it 'should have a rake task that runs every week' do
10+ schedule = Whenever ::Test ::Schedule . new ( file : 'config/schedule.rb' )
11+ task_name = schedule . jobs [ :rake ] . first [ :task ]
12+ task_name . should include ( 'vacate_searches:vacate' )
13+ end
14+ end
You can’t perform that action at this time.
0 commit comments