From 17bc1ab11ae2e5c943c8fcdeb9952e86c8baf286 Mon Sep 17 00:00:00 2001 From: Erik Anders <5753604+Naugrimm@users.noreply.github.com> Date: Wed, 15 Nov 2023 01:15:57 +0100 Subject: [PATCH] Prevent error when listing exceptions (#26) --- .../StoredWorkflowExceptionResource.php | 11 +-- .../Resources/StoredWorkflowLogResource.php | 5 +- app/Http/Resources/StoredWorkflowResource.php | 3 +- tests/Feature/DashboardWorkflowTest.php | 83 +++++++++++++++++++ 4 files changed, 89 insertions(+), 13 deletions(-) create mode 100644 tests/Feature/DashboardWorkflowTest.php diff --git a/app/Http/Resources/StoredWorkflowExceptionResource.php b/app/Http/Resources/StoredWorkflowExceptionResource.php index cbc4bbd..44b09ed 100644 --- a/app/Http/Resources/StoredWorkflowExceptionResource.php +++ b/app/Http/Resources/StoredWorkflowExceptionResource.php @@ -3,11 +3,8 @@ namespace Waterline\Http\Resources; -use Illuminate\Http\Request; use Illuminate\Http\Resources\Json\JsonResource; use SplFileObject; -use Waterline\Transformer\WorkflowToChartDataTransformer; -use Workflow\Models\StoredWorkflow; use Workflow\Models\StoredWorkflowException; use Workflow\Serializers\Y; @@ -18,9 +15,9 @@ class StoredWorkflowExceptionResource extends JsonResource { public static $wrap = null; - public function toArray(Request $request) + public function toArray($request) { - $code = null; + $code = ''; $exception = $this->exception; $unserialized = Y::unserialize($exception); @@ -32,11 +29,11 @@ public function toArray(Request $request) $file = new SplFileObject($unserialized['file']); $file->seek($unserialized['line'] - 4); for ($line = 0; $line < 7; ++$line) { - $exception->code .= $file->current(); + $code .= $file->current(); $file->next(); if ($file->eof()) break; } - $code = rtrim($exception->code); + $code = rtrim($code); $exception = serialize($unserialized); } diff --git a/app/Http/Resources/StoredWorkflowLogResource.php b/app/Http/Resources/StoredWorkflowLogResource.php index 3fdcc8c..348b6a7 100644 --- a/app/Http/Resources/StoredWorkflowLogResource.php +++ b/app/Http/Resources/StoredWorkflowLogResource.php @@ -3,10 +3,7 @@ namespace Waterline\Http\Resources; -use Illuminate\Http\Request; use Illuminate\Http\Resources\Json\JsonResource; -use Waterline\Transformer\WorkflowToChartDataTransformer; -use Workflow\Models\StoredWorkflow; use Workflow\Models\StoredWorkflowLog; use Workflow\Serializers\Y; @@ -17,7 +14,7 @@ class StoredWorkflowLogResource extends JsonResource { public static $wrap = null; - public function toArray(Request $request) + public function toArray($request) { return [ "id" => $this->id, diff --git a/app/Http/Resources/StoredWorkflowResource.php b/app/Http/Resources/StoredWorkflowResource.php index e3ccca5..ed186e8 100644 --- a/app/Http/Resources/StoredWorkflowResource.php +++ b/app/Http/Resources/StoredWorkflowResource.php @@ -3,7 +3,6 @@ namespace Waterline\Http\Resources; -use Illuminate\Http\Request; use Illuminate\Http\Resources\Json\JsonResource; use Waterline\Transformer\WorkflowToChartDataTransformer; use Workflow\Models\StoredWorkflow; @@ -16,7 +15,7 @@ class StoredWorkflowResource extends JsonResource { public static $wrap = null; - public function toArray(Request $request) + public function toArray($request) { return [ "id" => $this->id, diff --git a/tests/Feature/DashboardWorkflowTest.php b/tests/Feature/DashboardWorkflowTest.php new file mode 100644 index 0000000..2cb325b --- /dev/null +++ b/tests/Feature/DashboardWorkflowTest.php @@ -0,0 +1,83 @@ + 'WorkflowClass', + 'arguments' => 'N;', + 'output' => 'N;', + 'status' => 'created', + ]); + + $storedLog = $storedWorkflow->logs()->create([ + 'index' => 0, + 'now' => now()->toDateTimeString(), + 'class' => 'Activity1Class', + 'result' => 'N;', + ]); + + $storedWorkflow->exceptions()->create([ + 'class' => 'Activity2Class', + 'exception' => Y::serialize(new Exception('ExceptionMessage')), + ]); + + + $response = $this + ->get('/waterline/api/flows/'.$storedWorkflow->id); + + $response + ->assertStatus(200) + ->assertJson( + fn (AssertableJson $json) => $json + ->where('id', $storedWorkflow->id) + ->where('class', 'WorkflowClass') + ->where('arguments', 'N;') + ->where('output', 'N;') + ->where('status', 'created') + ->whereType('created_at', 'string') + ->whereType('updated_at', 'string') + ->has( + 'logs', + 1, + fn (AssertableJson $log) => $log + ->where('id', $storedLog->id) + ->where('index', 0) + ->whereType('now', 'string') + ->where('class', 'Activity1Class') + ->where('result', 'N;') + ->whereType('created_at', 'string') + ) + ->has( + 'exceptions', + 1, + fn (AssertableJson $exception) => $exception + ->whereType('code', 'string') + ->whereType('exception', 'string') + ->where('class', 'Activity2Class') + ->whereType('created_at', 'string') + ) + ->has('chartData', 2) + ->where('chartData.0.x', 'WorkflowClass') + ->where('chartData.0.type', 'Workflow') + ->where('chartData.1.x', 'Activity1Class') + ->where('chartData.1.type', 'Activity') + ->whereAllType([ + 'chartData.0.y.0' => 'integer', + 'chartData.0.y.1' => 'integer', + 'chartData.1.y.0' => 'integer', + 'chartData.1.y.1' => 'integer', + ]) + + ); + } +}