123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- use strict;
- use warnings;
- use FindBin;
- use lib "$FindBin::Bin/lib";
- use Test::More 'tests' => 11;
- use Test::Fatal;
- use File::Basename qw{dirname};
- use TestRail::Utils;
- use TestRail::Utils::Lock;
- use Test::LWP::UserAgent::TestRailMock;
- use Sys::Hostname qw{hostname};
- use File::Basename qw{basename};
- use Capture::Tiny qw{capture};
- my $opts = {
- 'project' => 'TestProject',
- 'run' => 'lockRun',
- 'case-types' => ['Automated'],
- 'lockname' => 'locked',
- 'match' => "t",
- 'no-recurse' => 1,
- 'hostname' => hostname(),
- 'mock' => 1
- };
- my ($apiurl,$login,$pw) = ('http://hokum.bogus','bogus','bogus');
- my $tr = new TestRail::API($apiurl,$login,$pw,undef,1);
- $tr->{'debug'} = 0;
- $tr->{'browser'} = Test::LWP::UserAgent::TestRailMock::lockMockStep0();
- my $ret;
- capture { $ret = TestRail::Utils::Lock::pickAndLockTest($opts,$tr) };
- is($ret,0,"Verify that no tests are locked in match mode, as they all are in a subdir, and recurse is off");
- delete $opts->{'no-recurse'};
- $ret = TestRail::Utils::Lock::pickAndLockTest($opts,$tr);
- is(basename( $ret->{'path'} ), 'lockmealso.test' , "Verify the highest priority test is chosen first");
- $tr->{'browser'} = Test::LWP::UserAgent::TestRailMock::lockMockStep1();
- $ret = TestRail::Utils::Lock::pickAndLockTest($opts,$tr);
- is(basename( $ret->{'path'} ), 'lockme.test' , "Verify the highest priority test of type automated is chosen");
- $tr->{'browser'} = Test::LWP::UserAgent::TestRailMock::lockMockStep2();
- $ret = TestRail::Utils::Lock::pickAndLockTest($opts,$tr);
- is(basename( $ret->{'path'} ), 'lockmetoo.test' , "Verify that the highest priority test that exists in the tree is chosen");
- $tr->{'browser'} = Test::LWP::UserAgent::TestRailMock::lockMockStep3();
- capture { $ret = TestRail::Utils::Lock::pickAndLockTest($opts,$tr) };
- is($ret,0,"Verify that no tests are locked, as they either are of the wrong type or do not exist in the match tree");
- $tr->{'browser'} = Test::LWP::UserAgent::TestRailMock::lockMockStep4();
- #Simulate lock collision
- $tr->{tests_cache} = {};
- my ($lockStatusID) = $tr->statusNamesToIds('locked');
- my ($project,$plan,$run) = TestRail::Utils::getRunInformation($tr,$opts);
- capture {
- $ret = TestRail::Utils::Lock::lockTest(
- $tr->getTestByName($run->{'id'},'lockme.test'),$lockStatusID,'race.bannon',$tr
- )
- };
- is($ret ,0,"False returned when race condition is simulated");
- $tr->{'browser'} = Test::LWP::UserAgent::TestRailMock::lockMockStep5();
- #Test with a second set of options, verify that no-match and type filtering works
- delete $opts->{'match'};
- $opts->{'case-types'} = ['Other'];
- $ret = TestRail::Utils::Lock::pickAndLockTest($opts,$tr);
- is($ret->{'path'},'sortalockme.test',"Test which is here but the other type is locked when ommitting match");
- $tr->{'browser'} = Test::LWP::UserAgent::TestRailMock::lockMockStep6();
- $ret = TestRail::Utils::Lock::pickAndLockTest($opts,$tr);
- is($ret->{'path'},'dontlockme_alsonothere.test',"Test which is not here but the other type is locked when omitting match");
- $tr->{'browser'} = Test::LWP::UserAgent::TestRailMock::lockMockStep7();
- capture { $ret = TestRail::Utils::Lock::pickAndLockTest($opts,$tr) };
- is($ret,0,"No tests are locked, as they are not the right type");
- #Make sure we only grab retest/untested
- delete $opts->{'case-types'};
- $ret = TestRail::Utils::Lock::pickAndLockTest($opts,$tr);
- is($ret->{'path'},'dontlockme_nothere.test',"Wrong type test which is not here gets locked after we remove all restrictions");
- $tr->{'browser'} = Test::LWP::UserAgent::TestRailMock::lockMockStep8();
- capture { $ret = TestRail::Utils::Lock::pickAndLockTest($opts,$tr) };
- is($ret,0,"No tests are locked, as none are untested or retest");
|