diff --git a/src/Surfnet/ServiceProviderDashboard/Application/CommandHandler/Entity/PublishEntityProductionCommandHandler.php b/src/Surfnet/ServiceProviderDashboard/Application/CommandHandler/Entity/PublishEntityProductionCommandHandler.php index 2bdc74907..21524ed8a 100644 --- a/src/Surfnet/ServiceProviderDashboard/Application/CommandHandler/Entity/PublishEntityProductionCommandHandler.php +++ b/src/Surfnet/ServiceProviderDashboard/Application/CommandHandler/Entity/PublishEntityProductionCommandHandler.php @@ -25,9 +25,11 @@ use Surfnet\ServiceProviderDashboard\Application\Exception\NotAuthenticatedException; use Surfnet\ServiceProviderDashboard\Application\Service\TicketService; use Surfnet\ServiceProviderDashboard\Domain\Entity\Entity; +use Surfnet\ServiceProviderDashboard\Domain\Entity\Service; use Surfnet\ServiceProviderDashboard\Domain\Mailer\Mailer; use Surfnet\ServiceProviderDashboard\Domain\Repository\EntityRepository; use Surfnet\ServiceProviderDashboard\Domain\Repository\PublishEntityRepository; +use Surfnet\ServiceProviderDashboard\Domain\Repository\ServiceRepository; use Surfnet\ServiceProviderDashboard\Domain\ValueObject\Ticket; use Surfnet\ServiceProviderDashboard\Infrastructure\DashboardBundle\Factory\MailMessageFactory; use Surfnet\ServiceProviderDashboard\Infrastructure\Manage\Exception\PublishMetadataException; @@ -41,6 +43,11 @@ class PublishEntityProductionCommandHandler implements CommandHandler */ private $repository; + /** + * @var EntityRepository + */ + private $serviceRepository; + /** * @var PublishEntityRepository */ @@ -87,6 +94,7 @@ class PublishEntityProductionCommandHandler implements CommandHandler /** * @param EntityRepository $entityRepository + * @param ServiceRepository $serviceRepository * @param PublishEntityRepository $publishClient * @param TicketService $ticketService * @param FlashBagInterface $flashBag @@ -97,6 +105,7 @@ class PublishEntityProductionCommandHandler implements CommandHandler */ public function __construct( EntityRepository $entityRepository, + ServiceRepository $serviceRepository, PublishEntityRepository $publishClient, TicketService $ticketService, FlashBagInterface $flashBag, @@ -107,6 +116,7 @@ public function __construct( ) { Assert::stringNotEmpty($issueType, 'Please set "jira_issue_type_publication_request" in parameters.yml'); $this->repository = $entityRepository; + $this->serviceRepository = $serviceRepository; $this->publishClient = $publishClient; $this->ticketService = $ticketService; $this->mailFactory = $mailFactory; @@ -183,6 +193,14 @@ public function handle(PublishEntityProductionCommand $command) if (array_key_exists('id', $publishResponse)) { // Set entity status to published $entity->setStatus(Entity::STATE_PUBLISHED); + + // Also update the service status to requested, but only if current status is not-requested + $service = $entity->getService(); + if ($service->getConnectionStatus() == Service::CONNECTION_STATUS_NOT_REQUESTED) { + $service->setConnectionStatus(Service::CONNECTION_STATUS_REQUESTED); + $this->serviceRepository->save($service); + } + $this->logger->info(sprintf('Updating status of "%s" to published', $entity->getNameEn())); // Save changes made to entity $this->repository->save($entity); diff --git a/src/Surfnet/ServiceProviderDashboard/Infrastructure/DashboardBundle/Resources/config/services.yml b/src/Surfnet/ServiceProviderDashboard/Infrastructure/DashboardBundle/Resources/config/services.yml index c908c9a85..f2df528ad 100644 --- a/src/Surfnet/ServiceProviderDashboard/Infrastructure/DashboardBundle/Resources/config/services.yml +++ b/src/Surfnet/ServiceProviderDashboard/Infrastructure/DashboardBundle/Resources/config/services.yml @@ -100,6 +100,7 @@ services: class: Surfnet\ServiceProviderDashboard\Application\CommandHandler\Entity\PublishEntityProductionCommandHandler arguments: - '@Surfnet\ServiceProviderDashboard\Infrastructure\DashboardBundle\Repository\EntityRepository' + - '@Surfnet\ServiceProviderDashboard\Infrastructure\DashboardBundle\Repository\ServiceRepository' - '@surfnet.manage.client.publish_client.prod_environment' - '@Surfnet\ServiceProviderDashboard\Application\Service\TicketService' - '@session.flash_bag' diff --git a/tests/integration/Application/CommandHandler/Entity/PublishEntityProductionCommandHandlerTest.php b/tests/integration/Application/CommandHandler/Entity/PublishEntityProductionCommandHandlerTest.php index 0e2218d3e..3f018a602 100644 --- a/tests/integration/Application/CommandHandler/Entity/PublishEntityProductionCommandHandlerTest.php +++ b/tests/integration/Application/CommandHandler/Entity/PublishEntityProductionCommandHandlerTest.php @@ -33,6 +33,7 @@ use Surfnet\ServiceProviderDashboard\Domain\Mailer\Message; use Surfnet\ServiceProviderDashboard\Domain\Repository\EntityRepository; use Surfnet\ServiceProviderDashboard\Domain\Repository\PublishEntityRepository; +use Surfnet\ServiceProviderDashboard\Domain\Repository\ServiceRepository; use Surfnet\ServiceProviderDashboard\Infrastructure\DashboardBundle\Factory\MailMessageFactory; use Surfnet\ServiceProviderDashboard\Infrastructure\DashboardSamlBundle\Security\Authentication\Token\SamlToken; use Surfnet\ServiceProviderDashboard\Infrastructure\DashboardSamlBundle\Security\Identity; @@ -82,10 +83,16 @@ class PublishEntityProductionCommandHandlerTest extends MockeryTestCase */ private $mailFactory; + /** + * @var ServiceRepository|Mock + */ + private $serviceRepository; + public function setUp() { $this->repository = m::mock(EntityRepository::class); + $this->serviceRepository = m::mock(ServiceRepository::class); $this->publishEntityClient = m::mock(PublishEntityRepository::class); $this->ticketService = m::mock(TicketService::class); $this->flashBag = m::mock(FlashBagInterface::class); @@ -96,6 +103,7 @@ public function setUp() $this->commandHandler = new PublishEntityProductionCommandHandler( $this->repository, + $this->serviceRepository, $this->publishEntityClient, $this->ticketService, $this->flashBag, @@ -132,6 +140,8 @@ public function test_it_can_publish() $entity ->shouldReceive('setStatus') ->with(Entity::STATE_PUBLISHED); + $entity + ->shouldReceive('getService->getConnectionStatus'); $issue = m::mock(Issue::class)->makePartial(); $issue->key = 'CXT-999'; @@ -199,6 +209,8 @@ public function test_it_can_republish() $entity ->shouldReceive('setStatus') ->with(Entity::STATE_PUBLISHED); + $entity + ->shouldReceive('getService->getConnectionStatus'); $issue = m::mock(Issue::class)->makePartial(); $issue->key = 'CXT-999';