Commit bdf659e8d550825a64e81d5e067a5ef45073474a
1 parent
267fdfec
Exists in
master
and in
1 other branch
add global tasks hash
dynamically create global rake tasks call global tasks from all
Showing
1 changed file
with
76 additions
and
75 deletions
Show diff stats
lib/tasks/test_api.rake
... | ... | @@ -3,40 +3,6 @@ namespace :test_api do |
3 | 3 | desc "Run all API tests" |
4 | 4 | task :all => [:question_vote_consistency] |
5 | 5 | |
6 | - desc "Ensure all appearance and votes have matching prompt_ids" | |
7 | - task :verify_appearance_vote_prompt_ids => :environment do | |
8 | - puts verify_appearance_vote_prompt_ids().inspect | |
9 | - end | |
10 | - | |
11 | - def verify_appearance_vote_prompt_ids | |
12 | - bad_records = Vote.connection.select_all " | |
13 | - SELECT votes.id | |
14 | - FROM votes LEFT JOIN appearances | |
15 | - ON (votes.id = appearances.answerable_id | |
16 | - AND appearances.answerable_type = 'Vote') | |
17 | - WHERE votes.prompt_id <> appearances.prompt_id" | |
18 | - success_message = "Appearance and vote prompt_ids match" | |
19 | - error_message = bad_records.map do |record| | |
20 | - "Vote ##{record["id"]} has a different prompt_id than its appearance." | |
21 | - end | |
22 | - error_message = error_message.join "\n" | |
23 | - return error_message.blank? ? [success_message, false] : [error_message, true] | |
24 | - end | |
25 | - | |
26 | - desc "Ensure that all choices have 0 <= score <= 100" | |
27 | - task :verify_range_of_choices_scores => :environment do | |
28 | - puts verify_range_of_choices_scores().inspect | |
29 | - end | |
30 | - | |
31 | - def verify_range_of_choices_scores | |
32 | - bad_choices_count = Choice.count(:conditions => 'score < 0 OR score > 100') | |
33 | - success_message = "All choices have a score within 0-100" | |
34 | - if bad_choices_count > 0 | |
35 | - error_message = "Some choices have a score less than 0 or greater than 100" | |
36 | - end | |
37 | - return error_message.blank? ? [success_message, false] : [error_message, true] | |
38 | - end | |
39 | - | |
40 | 6 | namespace :choice do |
41 | 7 | desc "Ensure that cached prompt counts are valid for a choice" |
42 | 8 | task :verify_cached_prompt_counts, [:choice_id] => :environment do |t, args| |
... | ... | @@ -104,24 +70,13 @@ namespace :test_api do |
104 | 70 | |
105 | 71 | end |
106 | 72 | |
107 | - message, error_occurred = response_time_tests | |
108 | - | |
109 | - if error_occurred | |
110 | - errors << message | |
111 | - else | |
112 | - successes << message | |
113 | - end | |
114 | - message, error_occurred = verify_range_of_choices_scores | |
115 | - if error_occurred | |
116 | - errors << message | |
117 | - else | |
118 | - successes << message | |
119 | - end | |
120 | - message, error_occurred = verify_appearance_vote_prompt_ids | |
121 | - if error_occurred | |
122 | - errors << message | |
123 | - else | |
124 | - successes << message | |
73 | + @global_tasks.each do |taskname, description| | |
74 | + message, error_occurred = send(taskname) | |
75 | + if error_occurred | |
76 | + errors << message | |
77 | + else | |
78 | + successes << message | |
79 | + end | |
125 | 80 | end |
126 | 81 | |
127 | 82 | email_text = "Conducted the following tests on API data and found the following results\n" + "For each of the #{questions.length} questions in the database: \n" |
... | ... | @@ -436,44 +391,90 @@ namespace :test_api do |
436 | 391 | |
437 | 392 | # END OF QUESTION NAMESPACE |
438 | 393 | |
394 | + namespace :global do | |
395 | + @global_tasks = { | |
396 | + :response_time_tests => "Verify all vote objects have accurate response time", | |
397 | + :verify_appearance_vote_prompt_ids => "Ensure all appearance and votes have matching prompt_ids", | |
398 | + :verify_range_of_choices_scores => "Ensure that all choices have 0 <= score <= 100" | |
399 | + } | |
439 | 400 | |
440 | - def response_time_tests | |
441 | - error_message = "" | |
442 | - success_message = "All Vote objects have an client response time < calculated server roundtrip time\n" | |
443 | - | |
444 | - recording_client_time_start_date = Vote.find(:all, :conditions => 'time_viewed IS NOT NULL', :order => 'created_at', :limit => 1).first.created_at | |
401 | + # dynamically create tasks for each global task | |
402 | + @global_tasks.each do |taskname, description| | |
403 | + desc description | |
404 | + task taskname => :environment do | |
405 | + # call task | |
406 | + puts send(taskname).inspect | |
407 | + end | |
408 | + end | |
409 | + | |
410 | + def verify_appearance_vote_prompt_ids | |
411 | + bad_records = Vote.connection.select_all " | |
412 | + SELECT votes.id | |
413 | + FROM votes LEFT JOIN appearances | |
414 | + ON (votes.id = appearances.answerable_id | |
415 | + AND appearances.answerable_type = 'Vote') | |
416 | + WHERE votes.prompt_id <> appearances.prompt_id" | |
417 | + success_message = "Appearance and vote prompt_ids match" | |
418 | + error_message = bad_records.map do |record| | |
419 | + "Vote ##{record["id"]} has a different prompt_id than its appearance." | |
420 | + end | |
421 | + error_message = error_message.join "\n" | |
422 | + return error_message.blank? ? [success_message, false] : [error_message, true] | |
423 | + end | |
424 | + | |
425 | + desc "Ensure that all choices have 0 <= score <= 100" | |
426 | + task :verify_range_of_choices_scores => :environment do | |
427 | + puts verify_range_of_choices_scores().inspect | |
428 | + end | |
429 | + | |
430 | + def verify_range_of_choices_scores | |
431 | + bad_choices_count = Choice.count(:conditions => 'score < 0 OR score > 100') | |
432 | + success_message = "All choices have a score within 0-100" | |
433 | + if bad_choices_count > 0 | |
434 | + error_message = "Some choices have a score less than 0 or greater than 100" | |
435 | + end | |
436 | + return error_message.blank? ? [success_message, false] : [error_message, true] | |
437 | + end | |
438 | + def response_time_tests | |
439 | + error_message = "" | |
440 | + success_message = "All Vote objects have an client response time < calculated server roundtrip time\n" | |
445 | 441 | |
446 | - Vote.find_each(:batch_size => 1000, :include => :appearance) do |v| | |
442 | + recording_client_time_start_date = Vote.find(:all, :conditions => 'time_viewed IS NOT NULL', :order => 'created_at', :limit => 1).first.created_at | |
447 | 443 | |
448 | - next if v.nil? || v.appearance.nil? | |
449 | - # Subtracting DateTime objects results in the difference in days | |
450 | - server_response_time = v.created_at.to_f - v.appearance.created_at.to_f | |
451 | - if server_response_time < 0 | |
452 | - the_error_msg = "Error! Vote #{v.id} was created before the appearance associated with it: Appearance id: #{v.appearance.id}, Vote creation time: #{v.created_at.to_s}, Appearance creation time: #{v.appearance.created_at.to_s}\n" | |
444 | + Vote.find_each(:batch_size => 1000, :include => :appearance) do |v| | |
453 | 445 | |
454 | - error_message += the_error_msg | |
455 | - print "Error!" + the_error_msg | |
456 | - end | |
446 | + next if v.nil? || v.appearance.nil? | |
447 | + # Subtracting DateTime objects results in the difference in days | |
448 | + server_response_time = v.created_at.to_f - v.appearance.created_at.to_f | |
449 | + if server_response_time < 0 | |
450 | + the_error_msg = "Error! Vote #{v.id} was created before the appearance associated with it: Appearance id: #{v.appearance.id}, Vote creation time: #{v.created_at.to_s}, Appearance creation time: #{v.appearance.created_at.to_s}\n" | |
457 | 451 | |
458 | - if v.time_viewed && v.time_viewed/1000 > server_response_time | |
459 | - the_error_msg = "Warning! Vote #{v.id} with Appearance #{v.appearance.id}, has a longer client response time than is possible. Server roundtrip time is: #{v.created_at.to_f - v.appearance.created_at.to_f} seconds, but client side response time is: #{v.time_viewed.to_f / 1000.0} seconds\n" | |
452 | + error_message += the_error_msg | |
453 | + print "Error!" + the_error_msg | |
454 | + end | |
460 | 455 | |
461 | - error_message += the_error_msg | |
462 | - print the_error_msg | |
456 | + if v.time_viewed && v.time_viewed/1000 > server_response_time | |
457 | + the_error_msg = "Warning! Vote #{v.id} with Appearance #{v.appearance.id}, has a longer client response time than is possible. Server roundtrip time is: #{v.created_at.to_f - v.appearance.created_at.to_f} seconds, but client side response time is: #{v.time_viewed.to_f / 1000.0} seconds\n" | |
463 | 458 | |
464 | - elsif v.time_viewed.nil? | |
465 | - if v.created_at > recording_client_time_start_date && v.missing_response_time_exp != 'invalid' | |
466 | - the_error_msg = "Error! Vote #{v.id} with Appearance #{v.appearance.id}, does not have a client response, even though it should! Vote creation time: #{v.created_at.to_s}, Appearance creation time: #{v.appearance.created_at.to_s}, Client side response time: #{v.time_viewed}\n" | |
467 | 459 | error_message += the_error_msg |
468 | 460 | print the_error_msg |
461 | + | |
462 | + elsif v.time_viewed.nil? | |
463 | + if v.created_at > recording_client_time_start_date && v.missing_response_time_exp != 'invalid' | |
464 | + the_error_msg = "Error! Vote #{v.id} with Appearance #{v.appearance.id}, does not have a client response, even though it should! Vote creation time: #{v.created_at.to_s}, Appearance creation time: #{v.appearance.created_at.to_s}, Client side response time: #{v.time_viewed}\n" | |
465 | + error_message += the_error_msg | |
466 | + print the_error_msg | |
467 | + end | |
468 | + | |
469 | 469 | end |
470 | 470 | |
471 | 471 | end |
472 | 472 | |
473 | + return error_message.blank? ? [success_message, false] : [error_message, true] | |
473 | 474 | end |
474 | - | |
475 | - return error_message.blank? ? [success_message, false] : [error_message, true] | |
476 | 475 | end |
476 | + # END OF GLOBAL NAMESPACE | |
477 | + | |
477 | 478 | end |
478 | 479 | |
479 | 480 | def cleanup_args(args) | ... | ... |