public function testOrchestrationsWarn()
 {
     // create orchestration
     $options = array('crontabRecord' => '1 1 1 1 1');
     $orchestration = $this->client->createOrchestration(sprintf('%s %s', self::TESTING_ORCHESTRATION_NAME, uniqid()), $options);
     $this->assertArrayHasKey('id', $orchestration, "Result of API command 'createOrchestration' should contain new created orchestration ID");
     $this->assertArrayHasKey('crontabRecord', $orchestration, "Result of API command 'createOrchestration' should return orchestration info");
     $this->assertArrayHasKey('nextScheduledTime', $orchestration, "Result of API command 'createOrchestration' should return orchestration info");
     // orchestrations tasks
     $tasks = $this->client->updateTasks($orchestration['id'], $this->createTestDataWithWarn());
     // orchestration detail
     $orchestration = $this->client->getOrchestration($orchestration['id']);
     $this->assertArrayHasKey('id', $orchestration, "Result of API command 'getOrchestration' should contain new created orchestration ID");
     $this->assertArrayHasKey('crontabRecord', $orchestration, "Result of API command 'getOrchestration' should return orchestration info");
     $this->assertArrayHasKey('nextScheduledTime', $orchestration, "Result of API command 'getOrchestration' should return orchestration info");
     // orchestration update
     $crontabRecord = '* * * * *';
     $active = false;
     $options = array('active' => $active, 'crontabRecord' => $crontabRecord);
     $orchestration = $this->client->updateOrchestration($orchestration['id'], $options);
     $this->assertArrayHasKey('id', $orchestration, "Result of API command 'updateOrchestration' should contain new created orchestration ID");
     $this->assertArrayHasKey('crontabRecord', $orchestration, "Result of API command 'updateOrchestration' should return orchestration info");
     $this->assertArrayHasKey('nextScheduledTime', $orchestration, "Result of API command 'updateOrchestration' should return orchestration info");
     $this->assertArrayHasKey('active', $orchestration, "Result of API command 'updateOrchestration' should return orchestration info");
     $this->assertEquals($active, $orchestration['active'], "Result of API command 'updateOrchestration' should return disabled orchestration");
     $this->assertEquals($crontabRecord, $orchestration['crontabRecord'], "Result of API command 'updateOrchestration' should return modified orchestration");
     // enqueue job
     $job = $this->client->runOrchestration($orchestration['id']);
     $this->assertArrayHasKey('id', $job, "Result of API command 'createJob' should contain new created job ID");
     $this->assertArrayHasKey('isFinished', $job, "Result of API command 'createJob' should contain isFinished status");
     $this->assertArrayHasKey('orchestrationId', $job, "Result of API command 'createJob' should return job info");
     $this->assertArrayHasKey('status', $job, "Result of API command 'createJob' should return job info");
     $this->assertEquals('waiting', $job['status'], "Result of API command 'createJob' should return new waiting job");
     $this->assertEquals($orchestration['id'], $job['orchestrationId'], "Result of API command 'createJob' should return new waiting job for given orchestration");
     // wait for processing job
     while (!$job['isFinished']) {
         sleep(5);
         $job = $this->client->getJob($job['id']);
         $this->assertArrayHasKey('isFinished', $job);
     }
     // job detail
     $job = $this->client->getJob($job['id']);
     $this->assertArrayHasKey('id', $job, "Result of API command 'getJob' should contain job ID");
     $this->assertArrayHasKey('orchestrationId', $job, "Result of API command 'getJob' should return job info");
     $this->assertArrayHasKey('status', $job, "Result of API command 'getJob' should return job info");
     $this->assertEquals($orchestration['id'], $job['orchestrationId'], "Result of API command 'getJob' should return job for given orchestration");
     $errorsCount = 0;
     $cancelledCount = 0;
     $successCount = 0;
     $processingCount = 0;
     $warnCount = 0;
     $otherCount = 0;
     $jobs = $this->client->getOrchestrationJobs($orchestration['id']);
     foreach ($jobs as $job) {
         if ($job['status'] === 'success') {
             $successCount++;
             continue;
         }
         if ($job['status'] === 'processing') {
             $processingCount++;
             continue;
         }
         if ($job['status'] === 'warn') {
             $warnCount++;
             continue;
         }
         if ($job['status'] === 'error') {
             $errorsCount++;
             continue;
         }
         if ($job['status'] === 'cancelled') {
             $cancelledCount++;
             continue;
         }
         if ($job['status'] === 'terminated') {
             $cancelledCount++;
             continue;
         }
         if ($job['status'] === 'terminating') {
             $cancelledCount++;
             continue;
         }
         $otherCount++;
     }
     $this->assertLessThan(1, $successCount, "Result of API command 'getOrchestrationJobs' should return any job with 'status' status");
     $this->assertLessThan(1, $errorsCount, "Result of API command 'getOrchestrationJobs' should return any job with 'error' status");
     $this->assertGreaterThan(0, $warnCount, "Result of API command 'getOrchestrationJobs' should return least one job with 'warn' status");
     $this->assertLessThan(1, $otherCount, "Result of API command 'getOrchestrationJobs' should return only finished jobs");
     // delete orchestration
     $result = $this->client->deleteOrchestration($orchestration['id']);
     $this->assertTrue($result, "Result of API command 'deleteOrchestration' should return TRUE");
 }