Skip to content

Commit ef07c1c

Browse files
test(12-02): add comprehensive tests for per-property resolution
- Create SharedClassEmbeddable fixture (class-level Shared with Empty override) - Create EmptyClassEmbeddable fixture (class-level Empty with Shared override) - Create ConflictClassEmbeddable fixture (both class-level attributes) - Test mixed Shared/Empty properties with AddressWithEmptyAndSharedProperty - Test class-level Shared with property override to Empty - Test class-level Empty with property override to Shared - Test class-level conflict throws ValidationException - Test plain embeddable resets all to defaults - Test resolution chain logging with debug level - Test property override logging message Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 3307ce6 commit ef07c1c

4 files changed

Lines changed: 347 additions & 25 deletions

File tree

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Tmi\TranslationBundle\Fixtures\Entity\Embedded;
6+
7+
use Doctrine\DBAL\Types\Types;
8+
use Doctrine\ORM\Mapping as ORM;
9+
use Tmi\TranslationBundle\Doctrine\Attribute\EmptyOnTranslate;
10+
use Tmi\TranslationBundle\Doctrine\Attribute\SharedAmongstTranslations;
11+
12+
#[ORM\Embeddable]
13+
#[SharedAmongstTranslations]
14+
#[EmptyOnTranslate]
15+
final class ConflictClassEmbeddable
16+
{
17+
#[ORM\Column(type: Types::STRING, nullable: true)]
18+
private string|null $conflicted = null;
19+
20+
public function getConflicted(): string|null
21+
{
22+
return $this->conflicted;
23+
}
24+
25+
public function setConflicted(string|null $conflicted = null): self
26+
{
27+
$this->conflicted = $conflicted;
28+
29+
return $this;
30+
}
31+
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Tmi\TranslationBundle\Fixtures\Entity\Embedded;
6+
7+
use Doctrine\DBAL\Types\Types;
8+
use Doctrine\ORM\Mapping as ORM;
9+
use Tmi\TranslationBundle\Doctrine\Attribute\EmptyOnTranslate;
10+
use Tmi\TranslationBundle\Doctrine\Attribute\SharedAmongstTranslations;
11+
12+
#[ORM\Embeddable]
13+
#[EmptyOnTranslate]
14+
final class EmptyClassEmbeddable
15+
{
16+
#[ORM\Column(type: Types::STRING, nullable: true)]
17+
private string|null $emptyByDefault = null;
18+
19+
#[SharedAmongstTranslations]
20+
#[ORM\Column(type: Types::STRING, nullable: true)]
21+
private string|null $overriddenToShared = null;
22+
23+
public function getEmptyByDefault(): string|null
24+
{
25+
return $this->emptyByDefault;
26+
}
27+
28+
public function setEmptyByDefault(string|null $emptyByDefault = null): self
29+
{
30+
$this->emptyByDefault = $emptyByDefault;
31+
32+
return $this;
33+
}
34+
35+
public function getOverriddenToShared(): string|null
36+
{
37+
return $this->overriddenToShared;
38+
}
39+
40+
public function setOverriddenToShared(string|null $overriddenToShared = null): self
41+
{
42+
$this->overriddenToShared = $overriddenToShared;
43+
44+
return $this;
45+
}
46+
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Tmi\TranslationBundle\Fixtures\Entity\Embedded;
6+
7+
use Doctrine\DBAL\Types\Types;
8+
use Doctrine\ORM\Mapping as ORM;
9+
use Tmi\TranslationBundle\Doctrine\Attribute\EmptyOnTranslate;
10+
use Tmi\TranslationBundle\Doctrine\Attribute\SharedAmongstTranslations;
11+
12+
#[ORM\Embeddable]
13+
#[SharedAmongstTranslations]
14+
final class SharedClassEmbeddable
15+
{
16+
#[ORM\Column(type: Types::STRING, nullable: true)]
17+
private string|null $sharedByDefault = null;
18+
19+
#[EmptyOnTranslate]
20+
#[ORM\Column(type: Types::STRING, nullable: true)]
21+
private string|null $overriddenToEmpty = null;
22+
23+
public function getSharedByDefault(): string|null
24+
{
25+
return $this->sharedByDefault;
26+
}
27+
28+
public function setSharedByDefault(string|null $sharedByDefault = null): self
29+
{
30+
$this->sharedByDefault = $sharedByDefault;
31+
32+
return $this;
33+
}
34+
35+
public function getOverriddenToEmpty(): string|null
36+
{
37+
return $this->overriddenToEmpty;
38+
}
39+
40+
public function setOverriddenToEmpty(string|null $overriddenToEmpty = null): self
41+
{
42+
$this->overriddenToEmpty = $overriddenToEmpty;
43+
44+
return $this;
45+
}
46+
}

0 commit comments

Comments
 (0)