diff --git a/app/Livewire/Project/Shared/Destination.php b/app/Livewire/Project/Shared/Destination.php index d9e560074..79892d4c6 100644 --- a/app/Livewire/Project/Shared/Destination.php +++ b/app/Livewire/Project/Shared/Destination.php @@ -112,7 +112,7 @@ public function promote(int $network_id, int $server_id) { try { $server = Server::ownedByCurrentTeam()->findOrFail($server_id); - $network = StandaloneDocker::ownedByCurrentTeam()->findOrFail($network_id); + $network = StandaloneDocker::ownedByCurrentTeam()->where('server_id', $server->id)->findOrFail($network_id); $this->authorize('update', $this->resource); $main_destination = $this->resource->destination; @@ -140,7 +140,7 @@ public function addServer(int $network_id, int $server_id) { try { $server = Server::ownedByCurrentTeam()->findOrFail($server_id); - $network = StandaloneDocker::ownedByCurrentTeam()->findOrFail($network_id); + $network = StandaloneDocker::ownedByCurrentTeam()->where('server_id', $server->id)->findOrFail($network_id); $this->authorize('update', $this->resource); $this->resource->additional_networks()->attach($network->id, ['server_id' => $server->id]); diff --git a/tests/Feature/CrossTeamDestinationAttachTest.php b/tests/Feature/CrossTeamDestinationAttachTest.php index 74c287107..3bd151152 100644 --- a/tests/Feature/CrossTeamDestinationAttachTest.php +++ b/tests/Feature/CrossTeamDestinationAttachTest.php @@ -98,6 +98,16 @@ expect($this->applicationA->fresh()->additional_networks)->toHaveCount(0); }); + test('cannot attach own network paired with wrong own server', function () { + try { + Livewire::test(Destination::class, ['resource' => $this->applicationA]) + ->call('addServer', $this->destinationA2->id, $this->serverA->id); + } catch (Throwable $e) { + } + + expect($this->applicationA->fresh()->additional_networks)->toHaveCount(0); + }); + test('can attach own team\'s server + network to own application', function () { Livewire::test(Destination::class, ['resource' => $this->applicationA]) ->call('addServer', $this->destinationA2->id, $this->serverA2->id); @@ -121,4 +131,16 @@ expect($this->applicationA->fresh()->destination_id)->toBe($originalDestinationId); }); + + test('cannot promote own network paired with wrong own server', function () { + $originalDestinationId = $this->applicationA->destination_id; + + try { + Livewire::test(Destination::class, ['resource' => $this->applicationA]) + ->call('promote', $this->destinationA2->id, $this->serverA->id); + } catch (Throwable $e) { + } + + expect($this->applicationA->fresh()->destination_id)->toBe($originalDestinationId); + }); });