getMessage())->toBe('Original error'); expect($deploymentException->getCode())->toBe(500); expect($deploymentException->getPrevious())->toBe($originalException); }); test('DeploymentException is not reported when thrown', function () { $handler = new Handler(app()); // DeploymentException should not be reported (logged) $exception = new DeploymentException('Test deployment failure'); // Check that the exception should not be reported $reflection = new ReflectionClass($handler); $method = $reflection->getMethod('shouldReport'); $method->setAccessible(true); $shouldReport = $method->invoke($handler, $exception); expect($shouldReport)->toBeFalse(); }); test('RuntimeException is still reported when thrown', function () { $handler = new Handler(app()); // RuntimeException should still be reported (this is for Coolify bugs) $exception = new RuntimeException('Unexpected error in Coolify code'); // Check that the exception should be reported $reflection = new ReflectionClass($handler); $method = $reflection->getMethod('shouldReport'); $method->setAccessible(true); $shouldReport = $method->invoke($handler, $exception); expect($shouldReport)->toBeTrue(); }); test('DeploymentException marks a message as already logged only when asked', function () { $previous = new RuntimeException('Original error'); $logged = DeploymentException::alreadyLogged('Shown in the log', 7, $previous); expect($logged->isMessageAlreadyLogged())->toBeTrue() ->and($logged->getMessage())->toBe('Shown in the log') ->and($logged->getCode())->toBe(7) ->and($logged->getPrevious())->toBe($previous) ->and((new DeploymentException('Not shown yet'))->isMessageAlreadyLogged())->toBeFalse() ->and(DeploymentException::fromException($previous)->isMessageAlreadyLogged())->toBeFalse(); });