tests for offline payments and paypal standard

This commit is contained in:
Denis Duliçi 2020-06-17 13:45:17 +03:00
parent e85b79b357
commit 6cf90cb5cd
6 changed files with 333 additions and 67 deletions

View File

@ -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([

View File

@ -0,0 +1,49 @@
<?php
namespace Modules\OfflinePayments\Jobs;
use App\Abstracts\Job;
use App\Utilities\Modules;
class CreatePaymentMethod extends Job
{
protected $request;
/**
* Create a new job instance.
*
* @param $request
*/
public function __construct($request)
{
$this->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;
}
}

View File

@ -0,0 +1,53 @@
<?php
namespace Modules\OfflinePayments\Jobs;
use App\Abstracts\Job;
use App\Utilities\Modules;
class DeletePaymentMethod extends Job
{
protected $request;
/**
* Create a new job instance.
*
* @param $request
*/
public function __construct($request)
{
$this->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;
}
}

View File

@ -0,0 +1,61 @@
<?php
namespace Modules\OfflinePayments\Jobs;
use App\Abstracts\Job;
use App\Utilities\Modules;
class UpdatePaymentMethod extends Job
{
protected $request;
/**
* Create a new job instance.
*
* @param $request
*/
public function __construct($request)
{
$this->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;
}
}

View File

@ -0,0 +1,109 @@
<?php
namespace Modules\OfflinePayments\Tests\Feature;
use Modules\OfflinePayments\Jobs\CreatePaymentMethod;
use Tests\Feature\FeatureTestCase;
class SettingsTest extends FeatureTestCase
{
public function testItShouldSeeOfflinePaymentsInSettingsListPage()
{
$this->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,
];
}
}

View File

@ -0,0 +1,45 @@
<?php
namespace Modules\PaypalStandard\Tests\Feature;
use Tests\Feature\FeatureTestCase;
class SettingsTest extends FeatureTestCase
{
public function testItShouldSeePaypalStandardInSettingsListPage()
{
$this->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,
];
}
}