Skip to content

Commit

Permalink
Add CreateArticleTranslation operation
Browse files Browse the repository at this point in the history
  • Loading branch information
bradfeehan committed May 13, 2014
1 parent 75f4f08 commit b609861
Show file tree
Hide file tree
Showing 5 changed files with 220 additions and 40 deletions.
Original file line number Diff line number Diff line change
@@ -1,27 +1,33 @@
type: object
properties:
locale: { extends: ArticleTranslation.locale }
subject: { extends: ArticleTranslation.subject }
body: { extends: ArticleTranslation.body }
body_email: { extends: ArticleTranslation.body_email }
body_email_auto: { extends: ArticleTranslation.body_email_auto }
body_chat: { extends: ArticleTranslation.body_chat }
body_chat_auto: { extends: ArticleTranslation.body_chat_auto }
body_web_callback: { extends: ArticleTranslation.body_web_callback }
body_web_callback_auto: { extends: ArticleTranslation.body_web_callback_auto }
body_twitter: { extends: ArticleTranslation.body_twitter }
body_twitter_auto: { extends: ArticleTranslation.body_twitter_auto }
body_qna: { extends: ArticleTranslation.body_qna }
body_qna_auto: { extends: ArticleTranslation.body_qna_auto }
body_phone: { extends: ArticleTranslation.body_phone }
body_phone_auto: { extends: ArticleTranslation.body_phone_auto }
body_facebook: { extends: ArticleTranslation.body_facebook }
body_facebook_auto: { extends: ArticleTranslation.body_facebook_auto }
publish_at: { extends: ArticleTranslation.publish_at }
created_at: { extends: ArticleTranslation.created_at }
updated_at: { extends: ArticleTranslation.updated_at }
locale: { extends: ArticleTranslationModel.locale }
subject: { extends: ArticleTranslationModel.subject }
body: { extends: ArticleTranslationModel.body }
body_email: { extends: ArticleTranslationModel.body_email }
body_email_auto: { extends: ArticleTranslationModel.body_email_auto }
body_chat: { extends: ArticleTranslationModel.body_chat }
body_chat_auto: { extends: ArticleTranslationModel.body_chat_auto }
body_web_callback: { extends: ArticleTranslationModel.body_web_callback }
body_web_callback_auto: { extends: ArticleTranslationModel.body_web_callback_auto }
body_twitter: { extends: ArticleTranslationModel.body_twitter }
body_twitter_auto: { extends: ArticleTranslationModel.body_twitter_auto }
body_qna: { extends: ArticleTranslationModel.body_qna }
body_qna_auto: { extends: ArticleTranslationModel.body_qna_auto }
body_phone: { extends: ArticleTranslationModel.body_phone }
body_phone_auto: { extends: ArticleTranslationModel.body_phone_auto }
body_facebook: { extends: ArticleTranslationModel.body_facebook }
body_facebook_auto: { extends: ArticleTranslationModel.body_facebook_auto }
publish_at: { extends: ArticleTranslationModel.publish_at }
created_at: { extends: ArticleTranslationModel.created_at }
updated_at: { extends: ArticleTranslationModel.updated_at }
self:
location: links
data:
operation: ShowArticleTranslation
pattern: "#/articles/(?P<article_id>[0-9]+)/translations/(?P<locale>[a-zA-Z_-]+)$#"
article:
location: links
sentAs: self
data:
operation: ShowArticle
pattern: "#/articles/(?P<id>[0-9]+)#"
44 changes: 24 additions & 20 deletions lib/Desk/service-description/models/Article.group/__index.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -83,58 +83,62 @@ ArticleModel.internal_notes:
type: string


ArticleTranslation.locale:
ArticleTranslationModel.locale:
extends: locale
description: "Article translation's locale"
ArticleTranslation.subject:
ArticleTranslationModel.subject:
extends: parameter
description: The subject of the article
type: string
ArticleTranslation.body:
ArticleTranslationModel.body:
extends: parameter
description: The content of the article (HTML formatted)
type: string
ArticleTranslation.body_email:
ArticleTranslationModel.body_email:
extends: parameter
description: Email-specific body content
type: string
ArticleTranslation.body_email_auto: { extends: body_auto }
ArticleTranslation.body_chat:
ArticleTranslationModel.body_email_auto: { extends: body_auto }
ArticleTranslationModel.body_chat:
extends: parameter
description: Chat-specific body content
type: string
ArticleTranslation.body_chat_auto: { extends: body_auto }
ArticleTranslation.body_web_callback:
ArticleTranslationModel.body_chat_auto: { extends: body_auto }
ArticleTranslationModel.body_web_callback:
extends: parameter
description: Chat-specific body content
type: string
ArticleTranslation.body_web_callback_auto: { extends: body_auto }
ArticleTranslation.body_twitter:
ArticleTranslationModel.body_web_callback_auto: { extends: body_auto }
ArticleTranslationModel.body_twitter:
extends: parameter
description: Twitter-specific body content
type: string
ArticleTranslation.body_twitter_auto: { extends: body_auto }
ArticleTranslation.body_qna:
ArticleTranslationModel.body_twitter_auto: { extends: body_auto }
ArticleTranslationModel.body_qna:
extends: parameter
description: QNA-specific body content
type: string
ArticleTranslation.body_qna_auto: { extends: body_auto }
ArticleTranslation.body_phone:
ArticleTranslationModel.body_qna_auto: { extends: body_auto }
ArticleTranslationModel.body_phone:
extends: parameter
description: Phone-specific body content
type: string
ArticleTranslation.body_phone_auto: { extends: body_auto }
ArticleTranslation.body_facebook:
ArticleTranslationModel.body_phone_auto: { extends: body_auto }
ArticleTranslationModel.body_facebook:
extends: parameter
description: Facebook-specific body content
type: string
ArticleTranslation.body_facebook_auto: { extends: body_auto }
ArticleTranslation.publish_at:
ArticleTranslationModel.body_facebook_auto: { extends: body_auto }
ArticleTranslationModel.publish_at:
extends: date.output
description: Date the article is to be published
ArticleTranslation.created_at:
ArticleTranslationModel.created_at:
extends: date.output
description: Date the article was created
ArticleTranslation.updated_at:
ArticleTranslationModel.updated_at:
extends: date.output
description: Date the article was updated
ArticleTranslationModel.outdated:
extends: parameter
description: Whether or not the translation is out-of-date
type: boolean
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
extends: create
summary: Create a new translation for a particular article
uri: "articles/{article_id}/translations"
responseClass: ArticleTranslationModel
parameters:
article_id: { extends: id, required: true, location: uri }
locale: { extends: ArticleTranslationModel.locale, required: true }
subject: { extends: ArticleTranslationModel.subject }
body: { extends: ArticleTranslationModel.body }
body_email: { extends: ArticleTranslationModel.body_email }
body_email_auto: { extends: ArticleTranslationModel.body_email_auto }
body_chat: { extends: ArticleTranslationModel.body_chat }
body_chat_auto: { extends: ArticleTranslationModel.body_chat_auto }
body_web_callback: { extends: ArticleTranslationModel.body_web_callback }
body_web_callback_auto: { extends: ArticleTranslationModel.body_web_callback_auto }
body_twitter: { extends: ArticleTranslationModel.body_twitter }
body_twitter_auto: { extends: ArticleTranslationModel.body_twitter_auto }
body_qna: { extends: ArticleTranslationModel.body_qna }
body_qna_auto: { extends: ArticleTranslationModel.body_qna_auto }
body_phone: { extends: ArticleTranslationModel.body_phone }
body_phone_auto: { extends: ArticleTranslationModel.body_phone_auto }
body_facebook: { extends: ArticleTranslationModel.body_facebook }
body_facebook_auto: { extends: ArticleTranslationModel.body_facebook_auto }
outdated: { extends: ArticleTranslationModel.outdated }
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
<?php

namespace Desk\Test\Operation\Articles\Translations;

use Desk\Relationship\Resource\Model;
use Desk\Test\Helper\Operation\CreateOperationTestCase;
use DateTime;
use DateTimeZone;

/**
* @coversNothing
* @group system
*/
class CreateArticleTranslationOperationTest extends CreateOperationTestCase
{

/**
* {@inheritdoc}
*/
protected function getOperationName()
{
return 'CreateArticleTranslation';
}

/**
* {@inheritdoc}
*/
protected function getDefaultSystemParameters()
{
return array(
'article_id' => 1,
'locale' => 'es',
);
}

/**
* {@inheritdoc}
*/
public function dataParameterValid()
{
$body = '{"locale":"es","subject":"Spanish"}';

return array(
array(
array(
'article_id' => 1,
'locale' => 'es',
'subject' => 'Spanish',

),
array('body' => "#^$body$#")
),
);
}

/**
* {@inheritdoc}
*/
public function dataParameterInvalid()
{
return array(
array(
array(
'article_id' => 1,
)
),
array(
array(
'locale' => 'es',
)
),
array(
array(
'article_id' => 1,
'locale' => 'es',
'outdated' => 'foo',
)
),
);
}

/**
* {@inheritdoc}
*/
protected function assertSystem(Model $articleTranslation)
{
$this->assertSame('ArticleTranslationModel', $articleTranslation->getStructure()->getName());

$this->assertSame('Spanish Translation', $articleTranslation->get('subject'));
$this->assertSame('es', $articleTranslation->get('locale'));
}

/**
* {@inheritdoc}
*/
public function dataLinksAdditional()
{
return array(
array('article', 'ShowArticle', array('id' => 1)),
);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
HTTP/1.1 201 Created
Accept-Ranges: bytes
Cache-Control: max-age=0, private, must-revalidate
Content-Type: application/json; charset=utf-8
Location: http://mock.localhost/cases/1
Status: 201 Created
Vary: X-AppVersion
X-AppVersion: 781247eace915fac36f43a20c87f25019542d2d5.0
X-Frame-Options: SAMEORIGIN
X-Rate-Limit-Limit: 60
X-Rate-Limit-Remaining: 59
X-Rate-Limit-Reset: 53
Content-Length: 948
Connection: keep-alive

{
"locale": "es",
"subject": "Spanish Translation",
"body": "Traducción español aquí",
"body_email": "Traducción español aquí",
"body_email_auto": true,
"body_chat": "Traducción español aquí",
"body_chat_auto": true,
"body_web_callback": "Traducción español aquí",
"body_web_callback_auto": true,
"body_twitter": "Traducción español aquí",
"body_twitter_auto": true,
"body_qna": "Traducción español aquí",
"body_qna_auto": true,
"body_phone": "Traducción español aquí",
"body_phone_auto": true,
"body_facebook": "Traducción español aquí",
"body_facebook_auto": true,
"outdated": false,
"publish_at": "2014-05-12T19:23:25Z",
"created_at": "2014-05-12T19:18:25Z",
"updated_at": "2014-05-12T19:23:25Z",
"_links": {
"self": {
"href": "/api/v2/articles/1/translations/es",
"class": "article"
}
}
}

0 comments on commit b609861

Please sign in to comment.