From 038d7ad2e1df7dacde975985f74d120fc0547ce1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Fastr=C3=A9?= Date: Fri, 7 May 2021 16:07:53 +0200 Subject: [PATCH] load third party fixtures --- composer.json | 3 +- .../DataFixtures/ORM/LoadCenters.php | 8 +- .../DataFixtures/ORM/LoadThirdParty.php | 122 ++++++++++++++++++ .../ChillThirdPartyExtension.php | 1 + .../config/services.yaml | 4 + .../config/services/fixtures.yaml | 0 6 files changed, 133 insertions(+), 5 deletions(-) create mode 100644 src/Bundle/ChillThirdPartyBundle/DataFixtures/ORM/LoadThirdParty.php create mode 100644 src/Bundle/ChillThirdPartyBundle/config/services/fixtures.yaml diff --git a/composer.json b/composer.json index 4181af68a..95074c18f 100644 --- a/composer.json +++ b/composer.json @@ -73,7 +73,8 @@ "symfony/web-profiler-bundle": "^5.0", "symfony/var-dumper": "4.*", "symfony/debug-bundle": "^5.1", - "symfony/phpunit-bridge": "^5.2" + "symfony/phpunit-bridge": "^5.2", + "nelmio/alice": "^3.8" }, "scripts": { "auto-scripts": { diff --git a/src/Bundle/ChillMainBundle/DataFixtures/ORM/LoadCenters.php b/src/Bundle/ChillMainBundle/DataFixtures/ORM/LoadCenters.php index 1da1af2f3..a3c01fdf6 100644 --- a/src/Bundle/ChillMainBundle/DataFixtures/ORM/LoadCenters.php +++ b/src/Bundle/ChillMainBundle/DataFixtures/ORM/LoadCenters.php @@ -55,11 +55,11 @@ class LoadCenters extends AbstractFixture implements OrderedFixtureInterface public function load(ObjectManager $manager) { foreach (static::$centers as $new) { - $centerA = new Center(); - $centerA->setName($new['name']); + $center = new Center(); + $center->setName($new['name']); - $manager->persist($centerA); - $this->addReference($new['ref'], $centerA); + $manager->persist($center); + $this->addReference($new['ref'], $center); static::$refs[] = $new['ref']; } diff --git a/src/Bundle/ChillThirdPartyBundle/DataFixtures/ORM/LoadThirdParty.php b/src/Bundle/ChillThirdPartyBundle/DataFixtures/ORM/LoadThirdParty.php new file mode 100644 index 000000000..63f6e9c3b --- /dev/null +++ b/src/Bundle/ChillThirdPartyBundle/DataFixtures/ORM/LoadThirdParty.php @@ -0,0 +1,122 @@ +getThirdParties()->getObjects(); + + foreach ($thirdParties as $name => $thirdParty) { + if ('a' === $name[0]) { + // this is an address + continue; + } + + foreach ($this->getCenters() as $center) { + $thirdParty->addCenter($center); + } + + $manager->persist($thirdParty); + } + + $manager->flush(); + } + + private function getCenters(): \Iterator + { + $references = \array_map(function($a) { return $a['ref']; }, + LoadCenters::$centers); + $number = random_int(1, count($references)); + + if ($number === 1) { + yield $this->getReference($references[\array_rand($references)]); + } else { + foreach (array_rand($references, $number) as $index) { + yield $this->getReference($references[$index]); + } + } + } + + public function getDependencies() + { + return [ + LoadCenters::class, + LoadPostalCodes::class + ]; + } + + private function getThirdParties(): ObjectSet + { + $loader = new NativeLoader(); + $objectSet = $loader->loadData([ + Address::class => [ + 'address{1..75}' => [ + 'street' => '', + 'streetNumber' => '', + 'validFrom' => '', + 'postCode' => $this->getPostalCode() + ], + ], + ThirdParty::class => [ + 'thirdparty{1..75}' => [ + 'name' => '', + 'telephone' => '', + 'email' => '', + 'comment' => '', + 'address' => '@address' + ] + ] + ]); + + return $objectSet; + } + + private function getPostalCode(): PostalCode + { + $ref = LoadPostalCodes::$refs[\array_rand(LoadPostalCodes::$refs)]; + return $this->getReference($ref); + if (count($this->postalCodesIds) === 0) { + // fill the postal codes + $this->em->createQuery('SELECT p.id FROM '.PostalCode::class) + ->getScalarResult(); + } + + $id = $this->postalCodesIds[\array_rand($this->postalCodesIds)]; + + return $this->em->getRepository(PostalCode::class) + ->find($id); + } + + private function createAddress(): ObjectSet + { + $loader = new NativeLoader(); + $objectSet = $loader->loadData([ + Address::class => [ + 'address1' => [ + 'name' => '', + 'telephone' => '', + 'email' => '', + 'comment' => '' + ] + ] + ]); + + return $objectSet; + + } + +} diff --git a/src/Bundle/ChillThirdPartyBundle/DependencyInjection/ChillThirdPartyExtension.php b/src/Bundle/ChillThirdPartyBundle/DependencyInjection/ChillThirdPartyExtension.php index 28e3c19df..aaf64a9e0 100644 --- a/src/Bundle/ChillThirdPartyBundle/DependencyInjection/ChillThirdPartyExtension.php +++ b/src/Bundle/ChillThirdPartyBundle/DependencyInjection/ChillThirdPartyExtension.php @@ -33,6 +33,7 @@ class ChillThirdPartyExtension extends Extension implements PrependExtensionInte $loader->load('services/search.yaml'); $loader->load('services/templating.yaml'); $loader->load('services/menu.yaml'); + $loader->load('services/fixtures.yaml'); } public function prepend(ContainerBuilder $container) diff --git a/src/Bundle/ChillThirdPartyBundle/config/services.yaml b/src/Bundle/ChillThirdPartyBundle/config/services.yaml index 0baad4766..d57dadd4a 100644 --- a/src/Bundle/ChillThirdPartyBundle/config/services.yaml +++ b/src/Bundle/ChillThirdPartyBundle/config/services.yaml @@ -1 +1,5 @@ +--- services: + Chill\ThirdPartyBundle\DataFixtures\ORM\LoadThirdParty: + tags: + - { 'name': doctrine.fixture.orm } diff --git a/src/Bundle/ChillThirdPartyBundle/config/services/fixtures.yaml b/src/Bundle/ChillThirdPartyBundle/config/services/fixtures.yaml new file mode 100644 index 000000000..e69de29bb