mirror of
https://github.com/wallabag/wallabag.git
synced 2025-02-18 19:55:26 +00:00
POST entries/tags with test
This commit is contained in:
parent
46bbd8d321
commit
a36737f485
3 changed files with 69 additions and 1 deletions
|
@ -213,8 +213,34 @@ class WallabagRestController extends Controller
|
||||||
* }
|
* }
|
||||||
* )
|
* )
|
||||||
*/
|
*/
|
||||||
public function postEntriesTagsAction(Entry $entry)
|
public function postEntriesTagsAction(Request $request, Entry $entry)
|
||||||
{
|
{
|
||||||
|
$tags = explode(',', $request->request->get('tags'));
|
||||||
|
|
||||||
|
foreach ($tags as $label) {
|
||||||
|
$tagEntity = $this
|
||||||
|
->getDoctrine()
|
||||||
|
->getRepository('WallabagCoreBundle:Tag')
|
||||||
|
->findOneByLabel($label);
|
||||||
|
|
||||||
|
if (is_null($tagEntity)) {
|
||||||
|
$tagEntity = new Tag();
|
||||||
|
$tagEntity->setLabel($label);
|
||||||
|
}
|
||||||
|
|
||||||
|
// only add the tag on the entry if the relation doesn't exist
|
||||||
|
if (!$entry->getTags()->contains($tagEntity)) {
|
||||||
|
$entry->addTag($tagEntity);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$em = $this->getDoctrine()->getManager();
|
||||||
|
$em->persist($entry);
|
||||||
|
$em->flush();
|
||||||
|
|
||||||
|
$json = $this->get('serializer')->serialize($entry, 'json');
|
||||||
|
|
||||||
|
return new Response($json, 200, array('application/json'));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -119,6 +119,11 @@ class EntryRepository extends EntityRepository
|
||||||
->getResult();
|
->getResult();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fetch an entry with a tag. Only used for tests.
|
||||||
|
*
|
||||||
|
* @return Entry
|
||||||
|
*/
|
||||||
public function findOneWithTags()
|
public function findOneWithTags()
|
||||||
{
|
{
|
||||||
$qb = $this->createQueryBuilder('e')
|
$qb = $this->createQueryBuilder('e')
|
||||||
|
|
|
@ -176,4 +176,41 @@ class WallabagRestControllerTest extends WallabagTestCase
|
||||||
|
|
||||||
$this->assertEquals(json_encode($tags), $client->getResponse()->getContent());
|
$this->assertEquals(json_encode($tags), $client->getResponse()->getContent());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testPostTagsOnEntry()
|
||||||
|
{
|
||||||
|
$client = $this->createClient();
|
||||||
|
$client->request('GET', '/api/salts/admin.json');
|
||||||
|
$salt = json_decode($client->getResponse()->getContent());
|
||||||
|
$headers = $this->generateHeaders('admin', 'test', $salt[0]);
|
||||||
|
|
||||||
|
$entry = $client->getContainer()
|
||||||
|
->get('doctrine.orm.entity_manager')
|
||||||
|
->getRepository('WallabagCoreBundle:Entry')
|
||||||
|
->findOneByUser(1);
|
||||||
|
|
||||||
|
if (!$entry) {
|
||||||
|
$this->markTestSkipped('No content found in db.');
|
||||||
|
}
|
||||||
|
|
||||||
|
$newTags = 'tag1,tag2,tag3';
|
||||||
|
|
||||||
|
$client->request('POST', '/api/entries/'.$entry->getId().'/tags', array('tags' => $newTags), array(), $headers);
|
||||||
|
|
||||||
|
$this->assertEquals(200, $client->getResponse()->getStatusCode());
|
||||||
|
|
||||||
|
$entryDB = $client->getContainer()
|
||||||
|
->get('doctrine.orm.entity_manager')
|
||||||
|
->getRepository('WallabagCoreBundle:Entry')
|
||||||
|
->find($entry->getId());
|
||||||
|
|
||||||
|
$tagsInDB = array();
|
||||||
|
foreach ($entryDB->getTags()->toArray() as $tag) {
|
||||||
|
$tagsInDB[$tag->getId()] = $tag->getLabel();
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (explode(',', $newTags) as $tag) {
|
||||||
|
$this->assertContains($tag, $tagsInDB);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue