Commit b2d2b3432fa45bc20302a9f8f3925377d6338612
1 parent
6d2cf16a
Exists in
master
and in
1 other branch
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,6 +17,38 @@ namespace :prune_db do | ||
| 17 | end | 17 | end |
| 18 | end | 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 | desc "Generate appearances for any votes that have no current appearance, should only need to be run once" | 52 | desc "Generate appearances for any votes that have no current appearance, should only need to be run once" |
| 21 | task(:generate_appearances_for_existing_votes => :environment) do | 53 | task(:generate_appearances_for_existing_votes => :environment) do |
| 22 | votes = Vote.all | 54 | votes = Vote.all |
lib/tasks/test_api.rake
| 1 | namespace :test_api do | 1 | namespace :test_api do |
| 2 | 2 | ||
| 3 | desc "Run all API tests" | 3 | desc "Run all API tests" |
| 4 | - task :all => [:question_vote_consistency,:generate_density_information] | 4 | + task :all => [:question_vote_consistency] |
| 5 | 5 | ||
| 6 | desc "Ensure all appearance and votes have matching prompt_ids" | 6 | desc "Ensure all appearance and votes have matching prompt_ids" |
| 7 | task :verify_appearance_vote_prompt_ids => :environment do | 7 | task :verify_appearance_vote_prompt_ids => :environment do |
| @@ -37,66 +37,36 @@ namespace :test_api do | @@ -37,66 +37,36 @@ namespace :test_api do | ||
| 37 | return error_message.blank? ? [success_message, false] : [error_message, true] | 37 | return error_message.blank? ? [success_message, false] : [error_message, true] |
| 38 | end | 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 | end | 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 | end | 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 | end | 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 | end | 68 | end |
| 99 | - | 69 | + return error_message.blank? ? [success_message, false] : [error_message, true] |
| 100 | end | 70 | end |
| 101 | end | 71 | end |
| 102 | 72 | ||
| @@ -444,13 +414,17 @@ namespace :test_api do | @@ -444,13 +414,17 @@ namespace :test_api do | ||
| 444 | return error_message.blank? ? [success_message, false] : [error_message, true] | 414 | return error_message.blank? ? [success_message, false] : [error_message, true] |
| 445 | end | 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 | end | 426 | end |
| 427 | + | ||
| 454 | end | 428 | end |
| 455 | 429 | ||
| 456 | def answered_appearances_equals_votes_and_skips(question) | 430 | def answered_appearances_equals_votes_and_skips(question) |