| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450 |
- #!/usr/bin/env perl
- use strict;
- use warnings;
- use Scalar::Util qw{reftype};
- use TestRail::API;
- use Test::LWP::UserAgent::TestRailMock;
- use Test::Rail::Parser;
- use Test::More 'tests' => 48;
- use Test::Fatal qw{exception};
- #Same song and dance as in TestRail-API.t
- my $apiurl = $ENV{'TESTRAIL_API_URL'};
- my $login = $ENV{'TESTRAIL_USER'};
- my $pw = $ENV{'TESTRAIL_PASSWORD'};
- my $is_mock = (!$apiurl && !$login && !$pw);
- ($apiurl,$login,$pw) = ('http://testrail.local','teodesian@cpan.org','fake') if $is_mock;
- my ($debug,$browser);
- $debug = 1;
- if ($is_mock) {
- $browser = $Test::LWP::UserAgent::TestRailMock::mockObject;
- }
- #test exceptions...
- #TODO
- #case_per_ok mode
- my $fcontents = "
- fake.test ..
- 1..2
- ok 1 - STORAGE TANKS SEARED
- #goo
- not ok 2 - NOT SO SEARED AFTER ARR
- ";
- my $tap;
- my $res = exception {
- $tap = Test::Rail::Parser->new({
- 'tap' => $fcontents,
- 'apiurl' => $apiurl,
- 'user' => $login,
- 'pass' => $pw,
- 'debug' => $debug,
- 'browser' => $browser,
- 'run' => 'TestingSuite',
- 'project' => 'TestProject',
- 'merge' => 1,
- 'case_per_ok' => 1
- });
- };
- is($res,undef,"TR Parser doesn't explode on instantiation");
- isa_ok($tap,"Test::Rail::Parser");
- if (!$res) {
- $tap->run();
- is($tap->{'errors'},0,"No errors encountered uploading case results");
- }
- undef $tap;
- $res = exception {
- $tap = Test::Rail::Parser->new({
- 'source' => 't/fake.test',
- 'apiurl' => $apiurl,
- 'user' => $login,
- 'pass' => $pw,
- 'debug' => $debug,
- 'browser' => $browser,
- 'run' => 'TestingSuite',
- 'project' => 'TestProject',
- 'merge' => 1,
- 'case_per_ok' => 1
- });
- };
- is($res,undef,"TR Parser doesn't explode on instantiation");
- isa_ok($tap,"Test::Rail::Parser");
- if (!$res) {
- $tap->run();
- is($tap->{'errors'},0,"No errors encountered uploading case results");
- }
- $fcontents = "ok 1 - STORAGE TANKS SEARED
- # whee
- not ok 2 - NOT SO SEARED AFTER ARR
- # Failed test 'NOT SO SEARED AFTER ARR'
- # at t/fake.test line 10.
- # Looks like you failed 1 test of 2.
- ";
- is($tap->{'raw_output'},$fcontents,"Full raw content uploaded in non step results mode");
- #Check that time run is being uploaded
- my $timeResults = $tap->{'tr_opts'}->{'testrail'}->getTestResults(1);
- if ( ( reftype($timeResults) || 'undef') eq 'ARRAY') {
- is( $timeResults->[0]->{'elapsed'}, '2s', "Plugin correctly sets elapsed time");
- } else {
- fail("Could not get test results to check elapsed time!");
- }
- #Check the time formatting routine.
- is(Test::Rail::Parser::_compute_elapsed(0,0),undef,"Elapsed computation correct at second boundary");
- is(Test::Rail::Parser::_compute_elapsed(0,61),'1m 1s',"Elapsed computation correct at minute boundary");
- is(Test::Rail::Parser::_compute_elapsed(0,3661),'1h 1m 1s',"Elapsed computation correct at hour boundary");
- is(Test::Rail::Parser::_compute_elapsed(0,86461),'24h 1m 1s',"Elapsed computation correct at day boundary");
- #Time for non case_per_ok mode
- undef $tap;
- $res = exception {
- $tap = Test::Rail::Parser->new({
- 'source' => 't/faker.test',
- 'apiurl' => $apiurl,
- 'user' => $login,
- 'pass' => $pw,
- 'debug' => $debug,
- 'browser' => $browser,
- 'run' => 'OtherOtherSuite',
- 'project' => 'TestProject',
- 'merge' => 1,
- 'step_results' => 'step_results'
- });
- };
- is($res,undef,"TR Parser doesn't explode on instantiation");
- isa_ok($tap,"Test::Rail::Parser");
- if (!$res) {
- $tap->run();
- is($tap->{'errors'},0,"No errors encountered uploading case results");
- }
- #Default mode
- undef $tap;
- $res = exception {
- $tap = Test::Rail::Parser->new({
- 'source' => 't/faker.test',
- 'apiurl' => $apiurl,
- 'user' => $login,
- 'pass' => $pw,
- 'debug' => $debug,
- 'browser' => $browser,
- 'run' => 'OtherOtherSuite',
- 'project' => 'TestProject',
- 'merge' => 1
- });
- };
- is($res,undef,"TR Parser doesn't explode on instantiation");
- isa_ok($tap,"Test::Rail::Parser");
- if (!$res) {
- $tap->run();
- is($tap->{'errors'},0,"No errors encountered uploading case results");
- }
- #Default mode
- undef $tap;
- $fcontents = "
- fake.test ..
- 1..2
- ok 1 - STORAGE TANKS SEARED
- #Subtest NOT SO SEARED AFTER ARR
- ok 1 - STROGGIFY POPULATION CENTERS
- not ok 2 - STROGGIFY POPULATION CENTERS
- #goo
- not ok 2 - NOT SO SEARED AFTER ARR
- ";
- $res = exception {
- $tap = Test::Rail::Parser->new({
- 'tap' => $fcontents,
- 'apiurl' => $apiurl,
- 'user' => $login,
- 'pass' => $pw,
- 'debug' => $debug,
- 'browser' => $browser,
- 'run' => 'TestingSuite',
- 'project' => 'TestProject',
- 'case_per_ok' => 1,
- 'merge' => 1
- });
- };
- is($res,undef,"TR Parser doesn't explode on instantiation");
- isa_ok($tap,"Test::Rail::Parser");
- if (!$res) {
- $tap->run();
- is($tap->{'errors'},0,"No errors encountered uploading case results");
- }
- #skip/todo in case_per_ok
- undef $tap;
- $res = exception {
- $tap = Test::Rail::Parser->new({
- 'source' => 't/skip.test',
- 'apiurl' => $apiurl,
- 'user' => $login,
- 'pass' => $pw,
- 'debug' => $debug,
- 'browser' => $browser,
- 'run' => 'TestingSuite',
- 'project' => 'TestProject',
- 'case_per_ok' => 1,
- 'merge' => 1
- });
- };
- is($res,undef,"TR Parser doesn't explode on instantiation");
- isa_ok($tap,"Test::Rail::Parser");
- if (!$res) {
- $tap->run();
- is($tap->{'errors'},0,"No errors encountered uploading case results");
- }
- #Default mode skip (skip_all)
- undef $tap;
- $res = exception {
- $tap = Test::Rail::Parser->new({
- 'source' => 't/skipall.test',
- 'apiurl' => $apiurl,
- 'user' => $login,
- 'pass' => $pw,
- 'debug' => $debug,
- 'browser' => $browser,
- 'run' => 'TestingSuite',
- 'project' => 'TestProject',
- 'merge' => 1
- });
- };
- is($res,undef,"TR Parser doesn't explode on instantiation");
- isa_ok($tap,"Test::Rail::Parser");
- if (!$res) {
- $tap->run();
- is($tap->{'errors'},0,"No errors encountered uploading case results");
- }
- #Ok, let's test the plan, config, and spawn bits.
- undef $tap;
- $res = exception {
- $tap = Test::Rail::Parser->new({
- 'source' => 't/skipall.test',
- 'apiurl' => $apiurl,
- 'user' => $login,
- 'pass' => $pw,
- 'debug' => $debug,
- 'browser' => $browser,
- 'run' => 'hoo hoo I do not exist',
- 'plan' => 'mah dubz plan',
- 'configs' => ['testPlatform1'],
- 'project' => 'TestProject',
- 'merge' => 1
- });
- };
- isnt($res,undef,"TR Parser explodes on instantiation when asking for run not in plan");
- undef $tap;
- $res = exception {
- $tap = Test::Rail::Parser->new({
- 'source' => 't/skipall.test',
- 'apiurl' => $apiurl,
- 'user' => $login,
- 'pass' => $pw,
- 'debug' => $debug,
- 'browser' => $browser,
- 'run' => 'TestingSuite',
- 'plan' => 'mah dubz plan',
- 'configs' => ['testConfig'],
- 'project' => 'TestProject',
- 'merge' => 1
- });
- };
- is($res,undef,"TR Parser doesn't explode on instantiation looking for existing run in plan");
- isa_ok($tap,"Test::Rail::Parser");
- if (!$res) {
- $tap->run();
- is($tap->{'errors'},0,"No errors encountered uploading case results");
- }
- #Now, test spawning.
- undef $tap;
- $res = exception {
- $tap = Test::Rail::Parser->new({
- 'source' => 't/skipall.test',
- 'apiurl' => $apiurl,
- 'user' => $login,
- 'pass' => $pw,
- 'debug' => $debug,
- 'browser' => $browser,
- 'run' => 'TestingSuite2',
- 'plan' => 'mah dubz plan',
- 'configs' => ['testPlatform1'],
- 'project' => 'TestProject',
- 'spawn' => 9,
- 'merge' => 1
- });
- };
- is($res,undef,"TR Parser doesn't explode on instantiation when spawning run in plan");
- isa_ok($tap,"Test::Rail::Parser");
- if (!$res) {
- $tap->run();
- is($tap->{'errors'},0,"No errors encountered uploading case results");
- }
- #Test spawning of builds not in plans.
- #Now, test spawning.
- undef $tap;
- $res = exception {
- $tap = Test::Rail::Parser->new({
- 'source' => 't/skipall.test',
- 'apiurl' => $apiurl,
- 'user' => $login,
- 'pass' => $pw,
- 'debug' => $debug,
- 'browser' => $browser,
- 'run' => 'TestingSuite2',
- 'project' => 'TestProject',
- 'spawn' => 9,
- 'merge' => 1
- });
- };
- is($res,undef,"TR Parser doesn't explode on instantiation when spawning run in plan");
- isa_ok($tap,"Test::Rail::Parser");
- if (!$res) {
- $tap->run();
- is($tap->{'errors'},0,"No errors encountered uploading case results");
- }
- #Test spawning of plans and runs.
- undef $tap;
- $res = exception {
- $tap = Test::Rail::Parser->new({
- 'source' => 't/skipall.test',
- 'apiurl' => $apiurl,
- 'user' => $login,
- 'pass' => $pw,
- 'debug' => $debug,
- 'browser' => $browser,
- 'run' => 'BogoRun',
- 'plan' => 'BogoPlan',
- 'project' => 'TestProject',
- 'spawn' => 9,
- 'merge' => 1
- });
- };
- is($res,undef,"TR Parser doesn't explode on instantiation when spawning run in plan");
- isa_ok($tap,"Test::Rail::Parser");
- if (!$res) {
- $tap->run();
- is($tap->{'errors'},0,"No errors encountered uploading case results");
- }
- #Verify that case_per_ok and step_results are mutually exclusive, and die.
- undef $tap;
- $res = exception {
- $tap = Test::Rail::Parser->new({
- 'source' => 't/skipall.test',
- 'apiurl' => $apiurl,
- 'user' => $login,
- 'pass' => $pw,
- 'debug' => $debug,
- 'browser' => $browser,
- 'run' => 'BogoRun',
- 'plan' => 'BogoPlan',
- 'project' => 'TestProject',
- 'spawn' => 9,
- 'merge' => 1,
- 'case_per_ok' => 1,
- 'step_results' => 'sr_step_results'
- });
- };
- isnt($res,undef,"TR Parser explodes on instantiation when mutually exclusive options are passed");
- #Check that per-section spawn works
- undef $tap;
- $res = exception {
- $tap = Test::Rail::Parser->new({
- 'source' => 't/fake.test',
- 'apiurl' => $apiurl,
- 'user' => $login,
- 'pass' => $pw,
- 'debug' => $debug,
- 'browser' => $browser,
- 'run' => 'BogoRun',
- 'project' => 'TestProject',
- 'merge' => 1,
- 'spawn' => 9,
- 'sections' => ['fake.test'],
- 'case_per_ok' => 1
- });
- };
- is($res,undef,"TR Parser doesn't explode on instantiation");
- isa_ok($tap,"Test::Rail::Parser");
- if (!$res) {
- $tap->run();
- is($tap->{'errors'},0,"No errors encountered uploading case results");
- }
- #Check that per-section spawn works
- undef $tap;
- $res = exception {
- $tap = Test::Rail::Parser->new({
- 'source' => 't/fake.test',
- 'apiurl' => $apiurl,
- 'user' => $login,
- 'pass' => $pw,
- 'debug' => $debug,
- 'browser' => $browser,
- 'run' => 'BogoRun',
- 'plan' => 'BogoPlan',
- 'project' => 'TestProject',
- 'merge' => 1,
- 'spawn' => 9,
- 'sections' => ['fake.test'],
- 'case_per_ok' => 1
- });
- };
- is($res,undef,"TR Parser doesn't explode on instantiation");
- isa_ok($tap,"Test::Rail::Parser");
- if (!$res) {
- $tap->run();
- is($tap->{'errors'},0,"No errors encountered uploading case results");
- }
- undef $tap;
- $res = exception {
- $tap = Test::Rail::Parser->new({
- 'source' => 't/fake.test',
- 'apiurl' => $apiurl,
- 'user' => $login,
- 'pass' => $pw,
- 'debug' => $debug,
- 'browser' => $browser,
- 'run' => 'BogoRun',
- 'project' => 'TestProject',
- 'merge' => 1,
- 'spawn' => 9,
- 'sections' => ['potzrebie'],
- 'case_per_ok' => 1
- });
- };
- isnt($res,undef,"TR Parser explodes on instantiation with invalid section");
- 0;
|