TestRail-API.t 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. use strict;
  2. use warnings;
  3. use TestRail::API;
  4. use Test::More tests => 46;
  5. use Scalar::Util 'reftype';
  6. use Prompt::Timeout;
  7. my $apiurl = $ENV{'TESTRAIL_API_URL'};
  8. my $login = $ENV{'TESTRAIL_USER'};
  9. my $pw = $ENV{'TESTRAIL_PASSWORD'};
  10. #This monkey business seems odd, but can be seen when done with TEST_VERBOSE=1
  11. note "Please type the URL to your testrail installation:" if !$apiurl;
  12. $apiurl //= prompt("",undef,15);
  13. print "\n";
  14. note "Please type the testrail User you would like to use for this session" if !$login;
  15. $login //= prompt("",undef,15);
  16. print "\n";
  17. note "Please type the user's password" if !$pw;
  18. $pw //= prompt("",undef,15);
  19. print "\n";
  20. #EXAMPLE:
  21. #my $apiurl = 'http://testrails.cpanel.qa/testrail';
  22. #my $login = 'some.guyb@whee.net';
  23. #my $pw = '5gP77MdrSIB68UFWvhIK';
  24. SKIP: {
  25. skip("Insufficient credentials",46) if (!$apiurl || !$login || !$pw);
  26. my $tr = new TestRail::API($apiurl,$login,$pw,0);
  27. #Test USER methods
  28. ok($tr->getUsers(),"Get Users returns list");
  29. my $myuser = $tr->getUserByEmail($login);
  30. is($myuser->{'email'},$login,"Can get user by email");
  31. is($tr->getUserByID($myuser->{'id'})->{'id'},$myuser->{'id'},"Can get user by ID");
  32. is($tr->getUserByName($myuser->{'name'})->{'name'},$myuser->{'name'},"Can get user by Name");
  33. #Test PROJECT methods
  34. my $project_name = 'CRUSH ALL HUMANS';
  35. my $new_project = $tr->createProject($project_name,'Robo-Signed Soviet 5 Year Project');
  36. is($new_project->{'name'},$project_name,"Can create new project");
  37. ok($tr->getProjects(),"Get Projects returns list");
  38. is($tr->getProjectByName($project_name)->{'name'},$project_name,"Can get project by name");
  39. my $pjid = $tr->getProjectByID($new_project->{'id'});
  40. is(reftype($pjid) eq 'HASH' ? $pjid->{'id'} : $pjid,$new_project->{'id'},"Can get project by id");
  41. #Test TESTSUITE methods
  42. my $suite_name = 'HAMBURGER-IZE HUMANITY';
  43. my $new_suite = $tr->createTestSuite($new_project->{'id'},$suite_name,"Robo-Signed Patriotic People's TestSuite");
  44. is($new_suite->{'name'},$suite_name,"Can create new testsuite");
  45. ok($tr->getTestSuites($new_project->{'id'}),"Can get listing of testsuites for project");
  46. is($tr->getTestSuiteByName($new_project->{'id'},$new_suite->{'name'})->{'name'},$new_suite->{'name'},"Can get suite by name");
  47. is($tr->getTestSuiteByID($new_suite->{'id'})->{'id'},$new_suite->{'id'},"Can get suite by id");
  48. #Test SECTION methods -- roughly analogous to TESTSUITES in TL
  49. my $section_name = 'CARBON LIQUEFACTION';
  50. my $new_section = $tr->createSection($new_project->{'id'},$new_suite->{'id'},$section_name);
  51. is($new_section->{'name'},$section_name,"Can create new section");
  52. ok($tr->getSections($new_project->{'id'},$new_suite->{'id'}),"Can get section listing");
  53. is($tr->getSectionByName($new_project->{'id'},$new_suite->{'id'},$section_name)->{'name'},$section_name,"Can get section by name");
  54. is($tr->getSectionByID($new_section->{'id'})->{'id'},$new_section->{'id'},"Can get new section by id");
  55. #Test CASE methods
  56. my $case_name = 'STROGGIFY POPULATION CENTERS';
  57. my $new_case = $tr->createCase($new_section->{'id'},$case_name);
  58. is($new_case->{'title'},$case_name,"Can create new test case");
  59. ok($tr->getCases($new_project->{'id'},$new_suite->{'id'},$new_section->{'id'}),"Can get case listing");
  60. is($tr->getCaseByName($new_project->{'id'}, $new_suite->{'id'}, $new_section->{'id'}, $case_name)->{'title'},$case_name,"Can get case by name");
  61. is($tr->getCaseByID($new_case->{'id'})->{'id'},$new_case->{'id'},"Can get case by ID");
  62. #Test RUN methods
  63. my $run_name = 'SEND T-1000 INFILTRATION UNITS BACK IN TIME';
  64. my $new_run = $tr->createRun($new_project->{'id'},$new_suite->{'id'},$run_name,"ACQUIRE CLOTHES, BOOTS AND MOTORCYCLE");
  65. is($new_run->{'name'},$run_name,"Can create new run");
  66. ok($tr->getRuns($new_project->{'id'}),"Can get list of runs");
  67. is($tr->getRunByName($new_project->{'id'},$run_name)->{'name'},$run_name,"Can get run by name");
  68. is($tr->getRunByID($new_run->{'id'})->{'id'},$new_run->{'id'},"Can get run by ID");
  69. #Test MILESTONE methods
  70. my $milestone_name = "Humanity Exterminated";
  71. my $new_milestone = $tr->createMilestone($new_project->{'id'},$milestone_name,"Kill quota reached if not achieved in 5 years",time()+157788000); #It IS a soviet 5-year plan after all :)
  72. is($new_milestone->{'name'},$milestone_name,"Can create new milestone");
  73. ok($tr->getMilestones($new_project->{'id'}),"Can get list of milestones");
  74. is($tr->getMilestoneByName($new_project->{'id'},$milestone_name)->{'name'},$milestone_name,"Can get milestone by name");
  75. is($tr->getMilestoneByID($new_milestone->{'id'})->{'id'},$new_milestone->{'id'},"Can get milestone by ID");
  76. #Test PLAN methods
  77. my $plan_name = "GosPlan";
  78. my $new_plan = $tr->createPlan($new_project->{'id'},$plan_name,"Soviet 5-year agriculture plan to liquidate Kulaks",$new_milestone->{'id'},[{ suite_id => $new_suite->{'id'}, name => "Executing the great plan"}]);
  79. is($new_plan->{'name'},$plan_name,"Can create new plan");
  80. ok($tr->getPlans($new_project->{'id'}),"Can get list of plans");
  81. is($tr->getPlanByName($new_project->{'id'},$plan_name)->{'name'},$plan_name,"Can get plan by name");
  82. is($tr->getPlanByID($new_plan->{'id'})->{'id'},$new_plan->{'id'},"Can get plan by ID");
  83. #Test TEST/RESULT methods
  84. my $tests = $tr->getTests($new_run->{'id'});
  85. ok($tests,"Can get tests");
  86. is($tr->getTestByName($new_run->{'id'},$tests->[0]->{'title'})->{'title'},$tests->[0]->{'title'},"Can get test by name");
  87. is($tr->getTestByID($tests->[0]->{'id'})->{'id'},$tests->[0]->{'id'},"Can get test by ID");
  88. my $resTypes = $tr->getTestResultFields();
  89. my $statusTypes = $tr->getPossibleTestStatuses();
  90. ok($resTypes,"Can get test result fields");
  91. ok($statusTypes,"Can get possible test statuses");
  92. my $result = $tr->createTestResults($tests->[0]->{'id'},$statusTypes->[0]->{'id'},"REAPER FORCES INBOUND");
  93. ok(defined($result->{'id'}),"Can add test results");
  94. my $results = $tr->getTestResults($tests->[0]->{'id'});
  95. is($results->[0]->{'id'},$result->{'id'},"Can get results for test");
  96. #Delete a plan
  97. ok($tr->deletePlan($new_plan->{'id'}),"Can delete plan");
  98. #Delete a milestone
  99. ok($tr->deleteMilestone($new_milestone->{'id'}),"Can delete milestone");
  100. #Delete a run
  101. ok($tr->deleteRun($new_run->{'id'}),"Can delete run");
  102. #Delete a case
  103. ok($tr->deleteCase($new_case->{'id'}),"Can delete Case");
  104. #Delete a section
  105. ok($tr->deleteSection($new_section->{'id'}),"Can delete Section");
  106. #Delete a testsuite
  107. ok($tr->deleteTestSuite($new_suite->{'id'}),"Can delete TestSuite");
  108. #Delete project now that we are done with it
  109. ok($tr->deleteProject($new_project->{'id'}),"Can delete project");
  110. }
  111. 1;