diff --git a/CHANGELOG.md b/CHANGELOG.md index 6b0521b7e..3db64020d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,11 @@ +## 4.4.2 +**Bugfix** +- Repair button change request #575 + +## 4.4.1 +**Backport** +- Include 4.3.2 into the 4.4 tier of releases (More Label and translation adjustments #574) + ## 4.4.0 **Feature** - Added the IdP connection request feature for production entities #555 diff --git a/src/Surfnet/ServiceProviderDashboard/Domain/Entity/ManageEntity.php b/src/Surfnet/ServiceProviderDashboard/Domain/Entity/ManageEntity.php index e8c2507cd..997a88ec6 100644 --- a/src/Surfnet/ServiceProviderDashboard/Domain/Entity/ManageEntity.php +++ b/src/Surfnet/ServiceProviderDashboard/Domain/Entity/ManageEntity.php @@ -34,6 +34,8 @@ * entity is used in a specific context. This particularly applies for the factory * methods found in the 'Entity/Entity' namespace. * @SuppressWarnings(PHPMD.CouplingBetweenObjects) + * @SuppressWarnings(PHPMD.ExcessiveClassComplexity) This object contains a lot of properties which cannot not be easily + * simplified. */ class ManageEntity { @@ -350,4 +352,15 @@ public function asArray(): array $data += $this->protocol->asArray(); return $data; } + + private function isStatusPublicationRequested() + { + return $this->getStatus() === Constants::STATE_PUBLICATION_REQUESTED; + } + + public function isRequestedProductionEntity( + bool $isCopy + ) { + return $isCopy || ($this->isStatusPublicationRequested() && $this->isProduction()); + } } diff --git a/src/Surfnet/ServiceProviderDashboard/Infrastructure/DashboardBundle/Factory/EntityTypeFactory.php b/src/Surfnet/ServiceProviderDashboard/Infrastructure/DashboardBundle/Factory/EntityTypeFactory.php index d3517b401..06b648585 100644 --- a/src/Surfnet/ServiceProviderDashboard/Infrastructure/DashboardBundle/Factory/EntityTypeFactory.php +++ b/src/Surfnet/ServiceProviderDashboard/Infrastructure/DashboardBundle/Factory/EntityTypeFactory.php @@ -70,18 +70,18 @@ public function createCreateForm(string $type, Service $service, string $environ case ($type === Constants::TYPE_SAML): $command = SaveSamlEntityCommand::forCreateAction($service); $command->setEnvironment($environment); - return $this->formFactory->create(SamlEntityType::class, $command, $this->createBuildOptions($environment)); + return $this->formFactory->create(SamlEntityType::class, $command, $this->requestedBuildOptions($environment)); case ($type === Constants::TYPE_OPENID_CONNECT_TNG): $command = SaveOidcngEntityCommand::forCreateAction($service); $command->setEnvironment($environment); - return $this->formFactory->create(OidcngEntityType::class, $command, $this->createBuildOptions($environment)); + return $this->formFactory->create(OidcngEntityType::class, $command, $this->requestedBuildOptions($environment)); case ($type === Constants::TYPE_OPENID_CONNECT_TNG_RESOURCE_SERVER): $command = SaveOidcngResourceServerEntityCommand::forCreateAction($service); $command->setEnvironment($environment); return $this->formFactory->create( OidcngResourceServerEntityType::class, $command, - $this->createBuildOptions($environment) + $this->requestedBuildOptions($environment) ); case ($type === Constants::TYPE_OAUTH_CLIENT_CREDENTIAL_CLIENT): $command = SaveOauthClientCredentialClientCommand::forCreateAction($service); @@ -89,7 +89,7 @@ public function createCreateForm(string $type, Service $service, string $environ return $this->formFactory->create( OauthClientCredentialEntityType::class, $command, - $this->createBuildOptions($environment) + $this->requestedBuildOptions($environment) ); } @@ -98,15 +98,18 @@ public function createCreateForm(string $type, Service $service, string $environ public function createEditForm(ManageEntity $entity, Service $service, string $environment, $isCopy = false) { + $buildOptions = $entity->isRequestedProductionEntity($isCopy) ? + $this->requestedBuildOptions($environment) : $this->publishedBuildOptions($environment); + switch ($entity->getProtocol()->getProtocol()) { case (Constants::TYPE_SAML): $command = $this->saveCommandFactory->buildSamlCommandByManageEntity($entity, $environment); $command->setService($service); - return $this->formFactory->create(SamlEntityType::class, $command, $this->editBuildOptions($environment)); + return $this->formFactory->create(SamlEntityType::class, $command, $buildOptions); case (Constants::TYPE_OPENID_CONNECT_TNG): $command = $this->saveCommandFactory->buildOidcngCommandByManageEntity($entity, $environment, $isCopy); $command->setService($service); - return $this->formFactory->create(OidcngEntityType::class, $command, $this->editBuildOptions($environment)); + return $this->formFactory->create(OidcngEntityType::class, $command, $buildOptions); case (Constants::TYPE_OPENID_CONNECT_TNG_RESOURCE_SERVER): $command = $this ->saveCommandFactory @@ -119,18 +122,18 @@ public function createEditForm(ManageEntity $entity, Service $service, string $e return $this->formFactory->create( OidcngResourceServerEntityType::class, $command, - $this->editBuildOptions($environment) + $buildOptions ); case (Constants::TYPE_OAUTH_CLIENT_CREDENTIAL_CLIENT): $command = $this->saveCommandFactory->buildOauthCccCommandByManageEntity($entity, $environment, $isCopy); $command->setService($service); - return $this->formFactory->create(OauthClientCredentialEntityType::class, $command, $this->editBuildOptions($environment)); + return $this->formFactory->create(OauthClientCredentialEntityType::class, $command, $buildOptions); } throw new InvalidArgumentException("invalid form type requested"); } - private function createBuildOptions($environment) + private function requestedBuildOptions($environment) { $options = []; if ($environment === Constants::ENVIRONMENT_PRODUCTION) { @@ -139,13 +142,13 @@ private function createBuildOptions($environment) return $options; } - private function editBuildOptions($environment) + private function publishedBuildOptions($environment) { $options = []; if ($environment === Constants::ENVIRONMENT_PRODUCTION) { $options = ['validation_groups' => ['Default', 'production'], - 'publish_button_label' => 'Change request', - ]; + 'publish_button_label' => 'entity.edit.label.change', + ]; } return $options; } diff --git a/src/Surfnet/ServiceProviderDashboard/Infrastructure/DashboardBundle/Form/Entity/OauthClientCredentialEntityType.php b/src/Surfnet/ServiceProviderDashboard/Infrastructure/DashboardBundle/Form/Entity/OauthClientCredentialEntityType.php index 918fce628..fa4b71d8a 100644 --- a/src/Surfnet/ServiceProviderDashboard/Infrastructure/DashboardBundle/Form/Entity/OauthClientCredentialEntityType.php +++ b/src/Surfnet/ServiceProviderDashboard/Infrastructure/DashboardBundle/Form/Entity/OauthClientCredentialEntityType.php @@ -268,7 +268,7 @@ public function configureOptions(OptionsResolver $resolver) { $resolver->setDefaults(array( 'data_class' => SaveOauthClientCredentialClientCommand::class, - 'publish_button_label' => 'Publish', + 'publish_button_label' => 'entity.add.label.publish', )); } diff --git a/src/Surfnet/ServiceProviderDashboard/Infrastructure/DashboardBundle/Form/Entity/OidcngEntityType.php b/src/Surfnet/ServiceProviderDashboard/Infrastructure/DashboardBundle/Form/Entity/OidcngEntityType.php index af29e4df7..ee5988477 100644 --- a/src/Surfnet/ServiceProviderDashboard/Infrastructure/DashboardBundle/Form/Entity/OidcngEntityType.php +++ b/src/Surfnet/ServiceProviderDashboard/Infrastructure/DashboardBundle/Form/Entity/OidcngEntityType.php @@ -371,7 +371,7 @@ public function configureOptions(OptionsResolver $resolver) { $resolver->setDefaults(array( 'data_class' => SaveOidcngEntityCommand::class, - 'publish_button_label' => 'Publish', + 'publish_button_label' => 'entity.add.label.publish', )); } diff --git a/src/Surfnet/ServiceProviderDashboard/Infrastructure/DashboardBundle/Form/Entity/OidcngResourceServerEntityType.php b/src/Surfnet/ServiceProviderDashboard/Infrastructure/DashboardBundle/Form/Entity/OidcngResourceServerEntityType.php index f81df1488..97c92891b 100644 --- a/src/Surfnet/ServiceProviderDashboard/Infrastructure/DashboardBundle/Form/Entity/OidcngResourceServerEntityType.php +++ b/src/Surfnet/ServiceProviderDashboard/Infrastructure/DashboardBundle/Form/Entity/OidcngResourceServerEntityType.php @@ -177,7 +177,7 @@ public function configureOptions(OptionsResolver $resolver) { $resolver->setDefaults(array( 'data_class' => SaveOidcngResourceServerEntityCommand::class, - 'publish_button_label' => 'Publish', + 'publish_button_label' => 'entity.add.label.publish', )); } diff --git a/src/Surfnet/ServiceProviderDashboard/Infrastructure/DashboardBundle/Form/Entity/SamlEntityType.php b/src/Surfnet/ServiceProviderDashboard/Infrastructure/DashboardBundle/Form/Entity/SamlEntityType.php index 886308c57..064c6a462 100644 --- a/src/Surfnet/ServiceProviderDashboard/Infrastructure/DashboardBundle/Form/Entity/SamlEntityType.php +++ b/src/Surfnet/ServiceProviderDashboard/Infrastructure/DashboardBundle/Form/Entity/SamlEntityType.php @@ -306,7 +306,7 @@ public function configureOptions(OptionsResolver $resolver) { $resolver->setDefaults(array( 'data_class' => SaveSamlEntityCommand::class, - 'publish_button_label' => 'Publish', + 'publish_button_label' => 'entity.add.label.publish', )); } diff --git a/src/Surfnet/ServiceProviderDashboard/Infrastructure/DashboardBundle/Resources/translations/messages.en.yml b/src/Surfnet/ServiceProviderDashboard/Infrastructure/DashboardBundle/Resources/translations/messages.en.yml index a5a5cba93..0961cd98e 100644 --- a/src/Surfnet/ServiceProviderDashboard/Infrastructure/DashboardBundle/Resources/translations/messages.en.yml +++ b/src/Surfnet/ServiceProviderDashboard/Infrastructure/DashboardBundle/Resources/translations/messages.en.yml @@ -368,6 +368,8 @@ entity.edit.label.implicit: Implicit entity.edit.label.authorization_code_token: response_type=id_token entity.edit.label.implicit_id_token_token: response_type=id_token token entity.edit.label.implicit_id_token: response_type=id_token +entity.edit.label.change: Change +entity.add.label.publish: Publish entity.acl.title: Entity Idp access entity.acl.info.title: Info entity.acl.info.html: " diff --git a/tests/unit/Infrastructure/DashboardBundle/Factory/EntityTypeFactoryTest.php b/tests/unit/Infrastructure/DashboardBundle/Factory/EntityTypeFactoryTest.php index 1d43e2b5d..e7ac7eec4 100644 --- a/tests/unit/Infrastructure/DashboardBundle/Factory/EntityTypeFactoryTest.php +++ b/tests/unit/Infrastructure/DashboardBundle/Factory/EntityTypeFactoryTest.php @@ -25,6 +25,7 @@ use Surfnet\ServiceProviderDashboard\Application\Command\Entity\SaveSamlEntityCommand; use Surfnet\ServiceProviderDashboard\Application\Service\AttributeServiceInterface; use Surfnet\ServiceProviderDashboard\Domain\Entity\Constants; +use Surfnet\ServiceProviderDashboard\Domain\Entity\ManageEntity; use Surfnet\ServiceProviderDashboard\Domain\Entity\Service; use Surfnet\ServiceProviderDashboard\Infrastructure\DashboardBundle\Factory\EntityTypeFactory; use Surfnet\ServiceProviderDashboard\Infrastructure\DashboardBundle\Form\Entity\OidcngEntityType; @@ -62,7 +63,6 @@ class EntityTypeFactoryTest extends MockeryTestCase protected function setUp() { - $this->formFactory = m::mock(FormFactory::class); $this->saveCommandFactory = m::mock(SaveCommandFactoryInterface::class); $this->service = m::mock(Service::class); @@ -164,6 +164,7 @@ public function test_build_create_new_oidcng_form() $this->assertInstanceOf(FormType::class, $form); } + public function test_build_create_new_oidcng_form_from_entity() { $this->formFactory @@ -200,20 +201,20 @@ public function test_build_create_new_oauth20_rs_form() $this->formFactory ->shouldReceive('create') ->with(\Mockery::on(function ($entityType) { - $this->assertSame(OidcngResourceServerEntityType::class, $entityType); - return true; - }), \Mockery::on(function ($command) { - $this->assertInstanceOf(SaveOidcngResourceServerEntityCommand::class, $command); - return true; - }), \Mockery::on(function ($options) { - $this->assertSame([ - 'validation_groups' => [ - 0 => 'Default', - 1 => 'production', - ], - ], $options); - return true; - })) + $this->assertSame(OidcngResourceServerEntityType::class, $entityType); + return true; + }), \Mockery::on(function ($command) { + $this->assertInstanceOf(SaveOidcngResourceServerEntityCommand::class, $command); + return true; + }), \Mockery::on(function ($options) { + $this->assertSame([ + 'validation_groups' => [ + 0 => 'Default', + 1 => 'production', + ], + ], $options); + return true; + })) ->once() ->andReturn($this->form); @@ -225,4 +226,112 @@ public function test_build_create_new_oauth20_rs_form() $this->assertInstanceOf(FormType::class, $form); } + + /** + * @dataProvider providePublishOrChangeOptions + */ + public function test_build_edit_saml_form_from_entity( + $isCopy, + $manageEntityStatus, + $environment, + $expectation + ) { + $manageEntity = m::mock(ManageEntity::class); + + /** + * Make ManageEntity partial to test method isRequestedProductionEntity + */ + $manageEntity->makePartial(); + + $manageEntity + ->shouldReceive('getProtocol->getProtocol') + ->andReturn(Constants::TYPE_SAML); + + $manageEntity + ->shouldReceive('getEnvironment') + ->andReturn($environment); + + $manageEntity + ->shouldReceive('getStatus') + ->andReturn($manageEntityStatus); + + $saveSamlEntityCommand = m::mock(SaveSamlEntityCommand::class); + $saveSamlEntityCommand + ->shouldReceive('setService'); + + $this->saveCommandFactory + ->shouldReceive('buildSamlCommandByManageEntity') + ->with($manageEntity, $environment) + ->andReturn($saveSamlEntityCommand); + + $this->formFactory + ->shouldReceive('create') + ->with(\Mockery::on(function ($entityType) { + static::assertSame(SamlEntityType::class, $entityType); + return true; + }), \Mockery::on(function ($command) { + static::assertInstanceOf(SaveSamlEntityCommand::class, $command); + return true; + }), \Mockery::on(function ($options) use ($expectation) { + static::assertSame($expectation, $options); + return true; + })) + ->once() + ->andReturn($this->form); + + $form = $this->factory->createEditForm( + $manageEntity, + $this->service, + $environment, + $isCopy + ); + + $this->assertInstanceOf(FormType::class, $form); + } + + public static function providePublishOrChangeOptions(): array + { + return [ + 'new entity' => [ + false, + Constants::STATE_PUBLICATION_REQUESTED, + Constants::ENVIRONMENT_PRODUCTION, + [ + 'validation_groups' => ['Default', 'production'], + ] + ], + 'new entity copy' => [ + true, + Constants::STATE_PUBLICATION_REQUESTED, + Constants::ENVIRONMENT_PRODUCTION, + [ + 'validation_groups' => ['Default', 'production'], + ] + ], + 'existing published entity' => [ + false, + Constants::STATE_PUBLISHED, + Constants::ENVIRONMENT_PRODUCTION, + [ + 'validation_groups' => ['Default', 'production'], + 'publish_button_label' => 'entity.edit.label.change', + ] + ], + 'copy entity ignore state and environment' => [ + true, + Constants::STATE_PUBLISHED, + Constants::ENVIRONMENT_PRODUCTION, + [ + 'validation_groups' => ['Default', 'production'], + ] + ], + 'new test entity' => [ + false, + Constants::STATE_PUBLISHED, + Constants::ENVIRONMENT_TEST, + [ + ] + ], + ]; + } } diff --git a/tests/unit/Infrastructure/Manage/Dto/ManageEntityTest.php b/tests/unit/Infrastructure/Manage/Dto/ManageEntityTest.php index a873c3b79..aa5a4c8d5 100644 --- a/tests/unit/Infrastructure/Manage/Dto/ManageEntityTest.php +++ b/tests/unit/Infrastructure/Manage/Dto/ManageEntityTest.php @@ -19,6 +19,7 @@ namespace Surfnet\ServiceProviderDashboard\Tests\Unit\Infrastructure\DashboardBundle\Manage\Dto; use Mockery\Adapter\Phpunit\MockeryTestCase; +use Surfnet\ServiceProviderDashboard\Domain\Entity\Constants; use Surfnet\ServiceProviderDashboard\Domain\Entity\Entity\Contact; use Surfnet\ServiceProviderDashboard\Domain\Entity\ManageEntity; @@ -102,4 +103,18 @@ public function test_diff_oidc() // 'provide everything' manner. $this->assertCount(2, $diffResults['metaDataFields.redirectUrls']); } + + public function test_is_status_publication_requested() + { + $entity = ManageEntity::fromApiResponse(json_decode(file_get_contents(__DIR__ . '/fixture/saml20_sp_requested.json'), true)); + $entity->updateStatus(Constants::STATE_PUBLICATION_REQUESTED); + $this->assertEquals(Constants::STATE_PUBLICATION_REQUESTED, $entity->getStatus()); + } + + public function test_is_requested_production_entity_copy() + { + $entity = ManageEntity::fromApiResponse(json_decode(file_get_contents(__DIR__ . '/fixture/saml20_sp_requested.json'), true)); + $this->assertTrue($entity->isRequestedProductionEntity(true)); + $this->assertFalse($entity->isRequestedProductionEntity(false)); + } } diff --git a/tests/unit/Infrastructure/Manage/Dto/fixture/saml20_sp_requested.json b/tests/unit/Infrastructure/Manage/Dto/fixture/saml20_sp_requested.json new file mode 100644 index 000000000..cb7816d8c --- /dev/null +++ b/tests/unit/Infrastructure/Manage/Dto/fixture/saml20_sp_requested.json @@ -0,0 +1,76 @@ +{ + "id": "411f8e0f-87a6-4ea7-8194-66b3e77f97d5", + "version": 0, + "type": "saml20_sp", + "revision": { + "number": 0, + "created": 1543851541.752, + "parentId": null, + "updatedBy": "sp-dashboard", + "terminated": null + }, + "data": { + "arp": { + "attributes": { + "urn:mace:dir:attribute-def:displayName": [ + { + "source": "idp", + "value": "*", + "motivation": "asddsafadfsafdsfdasfadsafds dafs ad fsad fsafd saf ds" + } + ], + "urn:mace:dir:attribute-def:uid": [ + { + "source": "idp", + "value": "*", + "motivation": "fd fads fdasafd s fdasfda s dfas dfa" + } + ] + }, + "enabled": true + }, + "entityid": "https:\/\/monitorstands.example.com", + "metadataurl": "https:\/\/engine.surfconext.nl\/authentication\/sp\/metadata", + "active": true, + "allowedEntities": [], + "allowedall": true, + "state": "testaccepted", + "type": "saml20-sp", + "metaDataFields": { + "AssertionConsumerService:0:Binding": "urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST", + "AssertionConsumerService:0:Location": "https:\/\/engine.surfconext.nl\/authentication\/sp\/consume-assertion", + "NameIDFormat": "urn:oasis:names:tc:SAML:2.0:nameid-format:persistent", + "description:en": "SURFconext is a collaboration infrastructure that creates new opportunities to collaborate online based on a combination of applications from different providers.", + "description:nl": "SURFconext is een samenwerkingsinfrastructuur die nieuwe vormen van samenwerken mogelijk maakt door diensten van verschillende aanbieders te combineren.", + "name:en": "Monitor stands", + "name:nl": "Monitor stands", + "coin:signature_method": "http:\/\/www.w3.org\/2001\/04\/xmldsig-more#rsa-sha256", + "certData": "MIID3zCCAsegAwIBAgIJAMVC9xn1ZfsuMA0GCSqGSIb3DQEBCwUAMIGFMQswCQYD\r\nVQQGEwJOTDEQMA4GA1UECAwHVXRyZWNodDEQMA4GA1UEBwwHVXRyZWNodDEVMBMG\r\nA1UECgwMU1VSRm5ldCBCLlYuMRMwEQYDVQQLDApTVVJGY29uZXh0MSYwJAYDVQQD\r\nDB1lbmdpbmUuc3VyZmNvbmV4dC5ubCAyMDE0MDUwNTAeFw0xNDA1MDUxNDIyMzVa\r\nFw0xOTA1MDUxNDIyMzVaMIGFMQswCQYDVQQGEwJOTDEQMA4GA1UECAwHVXRyZWNo\r\ndDEQMA4GA1UEBwwHVXRyZWNodDEVMBMGA1UECgwMU1VSRm5ldCBCLlYuMRMwEQYD\r\nVQQLDApTVVJGY29uZXh0MSYwJAYDVQQDDB1lbmdpbmUuc3VyZmNvbmV4dC5ubCAy\r\nMDE0MDUwNTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKthMDbB0jKH\r\nefPzmRu9t2h7iLP4wAXr42bHpjzTEk6gttHFb4l\/hFiz1YBI88TjiH6hVjnozo\/Y\r\nHA2c51us+Y7g0XoS7653lbUN\/EHzvDMuyis4Xi2Ijf1A\/OUQfH1iFUWttIgtWK9+\r\nfatXoGUS6tirQvrzVh6ZstEp1xbpo1SF6UoVl+fh7tM81qz+Crr\/Kroan0UjpZOF\r\nTwxPoK6fdLgMAieKSCRmBGpbJHbQ2xxbdykBBrBbdfzIX4CDepfjE9h\/40ldw5jR\r\nn3e392jrS6htk23N9BWWrpBT5QCk0kH3h\/6F1Dm6TkyG9CDtt73\/anuRkvXbeygI\r\n4wml9bL3rE8CAwEAAaNQME4wHQYDVR0OBBYEFD+Ac7akFxaMhBQAjVfvgGfY8hNK\r\nMB8GA1UdIwQYMBaAFD+Ac7akFxaMhBQAjVfvgGfY8hNKMAwGA1UdEwQFMAMBAf8w\r\nDQYJKoZIhvcNAQELBQADggEBAC8L9D67CxIhGo5aGVu63WqRHBNOdo\/FAGI7LURD\r\nFeRmG5nRw\/VXzJLGJksh4FSkx7aPrxNWF1uFiDZ80EuYQuIv7bDLblK31ZEbdg1R\r\n9LgiZCdYSr464I7yXQY9o6FiNtSKZkQO8EsscJPPy\/Zp4uHAnADWACkOUHiCbcKi\r\nUUFu66dX0Wr\/v53Gekz487GgVRs8HEeT9MU1reBKRgdENR8PNg4rbQfLc3YQKLWK\r\n7yWnn\/RenjDpuCiePj8N8\/80tGgrNgK\/6fzM3zI18sSywnXLswxqDb\/J+jgVxnQ6\r\nMrsTf1urM8MnfcxG\/82oHIwfMh\/sXPCZpo+DTLkhQxctJ3M=", + "contacts:0:contactType": "support", + "contacts:0:givenName": "SURFconext", + "contacts:0:surName": "Helpdesk", + "contacts:0:emailAddress": "help@surfconext.nl", + "contacts:1:contactType": "administrative", + "contacts:1:givenName": "SURFconext", + "contacts:1:surName": "Administrative Contact", + "contacts:1:emailAddress": "support@surfconext.nl", + "contacts:2:contactType": "technical", + "contacts:2:givenName": "SURFconext", + "contacts:2:surName": "Technical Support", + "contacts:2:emailAddress": "support@surfconext.nl", + "OrganizationName:en": "SURFnet BV", + "OrganizationDisplayName:en": "SURFnet", + "OrganizationURL:en": "http:\/\/www.surfnet.nl\/en\/Pages\/default.aspx", + "OrganizationName:nl": "SURFnet BV", + "OrganizationDisplayName:nl": "SURFnet", + "OrganizationURL:nl": "http:\/\/www.surfnet.nl\/nl\/Pages\/default.aspx", + "coin:service_team_id": "team-2", + "coin:original_metadata_url": "https:\/\/engine.surfconext.nl\/authentication\/sp\/metadata", + "coin:exclude_from_push": "0", + "logo:0:url": "https:\/\/static.surfconext.nl\/media\/idp\/surfnet.png", + "logo:0:width": "200", + "logo:0:height": "160" + }, + "eid": 31 + } +} diff --git a/tests/webtests/EntityEditTest.php b/tests/webtests/EntityEditTest.php index d2c071b98..b87387110 100644 --- a/tests/webtests/EntityEditTest.php +++ b/tests/webtests/EntityEditTest.php @@ -268,7 +268,7 @@ public function test_it_allows_publication_change_requests() { $crawler = $this->client->request('GET', "/entity/edit/production/9628d851-abd1-2283-a8f1-a29ba5036174/1"); $form = $crawler - ->selectButton('Change request') + ->selectButton('Change') ->form(); $this->client->submit($form, $this->buildValidFormData()); self::assertEquals(302, $this->client->getResponse()->getStatusCode());