From 66f324ce1bbe55368847730e2e764cec1d7321f1 Mon Sep 17 00:00:00 2001 From: Annika Backstrom Date: Wed, 24 Jan 2018 12:06:33 -0500 Subject: [PATCH] Implement HelpCenter Article creation --- samples/helpcenter/createArticles.php | 31 +++++++++++++++++++ .../API/Resources/HelpCenter/Articles.php | 17 +++++++++- .../API/Resources/HelpCenter/Sections.php | 13 ++++++++ .../API/UnitTests/HelpCenter/ArticlesTest.php | 16 ++++++++++ 4 files changed, 76 insertions(+), 1 deletion(-) create mode 100644 samples/helpcenter/createArticles.php diff --git a/samples/helpcenter/createArticles.php b/samples/helpcenter/createArticles.php new file mode 100644 index 000000000..17946a7f8 --- /dev/null +++ b/samples/helpcenter/createArticles.php @@ -0,0 +1,31 @@ +setAuth('basic', ['username' => $username, 'token' => $token]); + +try { + // Create a new HelpCenter Article + $sectionId = 1; + $article = $client->helpCenter->sections($sectionId)->articles()->create([ + 'locale' => 'en-us', + 'title' => 'Smartest Fish in the World', + ]); + echo "
";
+    print_r($article);
+    echo "
"; +} catch (\Zendesk\API\Exceptions\ApiResponseException $e) { + echo $e->getMessage().'
'; +} + diff --git a/src/Zendesk/API/Resources/HelpCenter/Articles.php b/src/Zendesk/API/Resources/HelpCenter/Articles.php index 14c105e6b..4aa9e0544 100644 --- a/src/Zendesk/API/Resources/HelpCenter/Articles.php +++ b/src/Zendesk/API/Resources/HelpCenter/Articles.php @@ -14,7 +14,9 @@ class Articles extends ResourceAbstract { use Defaults; - use Locales; + use Locales { + getRoute as protected localesGetRoute; + } use Search; /** @@ -30,6 +32,7 @@ protected function setupRoutes() parent::setUpRoutes(); $this->setRoutes([ 'bulkAttach' => "$this->resourceName/{articleId}/bulk_attachments.json", + 'create' => "{$this->prefix}sections/{section_id}/articles.json", 'updateSourceLocale' => "$this->resourceName/{articleId}/source_locale.json", ]); } @@ -60,4 +63,16 @@ public function bulkAttach($articleId, array $params, $routeKey = __FUNCTION__) ['attachment_ids' => $params] ); } + + /** + * {@inheritdoc} + */ + public function getRoute($name, array $params = []) + { + $params = $this->addChainedParametersToParams($params, [ + 'section_id' => Sections::class, + ]); + + return $this->localesGetRoute($name, $params); + } } diff --git a/src/Zendesk/API/Resources/HelpCenter/Sections.php b/src/Zendesk/API/Resources/HelpCenter/Sections.php index e28e8878d..476dba2f3 100644 --- a/src/Zendesk/API/Resources/HelpCenter/Sections.php +++ b/src/Zendesk/API/Resources/HelpCenter/Sections.php @@ -4,6 +4,7 @@ use Zendesk\API\Traits\Resource\Defaults; use Zendesk\API\Traits\Resource\Locales; +use Zendesk\API\Traits\Utility\InstantiatorTrait; /** * Class Sections @@ -11,6 +12,8 @@ */ class Sections extends ResourceAbstract { + use InstantiatorTrait; + use Defaults; use Locales { getRoute as protected localesGetRoute; @@ -32,6 +35,16 @@ protected function setUpRoutes() ]); } + /** + * {@inheritdoc} + */ + public static function getValidSubResources() + { + return [ + 'articles' => Articles::class, + ]; + } + /** * Returns a route and replaces tokenized parts of the string with * the passed params diff --git a/tests/Zendesk/API/UnitTests/HelpCenter/ArticlesTest.php b/tests/Zendesk/API/UnitTests/HelpCenter/ArticlesTest.php index 4014281ed..d27dfd96b 100644 --- a/tests/Zendesk/API/UnitTests/HelpCenter/ArticlesTest.php +++ b/tests/Zendesk/API/UnitTests/HelpCenter/ArticlesTest.php @@ -78,4 +78,20 @@ public function testSearch() $this->client->helpCenter->articles()->search($params); }, 'help_center/articles/search.json', 'GET', ['queryParams' => $params]); } + + /** + * Test if Create article endpoint is called with correct params. + */ + public function testCreate() + { + $faker = Factory::create(); + $sectionId = $faker->numberBetween(1); + $params = ['title' => $faker->word, 'locale' => 'en']; + + $this->assertEndpointCalled(function () use ($params, $sectionId) { + $this->client->helpCenter->sections($sectionId)->articles()->create($params); + }, "help_center/sections/{$sectionId}/articles.json", 'POST', [ + 'postFields' => ['article' => $params], + ]); + } }