1
|
|
|
<?php declare(strict_types=1); |
2
|
|
|
/** |
3
|
|
|
* @category EdmondsCommerce |
4
|
|
|
* @package EdmondsCommerce_ |
5
|
|
|
* @author Ross Mitchell <[email protected]> |
6
|
|
|
*/ |
7
|
|
|
|
8
|
|
|
namespace EdmondsCommerce\DoctrineStaticMeta\CodeGeneration\Command; |
9
|
|
|
|
10
|
|
|
use Doctrine\Common\Util\Inflector; |
11
|
|
|
use EdmondsCommerce\DoctrineStaticMeta\AbstractTest; |
12
|
|
|
use EdmondsCommerce\DoctrineStaticMeta\CodeGeneration\Generator\AbstractGenerator; |
13
|
|
|
use EdmondsCommerce\DoctrineStaticMeta\Exception\DoctrineStaticMetaException; |
14
|
|
|
use EdmondsCommerce\DoctrineStaticMeta\MappingHelper; |
15
|
|
|
use Symfony\Component\Console\Tester\CommandTester; |
16
|
|
|
|
17
|
|
|
class GenerateFieldMultipleTimesTest extends AbstractCommandTest |
18
|
|
|
{ |
19
|
|
|
|
20
|
|
|
public const WORK_DIR = AbstractTest::VAR_PATH . '/GenerateSameFieldMultipleTime/'; |
21
|
|
|
/** |
22
|
|
|
* @var array |
23
|
|
|
*/ |
24
|
|
|
private $entityName; |
25
|
|
|
/** |
26
|
|
|
* @var CommandTester |
27
|
|
|
*/ |
28
|
|
|
private $fieldGenerator; |
29
|
|
|
|
30
|
|
|
/** |
31
|
|
|
* @throws \EdmondsCommerce\DoctrineStaticMeta\Exception\DoctrineStaticMetaException |
32
|
|
|
*/ |
33
|
|
|
public function setup(): void |
34
|
|
|
{ |
35
|
|
|
parent::setup(); |
36
|
|
|
$this->entityName = $this->generateEntities(); |
37
|
|
|
$generateCommand = $this->container->get(GenerateFieldCommand::class); |
38
|
|
|
$this->fieldGenerator = $this->getCommandTester($generateCommand); |
39
|
|
|
} |
40
|
|
|
|
41
|
|
|
public function testItShouldNotBePossibleToGenerateTheSameFieldTwice(): void |
42
|
|
|
{ |
43
|
|
|
$type = MappingHelper::TYPE_STRING; |
44
|
|
|
$fieldName = $this->getNameSpace('should_not_error'); |
45
|
|
|
/* Generate the field */ |
46
|
|
|
$this->generateField($fieldName, $type); |
47
|
|
|
/* And Again */ |
48
|
|
|
$this->expectException(DoctrineStaticMetaException::class); |
49
|
|
|
$this->generateField($fieldName, $type); |
50
|
|
|
} |
51
|
|
|
|
52
|
|
|
private function getNameSpace($fieldName): string |
53
|
|
|
{ |
54
|
|
|
$classy = Inflector::classify($fieldName); |
55
|
|
|
$namespace = static::TEST_PROJECT_ROOT_NAMESPACE . AbstractGenerator::ENTITY_FIELD_TRAIT_NAMESPACE; |
56
|
|
|
|
57
|
|
|
return "$namespace\\$classy\\$classy"; |
58
|
|
|
} |
59
|
|
|
|
60
|
|
|
private function generateField($fullyQualifiedName, $type): void |
61
|
|
|
{ |
62
|
|
|
$this->fieldGenerator->execute( |
63
|
|
|
[ |
64
|
|
|
'-' . GenerateFieldCommand::OPT_PROJECT_ROOT_PATH_SHORT => self::WORK_DIR, |
65
|
|
|
'-' . GenerateFieldCommand::OPT_PROJECT_ROOT_NAMESPACE_SHORT => self::TEST_PROJECT_ROOT_NAMESPACE, |
66
|
|
|
'--' . GenerateFieldCommand::OPT_FQN => $fullyQualifiedName, |
67
|
|
|
'--' . GenerateFieldCommand::OPT_TYPE => $type, |
68
|
|
|
] |
69
|
|
|
); |
70
|
|
|
} |
71
|
|
|
} |
72
|
|
|
|