Commit b2d2b3432fa45bc20302a9f8f3925377d6338612

Authored by Luke Baker
1 parent 6d2cf16a

add namespaces for question / choices

remove generate_densities from api test and move to prune_db
Showing 2 changed files with 65 additions and 59 deletions   Show diff stats
lib/tasks/prune_db.rake
... ... @@ -17,6 +17,38 @@ namespace :prune_db do
17 17 end
18 18 end
19 19  
  20 + desc "Generate density information for each question - should be run nightly"
  21 + task(:generate_density_information => :environment) do
  22 +
  23 + # calculating densities is expensive, so only do it for questions with new data
  24 + question_ids = Vote.count(:conditions => ['date(created_at) = ?', Date.yesterday], :group => 'question_id').keys()
  25 +
  26 + Question.find(:all, :conditions => {:id => question_ids}).each do |q|
  27 + q.save_densities!
  28 + end
  29 +
  30 + # we can just copy the previous night's data for remaining questions
  31 +
  32 + Question.find(:all, :conditions => ['id NOT IN (?)', question_ids]).each do |q|
  33 + densities = q.densities.find(:all, :conditions => ['date(created_at) = ?', Date.yesterday])
  34 +
  35 +
  36 + densities.each do |d|
  37 + new_d = d.clone
  38 + new_d.created_at = new_d.updated_at = Time.now
  39 + new_d.save!
  40 + end
  41 +
  42 + if densities.blank?
  43 + #fallback in case there wasn't a successful run yesterday
  44 + q.save_densities!
  45 +
  46 + end
  47 +
  48 + end
  49 + end
  50 +
  51 +
20 52 desc "Generate appearances for any votes that have no current appearance, should only need to be run once"
21 53 task(:generate_appearances_for_existing_votes => :environment) do
22 54 votes = Vote.all
... ...
lib/tasks/test_api.rake
1 1 namespace :test_api do
2 2  
3 3 desc "Run all API tests"
4   - task :all => [:question_vote_consistency,:generate_density_information]
  4 + task :all => [:question_vote_consistency]
5 5  
6 6 desc "Ensure all appearance and votes have matching prompt_ids"
7 7 task :verify_appearance_vote_prompt_ids => :environment do
... ... @@ -37,66 +37,36 @@ namespace :test_api do
37 37 return error_message.blank? ? [success_message, false] : [error_message, true]
38 38 end
39 39  
40   - desc "Ensure that cached prompt counts are valid for a choice"
41   - task :verify_cached_prompt_counts, [:choice_id] => :environment do |t, args|
42   - choice = Choice.find(args[:choice_id])
43   - puts verify_cached_prompt_counts(choice).inspect
44   - end
45   -
46   - def verify_cached_prompt_counts(choice)
47   - success_message = "Choice has accurate prompt cache count"
48   - if choice.prompts_on_the_left.count != choice.prompts_on_the_left_count || choice.prompts_on_the_right.count != choice.prompts_on_the_right_count
49   - error_message = "Choice #{choice.id} in Question ##{choice.question_id} has inaccurate prompt count cache"
  40 + namespace :choice do
  41 + desc "Ensure that cached prompt counts are valid for a choice"
  42 + task :verify_cached_prompt_counts, [:choice_id] => :environment do |t, args|
  43 + choice = Choice.find(args[:choice_id])
  44 + puts verify_cached_prompt_counts(choice).inspect
50 45 end
51   - return error_message.blank? ? [success_message, false] : [error_message, true]
52   - end
53   -
54   - desc "Ensure that an idea: appearances on left + appearances on right >= (wins + losses + skips)"
55   - task :verify_choice_appearances_and_votes, [:choice_id] => :environment do |t, args|
56   - choice = Choice.find(args[:choice_id])
57   - puts verify_choice_appearances_and_votes(choice).inspect
58   - end
59 46  
60   - def verify_choice_appearances_and_votes(choice)
61   - success_message = "Choice has more appearances than votes and skips"
62   - all_appearances = choice.appearances_on_the_left.count + choice.appearances_on_the_right.count
63   - skips = choice.skips_on_the_left.count + choice.skips_on_the_right.count
64   -
65   - if all_appearances < choice.wins + choice.losses + skips
66   - error_message = "Choice #{choice.id} in Question ##{choice.question_id} has fewer appearances than wins + losses + skips"
  47 + def verify_cached_prompt_counts(choice)
  48 + success_message = "Choice has accurate prompt cache count"
  49 + if choice.prompts_on_the_left.count != choice.prompts_on_the_left_count || choice.prompts_on_the_right.count != choice.prompts_on_the_right_count
  50 + error_message = "Choice #{choice.id} in Question ##{choice.question_id} has inaccurate prompt count cache"
  51 + end
  52 + return error_message.blank? ? [success_message, false] : [error_message, true]
67 53 end
68   - return error_message.blank? ? [success_message, false] : [error_message, true]
69   - end
70   -
71   -
72   - desc "Generate density information for each question - should be run nightly"
73   - task(:generate_density_information => :environment) do
74 54  
75   - # calculating densities is expensive, so only do it for questions with new data
76   - question_ids = Vote.count(:conditions => ['date(created_at) = ?', Date.yesterday], :group => 'question_id').keys()
77   -
78   - Question.find(:all, :conditions => {:id => question_ids}).each do |q|
79   - q.save_densities!
  55 + desc "Ensure that an idea: appearances on left + appearances on right >= (wins + losses + skips)"
  56 + task :verify_choice_appearances_and_votes, [:choice_id] => :environment do |t, args|
  57 + choice = Choice.find(args[:choice_id])
  58 + puts verify_choice_appearances_and_votes(choice).inspect
80 59 end
81 60  
82   - # we can just copy the previous night's data for remaining questions
83   -
84   - Question.find(:all, :conditions => ['id NOT IN (?)', question_ids]).each do |q|
85   - densities = q.densities.find(:all, :conditions => ['date(created_at) = ?', Date.yesterday])
86   -
87   -
88   - densities.each do |d|
89   - new_d = d.clone
90   - new_d.created_at = new_d.updated_at = Time.now
91   - new_d.save!
92   - end
93   -
94   - if densities.blank?
95   - #fallback in case there wasn't a successful run yesterday
96   - q.save_densities!
  61 + def verify_choice_appearances_and_votes(choice)
  62 + success_message = "Choice has more appearances than votes and skips"
  63 + all_appearances = choice.appearances_on_the_left.count + choice.appearances_on_the_right.count
  64 + skips = choice.skips_on_the_left.count + choice.skips_on_the_right.count
97 65  
  66 + if all_appearances < choice.wins + choice.losses + skips
  67 + error_message = "Choice #{choice.id} in Question ##{choice.question_id} has fewer appearances than wins + losses + skips"
98 68 end
99   -
  69 + return error_message.blank? ? [success_message, false] : [error_message, true]
100 70 end
101 71 end
102 72  
... ... @@ -444,13 +414,17 @@ namespace :test_api do
444 414 return error_message.blank? ? [success_message, false] : [error_message, true]
445 415 end
446 416  
447   - desc "Ensure that a question has: answered_appearances == votes + skips"
448   - task :answered_appearances_equals_votes_and_skips, [:question_id] => :environment do |t, args|
449   - a = cleanup_args(args)
450   - questions = Question.find(a[:question_id])
451   - questions.each do |question|
452   - puts answered_appearances_equals_votes_and_skips(question).inspect
  417 + namespace :question do
  418 +
  419 + desc "Ensure that a question has: answered_appearances == votes + skips"
  420 + task :answered_appearances_equals_votes_and_skips, [:question_id] => :environment do |t, args|
  421 + a = cleanup_args(args)
  422 + questions = Question.find(a[:question_id])
  423 + questions.each do |question|
  424 + puts answered_appearances_equals_votes_and_skips(question).inspect
  425 + end
453 426 end
  427 +
454 428 end
455 429  
456 430 def answered_appearances_equals_votes_and_skips(question)
... ...