Skip to content

Commit

Permalink
doctrine#5728 Add test for insertable to AbstractMappingDriverTest.
Browse files Browse the repository at this point in the history
  • Loading branch information
beberlei committed Dec 19, 2021
1 parent 6024581 commit 5754904
Show file tree
Hide file tree
Showing 6 changed files with 120 additions and 0 deletions.
8 changes: 8 additions & 0 deletions lib/Doctrine/ORM/Mapping/Driver/AttributeDriver.php
Original file line number Diff line number Diff line change
Expand Up @@ -583,6 +583,14 @@ private function columnToArray(string $fieldName, Mapping\Column $column): array
$mapping['columnDefinition'] = $column->columnDefinition;
}

if ($column->updateable === false) {
$mapping['notUpdateable'] = true;
}

if ($column->insertable === false) {
$mapping['notInsertable'] = true;
}

return $mapping;
}
}
34 changes: 34 additions & 0 deletions tests/Doctrine/Tests/Models/Upsertable/Insertable.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

namespace Doctrine\Tests\Models\Upsertable;

use Doctrine\ORM\Mapping\ClassMetadata;
use Doctrine\ORM\Mapping\Column;
use Doctrine\ORM\Mapping\Entity;
use Doctrine\ORM\Mapping\GeneratedValue;
Expand All @@ -14,6 +15,8 @@
* @Entity
* @Table(name="insertable_column")
*/
#[Entity]
#[Table(name: 'insertable_column')]
class Insertable
{
/**
Expand All @@ -22,17 +25,48 @@ class Insertable
* @GeneratedValue
* @Column(type="integer")
*/
#[Id, GeneratedValue, Column(type: 'integer')]
public $id;

/**
* @var string
* @Column(type="string", insertable=false, options={"default": "1234"})
*/
#[Column(type: 'string', insertable: false, options: ['default' => '1234'])]
public $nonInsertableContent;

/**
* @var string
* @Column(type="string", insertable=true)
*/
#[Column(type: 'string', insertable: true)]
public $insertableContent;

public static function loadMetadata(ClassMetadata $metadata)
{
$metadata->setPrimaryTable(
['name' => 'insertable_column']
);

$metadata->mapField(
[
'id' => true,
'fieldName' => 'id',
]
);
$metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_AUTO);

$metadata->mapField(
[
'fieldName' => 'nonInsertableContent',
'notInsertable' => true,
'options' => ['default' => '1234'],
]
);
$metadata->mapField(
['fieldName' => 'insertableContent']
);

return $metadata;
}
}
18 changes: 18 additions & 0 deletions tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,8 @@
use Doctrine\Tests\Models\DDC964\DDC964Guest;
use Doctrine\Tests\Models\TypedProperties\Contact;
use Doctrine\Tests\Models\TypedProperties\UserTyped;
use Doctrine\Tests\Models\Upsertable\Insertable;
use Doctrine\Tests\Models\Upsertable\Updateable;
use Doctrine\Tests\OrmTestCase;

use function assert;
Expand Down Expand Up @@ -1126,6 +1128,22 @@ public function testReservedWordInTableColumn(): void

self::assertSame('count', $metadata->getFieldMapping('count')['columnName']);
}

public function testInsertableColumn(): void
{
$metadata = $this->createClassMetadata(Insertable::class);

$this->assertArrayHasKey('notInsertable', $metadata->getFieldMapping('nonInsertableContent'));
$this->assertArrayNotHasKey('notInsertable', $metadata->getFieldMapping('insertableContent'));
}

public function testUpdateableColumn(): void
{
$metadata = $this->createClassMetadata(Updateable::class);

$this->assertArrayHasKey('notUpdateable', $metadata->getFieldMapping('notUpdateableContent'));
$this->assertArrayNotHasKey('notUpdateable', $metadata->getFieldMapping('updateableContent'));
}
}

/**
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
<?php

declare(strict_types=1);

use Doctrine\ORM\Mapping\ClassMetadataInfo;

$metadata->setPrimaryTable(
['name' => 'insertable_column']
);

$metadata->mapField(
[
'id' => true,
'fieldName' => 'id',
]
);
$metadata->setIdGeneratorType(ClassMetadataInfo::GENERATOR_TYPE_AUTO);

$metadata->mapField(
[
'fieldName' => 'nonInsertableContent',
'notInsertable' => true,
'options' => ['default' => '1234'],
]
);
$metadata->mapField(
['fieldName' => 'insertableContent']
);
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>

<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping
https://www.doctrine-project.org/schemas/orm/doctrine-mapping.xsd">

<entity name="Doctrine\Tests\Models\Upsertable\Insertable" table="insertable_column">
<id name="id">
<generator strategy="AUTO"/>
</id>

<field name="nonInsertableContent" insertable="false" type="string" />
<field name="insertableContent" insertable="true" type="string" />
</entity>
</doctrine-mapping>
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
Doctrine\Tests\Models\Upsertable\Insertable:
type: entity
table: insertable_column
id:
id:
generator:
strategy: AUTO
fields:
nonInsertableContent:
type: string
insertable: false
options:
default: 1234
insertableContent:
type: string
insertable: true

0 comments on commit 5754904

Please sign in to comment.