diff --git a/app/models/schedule.rb b/app/models/schedule.rb index 9651ef7a..ca68c3d3 100644 --- a/app/models/schedule.rb +++ b/app/models/schedule.rb @@ -7,5 +7,6 @@ class Schedule < ApplicationRecord validates :recipient_list, presence: true validates :question_list, presence: true + scope :active, -> { where(active: true).where("start_date <= ? and end_date > ?", Date.today, Date.today) } end diff --git a/lib/tasks/survey.rake b/lib/tasks/survey.rake new file mode 100644 index 00000000..1e8d668b --- /dev/null +++ b/lib/tasks/survey.rake @@ -0,0 +1,11 @@ +namespace :survey do + + desc 'Text all Recipients ready for an Attempt' + task :make_attempts => :environment do + Schedule.active.all.each do |schedule| + schedule.recipient_schedules.ready.each do |recipient_schedule| + + end + end + end +end diff --git a/spec/lib/tasks/survey_rake_spec.rb b/spec/lib/tasks/survey_rake_spec.rb new file mode 100644 index 00000000..146efadc --- /dev/null +++ b/spec/lib/tasks/survey_rake_spec.rb @@ -0,0 +1,25 @@ +require 'rails_helper' + +describe "survey:make_attempts" do + include_context "rake" + + + # let(:old_schedule) { stub("csv data") } + # let(:paused_schedule) { stub("csv data") } + # let(:report) { stub("generated report", :to_csv => csv) } + # let(:user_records) { stub("user records for report") } + + before do + # ReportGenerator.stubs(:generate) + # UsersReport.stubs(:new => report) + # User.stubs(:all => user_records) + end + + it 'should have environment as a prerequisite' do + expect(subject.prerequisites).to include("environment") + end + + it "finds all active schedules" do + subject.invoke + end +end diff --git a/spec/models/schedule_spec.rb b/spec/models/schedule_spec.rb new file mode 100644 index 00000000..f5fbc8f9 --- /dev/null +++ b/spec/models/schedule_spec.rb @@ -0,0 +1,47 @@ +require 'rails_helper' + +describe Schedule do + + describe "active" do + + let!(:school) { School.create!(name: 'School') } + let!(:recipient_list) { RecipientList.create!(name: 'Parents', recipient_id_array: [1, 2, 3]) } + let!(:kids_recipient_list) { RecipientList.create!(name: 'Kids', recipient_id_array: [4, 5, 6]) } + let!(:question_list) { QuestionList.create!(name: 'Questions', question_id_array: [1, 2, 3]) } + + let(:default_schedule_params) { + { + school: school, + recipient_list: recipient_list, + question_list: question_list, + name: 'Parents Schedule', + description: 'Schedule for parent questions', + start_date: 1.month.ago, + end_date: 11.months.from_now, + active: true + } + } + + let!(:active_schedule) do + Schedule.create!(default_schedule_params) + end + + let!(:active_schedule_kids) do + Schedule.create!(default_schedule_params.merge!(name: 'Kids Schedule', recipient_list: kids_recipient_list)) + end + + let!(:old_schedule) { + Schedule.create!(default_schedule_params.merge!(start_date: 13.month.ago, end_date: 1.months.ago)) + } + + let!(:paused_schedule) { + Schedule.create!(default_schedule_params.merge!(active: false)) + } + + it 'finds active schedules' do + active = Schedule.active + expect(active.length).to eq(2) + end + + end +end diff --git a/spec/rails_helper.rb b/spec/rails_helper.rb index 6f1ab146..941bd2dc 100644 --- a/spec/rails_helper.rb +++ b/spec/rails_helper.rb @@ -5,6 +5,7 @@ require File.expand_path('../../config/environment', __FILE__) abort("The Rails environment is running in production mode!") if Rails.env.production? require 'spec_helper' require 'rspec/rails' +Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f} # Add additional requires below this line. Rails is not loaded until this point! # Requires supporting ruby files with custom matchers and macros, etc, in diff --git a/spec/support/shared_contexts/rake.rb b/spec/support/shared_contexts/rake.rb new file mode 100644 index 00000000..d190e2bf --- /dev/null +++ b/spec/support/shared_contexts/rake.rb @@ -0,0 +1,19 @@ +require "rake" + +shared_context "rake" do + let(:rake) { Rake::Application.new } + let(:task_name) { self.class.top_level_description } + let(:task_path) { "lib/tasks/#{task_name.split(":").first}" } + subject { rake[task_name] } + + def loaded_files_excluding_current_rake_file + $".reject {|file| file == Rails.root.join("#{task_path}.rake").to_s } + end + + before do + Rake.application = rake + Rake.application.rake_require(task_path, [Rails.root.to_s], loaded_files_excluding_current_rake_file) + + Rake::Task.define_task(:environment) + end +end