}
}
+ /**
+ * Check if an entry exist by url.
+ *
+ * @ApiDoc(
+ * parameters={
+ * {"name"="url", "dataType"="string", "required"=true, "format"="An url", "description"="Url to check if it exists"}
+ * }
+ * )
+ *
+ * @return JsonResponse
+ */
+ public function getEntriesExistsAction(Request $request)
+ {
+ $this->validateAuthentication();
+
+ $url = $request->query->get('url', '');
+
+ if (empty($url)) {
+ throw $this->createAccessDeniedException('URL is empty?, logged user id: '.$user->getId());
+ }
+
+ $res = $this->getDoctrine()
+ ->getRepository('WallabagCoreBundle:Entry')
+ ->findByUrlAndUserId($url, $this->getUser()->getId());
+
+ $exists = false === $res ? false : true;
+
+ $json = $this->get('serializer')->serialize(['exists' => $exists], 'json');
+
+ return (new JsonResponse())->setJson($json);
+ }
+
/**
* Retrieve all entries. It could be filtered by many options.
*
public function findByUrlAndUserId($url, $userId)
{
$res = $this->createQueryBuilder('e')
- ->where('e.url = :url')->setParameter('url', $url)
+ ->where('e.url = :url')->setParameter('url', urldecode($url))
->andWhere('e.user = :user_id')->setParameter('user_id', $userId)
->getQuery()
->getResult();
$this->assertEquals(true, $content['is_starred']);
}
+
+ public function testGetEntriesExists()
+ {
+ $this->client->request('GET', '/api/entries/exists?url=http://0.0.0.0/entry2');
+
+ $this->assertEquals(200, $this->client->getResponse()->getStatusCode());
+
+ $content = json_decode($this->client->getResponse()->getContent(), true);
+
+ $this->assertEquals(true, $content['exists']);
+ }
+
+ public function testGetEntriesExistsWhichDoesNotExists()
+ {
+ $this->client->request('GET', '/api/entries/exists?url=http://google.com/entry2');
+
+ $this->assertEquals(200, $this->client->getResponse()->getStatusCode());
+
+ $content = json_decode($this->client->getResponse()->getContent(), true);
+
+ $this->assertEquals(false, $content['exists']);
+ }
}
$this->assertContains('/view/', $client->getResponse()->getTargetUrl());
}
+ public function testPostNewOkUrlExistWithAccent()
+ {
+ $this->logInAs('admin');
+ $client = $this->getClient();
+
+ $url = 'http://www.aritylabs.com/post/106091708292/des-contr%C3%B4leurs-optionnels-gr%C3%A2ce-%C3%A0-constmissing';
+
+ $crawler = $client->request('GET', '/new');
+
+ $this->assertEquals(200, $client->getResponse()->getStatusCode());
+
+ $form = $crawler->filter('form[name=entry]')->form();
+
+ $data = [
+ 'entry[url]' => $url,
+ ];
+
+ $client->submit($form, $data);
+
+ $crawler = $client->request('GET', '/new');
+
+ $this->assertEquals(200, $client->getResponse()->getStatusCode());
+
+ $form = $crawler->filter('form[name=entry]')->form();
+
+ $data = [
+ 'entry[url]' => $url,
+ ];
+
+ $client->submit($form, $data);
+
+ $this->assertEquals(302, $client->getResponse()->getStatusCode());
+ $this->assertContains('/view/', $client->getResponse()->getTargetUrl());
+
+ $em = $client->getContainer()
+ ->get('doctrine.orm.entity_manager');
+ $entry = $em
+ ->getRepository('WallabagCoreBundle:Entry')
+ ->findOneByUrl(urldecode($url));
+
+ $em->remove($entry);
+ $em->flush();
+ }
+
/**
* This test will require an internet connection.
*/