Description
Preconditions:{}
- Generate CSRF authentication token code
- Add new newtaxonomy tag in Content / Tags
Steps to reproduce:
- Assign random content to taxonomy tag using Assign entry / content endpoint (curl to import):
curl --location --request POST 'http://flex30.com/api/ibexa/v2/taxonomy/newtaxonomy/entry-assignments/assign-to-content' \ --header 'Accept: application/vnd.ibexa.api.TaxonomyEntryAssignToContent+json' \ --header 'Content-Type: application/vnd.ibexa.api.TaxonomyEntryAssignToContent+json' \ --header 'Authorization: Bearer eZSESSID98defd6ee70dfb1dea416cecdf391f58' \ --data-raw '{ "TaxonomyEntryAssignToContent": { "content": 147, "entries": [ 2, 3 ] } }'
- After assigning the content to tag and receiving status code 204, send the same request one more time.
- Verify status code and response message.
Actual result:
See attached screenshots:
Assigning the same content second time using taxonomy Rest API endpoint causes an error 500.
"ErrorMessage": { "_media-type": "application/vnd.ibexa.api.ErrorMessage+json", "errorCode": 500, "errorMessage": "Internal Server Error", "errorDescription": "An exception occurred while executing 'INSERT INTO ibexa_taxonomy_assignments (content_id, version_no, entry_id) VALUES (?, ?, ?)' with params [147, 1, 2]:\n\nSQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '2-147-1' for key 'ibexa_taxonomy_assignments.ibexa_taxonomy_assignments_unique_entry_content_idx'", "trace": "#0 /Users/bogdanmazur/flex/flexCommerceMaster42/vendor/doctrine/dbal/lib/Doctrine/DBAL/DBALException.php(182): Doctrine\\DBAL\\Driver\\AbstractMySQLDriver->convertException('An exception oc...', Object(Doctrine\\DBAL\\Driver\\PDO\\Exception))\n#1 /Users/bogdanmazur/flex/flexCommerceMaster42/vendor/doctrine/dbal/lib/Doctrine/DBAL/DBALException.php(159): Doctrine\\DBAL\\DBALException::wrapException(Object(Doctrine\\DBAL\\Driver\\PDO\\MySQL\\Driver), Object(Doctrine\\DBAL\\Driver\\PDO\\Exception), 'An exception oc...')\n#2 /Users/bogdanmazur/flex/flexCommerceMaster42/vendor/doctrine/dbal/lib/Doctrine/DBAL/Connection.php(2226): Doctrine\\DBAL\\DBALException::driverExceptionDuringQuery(Object(Doctrine\\DBAL\\Driver\\PDO\\MySQL\\Driver), Object(Doctrine\\DBAL\\Driver\\PDO\\Exception), 'INSERT INTO ibe...', Array)\n#3 /Users/bogdanmazur/flex/flexCommerceMaster42/vendor/doctrine/dbal/lib/Doctrine/DBAL/Statement.php(185): Doctrine\\DBAL\\Connection->handleExceptionDuringQuery(Object(Doctrine\\DBAL\\Driver\\PDO\\Exception), 'INSERT INTO ibe...', Array, Array)\n#4 /Users/bogdanmazur/flex/flexCommerceMaster42/vendor/doctrine/dbal/lib/Doctrine/DBAL/Statement.php(226): Doctrine\\DBAL\\Statement->execute(NULL)\n#5 /Users/bogdanmazur/flex/flexCommerceMaster42/vendor/doctrine/orm/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php(278): Doctrine\\DBAL\\Statement->executeStatement()\n#6 /Users/bogdanmazur/flex/flexCommerceMaster42/vendor/doctrine/orm/lib/Doctrine/ORM/UnitOfWork.php(1129): Doctrine\\ORM\\Persisters\\Entity\\BasicEntityPersister->executeInserts()\n#7 /Users/bogdanmazur/flex/flexCommerceMaster42/vendor/doctrine/orm/lib/Doctrine/ORM/UnitOfWork.php(430): Doctrine\\ORM\\UnitOfWork->executeInserts(Object(Doctrine\\ORM\\Mapping\\ClassMetadata))\n#8 /Users/bogdanmazur/flex/flexCommerceMaster42/vendor/doctrine/orm/lib/Doctrine/ORM/EntityManager.php(403): Doctrine\\ORM\\UnitOfWork->commit(NULL)\n#9 /Users/bogdanmazur/flex/flexCommerceMaster42/var/cache/behat/ContainerRX7F6FU/EntityManager_9a5be93.php(136): Doctrine\\ORM\\EntityManager->flush(NULL)\n#10 /Users/bogdanmazur/flex/flexCommerceMaster42/var/cache/behat/ContainerRX7F6FU/EntityManager_9a5be93.php(136): ContainerRX7F6FU\\EntityManager_9a5be93->flush(NULL)\n#11 /Users/bogdanmazur/flex/flexCommerceMaster42/vendor/ibexa/taxonomy/src/lib/Service/TaxonomyEntryAssignmentService.php(137): ContainerRX7F6FU\\EntityManager_9a5be93->flush()\n#12 /Users/bogdanmazur/flex/flexCommerceMaster42/vendor/ibexa/taxonomy/src/lib/Service/Decorator/AbstractTaxonomyEntryAssignmentServiceDecorator.php(48): Ibexa\\Taxonomy\\Service\\TaxonomyEntryAssignmentService->assignMultipleToContent(Object(Ibexa\\Core\\Repository\\Values\\Content\\Content), Array, 1)\n#13 /Users/bogdanmazur/flex/flexCommerceMaster42/vendor/ibexa/taxonomy/src/lib/Service/Decorator/SearchEngineIndexerTaxonomyEntryAssignmentServiceDecorator.php(50): Ibexa\\Taxonomy\\Service\\Decorator\\AbstractTaxonomyEntryAssignmentServiceDecorator->assignMultipleToContent(Object(Ibexa\\Core\\Repository\\Values\\Content\\Content), Array, 1)\n#14 /Users/bogdanmazur/flex/flexCommerceMaster42/vendor/ibexa/taxonomy/src/bundle/Controller/REST/TaxonomyEntryAssignmentController.php(46): Ibexa\\Taxonomy\\Service\\Decorator\\SearchEngineIndexerTaxonomyEntryAssignmentServiceDecorator->assignMultipleToContent(Object(Ibexa\\Core\\Repository\\Values\\Content\\Content), Array, 1)\n#15 /Users/bogdanmazur/flex/flexCommerceMaster42/vendor/symfony/http-kernel/HttpKernel.php(153): Ibexa\\Bundle\\Taxonomy\\Controller\\REST\\TaxonomyEntryAssignmentController->assignToContentAction(Object(Symfony\\Component\\HttpFoundation\\Request))\n#16 /Users/bogdanmazur/flex/flexCommerceMaster42/vendor/symfony/http-kernel/HttpKernel.php(75): Symfony\\Component\\HttpKernel\\HttpKernel->handleRaw(Object(Symfony\\Component\\HttpFoundation\\Request), 1)\n#17 /Users/bogdanmazur/flex/flexCommerceMaster42/vendor/symfony/http-kernel/Kernel.php(202): Symfony\\Component\\HttpKernel\\HttpKernel->handle(Object(Symfony\\Component\\HttpFoundation\\Request), 1, true)\n#18 /Users/bogdanmazur/flex/flexCommerceMaster42/vendor/symfony/runtime/Runner/Symfony/HttpKernelRunner.php(35): Symfony\\Component\\HttpKernel\\Kernel->handle(Object(Symfony\\Component\\HttpFoundation\\Request))\n#19 /Users/bogdanmazur/flex/flexCommerceMaster42/vendor/autoload_runtime.php(35): Symfony\\Component\\Runtime\\Runner\\Symfony\\HttpKernelRunner->run()\n#20 /Users/bogdanmazur/flex/flexCommerceMaster42/public/index.php(5): require_once('/Users/bogdanma...')\n#21 {main}", "file": "/Users/bogdanmazur/flex/flexCommerceMaster42/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/AbstractMySQLDriver.php", "line": 74, "Previous": { "_media-type": "application/vnd.ibexa.api.ErrorMessage+json", "ErrorMessage": { "_media-type": "application/vnd.ibexa.api.ErrorMessage+json", "errorCode": 500, "errorMessage": "Internal Server Error", "errorDescription": "SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '2-147-1' for key 'ibexa_taxonomy_assignments.ibexa_taxonomy_assignments_unique_entry_content_idx'", "trace": "#0 /Users/bogdanmazur/flex/flexCommerceMaster42/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOStatement.php(119): Doctrine\\DBAL\\Driver\\PDO\\Exception::new(Object(PDOException))\n#1 /Users/bogdanmazur/flex/flexCommerceMaster42/vendor/doctrine/dbal/lib/Doctrine/DBAL/Statement.php(179): Doctrine\\DBAL\\Driver\\PDOStatement->execute(NULL)\n#2 /Users/bogdanmazur/flex/flexCommerceMaster42/vendor/doctrine/dbal/lib/Doctrine/DBAL/Statement.php(226): Doctrine\\DBAL\\Statement->execute(NULL)\n#3 /Users/bogdanmazur/flex/flexCommerceMaster42/vendor/doctrine/orm/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php(278): Doctrine\\DBAL\\Statement->executeStatement()\n#4 /Users/bogdanmazur/flex/flexCommerceMaster42/vendor/doctrine/orm/lib/Doctrine/ORM/UnitOfWork.php(1129): Doctrine\\ORM\\Persisters\\Entity\\BasicEntityPersister->executeInserts()\n#5 /Users/bogdanmazur/flex/flexCommerceMaster42/vendor/doctrine/orm/lib/Doctrine/ORM/UnitOfWork.php(430): Doctrine\\ORM\\UnitOfWork->executeInserts(Object(Doctrine\\ORM\\Mapping\\ClassMetadata))\n#6 /Users/bogdanmazur/flex/flexCommerceMaster42/vendor/doctrine/orm/lib/Doctrine/ORM/EntityManager.php(403): Doctrine\\ORM\\UnitOfWork->commit(NULL)\n#7 /Users/bogdanmazur/flex/flexCommerceMaster42/var/cache/behat/ContainerRX7F6FU/EntityManager_9a5be93.php(136): Doctrine\\ORM\\EntityManager->flush(NULL)\n#8 /Users/bogdanmazur/flex/flexCommerceMaster42/var/cache/behat/ContainerRX7F6FU/EntityManager_9a5be93.php(136): ContainerRX7F6FU\\EntityManager_9a5be93->flush(NULL)\n#9 /Users/bogdanmazur/flex/flexCommerceMaster42/vendor/ibexa/taxonomy/src/lib/Service/TaxonomyEntryAssignmentService.php(137): ContainerRX7F6FU\\EntityManager_9a5be93->flush()\n#10 /Users/bogdanmazur/flex/flexCommerceMaster42/vendor/ibexa/taxonomy/src/lib/Service/Decorator/AbstractTaxonomyEntryAssignmentServiceDecorator.php(48): Ibexa\\Taxonomy\\Service\\TaxonomyEntryAssignmentService->assignMultipleToContent(Object(Ibexa\\Core\\Repository\\Values\\Content\\Content), Array, 1)\n#11 /Users/bogdanmazur/flex/flexCommerceMaster42/vendor/ibexa/taxonomy/src/lib/Service/Decorator/SearchEngineIndexerTaxonomyEntryAssignmentServiceDecorator.php(50): Ibexa\\Taxonomy\\Service\\Decorator\\AbstractTaxonomyEntryAssignmentServiceDecorator->assignMultipleToContent(Object(Ibexa\\Core\\Repository\\Values\\Content\\Content), Array, 1)\n#12 /Users/bogdanmazur/flex/flexCommerceMaster42/vendor/ibexa/taxonomy/src/bundle/Controller/REST/TaxonomyEntryAssignmentController.php(46): Ibexa\\Taxonomy\\Service\\Decorator\\SearchEngineIndexerTaxonomyEntryAssignmentServiceDecorator->assignMultipleToContent(Object(Ibexa\\Core\\Repository\\Values\\Content\\Content), Array, 1)\n#13 /Users/bogdanmazur/flex/flexCommerceMaster42/vendor/symfony/http-kernel/HttpKernel.php(153): Ibexa\\Bundle\\Taxonomy\\Controller\\REST\\TaxonomyEntryAssignmentController->assignToContentAction(Object(Symfony\\Component\\HttpFoundation\\Request))\n#14 /Users/bogdanmazur/flex/flexCommerceMaster42/vendor/symfony/http-kernel/HttpKernel.php(75): Symfony\\Component\\HttpKernel\\HttpKernel->handleRaw(Object(Symfony\\Component\\HttpFoundation\\Request), 1)\n#15 /Users/bogdanmazur/flex/flexCommerceMaster42/vendor/symfony/http-kernel/Kernel.php(202): Symfony\\Component\\HttpKernel\\HttpKernel->handle(Object(Symfony\\Component\\HttpFoundation\\Request), 1, true)\n#16 /Users/bogdanmazur/flex/flexCommerceMaster42/vendor/symfony/runtime/Runner/Symfony/HttpKernelRunner.php(35): Symfony\\Component\\HttpKernel\\Kernel->handle(Object(Symfony\\Component\\HttpFoundation\\Request))\n#17 /Users/bogdanmazur/flex/flexCommerceMaster42/vendor/autoload_runtime.php(35): Symfony\\Component\\Runtime\\Runner\\Symfony\\HttpKernelRunner->run()\n#18 /Users/bogdanmazur/flex/flexCommerceMaster42/public/index.php(5): require_once('/Users/bogdanma...')\n#19 {main}", "file": "/Users/bogdanmazur/flex/flexCommerceMaster42/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDO/Exception.php", "line": 18, "Previous": { "_media-type": "application/vnd.ibexa.api.ErrorMessage+json", "ErrorMessage": { "_media-type": "application/vnd.ibexa.api.ErrorMessage+json", "errorCode": 500, "errorMessage": "Internal Server Error", "errorDescription": "SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '2-147-1' for key 'ibexa_taxonomy_assignments.ibexa_taxonomy_assignments_unique_entry_content_idx'", "trace": "#0 /Users/bogdanmazur/flex/flexCommerceMaster42/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOStatement.php(117): PDOStatement->execute(NULL)\n#1 /Users/bogdanmazur/flex/flexCommerceMaster42/vendor/doctrine/dbal/lib/Doctrine/DBAL/Statement.php(179): Doctrine\\DBAL\\Driver\\PDOStatement->execute(NULL)\n#2 /Users/bogdanmazur/flex/flexCommerceMaster42/vendor/doctrine/dbal/lib/Doctrine/DBAL/Statement.php(226): Doctrine\\DBAL\\Statement->execute(NULL)\n#3 /Users/bogdanmazur/flex/flexCommerceMaster42/vendor/doctrine/orm/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php(278): Doctrine\\DBAL\\Statement->executeStatement()\n#4 /Users/bogdanmazur/flex/flexCommerceMaster42/vendor/doctrine/orm/lib/Doctrine/ORM/UnitOfWork.php(1129): Doctrine\\ORM\\Persisters\\Entity\\BasicEntityPersister->executeInserts()\n#5 /Users/bogdanmazur/flex/flexCommerceMaster42/vendor/doctrine/orm/lib/Doctrine/ORM/UnitOfWork.php(430): Doctrine\\ORM\\UnitOfWork->executeInserts(Object(Doctrine\\ORM\\Mapping\\ClassMetadata))\n#6 /Users/bogdanmazur/flex/flexCommerceMaster42/vendor/doctrine/orm/lib/Doctrine/ORM/EntityManager.php(403): Doctrine\\ORM\\UnitOfWork->commit(NULL)\n#7 /Users/bogdanmazur/flex/flexCommerceMaster42/var/cache/behat/ContainerRX7F6FU/EntityManager_9a5be93.php(136): Doctrine\\ORM\\EntityManager->flush(NULL)\n#8 /Users/bogdanmazur/flex/flexCommerceMaster42/var/cache/behat/ContainerRX7F6FU/EntityManager_9a5be93.php(136): ContainerRX7F6FU\\EntityManager_9a5be93->flush(NULL)\n#9 /Users/bogdanmazur/flex/flexCommerceMaster42/vendor/ibexa/taxonomy/src/lib/Service/TaxonomyEntryAssignmentService.php(137): ContainerRX7F6FU\\EntityManager_9a5be93->flush()\n#10 /Users/bogdanmazur/flex/flexCommerceMaster42/vendor/ibexa/taxonomy/src/lib/Service/Decorator/AbstractTaxonomyEntryAssignmentServiceDecorator.php(48): Ibexa\\Taxonomy\\Service\\TaxonomyEntryAssignmentService->assignMultipleToContent(Object(Ibexa\\Core\\Repository\\Values\\Content\\Content), Array, 1)\n#11 /Users/bogdanmazur/flex/flexCommerceMaster42/vendor/ibexa/taxonomy/src/lib/Service/Decorator/SearchEngineIndexerTaxonomyEntryAssignmentServiceDecorator.php(50): Ibexa\\Taxonomy\\Service\\Decorator\\AbstractTaxonomyEntryAssignmentServiceDecorator->assignMultipleToContent(Object(Ibexa\\Core\\Repository\\Values\\Content\\Content), Array, 1)\n#12 /Users/bogdanmazur/flex/flexCommerceMaster42/vendor/ibexa/taxonomy/src/bundle/Controller/REST/TaxonomyEntryAssignmentController.php(46): Ibexa\\Taxonomy\\Service\\Decorator\\SearchEngineIndexerTaxonomyEntryAssignmentServiceDecorator->assignMultipleToContent(Object(Ibexa\\Core\\Repository\\Values\\Content\\Content), Array, 1)\n#13 /Users/bogdanmazur/flex/flexCommerceMaster42/vendor/symfony/http-kernel/HttpKernel.php(153): Ibexa\\Bundle\\Taxonomy\\Controller\\REST\\TaxonomyEntryAssignmentController->assignToContentAction(Object(Symfony\\Component\\HttpFoundation\\Request))\n#14 /Users/bogdanmazur/flex/flexCommerceMaster42/vendor/symfony/http-kernel/HttpKernel.php(75): Symfony\\Component\\HttpKernel\\HttpKernel->handleRaw(Object(Symfony\\Component\\HttpFoundation\\Request), 1)\n#15 /Users/bogdanmazur/flex/flexCommerceMaster42/vendor/symfony/http-kernel/Kernel.php(202): Symfony\\Component\\HttpKernel\\HttpKernel->handle(Object(Symfony\\Component\\HttpFoundation\\Request), 1, true)\n#16 /Users/bogdanmazur/flex/flexCommerceMaster42/vendor/symfony/runtime/Runner/Symfony/HttpKernelRunner.php(35): Symfony\\Component\\HttpKernel\\Kernel->handle(Object(Symfony\\Component\\HttpFoundation\\Request))\n#17 /Users/bogdanmazur/flex/flexCommerceMaster42/vendor/autoload_runtime.php(35): Symfony\\Component\\Runtime\\Runner\\Symfony\\HttpKernelRunner->run()\n#18 /Users/bogdanmazur/flex/flexCommerceMaster42/public/index.php(5): require_once('/Users/bogdanma...')\n#19 {main}", "file": "/Users/bogdanmazur/flex/flexCommerceMaster42/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOStatement.php", "line": 117 } } } } }}
Expected result:
User receives correct response status and message that content is already assigned to taxonomy tag.
NOTE:
Link to documentation that might be helpful: https://doc.ibexa.co/en/master/api/rest_api/rest_api_reference/rest_api_reference.html#taxonomy-assign-entry