From 20b7bdfaef28528953900720a59c421c974b538c Mon Sep 17 00:00:00 2001 From: David Bomba Date: Fri, 27 Jan 2023 22:04:02 +1100 Subject: [PATCH] Live Design Preview Test --- app/Http/Controllers/PreviewController.php | 8 ++- .../Requests/Preview/DesignPreviewRequest.php | 71 +++++++++++++++++++ tests/Feature/DesignApiTest.php | 1 + tests/Feature/LiveDesignTest.php | 57 +++++++++++++++ 4 files changed, 136 insertions(+), 1 deletion(-) create mode 100644 app/Http/Requests/Preview/DesignPreviewRequest.php create mode 100644 tests/Feature/LiveDesignTest.php diff --git a/app/Http/Controllers/PreviewController.php b/app/Http/Controllers/PreviewController.php index 9edbdfaad489..241ae707bfae 100644 --- a/app/Http/Controllers/PreviewController.php +++ b/app/Http/Controllers/PreviewController.php @@ -177,6 +177,9 @@ class PreviewController extends BaseController public function design(DesignPreviewRequest $request) { + if(Ninja::isHosted() && $request->getHost() != 'preview.invoicing.co') + return response()->json(['message' => 'This server cannot handle this request.'], 400); + $company = auth()->user()->company(); MultiDB::setDb($company->db); @@ -294,7 +297,7 @@ class PreviewController extends BaseController ->build(); DB::connection(config('database.default'))->rollBack(); -nlog($maker->getCompiledHTML()); + if (request()->query('html') == 'true') { nlog($maker->getCompiledHTML()); return $maker->getCompiledHTML(); @@ -341,6 +344,9 @@ nlog($maker->getCompiledHTML()); public function live(PreviewInvoiceRequest $request) { + if(Ninja::isHosted() && $request->getHost() != 'preview.invoicing.co') + return response()->json(['message' => 'This server cannot handle this request.'], 400); + $company = auth()->user()->company(); MultiDB::setDb($company->db); diff --git a/app/Http/Requests/Preview/DesignPreviewRequest.php b/app/Http/Requests/Preview/DesignPreviewRequest.php new file mode 100644 index 000000000000..9930e87f877b --- /dev/null +++ b/app/Http/Requests/Preview/DesignPreviewRequest.php @@ -0,0 +1,71 @@ +user()->can('create', Invoice::class) || + auth()->user()->can('create', Quote::class) || + auth()->user()->can('create', RecurringInvoice::class) || + auth()->user()->can('create', Credit::class) || + auth()->user()->can('create', PurchaseOrder::class); + } + + public function rules() + { + $rules = [ + 'entity' => 'bail|sometimes|string', + 'entity_id' => 'bail|sometimes|string', + 'settings_type' => 'bail|required|in:company,group,client', + 'settings' => 'sometimes', + 'group_id' => 'sometimes', + 'client_id' => 'sometimes', + ]; + + return $rules; + } + + public function prepareForValidation() + { + $input = $this->all(); + + $input = $this->decodePrimaryKeys($input); + + $input['line_items'] = isset($input['line_items']) ? $this->cleanItems($input['line_items']) : []; + $input['amount'] = 0; + $input['balance'] = 0; + $input['number'] = ctrans('texts.live_preview').' #'.rand(0, 1000); + + $this->replace($input); + } +} diff --git a/tests/Feature/DesignApiTest.php b/tests/Feature/DesignApiTest.php index dec0cc00bed7..723596e639b2 100644 --- a/tests/Feature/DesignApiTest.php +++ b/tests/Feature/DesignApiTest.php @@ -46,6 +46,7 @@ class DesignApiTest extends TestCase public function testDesignPost() { + $design = [ 'body' => 'body', 'includes' => 'includes', diff --git a/tests/Feature/LiveDesignTest.php b/tests/Feature/LiveDesignTest.php new file mode 100644 index 000000000000..8ec7d1699d87 --- /dev/null +++ b/tests/Feature/LiveDesignTest.php @@ -0,0 +1,57 @@ +makeTestData(); + + $this->withoutMiddleware( + ThrottleRequests::class + ); + } + + public function testDesignRoute200() + { + $data = [ + 'entity' => 'invoice', + 'entity_id' => $this->invoice->hashed_id, + 'settings_type' => 'company', + 'settings' => (array)$this->company->settings, + ]; + + $response = $this->withHeaders([ + 'X-API-SECRET' => config('ninja.api_secret'), + 'X-API-TOKEN' => $this->token, + ])->post('/api/v1/live_design/', $data); + + $response->assertStatus(200); + } + + +}