1
0
mirror of https://github.com/ToxicCrack/PrintABrick.git synced 2025-05-16 20:30:09 -07:00

Add RelationMapper tests

This commit is contained in:
David Hübner 2017-05-05 21:05:43 +02:00
parent a20e31da9b
commit 32bac75cbd
6 changed files with 254 additions and 124 deletions

View File

@ -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

View File

@ -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
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

View File

@ -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

View File

@ -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);
}
}
}

View File

@ -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');
}
}

View File

@ -0,0 +1,2 @@
foo: bar
dsad- da