From f2899fcf1726408c2d2b0c8ac5285d3faf1b85fc Mon Sep 17 00:00:00 2001 From: Unknown Date: Fri, 23 Jun 2017 22:21:25 +0200 Subject: [PATCH] Add FrontBundle tests --- .../Controller/ModelController.php | 13 +-- src/FrontBundle/Controller/PartController.php | 29 +----- .../BricksetController.php} | 6 +- .../Controller/{ => Set}/SetController.php | 88 ++++++------------ src/FrontBundle/Form/Search/SetSearchType.php | 5 +- src/FrontBundle/Imagine/PartImageLoader.php | 11 +-- src/FrontBundle/Imagine/SetImageLoader.php | 11 +-- src/FrontBundle/Twig/AppExtension.php | 17 ---- .../ApplicationAvailabilityTest.php | 42 +++++---- .../Controller/BaseControllerTest.php | 12 ++- .../Controller/fixtures/samplefile.txt | 1 + .../Imagine/PartImageLoaderTest.php | 67 +++++++++++++ .../Imagine/SetImageLoaderTest.php | 65 +++++++++++++ tests/FrontBundle/Imagine/fixtures/1.png | Bin 0 -> 33276 bytes 14 files changed, 211 insertions(+), 156 deletions(-) rename src/FrontBundle/Controller/{Brickset/SetController.php => Set/BricksetController.php} (97%) rename src/FrontBundle/Controller/{ => Set}/SetController.php (67%) create mode 100644 tests/FrontBundle/Controller/fixtures/samplefile.txt create mode 100644 tests/FrontBundle/Imagine/PartImageLoaderTest.php create mode 100644 tests/FrontBundle/Imagine/SetImageLoaderTest.php create mode 100644 tests/FrontBundle/Imagine/fixtures/1.png diff --git a/src/FrontBundle/Controller/ModelController.php b/src/FrontBundle/Controller/ModelController.php index 786ed42..f246a7e 100644 --- a/src/FrontBundle/Controller/ModelController.php +++ b/src/FrontBundle/Controller/ModelController.php @@ -16,7 +16,6 @@ use Symfony\Bundle\FrameworkBundle\Controller\Controller; use Symfony\Component\Form\FormFactoryInterface; use Symfony\Component\HttpFoundation\BinaryFileResponse; use Symfony\Component\HttpFoundation\Request; -use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\ResponseHeaderBag; /** @@ -90,19 +89,9 @@ class ModelController extends Controller $request->query->getInt('limit', 16)/*limit per page*/ ); - $template = $this->render('model/tabs/sets.html.twig', [ + return $this->render('model/tabs/sets.html.twig', [ 'sets' => $sets, ]); - - if ($request->isXmlHttpRequest()) { - $json = json_encode($template->getContent()); - $response = new Response($json, 200); - $response->headers->set('Content-Type', 'application/json'); - - return $response; - } - - return $template; } /** diff --git a/src/FrontBundle/Controller/PartController.php b/src/FrontBundle/Controller/PartController.php index 1f2e8f5..f8db192 100644 --- a/src/FrontBundle/Controller/PartController.php +++ b/src/FrontBundle/Controller/PartController.php @@ -8,7 +8,6 @@ use Knp\Component\Pager\Paginator; use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; use Symfony\Bundle\FrameworkBundle\Controller\Controller; use Symfony\Component\HttpFoundation\Request; -use Symfony\Component\HttpFoundation\Response; /** * Part controller. @@ -24,18 +23,10 @@ class PartController extends Controller */ public function detailAction(Part $part, SetService $setService) { - if ($part) { - if ($model = $part->getModel()) { - $this->redirectToRoute('model_detail', ['id' => $model->getId()]); - } - - return $this->render('part/detail.html.twig', [ - 'part' => $part, - 'setCount' => count($setService->getAllByPart($part)), - ]); - } - - return $this->render('error/error.html.twig'); + return $this->render('part/detail.html.twig', [ + 'part' => $part, + 'setCount' => count($setService->getAllByPart($part)), + ]); } /** @@ -51,18 +42,8 @@ class PartController extends Controller $request->query->getInt('limit', 16)/*limit per page*/ ); - $template = $this->render('model/tabs/sets.html.twig', [ + return $this->render('model/tabs/sets.html.twig', [ 'sets' => $sets, ]); - - if ($request->isXmlHttpRequest()) { - $json = json_encode($template->getContent()); - $response = new Response($json, 200); - $response->headers->set('Content-Type', 'application/json'); - - return $response; - } - - return $template; } } diff --git a/src/FrontBundle/Controller/Brickset/SetController.php b/src/FrontBundle/Controller/Set/BricksetController.php similarity index 97% rename from src/FrontBundle/Controller/Brickset/SetController.php rename to src/FrontBundle/Controller/Set/BricksetController.php index cac0d34..317e42d 100644 --- a/src/FrontBundle/Controller/Brickset/SetController.php +++ b/src/FrontBundle/Controller/Set/BricksetController.php @@ -1,6 +1,6 @@ render('set/tabs/inventory.html.twig', [ + return $this->render('set/tabs/inventory.html.twig', [ 'inventorySets' => $setService->getAllSubSets($set), 'set' => $set, 'missing' => $setService->getParts($set, false, false), @@ -92,84 +100,44 @@ class SetController extends Controller 'missingCount' => $setService->getPartCount($set, false, false), 'partCount' => $setService->getPartCount($set, false), ]); - - if ($request->isXmlHttpRequest()) { - $json = json_encode($template->getContent()); - $response = new Response($json, 200); - $response->headers->set('Content-Type', 'application/json'); - - return $response; - } - - return $template; } /** * @Route("/{id}/models", name="set_models") + * @param Set $set + * @param SetService $setService + * @return Response */ - public function modelsAction(Request $request, Set $set, SetService $setService) + public function modelsAction(Set $set, SetService $setService) { - $models = null; - $missing = null; - - try { - $models = $setService->getModels($set, false); - $missing = $setService->getParts($set, false, false); - } catch (\Exception $e) { - $this->addFlash('error', $e->getMessage()); - } - - $template = $this->render('set/tabs/models.html.twig', [ + return $this->render('set/tabs/models.html.twig', [ 'set' => $set, - 'missing' => $missing, - 'models' => $models, + 'missing' => $setService->getParts($set, false, false), + 'models' => $setService->getModels($set, false), ]); - - if ($request->isXmlHttpRequest()) { - $json = json_encode($template->getContent()); - $response = new Response($json, 200); - $response->headers->set('Content-Type', 'application/json'); - - return $response; - } - - return $template; } /** * @Route("/{id}/colors", name="set_colors") + * @param Set $set + * @param SetService $setService + * @return Response */ - public function colorsAction(Request $request, Set $set, SetService $setService) + public function colorsAction(Set $set, SetService $setService) { - $colors = null; - $missing = null; - - try { - $colors = $setService->getModelsGroupedByColor($set, false); - $missing = $setService->getParts($set, false, false); - } catch (\Exception $e) { - $this->addFlash('error', $e->getMessage()); - } - - $template = $this->render('set/tabs/colors.html.twig', [ + return $this->render('set/tabs/colors.html.twig', [ 'set' => $set, - 'colors' => $colors, - 'missing' => $missing, + 'colors' => $setService->getModelsGroupedByColor($set, false), + 'missing' => $setService->getParts($set, false, false), ]); - - if ($request->isXmlHttpRequest()) { - $json = json_encode($template->getContent()); - $response = new Response($json, 200); - $response->headers->set('Content-Type', 'application/json'); - - return $response; - } - - return $template; } /** * @Route("/{id}/zip", name="set_zip") + * @param Request $request + * @param Set $set + * @param ZipService $zipService + * @return BinaryFileResponse */ public function zipAction(Request $request, Set $set, ZipService $zipService) { diff --git a/src/FrontBundle/Form/Search/SetSearchType.php b/src/FrontBundle/Form/Search/SetSearchType.php index d516a78..78a5bf6 100644 --- a/src/FrontBundle/Form/Search/SetSearchType.php +++ b/src/FrontBundle/Form/Search/SetSearchType.php @@ -68,10 +68,7 @@ class SetSearchType extends AbstractType 'choice_label' => 'fullName', 'choice_translation_domain' => false, 'group_by' => function ($theme, $key, $index) { - /** @var Theme $theme */ - $parent = $theme->getParent(); - - return $parent ? $parent->getParent() ? $parent->getParent()->getName() : $parent->getName() : $theme->getName(); + return $theme->getGroup()->getName(); }, 'choice_value' => 'id', 'placeholder' => 'set.form.theme.all', diff --git a/src/FrontBundle/Imagine/PartImageLoader.php b/src/FrontBundle/Imagine/PartImageLoader.php index 5f14478..4254456 100644 --- a/src/FrontBundle/Imagine/PartImageLoader.php +++ b/src/FrontBundle/Imagine/PartImageLoader.php @@ -37,14 +37,10 @@ class PartImageLoader extends BaseImageLoader } // try to load image from rebrickable website - try { - if ($this->remoteFileExists($this->rebrickableContext.$path)) { - $context = stream_context_create(['http' => ['header' => 'Connection: close\r\n']]); + if ($this->remoteFileExists($this->rebrickableContext.$path)) { + $context = stream_context_create(['http' => ['header' => 'Connection: close\r\n']]); - return file_get_contents($this->rebrickableContext.strtolower($path), false, $context); - } - } catch (\Exception $e) { - throw new NotLoadableException(sprintf('Source image %s could not be loaded.', $path), $e->getCode(), $e); + return file_get_contents($this->rebrickableContext.strtolower($path), false, $context); } // Load part entity form rebrickable api and get image path from response @@ -61,6 +57,5 @@ class PartImageLoader extends BaseImageLoader } throw new NotLoadableException(sprintf('Source image %s not found.', $path)); -// return $this->mediaFilesystem->read('noimage.png'); } } diff --git a/src/FrontBundle/Imagine/SetImageLoader.php b/src/FrontBundle/Imagine/SetImageLoader.php index bfe9057..7766a55 100644 --- a/src/FrontBundle/Imagine/SetImageLoader.php +++ b/src/FrontBundle/Imagine/SetImageLoader.php @@ -32,14 +32,10 @@ class SetImageLoader extends BaseImageLoader public function find($path) { // try to load image from rebrickable website - try { - if ($this->remoteFileExists($this->rebrickableContext.strtolower($path))) { - $context = stream_context_create(['http' => ['header' => 'Connection: close\r\n']]); + if ($this->remoteFileExists($this->rebrickableContext.strtolower($path))) { + $context = stream_context_create(['http' => ['header' => 'Connection: close\r\n']]); - return file_get_contents($this->rebrickableContext.strtolower($path), false, $context); - } - } catch (\Exception $e) { - throw new NotLoadableException(sprintf('Source image %s could not be loaded.', $path), $e->getCode(), $e); + return file_get_contents($this->rebrickableContext.strtolower($path), false, $context); } // Load part entity form brickset api and get image path from response @@ -56,6 +52,5 @@ class SetImageLoader extends BaseImageLoader } throw new NotLoadableException(sprintf('Source image %s not found.', $path)); -// return $this->mediaFilesystem->read('noimage.png'); } } diff --git a/src/FrontBundle/Twig/AppExtension.php b/src/FrontBundle/Twig/AppExtension.php index db67b43..d19f2b4 100644 --- a/src/FrontBundle/Twig/AppExtension.php +++ b/src/FrontBundle/Twig/AppExtension.php @@ -35,7 +35,6 @@ class AppExtension extends \Twig_Extension return [ new \Twig_SimpleFunction('remoteSize', [$this, 'remoteSize']), new \Twig_SimpleFunction('remoteFilename', [$this, 'remoteFilename']), - new \Twig_SimpleFunction('remoteFileExists', [$this, 'remoteFileExists']), new \Twig_SimpleFunction('fileTimestamp', [$this, 'fileTimestamp']), ]; } @@ -45,22 +44,6 @@ class AppExtension extends \Twig_Extension return $this->formatTransformer->bytesToSize($bytes, $precision); } - /** - * @param string $url - * - * @return bool - */ - public function remoteFileExists($url) - { - $ch = curl_init($url); - curl_setopt($ch, CURLOPT_NOBODY, true); - curl_exec($ch); - $status = curl_getinfo($ch, CURLINFO_HTTP_CODE); - curl_close($ch); - - return $status === 200 ? true : false; - } - public function remoteSize($url) { $ch = curl_init($url); diff --git a/tests/FrontBundle/Controller/ApplicationAvailabilityTest.php b/tests/FrontBundle/Controller/ApplicationAvailabilityTest.php index 3736085..13901d3 100644 --- a/tests/FrontBundle/Controller/ApplicationAvailabilityTest.php +++ b/tests/FrontBundle/Controller/ApplicationAvailabilityTest.php @@ -9,28 +9,38 @@ class ApplicationAvailabilityTest extends BaseControllerTest /** * @dataProvider urlProvider */ - public function testPageIsSuccessful($url) { + public function testPageIsSuccessful($url) + { $client = static::createClient(); $client->request('GET', $url); - $this->assertTrue( $client->getResponse()->isSuccessful()); + $this->assertTrue($client->getResponse()->isSuccessful()); } public function urlProvider() { - return array( - array('/'), - array('/colors/'), - array('/bricks/'), - array('/bricks/1'), - array('/bricks/1/sets'), - array('/sets/'), - array('/sets/8049-1'), - array('/sets/8049-1/inventory'), - array('/sets/8049-1/models'), - array('/sets/8049-1/colors'), - array('/parts/1') - ); + return [ + ['/'], + ['/colors/'], + ['/bricks/'], + ['/bricks/1'], + ['/bricks/1/zip'], + ['/bricks/1/sets'], + ['/sets/'], + ['/sets/?query=name&partCount[from]=620'], + ['/sets/8049-1'], + ['/sets/8049-1/zip'], + ['/sets/8049-1/inventory'], + ['/sets/8049-1/models'], + ['/sets/8049-1/colors'], + ['/parts/1'], + ['/search/autocomplete?query=name'], + ['/search/?query=name'], + ['/sets/brickset/8540/reviews'], + ['/sets/brickset/8540/instructions'], + ['/sets/brickset/8540/description'], + ['/sets/brickset/8540/images'], + ]; } -} \ No newline at end of file +} diff --git a/tests/FrontBundle/Controller/BaseControllerTest.php b/tests/FrontBundle/Controller/BaseControllerTest.php index 7f6a2e1..daebf49 100644 --- a/tests/FrontBundle/Controller/BaseControllerTest.php +++ b/tests/FrontBundle/Controller/BaseControllerTest.php @@ -2,18 +2,22 @@ namespace Tests\FrontBundle\Controller; -use Liip\FunctionalTestBundle\Test\WebTestCase; +use Tests\AppBundle\BaseTest; use Tests\AppBundle\Fixtures\LoadBaseData; -abstract class BaseControllerTest extends WebTestCase +abstract class BaseControllerTest extends BaseTest { public function setUp() { + parent::setUp(); + // If you are using the Doctrine Fixtures Bundle you could load these here $this->loadFixtures([ - LoadBaseData::class + LoadBaseData::class, ]); + $this->filesystem->write('models/1.stl', 'abcd'); + $this->runCommand('fos:elastica:populate'); } -} \ No newline at end of file +} diff --git a/tests/FrontBundle/Controller/fixtures/samplefile.txt b/tests/FrontBundle/Controller/fixtures/samplefile.txt new file mode 100644 index 0000000..754bb84 --- /dev/null +++ b/tests/FrontBundle/Controller/fixtures/samplefile.txt @@ -0,0 +1 @@ +file contents \ No newline at end of file diff --git a/tests/FrontBundle/Imagine/PartImageLoaderTest.php b/tests/FrontBundle/Imagine/PartImageLoaderTest.php new file mode 100644 index 0000000..0218980 --- /dev/null +++ b/tests/FrontBundle/Imagine/PartImageLoaderTest.php @@ -0,0 +1,67 @@ +createMock(RebrickableManager::class); + + $part = new Part(); + $part->setImgUrl(__DIR__.'/fixtures/1.png'); + + $rebrickableManager->method('getPart') + ->willReturn($part); + + $this->partImageLoader = new PartImageLoader($rebrickableManager, $this->filesystem); + } + + public function testLocal() + { + $this->filesystem->write('images/-1/1.png', file_get_contents(__DIR__.'/fixtures/1.png')); + $this->assertNotNull($this->partImageLoader->find('-1/1.png')); + } + + public function testWebsite() + { + $this->assertNotNull($this->partImageLoader->find('-1/1.png')); + } + + public function testAPI() + { + $this->assertNotNull($this->partImageLoader->find('-1/123213.png')); + } + + /** + * @expectedException \Liip\ImagineBundle\Exception\Binary\Loader\NotLoadableException + */ + public function testNotFound() + { + $this->assertNotNull($this->partImageLoader->find('123213.png')); + } + + /** + * @expectedException \Liip\ImagineBundle\Exception\Binary\Loader\NotLoadableException + */ + public function testException() + { + $rebrickableManager = $this->createMock(RebrickableManager::class); + $rebrickableManager->method('getPart') + ->willThrowException(new \Exception()); + + $this->partImageLoader = new PartImageLoader($rebrickableManager, $this->filesystem); + + $this->partImageLoader->find('-1/123213.png'); + } +} diff --git a/tests/FrontBundle/Imagine/SetImageLoaderTest.php b/tests/FrontBundle/Imagine/SetImageLoaderTest.php new file mode 100644 index 0000000..01ca0f4 --- /dev/null +++ b/tests/FrontBundle/Imagine/SetImageLoaderTest.php @@ -0,0 +1,65 @@ +createMock(BricksetManager::class); + + $set = new Set(); + $set->setImage(__DIR__.'/fixtures/1.png'); + + $bricksetManager->method('getSetByNumber') + ->willReturn($set); + + $this->setImageLoader = new SetImageLoader($bricksetManager, $this->filesystem); + } + + public function testWebsite() + { + $this->assertNotNull($this->setImageLoader->find('4488-1.jpg')); + } + + /** + * @expectedException \Liip\ImagineBundle\Exception\Binary\Loader\NotLoadableException + */ + public function testNotFound() + { + $this->assertNotNull($this->setImageLoader->find('123213.png')); + } + + public function testAPI() + { + $this->assertNotNull($this->setImageLoader->find('4488-1.jpg')); + } + + /** + * @expectedException \Liip\ImagineBundle\Exception\Binary\Loader\NotLoadableException + */ + public function testException() + { + $bricksetManager = $this->createMock(BricksetManager::class); + + $set = new Set(); + $set->setImage(__DIR__.'/fixtures/1.png'); + + $bricksetManager->method('getSetByNumber') + ->willReturn(null); + + $this->setImageLoader = new SetImageLoader($bricksetManager, $this->filesystem); + + $this->setImageLoader->find('-1/123213.png'); + } +} diff --git a/tests/FrontBundle/Imagine/fixtures/1.png b/tests/FrontBundle/Imagine/fixtures/1.png new file mode 100644 index 0000000000000000000000000000000000000000..d06573941e924c1943815e0ac15d540e541e69c7 GIT binary patch literal 33276 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 z zUZbwZ?J@+xpNNl@$Hp3%t?5#+3!TT~;Fb@qD2 zg!Ont+n;l_nh1On;(v{X^<`<)@HIQ9!tLx$%He>eQOND1WL7qee{PYwuIDP^gAD?Q zLL2AG57MpCNI55?&zFMtUu}+N+BA~|jmK%agQsggq%a0fB(NtNtV|)}-(A>cVAT;E zjncM8A+|ZABhO}~QUwIBU_ET-A3;O|Sz#R>s&{@AVHJBQ7Xm)8aL zU(EE_Y3pq1zl|E5(;k|XCgt$v$QaONyljd^zH0Blzmt0qt6G{a-i?ic^Sg6r6)Pk- zO=xu8?8lNk6?}HJ@wc*hDk&P-`}pG&J4#K>{F(PyUls8o2g*b~jmH`p0=xJ6fV;w3 zYa0AM9~U>b1-(~84a8sD)Oy<+*k(zyR~>*t;1u_lSoOKQXFeF5dG@$sz0dv= zjvFl8i`D0g60md-5>W2#;lorQTeob>tqX6}@RvZ>ZXxP49E;wv3y{ga1O4(=yREt+W8lNo(suw?-&fi~T7Oz%k&Q{Z(iK z$P5m-#D+%TbJAMa=c<>es6aW9a#EkL5y!6JVvy52s1A10ynpX6 z)tbQ9a4n(tmd{0BjRi#oLYFL1M-A~cSK2-9g4Nw#MD9=1Kyi4nlWZH;7tGewThAhNTTv$X zc7qdGB8AN3+@kt%u{42z9cW)F&Bx`lasZsycq2~zq2H^vgc}StvJx0Rd*25p0v|pN zPBa$bz3DY3W-I_J4jei|Upu~adOqz2shuw327u*qo$<3Aqu7}Ne?dKxCAyz4B)yqK zjwutE#5z3cwj4(EOCcpoQ@c&1-A7V*k>HAa=4~Qz$K-#JFo0lpo^Pf1qfF>&K32=8 zTIy(P;r15eIb+#VHx9xCh|o?%u=sW$^m!ze&%^yTcVR_1`~DzYqWk)QP#5rG7r5Z7 z!7g#r6zIwIx}~=nllqKW0v>RwDdZhuoCl zi%NQa5UZ^D6VkA^34qaZ|1|LB9h{c%gfEAZ*SQ)cK9AdU z4&lRvb?b%tKbO-Nd{kn~F?j8iN5OF71b(h;^DW~N!KP>Np+4&$swoMneEiQ2>)ZT3 z$^KL+vGZdTgWjJ<)h9kl9BeGve^@bEiTm!dn(UVotATyq&DFI5)onlr{|pGeF@Hgz zUj66zz3iZZsib~AFwNhOiL|Z$btF#yMBJnQ?4OIahVL@m8w~UXgQu&X%Q~loCIE#V BBjW%7 literal 0 HcmV?d00001