From 32bac75cbd5003f28938cbeee4f72230f96eef92 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20H=C3=BCbner?= Date: Fri, 5 May 2017 21:05:43 +0200 Subject: [PATCH] Add RelationMapper tests --- app/Resources/relations/alias_model.yml | 58 +---- app/Resources/relations/part_model.yml | 210 +++++++++++++++++- app/config/service/util.yml | 5 +- src/AppBundle/Util/RelationMapper.php | 43 ++-- .../RelationMapper/RelationMapperTest.php | 60 ++--- .../Util/RelationMapper/fixtures/invalid.yml | 2 + 6 files changed, 254 insertions(+), 124 deletions(-) create mode 100644 tests/Util/RelationMapper/fixtures/invalid.yml diff --git a/app/Resources/relations/alias_model.yml b/app/Resources/relations/alias_model.yml index 85904f0..877bdb9 100644 --- a/app/Resources/relations/alias_model.yml +++ b/app/Resources/relations/alias_model.yml @@ -267,9 +267,6 @@ u9107p06c01: u9107p01c01 54654c06: 54654c01 54701p01c01: 54654c01 -54779c01: 54779 -54779c02: 54779 - 559c02: 559c01 57028b: 57028a @@ -358,61 +355,10 @@ u9142p04c03: u9142p02c04 16530: 16529p01c01 -15875: 15680c01 -15875pr0001ac01: 15680c01 -15875pr0001bc01: 15680c01 -15875pr0002c01: 15680c01 -15875pr0003c01: 15680c01 -15875pr0004c01: 15680c01 -15875pr0005c01: 15680c01 -15875pr0006c01: 15680c01 -15875pr0007c01: 15680c01 -15875pr0008c01: 15680c01 -15875pr0011c01: 15680c01 -15875pr0012c01: 15680c01 -15875pr0013c01: 15680c01 -15875pr0102c01: 15680c01 -15875pr0105c01: 15680c01 -15875pr0106c01: 15680c01 - -11403: 11202p01c01 -11403pr0001c01: 11202p01c01 -11403pr0002c01: 11202p01c01 -11403pr0003c01: 11202p01c01 -11403pr0004c01: 11202p01c01 -11403pr0005c01: 11202p01c01 -11403pr0006c01: 11202p01c01 -11403pr0008c01: 11202p01c01 -11403pr0102c01: 11202p01c01 - -11407: 11244p01c01 -11407pr0001c01: 11244p01c01 -11407pr0003c01: 11244p01c01 -11407pr0004c01: 11244p01c01 - -92818: 92250p01c01 -92818pr0001c01: 92250p01c01 -92818pr0002c01: 92250p01c01 -92818pr0003c01: 92250p01c01 -92818pr0004c01: 92250p01c01 -92818pr0005c01: 92250p01c01 -92818pr0006c01: 92250p01c01 -92818pr0007c01: 92250p01c01 -92818pr0008c01: 92250p01c01 -92818pr0010c01: 92250p01c01 -92818pr0011c01: 92250p01c01 -92818pr0012c01: 92250p01c01 - -92817: 92249p01c01 -92817pr0001c01: 92249p01c01 -92817pr0002c01: 92249p01c01 -92817pr0003c01: 92249p01c01 -92817pr0004c01: 92249p01c01 - -93549: u9180 - u9142p02c01: u9142p01c01 u9142p03c01: u9142p01c01 u9142p04c01: u9142p01c01 u9140p02c01: u9140p01c01 + +92243p02c01: 92243p01c01 \ No newline at end of file diff --git a/app/Resources/relations/part_model.yml b/app/Resources/relations/part_model.yml index 80db29e..b672395 100644 --- a/app/Resources/relations/part_model.yml +++ b/app/Resources/relations/part_model.yml @@ -150,7 +150,7 @@ wheel2a: 568c01 40344c01: 43123 11895pr0001c01: 11895 -92456pr0021c01: 92241p03c01 + 15672: 92946 @@ -214,4 +214,210 @@ x222: 13459 11816: 92198 3741: 3741a -3741c01: 3741ac01 \ No newline at end of file +3741c01: 3741ac01 + +15875: 15680c01 +15875pr0001ac01: 15680c01 +15875pr0001bc01: 15680c01 +15875pr0002c01: 15680c01 +15875pr0003c01: 15680c01 +15875pr0004c01: 15680c01 +15875pr0005c01: 15680c01 +15875pr0006c01: 15680c01 +15875pr0007c01: 15680c01 +15875pr0008c01: 15680c01 +15875pr0011c01: 15680c01 +15875pr0012c01: 15680c01 +15875pr0013c01: 15680c01 +15875pr0102c01: 15680c01 +15875pr0105c01: 15680c01 +15875pr0106c01: 15680c01 + +# Friends Hips and Shorts +11403: 11202p01c01 +11403pr0001c01: 11202p01c01 +11403pr0002c01: 11202p01c01 +11403pr0003c01: 11202p01c01 +11403pr0004c01: 11202p01c01 +11403pr0005c01: 11202p01c01 +11403pr0006c01: 11202p01c01 +11403pr0007: 11202p01c01 +11403pr0008c01: 11202p01c01 +11403pr0100: 11202p01c01 +11403pr0102c01: 11202p01c01 + +11407: 11244p01c01 +11407pr0001c01: 11244p01c01 +11407pr0003c01: 11244p01c01 +11407pr0004c01: 11244p01c01 + +92818: 92250p01c01 +92818pr0001c01: 92250p01c01 +92818pr0002c01: 92250p01c01 +92818pr0003c01: 92250p01c01 +92818pr0004c01: 92250p01c01 +92818pr0005c01: 92250p01c01 +92818pr0006c01: 92250p01c01 +92818pr0007c01: 92250p01c01 +92818pr0008c01: 92250p01c01 +92818pr0010c01: 92250p01c01 +92818pr0011c01: 92250p01c01 +92818pr0012c01: 92250p01c01 + +92817: 92249p01c01 +92817pr0001c01: 92249p01c01 +92817pr0002c01: 92249p01c01 +92817pr0003c01: 92249p01c01 +92817pr0004c01: 92249p01c01 + +93549: u9180 + +92456: 92241p01c01 +92456pr0001c01: 92241p01c01 +92456pr0002c01: 92241p01c01 +92456pr0003c01: 92241p01c01 +92456pr0004c01: 92241p01c01 +92456pr0005c01: 92241p01c01 +92456pr0006c01: 92241p01c01 +92456pr0007c01: 92241p01c01 +92456pr0008c01: 92241p01c01 +92456pr0009c01: 92241p01c01 +92456pr0010c01: 92241p01c01 +92456pr0011c01: 92241p01c01 +92456pr0013c01: 92241p01c01 +92456pr0015c01: 92241p01c01 +92456pr0017c01: 92241p01c01 +92456pr0018c01: 92241p01c01 +92456pr0019c01: 92241p01c01 +92456pr0021c01: 92241p01c01 +92456pr0022c01: 92241p01c01 +92456pr0023c01: 92241p01c01 +92456pr0024c01: 92241p01c01 +92456pr0025c01: 92241p01c01 +92456pr0026c01: 92241p01c01 +92456pr0027c01: 92241p01c01 +92456pr0028c01: 92241p01c01 +92456pr0029c01: 92241p01c01 +92456pr0030c01: 92241p01c01 +92456pr0031c01: 92241p01c01 +92456pr0032c01: 92241p01c01 +92456pr0033c01: 92241p01c01 +92456pr0034c01: 92241p01c01 +92456pr0035c01: 92241p01c01 +92456pr0036c01: 92241p01c01 +92456pr0037c01: 92241p01c01 +92456pr0038c01: 92241p01c01 +92456pr0039c01: 92241p01c01 +92456pr0040c01: 92241p01c01 +92456pr0041c01: 92241p01c01 +92456pr0042c01: 92241p01c01 +92456pr0044c01: 92241p01c01 +92456pr0045c01: 92241p01c01 +92456pr0046c01: 92241p01c01 +92456pr0047c01: 92241p01c01 +92456pr0048c01: 92241p01c01 +92456pr0049c01: 92241p01c01 +92456pr0051c01: 92241p01c01 +92456pr0052c01a: 92241p01c01 +92456pr0052c01b: 92241p01c01 +92456pr0053c01: 92241p01c01 +92456pr0054c01: 92241p01c01 +92456pr0056c01: 92241p01c01 +92456pr0057c01: 92241p01c01 +92456pr0060c01: 92241p01c01 +92456pr0061c01: 92241p01c01 +92456pr0062c01: 92241p01c01 +92456pr0063c01: 92241p01c01 +92456pr0064c01: 92241p01c01 +92456pr0065c01: 92241p01c01 +92456pr0066c01: 92241p01c01 +92456pr0067c01: 92241p01c01 +92456pr0068c01: 92241p01c01 +92456pr0069c01: 92241p01c01 +92456pr0070c01: 92241p01c01 +92456pr0071c01: 92241p01c01 +92456pr0072c01: 92241p01c01 +92456pr0073c01: 92241p01c01 +92456pr0074c01: 92241p01c01 +92456pr0075c01: 92241p01c01 +92456pr0076c01: 92241p01c01 +92456pr0077c01: 92241p01c01 +92456pr0078c01: 92241p01c01 +92456pr0079c01: 92241p01c01 +92456pr0080c01: 92241p01c01 +92456pr0081c01: 92241p01c01 +92456pr0082c01: 92241p01c01 +92456pr0083c01: 92241p01c01 +92456pr0085c01: 92241p01c01 +92456pr0086c01: 92241p01c01 +92456pr0087: 92241p01c01 +92456pr0088: 92241p01c01 +92456pr0089c01: 92241p01c01 +92456pr0090c01: 92241p01c01 +92456pr0091c01: 92241p01c01 +92456pr0092c01: 92241p01c01 +92456pr0093c01: 92241p01c01 +92456pr0094c01: 92241p01c01 +92456pr0095c01: 92241p01c01 +92456pr0096c01: 92241p01c01 +92456pr0097c01: 92241p01c01 +92456pr0098c01: 92241p01c01 +92456pr0099c01: 92241p01c01 +92456pr0100c01: 92241p01c01 +92456pr0101c01: 92241p01c01 +92456pr0102c01: 92241p01c01 +92456pr0103c01: 92241p01c01 +92456pr0104c01: 92241p01c01 +92456pr0105c01: 92241p01c01 +92456pr0106c01: 92241p01c01 +92456pr0107c01: 92241p01c01 +92456pr0108c01: 92241p01c01 +92456pr0109c01: 92241p01c01 +92456pr0110c01: 92241p01c01 +92456pr0111c01: 92241p01c01 +92456pr0113c01: 92241p01c01 +92456pr0114c01: 92241p01c01 +92456pr0115: 92241p01c01 +92456pr0116: 92241p01c01 +92456pr0201: 92241p01c01 +92456pr0202: 92241p01c01 +92456pr0203: 92241p01c01 +92456pr0204: 92241p01c01 +92456pr0205c01: 92241p01c01 +92456pr0206: 92241p01c01 +92456pr0207: 92241p01c01 +92456pr0207c01: 92241p01c01 +92456pr0208: 92241p01c01 +92456pr0209c01: 92241p01c01 +92456pr0210c01: 92241p01c01 +92456pr0211c01: 92241p01c01 +92456pr0212c01: 92241p01c01 +92456pr0214c01: 92241p01c01 +92456pr0215c01: 92241p01c01 +92456pr0216c01: 92241p01c01 +92456pr0218c01: 92241p01c01 +92456pr0219c01: 92241p01c01 +92456prx001: 92241p01c01 + +# Duplo Brick 2 x 2 x 2 +13172: 31110 +13171: 31110 +13170: 31110 +13168: 31110 +13165: 31110 +13164: 31110 +11939: 31110 +16727: 31110 +25187: 31110 +24996: 31110 +19419: 31110 +11940: 31110 + +# Duplo Brick 2 x 2 x 2 with Curved Top +25186: 3664 +15935: 3664 +13862: 3664 +15989: 3664 +99879: 3664 + +3044c: 3044a \ No newline at end of file diff --git a/app/config/service/util.yml b/app/config/service/util.yml index d86b481..ded4cdc 100644 --- a/app/config/service/util.yml +++ b/app/config/service/util.yml @@ -4,8 +4,9 @@ services: app.relation.mapper: class: AppBundle\Util\RelationMapper - arguments: - - ['%kernel.root_dir%/Resources/relations'] + calls: + - [ loadResource, ['%kernel.root_dir%/Resources/relations/part_model.yml', 'part_model']] + - [ loadResource, ['%kernel.root_dir%/Resources/relations/alias_model.yml', 'alias_model']] app.twig_extension: class: AppBundle\Twig\AppExtension diff --git a/src/AppBundle/Util/RelationMapper.php b/src/AppBundle/Util/RelationMapper.php index ca7e13d..7fadf63 100644 --- a/src/AppBundle/Util/RelationMapper.php +++ b/src/AppBundle/Util/RelationMapper.php @@ -2,10 +2,10 @@ namespace AppBundle\Util; -use Symfony\Component\Finder\Finder; +use AppBundle\Exception\RelationMapper\InvalidResourceException; +use AppBundle\Exception\RelationMapper\ResourceNotFoundException; use Symfony\Component\OptionsResolver\Exception\InvalidArgumentException; use Symfony\Component\OptionsResolver\Exception\InvalidOptionsException; -use Symfony\Component\Translation\Exception\InvalidResourceException; use Symfony\Component\Yaml\Exception\ParseException; use Symfony\Component\Yaml\Yaml; @@ -17,17 +17,24 @@ class RelationMapper private $relations; /** - * RelationMapper constructor. + * Adds a Resource. * - * @param $resourcesDir + * @param $file + * @param $domain + * + * @throws InvalidResourceException|ResourceNotFoundException */ - public function __construct($resourcesDir) + public function loadResource($file, $domain) { - $finder = new Finder(); - $files = $finder->files()->name('*.yml')->in($resourcesDir); - foreach ($files as $file) { - $domain = substr($file->getFilename(), 0, -1 * strlen('yml') - 1); - $this->loadResource($file, $domain); + if (!file_exists($file)) { + throw new ResourceNotFoundException($file); + } + + try { + $this->relations[$domain] = []; + $this->relations[$domain] = Yaml::parse(file_get_contents($file)); + } catch (ParseException $e) { + throw new InvalidResourceException(sprintf('Error parsing YAML, invalid file "%s"', $file), 0, $e); } } @@ -48,20 +55,4 @@ class RelationMapper } throw new InvalidOptionsException(); } - - /** - * Adds a Resource. - * - * @param $file - * @param $domain - */ - private function loadResource($file, $domain) - { - try { - $this->relations[$domain] = []; - $this->relations[$domain] = Yaml::parse(file_get_contents($file->getPathname())); - } catch (ParseException $e) { - throw new InvalidResourceException(sprintf('Error parsing YAML, invalid file "%s"', $file->getPathname()), 0, $e); - } - } } diff --git a/tests/Util/RelationMapper/RelationMapperTest.php b/tests/Util/RelationMapper/RelationMapperTest.php index ba9e48b..35e28e5 100644 --- a/tests/Util/RelationMapper/RelationMapperTest.php +++ b/tests/Util/RelationMapper/RelationMapperTest.php @@ -11,46 +11,30 @@ class RelationMapperTest extends TestCase { public function testLoad() { - $mapper = new RelationMapper(__DIR__.'/fixtures/'); + $mapper = new RelationMapper(); + $mapper->loadResource(__DIR__.'/fixtures/resources.yml', 'resources'); $this->assertEquals('bar', $mapper->find('foo','resources')); + $this->assertEquals('bar', $mapper->find('bar','resources')); } -// public function testLoadDoesNothingIfEmpty() -// { -// $resource = __DIR__.'/fixtures/empty.yml'; -// $catalogue = Yaml::parse(file_get_contents($resource)); -// -// $this->assertEquals(array(), $catalogue); -// } -// -// /** -// * @expectedException \Symfony\Component\Translation\Exception\NotFoundResourceException -// */ -// public function testLoadNonExistingResource() -// { -// $loader = new YamlFileLoader(); -// $resource = __DIR__.'/../fixtures/non-existing.yml'; -// $loader->load($resource, 'en', 'domain1'); -// } -// -// /** -// * @expectedException \Symfony\Component\Translation\Exception\InvalidResourceException -// */ -// public function testLoadThrowsAnExceptionIfFileNotLocal() -// { -// $loader = new YamlFileLoader(); -// $resource = 'http://example.com/resources.yml'; -// $loader->load($resource, 'en', 'domain1'); -// } -// -// /** -// * @expectedException \Symfony\Component\Translation\Exception\InvalidResourceException -// */ -// public function testLoadThrowsAnExceptionIfNotAnArray() -// { -// $loader = new YamlFileLoader(); -// $resource = __DIR__.'/../fixtures/non-valid.yml'; -// $loader->load($resource, 'en', 'domain1'); -// } + /** + * @expectedException AppBundle\Exception\RelationMapper\ResourceNotFoundException + */ + public function testLoadNonExistingResource() + { + $mapper = new RelationMapper(); + $resource = __DIR__.'/fixtures/non-existing.yml'; + $mapper->loadResource($resource, 'resources'); + } + + /** + * @expectedException AppBundle\Exception\RelationMapper\InvalidResourceException + */ + public function testLoadInvalidResource() + { + $mapper = new RelationMapper(); + $resource = __DIR__.'/fixtures/invalid.yml'; + $mapper->loadResource($resource, 'resources'); + } } \ No newline at end of file diff --git a/tests/Util/RelationMapper/fixtures/invalid.yml b/tests/Util/RelationMapper/fixtures/invalid.yml new file mode 100644 index 0000000..10ac7f1 --- /dev/null +++ b/tests/Util/RelationMapper/fixtures/invalid.yml @@ -0,0 +1,2 @@ +foo: bar +dsad- da \ No newline at end of file