diff --git a/examples/jobs-example.php b/examples/jobs-example.php index aee11a4..f24f5d1 100755 --- a/examples/jobs-example.php +++ b/examples/jobs-example.php @@ -303,7 +303,43 @@ function authorizeJobDemo($authProvider, $projectId, $jobId) echo \vsprintf('Request took %s seconds.%s', [\round($time, 3), "\n\r"]); } +/** + * @param \Smartling\AuthApi\AuthApiInterface $authProvider + * @param string $projectId + * @param string $jobId + * @param string $targetLocaleId + * @return array + */ +function getJobProgress($authProvider, $projectId, $jobId, $targetLocaleId) +{ + echo "--- Retrieving job progress ---\n"; + + $jobs = \Smartling\Jobs\JobsApi::create($authProvider, $projectId); + $info = FALSE; + $progressParameters = new \Smartling\Jobs\Params\JobProgressParameters(); + $progressParameters->setTargetLocaleId($targetLocaleId); + $st = \microtime(true); + + try { + $info = $jobs->getJobProgress($jobId, $progressParameters); + } catch (\Smartling\Exceptions\SmartlingApiException $e) { + \var_dump($e->getErrors()); + } + + $et = \microtime(true); + $time = $et - $st; + + echo \vsprintf('Request took %s seconds.%s', [\round($time, 3), "\n\r"]); + + if (!empty($info)) { + \var_dump($info); + } + + return $info; +} + $fileUri = 'JobID1_en_fr.xml'; +$targetLocaleId = 'fr'; $jobs = listJobsDemo($authProvider, $projectId); $jobId = createJobDemo($authProvider, $projectId); $jobId = updateJobDemo($authProvider, $projectId, $jobId); @@ -312,3 +348,4 @@ function authorizeJobDemo($authProvider, $projectId, $jobId) $job = searchJobDemo($authProvider, $projectId, $fileUri); authorizeJobDemo($authProvider, $projectId, $jobId); cancelJobDemo($authProvider, $projectId, $jobId); +$jobProgress = getJobProgress($authProvider, $projectId, $jobId, $targetLocaleId); diff --git a/src/Jobs/JobsApi.php b/src/Jobs/JobsApi.php index 48b94cd..36921c5 100755 --- a/src/Jobs/JobsApi.php +++ b/src/Jobs/JobsApi.php @@ -10,6 +10,7 @@ use Smartling\Jobs\Params\AddLocaleToJobParameters; use Smartling\Jobs\Params\CancelJobParameters; use Smartling\Jobs\Params\CreateJobParameters; +use Smartling\Jobs\Params\JobProgressParameters; use Smartling\Jobs\Params\ListJobsParameters; use Smartling\Jobs\Params\SearchJobsParameters; use Smartling\Jobs\Params\UpdateJobParameters; @@ -233,4 +234,18 @@ public function checkAsynchronousProcessingStatus($jobId, $processId) return $this->sendRequest($endpoint, $requestData, self::HTTP_METHOD_GET); } + /** + * Returns the status of a job + * + * @param string $jobId Job Id + * @param JobProgressParameters $parameters Job Progress parameters + * @return array + * @throws SmartlingApiException + */ + public function getJobProgress($jobId, JobProgressParameters $parameters) { + $endpoint = \vsprintf('jobs/%s/progress', [$jobId]); + $requestData = $this->getDefaultRequestData('query', $parameters->exportToArray()); + + return $this->sendRequest($endpoint, $requestData, self::HTTP_METHOD_GET); + } } diff --git a/src/Jobs/Params/JobProgressParameters.php b/src/Jobs/Params/JobProgressParameters.php new file mode 100644 index 0000000..9a91dc7 --- /dev/null +++ b/src/Jobs/Params/JobProgressParameters.php @@ -0,0 +1,17 @@ +set('targetLocaleId', $localeId); + } + +} diff --git a/tests/functional/JobsApiFunctionalTest.php b/tests/functional/JobsApiFunctionalTest.php index 970bf60..5348054 100755 --- a/tests/functional/JobsApiFunctionalTest.php +++ b/tests/functional/JobsApiFunctionalTest.php @@ -14,6 +14,7 @@ use Smartling\Jobs\Params\AddLocaleToJobParameters; use Smartling\Jobs\Params\CancelJobParameters; use Smartling\Jobs\Params\CreateJobParameters; +use Smartling\Jobs\Params\JobProgressParameters; use Smartling\Jobs\Params\ListJobsParameters; use Smartling\Jobs\Params\SearchJobsParameters; use Smartling\Jobs\Params\UpdateJobParameters; @@ -303,4 +304,22 @@ public function testJobsApiCheckAsynchronousProcessingStatus() } } + /** + * Test for retrieving job progress + */ + public function testJobsApiGetJobProgress() + { + try { + $params = new JobProgressParameters(); + $params->setTargetLocaleId('fr'); + + $result = $this->jobsApi->getJobProgress($this->jobId, $params); + + $this->assertArrayHasKey('contentProgressReport', $result); + $this->assertArrayHasKey('progress', $result); + } catch (SmartlingApiException $e) { + $this->fail($e->getMessage()); + } + } + } diff --git a/tests/unit/JobsApiTest.php b/tests/unit/JobsApiTest.php index 0ee781f..59e2bc3 100755 --- a/tests/unit/JobsApiTest.php +++ b/tests/unit/JobsApiTest.php @@ -10,6 +10,7 @@ use Smartling\Jobs\Params\AddLocaleToJobParameters; use Smartling\Jobs\Params\CancelJobParameters; use Smartling\Jobs\Params\CreateJobParameters; +use Smartling\Jobs\Params\JobProgressParameters; use Smartling\Jobs\Params\ListJobsParameters; use Smartling\Jobs\Params\SearchJobsParameters; use Smartling\Jobs\Params\UpdateJobParameters; @@ -503,4 +504,42 @@ public function testCreateJobParametersSetCallbackMethodValidation() { (new CreateJobParameters())->setCallbackMethod("TEST"); } + + /** + * @covers \Smartling\Jobs\JobsApi::getJobProgress + * + */ + public function testGetJobProgress() + { + $jobId = 'Some job id'; + $localeId = 'some locale id'; + $endpointUrl = \vsprintf('%s/%s/jobs/%s/progress', [ + JobsApi::ENDPOINT_URL, + $this->projectId, + $jobId, + ]); + + $params = new JobProgressParameters(); + $params->setTargetLocaleId($localeId); + + $this->client + ->expects(self::once()) + ->method('request') + ->with('get', $endpointUrl, [ + 'headers' => [ + 'Accept' => 'application/json', + 'Authorization' => \vsprintf('%s %s', [ + $this->authProvider->getTokenType(), + $this->authProvider->getAccessToken(), + ]), + ], + 'exceptions' => FALSE, + 'query' => [ + 'targetLocaleId' => $localeId + ], + ]) + ->willReturn($this->responseMock); + + $this->object->getJobProgress($jobId, $params); + } }