Best Atoum code snippet using duration.getValue
04 result.php
Source:04 result.php
...8/** @var \DrdPlus\Calculators\Theurgist\DemonWebPartsContainer $webPartsContainer */9$currentDemon = $webPartsContainer->getCurrentDemon();10$currentDemonValues = $webPartsContainer->getCurrentDemonValues();11$resultParts = [];12if ($currentDemon->getRequiredRealm()->getValue() === $currentDemon->getEffectiveRealm()->getValue()) {13// Roman numerals are created by browser using ordered list with upper Roman list style type14 $resultParts[] = <<<HTML15sféra: {<ol class="realm font-weight-bold" start="{$currentDemon->getRequiredRealm()}"><li></ol>}16HTML;17} else {18 // Roman numerals are created by browser using ordered list with upper Roman list style type19 $resultParts[] = <<<HTML20sféra <a href="https://theurg.drdplus.info/#parametry_a_rysy_demona">původu a moci démona</a>: {<ol class="realm font-weight-bold" start="{$currentDemon->getEffectiveRealm()}"><li></ol>}21HTML;22 $resultParts[] = <<<HTML23sféra pro <a href="https://theurg.drdplus.info/#parametry_a_rysy_demona">vyvolánà démona</a>: {<ol class="realm font-weight-bold" start="{$currentDemon->getRequiredRealm()}"><li></ol>}24HTML;25}26$resultParts[] = <<<HTML27nároÄnost: [<strong>{$currentDemon->getCurrentDifficulty()->getValue()}</strong>]28HTML;29$realmsAffections = $currentDemon->getCurrentRealmsAffections();30$realmsAffectionsInCzech = [];31/** @var RealmsAffection $realmsAffection */32foreach ($realmsAffections as $realmsAffection) {33 $realmsAffectionsInCzech[] = $realmsAffection->getAffectionPeriodCode()->translateTo('cs') . ' ' . $realmsAffection->getValue();34}35$realmAffectionName = count($realmsAffections) > 136 ? 'náklonnosti'37 : 'náklonnost';38$realmsAffectionsResult = implode(', ', $realmsAffectionsInCzech);39$resultParts[] = <<<HTML40{$realmAffectionName}: <strong>{$realmsAffectionsResult}</strong>41HTML;42$evocation = $currentDemon->getCurrentEvocation();43$evocationTime = $evocation->getEvocationTimeBonus()->getTime();44$evocationUnitInCzech = $evocationTime->getUnitCode()->translateTo('cs', $evocationTime->getValue());45$evocationTimeResult = ($evocation->getValue() >= 0 ? '+' : '') . $evocation->getValue();46$evocationTimeResult .= " ({$evocationTime->getValue()} {$evocationUnitInCzech}";47if (($evocationTimeInMinutes = $evocationTime->findMinutes()) && $evocationTime->getUnitCode()->getValue() === TimeUnitCode::ROUND) {48 $evocationInMinutesUnitInCzech = $evocationTimeInMinutes->getUnitCode()->translateTo('cs', $evocationTimeInMinutes->getValue());49 $evocationTimeResult .= '; ' . $evocationTimeInMinutes->getValue() . ' ' . $evocationInMinutesUnitInCzech;50}51$evocationTimeResult .= ')';52$resultParts[] = <<<HTML53vyvolánà démona: <strong>{$evocationTimeResult}</strong>54HTML;55$duration = $currentDemon->getCurrentDemonActivationDuration();56if ($duration !== null) {57 $durationTime = $duration->getDurationTimeBonus()->getTime();58 $durationUnitInCzech = $durationTime->getUnitCode()->translateTo('cs', $durationTime->getValue());59 $durationResult = ($duration->getValue() >= 0 ? '+' : '') . "{$duration->getValue()} ({$durationTime->getValue()} {$durationUnitInCzech})";60 $resultParts[] = <<<HTML61doba trvánÃ: <strong>{$durationResult}</strong>62HTML;63}64$demonParametersWithoutUnit = [65 DemonMutableParameterCode::DEMON_CAPACITY,66 DemonMutableParameterCode::DEMON_ENDURANCE,67 DemonMutableParameterCode::DEMON_QUALITY,68 DemonMutableParameterCode::DEMON_INVISIBILITY,69 DemonMutableParameterCode::DEMON_ARMOR,70 DemonMutableParameterCode::DEMON_STRENGTH,71 DemonMutableParameterCode::DEMON_AGILITY,72 DemonMutableParameterCode::DEMON_KNACK,73];74foreach ($demonParametersWithoutUnit as $demonParameterName) {75 $parameterGetter = StringTools::assembleGetterForName($demonParameterName, 'getCurrent');76 /** @var CastingParameter $parameter */77 $parameter = $currentDemon->$parameterGetter();78 if ($parameter !== null) {79 $demonParameterCode = DemonMutableParameterCode::getIt($demonParameterName);80 if (($currentDemon->hasUnlimitedEndurance() && $demonParameterCode->is(DemonMutableParameterCode::DEMON_ENDURANCE))81 || ($currentDemon->hasUnlimitedCapacity() && $demonParameterCode->is(DemonMutableParameterCode::DEMON_CAPACITY))82 ) {83 $parameterValueString = 'neomezená';84 } else {85 $parameterValueString = ($parameter->getValue() >= 0 ? '+' : '') . $parameter->getValue();86 }87 $resultParts[] = <<<HTML88{$demonParameterCode->translateTo('cs')}: <strong>{$parameterValueString}</strong>89HTML;90 }91}92$will = $currentDemon->getCurrentDemonWill();93if ($will !== null) {94 $willResult = ($will->getValue() >= 0 ? '+' : '') . $will->getValue();95 $resultParts[] = <<<HTML96{$will->getWill()->getCode()->translateTo('cs')}: <strong>{$willResult}</strong>97HTML;98}99$radius = $currentDemon->getCurrentDemonRadius();100if ($radius !== null) {101 $radiusNameInCzech = DemonMutableParameterCode::getIt(DemonMutableParameterCode::DEMON_RADIUS)->translateTo('cs');102 $radiusDistance = $radius->getDistanceBonus()->getDistance();103 $radiusUnitInCzech = $radiusDistance->getUnitCode()->translateTo('cs', $radiusDistance->getValue());104 $radiusResult = ($radius->getValue() >= 0 ? '+' : '') . "{$radius->getValue()} ({$radiusDistance->getValue()}105 {$radiusUnitInCzech})";106 $resultParts[] = <<<HTML107{$radiusNameInCzech}: <strong>{$radiusResult}</strong>108HTML;109}110$area = $currentDemon->getCurrentDemonArea();111if ($area !== null) {112 $areaNameInCzech = DemonMutableParameterCode::getIt(DemonMutableParameterCode::DEMON_AREA)->translateTo('cs');113 $areaDistance = $area->getDistanceBonus()->getDistance();114 $areaUnitInCzech = $areaDistance->getUnitCode()->translateTo('cs', $areaDistance->getValue());115 $areaResult = ($area->getValue() >= 0 ? '+' : '') . "{$area->getValue()} ({$areaDistance->getValue()}116 {$areaUnitInCzech})";117 $resultParts[] = <<<HTML118 {$areaNameInCzech}: <strong>{$areaResult}</strong>119HTML;120}121$spellSpeed = $currentDemon->getCurrentSpellSpeed();122if ($spellSpeed !== null) {123 $speed = $spellSpeed->getSpeedBonus()->getSpeed();124 $spellSpeedUnitInCzech = $speed->getUnitCode()->translateTo('cs', $speed->getValue());125 $resultParts[] = <<<HTML126rychlost: <strong>{$currentDemonValues->formatNumber($spellSpeed)} ({$speed->getValue()} {$spellSpeedUnitInCzech})</strong>127HTML;128}129$activationDuration = $currentDemon->getCurrentDemonActivationDuration();130if ($activationDuration !== null) {131 $activationDurationNameInCzech = DemonMutableParameterCode::getIt(DemonMutableParameterCode::DEMON_ACTIVATION_DURATION)->translateTo('cs');132 $duration = $activationDuration->getDurationTimeBonus()->getTime();133 $activationDurationUnitInCzech = $duration->getUnitCode()->translateTo('cs', $duration->getValue());134 $resultParts[] = <<<HTML135{$activationDurationNameInCzech}: <strong>{$currentDemonValues->formatNumber($activationDuration)} ({$duration->getValue()} {$activationDurationUnitInCzech})</strong>136HTML;137}138$usedDemonTraitNames = [];139foreach ($currentDemon->getDemonTraits() as $demonTrait) {140 $usedDemonTraitNames[] = $demonTrait->getDemonTraitCode()->translateTo('cs');141}142if ($usedDemonTraitNames) {143 $usedDemonTraitNamesString = implode(', ', $usedDemonTraitNames);144 $resultParts[] = <<<HTML145rysy: <strong>{$usedDemonTraitNamesString}</strong>146HTML;147}148$resultParts[] = <<<HTML149tÄlo: <strong>{$currentDemon->getDemonBodyCode()->translateTo('cs')}</strong>...
TypedDataTest.php
Source:TypedDataTest.php
...23 */24 public function testGetAndSet() {25 // Boolean type.26 $wrapper = $this->createTypedData(array('type' => 'boolean'), TRUE);27 $this->assertTrue($wrapper->getValue() === TRUE, 'Boolean value was fetched.');28 $wrapper->setValue(FALSE);29 $this->assertTrue($wrapper->getValue() === FALSE, 'Boolean value was changed.');30 $this->assertTrue(is_string($wrapper->getString()), 'Boolean value was converted to string');31 $wrapper->setValue(NULL);32 $this->assertNull($wrapper->getValue(), 'Boolean wrapper is null-able.');33 // String type.34 $value = $this->randomString();35 $wrapper = $this->createTypedData(array('type' => 'string'), $value);36 $this->assertTrue($wrapper->getValue() === $value, 'String value was fetched.');37 $new_value = $this->randomString();38 $wrapper->setValue($new_value);39 $this->assertTrue($wrapper->getValue() === $new_value, 'String value was changed.');40 // Funky test.41 $this->assertTrue(is_string($wrapper->getString()), 'String value was converted to string');42 $wrapper->setValue(NULL);43 $this->assertNull($wrapper->getValue(), 'String wrapper is null-able.');44 // Integer type.45 $value = rand();46 $wrapper = $this->createTypedData(array('type' => 'integer'), $value);47 $this->assertTrue($wrapper->getValue() === $value, 'Integer value was fetched.');48 $new_value = rand();49 $wrapper->setValue($new_value);50 $this->assertTrue($wrapper->getValue() === $new_value, 'Integer value was changed.');51 $this->assertTrue(is_string($wrapper->getString()), 'Integer value was converted to string');52 $wrapper->setValue(NULL);53 $this->assertNull($wrapper->getValue(), 'Integer wrapper is null-able.');54 // Float type.55 $value = 123.45;56 $wrapper = $this->createTypedData(array('type' => 'float'), $value);57 $this->assertTrue($wrapper->getValue() === $value, 'Float value was fetched.');58 $new_value = 678.90;59 $wrapper->setValue($new_value);60 $this->assertTrue($wrapper->getValue() === $new_value, 'Float value was changed.');61 $this->assertTrue(is_string($wrapper->getString()), 'Float value was converted to string');62 $wrapper->setValue(NULL);63 $this->assertNull($wrapper->getValue(), 'Float wrapper is null-able.');64 // Date type.65 $value = new DrupalDateTime(REQUEST_TIME);66 $wrapper = $this->createTypedData(array('type' => 'date'), $value);67 $this->assertTrue($wrapper->getValue() === $value, 'Date value was fetched.');68 $new_value = REQUEST_TIME + 1;69 $wrapper->setValue($new_value);70 $this->assertTrue($wrapper->getValue()->getTimestamp() === $new_value, 'Date value was changed and set by timestamp.');71 $wrapper->setValue('2000-01-01');72 $this->assertTrue($wrapper->getValue()->format('Y-m-d') == '2000-01-01', 'Date value was changed and set by date string.');73 $this->assertTrue(is_string($wrapper->getString()), 'Date value was converted to string');74 $wrapper->setValue(NULL);75 $this->assertNull($wrapper->getValue(), 'Date wrapper is null-able.');76 // Duration type.77 $value = new DateInterval('PT20S');78 $wrapper = $this->createTypedData(array('type' => 'duration'), $value);79 $this->assertTrue($wrapper->getValue() === $value, 'Duration value was fetched.');80 $wrapper->setValue(10);81 $this->assertTrue($wrapper->getValue()->s == 10, 'Duration value was changed and set by time span in seconds.');82 $wrapper->setValue('P40D');83 $this->assertTrue($wrapper->getValue()->d == 40, 'Duration value was changed and set by duration string.');84 $this->assertTrue(is_string($wrapper->getString()), 'Duration value was converted to string');85 // Test getting the string and passing it back as value.86 $duration = $wrapper->getString();87 $wrapper->setValue($duration);88 $this->assertEqual($wrapper->getString(), $duration, 'Duration formatted as string can be used to set the duration value.');89 $wrapper->setValue(NULL);90 $this->assertNull($wrapper->getValue(), 'Duration wrapper is null-able.');91 // Generate some files that will be used to test the URI and the binary92 // data types.93 $files = $this->drupalGetTestFiles('image');94 // URI type.95 $wrapper = $this->createTypedData(array('type' => 'uri'), $files[0]->uri);96 $this->assertTrue($wrapper->getValue() === $files[0]->uri, 'URI value was fetched.');97 $wrapper->setValue($files[1]->uri);98 $this->assertTrue($wrapper->getValue() === $files[1]->uri, 'URI value was changed.');99 $this->assertTrue(is_string($wrapper->getString()), 'URI value was converted to string');100 $wrapper->setValue(NULL);101 $this->assertNull($wrapper->getValue(), 'URI wrapper is null-able.');102 // Email type.103 $value = $this->randomString();104 $wrapper = $this->createTypedData(array('type' => 'email'), $value);105 $this->assertIdentical($wrapper->getValue(), $value, 'E-mail value was fetched.');106 $new_value = 'test@example.com';107 $wrapper->setValue($new_value);108 $this->assertIdentical($wrapper->getValue(), $new_value, 'E-mail value was changed.');109 $this->assertTrue(is_string($wrapper->getString()), 'E-mail value was converted to string');110 $wrapper->setValue(NULL);111 $this->assertNull($wrapper->getValue(), 'E-mail wrapper is null-able.');112 // Binary type.113 $wrapper = $this->createTypedData(array('type' => 'binary'), $files[0]->uri);114 $this->assertTrue(is_resource($wrapper->getValue()), 'Binary value was fetched.');115 // Try setting by URI.116 $wrapper->setValue($files[1]->uri);117 $this->assertEqual(is_resource($wrapper->getValue()), fopen($files[1]->uri, 'r'), 'Binary value was changed.');118 $this->assertTrue(is_string($wrapper->getString()), 'Binary value was converted to string');119 // Try setting by resource.120 $wrapper->setValue(fopen($files[2]->uri, 'r'));121 $this->assertEqual(is_resource($wrapper->getValue()), fopen($files[2]->uri, 'r'), 'Binary value was changed.');122 $this->assertTrue(is_string($wrapper->getString()), 'Binary value was converted to string');123 $wrapper->setValue(NULL);124 $this->assertNull($wrapper->getValue(), 'Binary wrapper is null-able.');125 }126}...
ServiceLevelAgreementTimerCalculator.php
Source:ServiceLevelAgreementTimerCalculator.php
...42 $timer = null;43 $sla = $ticket->getServiceLevelAgreement();44 $ticketDateOpened = $ticket->getDateOpened();45 $ticketDateClosed = $ticket->getDateClosed();46 $ticketStatus = $ticket->getStatus()->getValue();47 $slaActions = $ticket->getServiceLevelAgreementActions();48 if (null !== $sla && null !== $sla->getTimer()->getValue()) {49 $timer = (float) \round($this->getMinutesFromDuration($sla->getTimer()), 2);50 if (null !== $ticketDateClosed && null !== $ticketDateOpened) {51 $minutesLeft = $this->calculateMinutesLeft($sla, $slaActions, $ticketDateOpened, $ticketDateClosed);52 $paused = true;53 } elseif (null !== $ticketDateOpened) {54 $minutesLeft = $this->calculateMinutesLeft($sla, $slaActions, $ticketDateOpened, new \DateTime());55 $paused = $this->workingHourCalculator->isTimerPaused($ticket);56 }57 }58 $ticket->setTimer(new QuantitativeValue(null !== $timer ? (string) $timer : null, null, null, TimeType::MIN));59 $ticket->setTimeLeft(new QuantitativeValue(null !== $minutesLeft ? (string) \round($minutesLeft, 2) : null, null, null, TimeType::MIN));60 $ticket->setPaused($paused);61 //@todo idk if this is good idea, but keep it like this in order not to break other codes62 return [63 'timer' => $timer,64 'timeLeft' => $minutesLeft,65 'paused' => $paused,66 ];67 }68 /**69 * @param TicketServiceLevelAgreement $sla70 * @param array $slaActions71 * @param \DateTime $start72 * @param \DateTime $end73 *74 * @return array75 */76 private function calculateMinutesLeft(TicketServiceLevelAgreement $sla, array $slaActions, \DateTime $start, \DateTime $end)77 {78 $minutesLeft = $this->getMinutesFromDuration($sla->getTimer());79 $begin = clone $start;80 if (0 !== $minutesLeft) {81 if (\count($slaActions) > 0) {82 $workingMinutes = 0;83 foreach ($slaActions as $action) {84 // @todo better logic handling85 if (null === $action->getValue()->getValue()) {86 if (\in_array($action->getStatus()->getValue(), [87 TicketStatus::ASSIGNED,88 TicketStatus::IN_PROGRESS,89 ], true)) {90 $workingMinutes += $this->workingHourCalculator->getWorkingMinutesFromDateRange($action->getStartTime(), new \DateTime(), $sla->getOperationExclusions());91 }92 } elseif (\in_array($action->getStatus()->getValue(), [93 TicketStatus::ASSIGNED,94 TicketStatus::IN_PROGRESS,95 ], true)) {96 $workingMinutes += $action->getValue()->getValue();97 }/* elseif (\in_array($action->getStatus()->getValue(), [98 TicketStatus::PENDING_BILLING_TEAM,99 TicketStatus::PENDING_CUSTOMER_ACTION,100 ], true)) {101 $workingMinutes -= $action->getValue()->getValue();102 }*/103 }104 $minutesLeft -= $workingMinutes;105 } else {106 // @todo not needed??? need to write tests.107 $workingMinutes = $this->workingHourCalculator->getWorkingMinutesFromDateRange($begin, $end, $sla->getOperationExclusions());108 $minutesLeft -= $workingMinutes;109 }110 }111 return $minutesLeft;112 }113 private function getMinutesFromDuration(QuantitativeValue $duration)114 {115 if (null === $duration->getValue()) {116 return 0;117 }118 // default is hours119 switch ($duration->getUnitCode()) {120 case 'DAY':121 return (int) ($duration->getValue() * 24 * 60);122 break;123 case 'MIN':124 return (int) $duration->getValue();125 break;126 default:127 return (int) ($duration->getValue() * 60);128 }129 }130}...
getValue
Using AI Code Generation
1$duration = new Duration(1, 2, 3);2echo $duration->getValue();3$duration = new Duration(1, 2, 3);4$duration->setValue(2, 3, 4);5echo $duration->getValue();6$duration = new Duration(1, 2, 3);7echo $duration;8$duration = new Duration(1, 2, 3);9$duration->add(2, 3, 4);10echo $duration->getValue();11$duration = new Duration(1, 2, 3);12$duration->sub(2, 3, 4);13echo $duration->getValue();14$duration = new Duration(1, 2, 3);15echo $duration->compare(2, 3, 4);16$duration = new Duration(1, 2, 3);17echo $duration->getHours();18$duration = new Duration(1, 2, 3);19echo $duration->getMinutes();20$duration = new Duration(1, 2, 3);21echo $duration->getSeconds();22$duration = new Duration(1, 2, 3);23$duration->setHours(2);24echo $duration->getValue();25$duration = new Duration(1, 2, 3);26$duration->setMinutes(2);27echo $duration->getValue();28$duration = new Duration(1, 2, 3);29$duration->setSeconds(
getValue
Using AI Code Generation
1echo $duration->getValue();2$duration->setValue(5);3echo $duration->getUnit();4$duration->setUnit('days');5echo $duration->getDuration();6$duration->setDuration('5 days');7print_r($duration->getDurationArray());8$duration->setDurationArray(array('value' => 5, 'unit' => 'days'));9echo $duration->getDurationString();10$duration->setDurationString('5 days');11echo $duration->getDurationInDays();12$duration->setDurationInDays(5);13echo $duration->getDurationInHours();
getValue
Using AI Code Generation
1$duration = new Duration(5, 0, 0);2echo $duration->getValue();3$duration = new Duration(0, 5, 0);4echo $duration->getValue();5$duration = new Duration(0, 0, 5);6echo $duration->getValue();7$duration = new Duration(0, 0, 0);8echo $duration->getValue();9$duration = new Duration(0, 0, 0);10echo $duration->getValue();11$duration = new Duration(1, 0, 0);12echo $duration->getValue();13$duration = new Duration(0, 1, 0);14echo $duration->getValue();15$duration = new Duration(0, 0, 1);16echo $duration->getValue();17$duration = new Duration(1, 1, 1);18echo $duration->getValue();19$duration = new Duration(1, 1, 0);20echo $duration->getValue();21$duration = new Duration(0, 1, 1);22echo $duration->getValue();23$duration = new Duration(1, 0, 1);24echo $duration->getValue();25$duration = new Duration(1, 1, 0);26echo $duration->getValue();27$duration = new Duration(0, 1, 1);
getValue
Using AI Code Generation
1$duration = new Duration();2$duration->setValue(3);3$duration->setUnit("minutes");4echo $duration->getValue();5$duration = new Duration();6$duration->setValue(3);7$duration->setUnit("minutes");8echo $duration->getValue();9$duration = new Duration();10$duration->setValue(3);11$duration->setUnit("minutes");12echo $duration->getUnit();13$duration = new Duration();14$duration->setValue(3);15$duration->setUnit("minutes");16echo $duration->getUnit();17$duration = new Duration();18$duration->setValue(3);19$duration->setUnit("minutes");20echo $duration->getDuration();21$duration = new Duration();22$duration->setValue(3);23$duration->setUnit("minutes");24echo $duration->getDuration();25$duration = new Duration();26$duration->setValue(3);27$duration->setUnit("minutes");28echo $duration->convertTo("hours");29$duration = new Duration();30$duration->setValue(3);31$duration->setUnit("minutes");32echo $duration->convertTo("seconds");33$duration = new Duration();34$duration->setValue(3);35$duration->setUnit("minutes");36echo $duration->convertTo("days");
getValue
Using AI Code Generation
1$duration = new Duration(2, 30, 10);2$duration->getValue();3$duration = new Duration(5, 20, 5);4$duration->getValue();5$duration = new Duration(1, 50, 40);6$duration->getValue();7$duration = new Duration(3, 10, 30);8$duration->getValue();9$duration = new Duration(4, 40, 20);10$duration->getValue();11$duration = new Duration(7, 0, 0);12$duration->getValue();13$duration = new Duration(8, 30, 10);14$duration->getValue();15$duration = new Duration(3, 50, 30);16$duration->getValue();17$duration = new Duration(2, 10, 50);18$duration->getValue();19$duration = new Duration(1, 40, 20);20$duration->getValue();
getValue
Using AI Code Generation
1$duration = new Duration();2echo $duration->getValue();3PHP | Duration class (getSeconds() method)4PHP | Duration class (getMinutes() method)5PHP | Duration class (getHours() method)6PHP | Duration class (getDays() method)7PHP | Duration class (getWeeks() method)8PHP | Duration class (getMonths() method)9PHP | Duration class (getYears() method)10PHP | Duration class (getTotalSeconds() method)11PHP | Duration class (getTotalMinutes() method)12PHP | Duration class (getTotalHours() method)13PHP | Duration class (getTotalDays() method)14PHP | Duration class (getTotalWeeks() method)15PHP | Duration class (getTotalMonths() method)16PHP | Duration class (getTotalYears() method)17PHP | Duration class (add() method)18PHP | Duration class (subtract() method)19PHP | Duration class (multiply() method)20PHP | Duration class (divide() method)21PHP | Duration class (format() method)
Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Execute automation tests with getValue on a cloud-based Grid of 3000+ real browsers and operating systems for both web and mobile applications.
Test now for FreeGet 100 minutes of automation test minutes FREE!!