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) |