diff --git a/modules/OfflinePayments/Http/Controllers/Settings.php b/modules/OfflinePayments/Http/Controllers/Settings.php index 9113d78bd..321c8f74e 100644 --- a/modules/OfflinePayments/Http/Controllers/Settings.php +++ b/modules/OfflinePayments/Http/Controllers/Settings.php @@ -3,11 +3,13 @@ namespace Modules\OfflinePayments\Http\Controllers; use App\Abstracts\Http\Controller; -use App\Utilities\Modules; use Illuminate\Http\Response; use Modules\OfflinePayments\Http\Requests\Setting as Request; use Modules\OfflinePayments\Http\Requests\SettingGet as GRequest; use Modules\OfflinePayments\Http\Requests\SettingDelete as DRequest; +use Modules\OfflinePayments\Jobs\CreatePaymentMethod; +use Modules\OfflinePayments\Jobs\DeletePaymentMethod; +use Modules\OfflinePayments\Jobs\UpdatePaymentMethod; class Settings extends Controller { @@ -32,56 +34,24 @@ class Settings extends Controller */ public function update(Request $request) { - $methods = json_decode(setting('offline-payments.methods'), true); + if (!empty($request->get('update_code'))) { + $payment_method = $this->dispatch(new UpdatePaymentMethod($request)); - if (!empty($request->get('update_code', null))) { - foreach ($methods as $key => $method) { - if ($method['code'] != $request->get('update_code')) { - continue; - } - - $method = explode('.', $request->get('update_code')); - - $methods[$key] = [ - 'code' => 'offline-payments.' . $request->get('code') . '.' . $method[2], - 'name' => $request->get('name'), - 'customer' => $request->get('customer'), - 'order' => $request->get('order'), - 'description' => $request->get('description'), - ]; - } - - $message = trans('messages.success.updated', ['type' => $request['name']]); + $message = trans('messages.success.updated', ['type' => $payment_method['name']]); } else { - $methods[] = [ - 'code' => 'offline-payments.' . $request->get('code') . '.' . (count($methods) + 1), - 'name' => $request->get('name'), - 'customer' => $request->get('customer'), - 'order' => $request->get('order'), - 'description' => $request->get('description'), - ]; + $payment_method = $this->dispatch(new CreatePaymentMethod($request)); - $message = trans('messages.success.added', ['type' => $request->get('name')]); + $message = trans('messages.success.added', ['type' => $payment_method['name']]); } - setting()->set('offline-payments.methods', json_encode($methods)); - - setting()->save(); - - Modules::clearPaymentMethodsCache(); - - $response = [ - 'status' => null, - 'success' => true, - 'error' => false, - 'message' => $message, - 'data' => null, - 'redirect' => route('offline-payments.settings.edit'), - ]; - flash($message)->success(); - return response()->json($response); + return response()->json([ + 'success' => true, + 'error' => false, + 'message' => $message, + 'redirect' => route('offline-payments.settings.edit'), + ]); } /** @@ -132,31 +102,10 @@ class Settings extends Controller */ public function destroy(DRequest $request) { - $code = $request->get('code'); + $payment_method = $this->dispatch(new DeletePaymentMethod($request)); - $methods = json_decode(setting('offline-payments.methods'), true); + $message = trans('messages.success.deleted', ['type' => $payment_method['name']]); - $remove = false; - - foreach ($methods as $key => $method) { - if ($method['code'] != $code) { - continue; - } - - $remove = $methods[$key]; - unset($methods[$key]); - } - - // Set Api Token - setting()->set('offline-payments.methods', json_encode($methods)); - - setting()->save(); - - Modules::clearPaymentMethodsCache(); - - $message = trans('messages.success.deleted', ['type' => $remove['name']]); - - // because it show notification. //flash($message)->success(); return response()->json([ diff --git a/modules/OfflinePayments/Jobs/CreatePaymentMethod.php b/modules/OfflinePayments/Jobs/CreatePaymentMethod.php new file mode 100644 index 000000000..1ac6c223b --- /dev/null +++ b/modules/OfflinePayments/Jobs/CreatePaymentMethod.php @@ -0,0 +1,49 @@ +request = $this->getRequestInstance($request); + } + + /** + * Execute the job. + * + * @return array + */ + public function handle() + { + $methods = json_decode(setting('offline-payments.methods'), true); + + $payment_method = [ + 'code' => 'offline-payments.' . $this->request->get('code') . '.' . (count($methods) + 1), + 'name' => $this->request->get('name'), + 'customer' => $this->request->get('customer'), + 'order' => $this->request->get('order'), + 'description' => $this->request->get('description'), + ]; + + $methods[] = $payment_method; + + setting()->set('offline-payments.methods', json_encode($methods)); + + setting()->save(); + + Modules::clearPaymentMethodsCache(); + + return $payment_method; + } +} diff --git a/modules/OfflinePayments/Jobs/DeletePaymentMethod.php b/modules/OfflinePayments/Jobs/DeletePaymentMethod.php new file mode 100644 index 000000000..e616c62da --- /dev/null +++ b/modules/OfflinePayments/Jobs/DeletePaymentMethod.php @@ -0,0 +1,53 @@ +request = $this->getRequestInstance($request); + } + + /** + * Execute the job. + * + * @return array + */ + public function handle() + { + $methods = json_decode(setting('offline-payments.methods'), true); + + $payment_method = []; + + $code = $this->request->get('code'); + + foreach ($methods as $key => $method) { + if ($method['code'] != $code) { + continue; + } + + $payment_method = $methods[$key]; + + unset($methods[$key]); + } + + setting()->set('offline-payments.methods', json_encode($methods)); + + setting()->save(); + + Modules::clearPaymentMethodsCache(); + + return $payment_method; + } +} diff --git a/modules/OfflinePayments/Jobs/UpdatePaymentMethod.php b/modules/OfflinePayments/Jobs/UpdatePaymentMethod.php new file mode 100644 index 000000000..c13c2e5cc --- /dev/null +++ b/modules/OfflinePayments/Jobs/UpdatePaymentMethod.php @@ -0,0 +1,61 @@ +request = $this->getRequestInstance($request); + } + + /** + * Execute the job. + * + * @return array + */ + public function handle() + { + $methods = json_decode(setting('offline-payments.methods'), true); + + $payment_method = []; + + $code = $this->request->get('update_code'); + + foreach ($methods as $key => $method) { + if ($method['code'] != $code) { + continue; + } + + $method = explode('.', $code); + + $payment_method = [ + 'code' => 'offline-payments.' . $this->request->get('code') . '.' . $method[2], + 'name' => $this->request->get('name'), + 'customer' => $this->request->get('customer'), + 'order' => $this->request->get('order'), + 'description' => $this->request->get('description'), + ]; + + $methods[$key] = $payment_method; + } + + setting()->set('offline-payments.methods', json_encode($methods)); + + setting()->save(); + + Modules::clearPaymentMethodsCache(); + + return $payment_method; + } +} diff --git a/modules/OfflinePayments/Tests/Feature/SettingsTest.php b/modules/OfflinePayments/Tests/Feature/SettingsTest.php new file mode 100644 index 000000000..156ffce02 --- /dev/null +++ b/modules/OfflinePayments/Tests/Feature/SettingsTest.php @@ -0,0 +1,109 @@ +loginAs() + ->get(route('settings.index')) + ->assertStatus(200) + ->assertSeeText(trans('offline-payments::general.description')); + } + + public function testItShouldSeeOfflinePaymentsSettingsListPage() + { + $this->loginAs() + ->get(route('offline-payments.settings.edit')) + ->assertStatus(200) + ->assertSeeText(trans('offline-payments::general.payment_gateways')); + } + + public function testItShouldSeeOfflinePaymentsSettingsCreatePage() + { + $this->loginAs() + ->get(route('offline-payments.settings.edit')) + ->assertStatus(200) + ->assertSeeText(trans('offline-payments::general.add_new')); + } + + public function testItShouldCreateOfflinePaymentsSettings() + { + $request = $this->getRequest(); + + $message = trans('messages.success.added', ['type' => $request['name']]); + + $this->loginAs() + ->post(route('offline-payments.settings.update'), $request) + ->assertStatus(200) + ->assertJson([ + 'success' => true, + 'message' => $message, + ]); + } + + public function testItShouldSeeOfflinePaymentsSettingsUpdatePage() + { + $payment_method = $this->dispatch(new CreatePaymentMethod($this->getRequest())); + + $this->loginAs() + ->post(route('offline-payments.settings.get', ['code' => $payment_method['code']])) + ->assertStatus(200) + ->assertJson([ + 'success' => true, + 'data' => [ + 'name' => $payment_method['name'], + ], + ]); + } + + public function testItShouldUpdateOfflinePaymentsSettings() + { + $request = $this->getRequest(); + + $payment_method = $this->dispatch(new CreatePaymentMethod($request)); + + $request['name'] = $this->faker->text(10); + $request['update_code'] = $payment_method['code']; + + $message = trans('messages.success.updated', ['type' => $request['name']]); + + $this->loginAs() + ->post(route('offline-payments.settings.update'), $request) + ->assertStatus(200) + ->assertJson([ + 'success' => true, + 'message' => $message, + ]); + } + + public function testItShouldDeleteAccount() + { + $payment_method = $this->dispatch(new CreatePaymentMethod($this->getRequest())); + + $message = trans('messages.success.deleted', ['type' => $payment_method['name']]); + + $this->loginAs() + ->delete(route('offline-payments.settings.delete', ['code' => $payment_method['code']])) + ->assertStatus(200) + ->assertJson([ + 'success' => true, + 'message' => $message, + ]); + } + + public function getRequest() + { + return [ + 'name' => $this->faker->text(10), + 'code' => 'offline-payments.cash.99', + 'customer' => 1, + 'order' => 1, + 'description' => $this->faker->paragraph, + ]; + } +} diff --git a/modules/PaypalStandard/Tests/Feature/SettingsTest.php b/modules/PaypalStandard/Tests/Feature/SettingsTest.php new file mode 100644 index 000000000..368f11bf0 --- /dev/null +++ b/modules/PaypalStandard/Tests/Feature/SettingsTest.php @@ -0,0 +1,45 @@ +loginAs() + ->get(route('settings.index')) + ->assertStatus(200) + ->assertSeeText(trans('paypal-standard::general.description')); + } + + public function testItShouldSeePaypalStandardSettingsUpdatePage() + { + $this->loginAs() + ->get(route('settings.module.edit', ['alias' => 'paypal-standard'])) + ->assertStatus(200); + } + + public function testItShouldUpdatePaypalStandardSettings() + { + $this->loginAs() + ->patch(route('settings.module.edit', ['alias' => 'paypal-standard']), $this->getRequest()) + ->assertStatus(200); + + $this->assertFlashLevel('success'); + } + + public function getRequest() + { + return [ + 'name' => $this->faker->name, + 'email' => $this->faker->safeEmail, + 'mode' => 'sandbox', + 'transaction' => 'sale', + 'customer' => 1, + 'debug' => 1, + 'order' => 1, + ]; + } +}