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