From e183238b8e2f3e2bae74a44be1664e60189f146d Mon Sep 17 00:00:00 2001 From: David Bomba Date: Wed, 5 Aug 2020 12:12:38 +1000 Subject: [PATCH 1/4] Add Shop Profile Route --- .../Controllers/Shop/ProfileController.php | 41 +++++++ .../Shop/CompanyShopProfileTransformer.php | 107 ++++++++++++++++++ routes/shop.php | 2 +- 3 files changed, 149 insertions(+), 1 deletion(-) create mode 100644 app/Http/Controllers/Shop/ProfileController.php create mode 100644 app/Transformers/Shop/CompanyShopProfileTransformer.php diff --git a/app/Http/Controllers/Shop/ProfileController.php b/app/Http/Controllers/Shop/ProfileController.php new file mode 100644 index 000000000000..2fae460ebe2d --- /dev/null +++ b/app/Http/Controllers/Shop/ProfileController.php @@ -0,0 +1,41 @@ +header('X-API-COMPANY-KEY'))->first(); + + if(!$company->enable_shop_api) + return response()->json(['message' => 'Shop is disabled', 'errors' => []],403); + + return $this->itemResponse($company); + } +} diff --git a/app/Transformers/Shop/CompanyShopProfileTransformer.php b/app/Transformers/Shop/CompanyShopProfileTransformer.php new file mode 100644 index 000000000000..832a05fbbb14 --- /dev/null +++ b/app/Transformers/Shop/CompanyShopProfileTransformer.php @@ -0,0 +1,107 @@ + (string)$company->company_key ?: '', + 'settings' => $this->trimCompany($company), + ]; + } + + private function trimCompany($company) + { + $trimmed_company_settings = [ + 'custom_value1' => $company->settings->custom_value1, + 'custom_value2' => $company->settings->custom_value2, + 'custom_value3' => $company->settings->custom_value3, + 'custom_value4' => $company->settings->custom_value4, + 'name' => $company->settings->name, + 'company_logo' => $company->settings->company_logo, + 'website' => $company->settings->website, + 'address1' => $company->settings->address1, + 'address2' => $company->settings->address2, + 'city' => $company->settings->city, + 'state' => $company->settings->state, + 'postal_code' => $company->settings->postal_code, + 'phone' => $company->settings->phone, + 'email' => $company->settings->email, + 'country_id' => $company->settings->country_id, + 'vat_number' => $company->settings->vat_number, + ]; + + $new_settings = new \stdClass; + + foreach($trimmed_company_settings as $key => $value) + $new_settings->{$key} = $value; + + return $new_settings; + } +} diff --git a/routes/shop.php b/routes/shop.php index 9187fdf2be8a..da600175b427 100644 --- a/routes/shop.php +++ b/routes/shop.php @@ -10,5 +10,5 @@ Route::group(['middleware' => ['company_key_db','locale'], 'prefix' => 'api/v1'] Route::get('shop/client/{contact_key}', 'Shop\ClientController@show'); Route::get('shop/invoice/{invitation_key}', 'Shop\InvoiceController@show'); Route::get('shop/product/{product_key}', 'Shop\ProductController@show'); - + Route::get('shop/profile', 'Shop\ProfileController@show'); }); \ No newline at end of file From 13cf06b0cd6edd1358aab3943709eaaa28ea13e6 Mon Sep 17 00:00:00 2001 From: David Bomba Date: Wed, 5 Aug 2020 12:21:26 +1000 Subject: [PATCH 2/4] Test for new shop routes" --- .../Controllers/Shop/ProfileController.php | 2 +- .../Shop/CompanyShopProfileTransformer.php | 1 + tests/Unit/Shop/ShopProfileTest.php | 52 +++++++++++++++++++ 3 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 tests/Unit/Shop/ShopProfileTest.php diff --git a/app/Http/Controllers/Shop/ProfileController.php b/app/Http/Controllers/Shop/ProfileController.php index 2fae460ebe2d..43884032a82b 100644 --- a/app/Http/Controllers/Shop/ProfileController.php +++ b/app/Http/Controllers/Shop/ProfileController.php @@ -29,7 +29,7 @@ class ProfileController extends BaseController protected $entity_transformer = CompanyShopProfileTransformer::class; - public function show(Request $request, string $product_key) + public function show(Request $request) { $company = Company::where('company_key', $request->header('X-API-COMPANY-KEY'))->first(); diff --git a/app/Transformers/Shop/CompanyShopProfileTransformer.php b/app/Transformers/Shop/CompanyShopProfileTransformer.php index 832a05fbbb14..12e0c9a80efd 100644 --- a/app/Transformers/Shop/CompanyShopProfileTransformer.php +++ b/app/Transformers/Shop/CompanyShopProfileTransformer.php @@ -36,6 +36,7 @@ use App\Transformers\CompanyLedgerTransformer; use App\Transformers\CompanyTokenHashedTransformer; use App\Transformers\CompanyTokenTransformer; use App\Transformers\CreditTransformer; +use App\Transformers\EntityTransformer; use App\Transformers\PaymentTermTransformer; use App\Transformers\TaskTransformer; use App\Transformers\WebhookTransformer; diff --git a/tests/Unit/Shop/ShopProfileTest.php b/tests/Unit/Shop/ShopProfileTest.php new file mode 100644 index 000000000000..d4f249beb451 --- /dev/null +++ b/tests/Unit/Shop/ShopProfileTest.php @@ -0,0 +1,52 @@ +makeTestData(); + } + + public function testProfileDisplays() + { + + $this->company->enable_shop_api = true; + $this->company->save(); + + $response = $this->withHeaders([ + 'X-API-SECRET' => config('ninja.api_secret'), + 'X-API-COMPANY-KEY' => $this->company->company_key + ])->get('/api/v1/shop/profile'); + + + $response->assertStatus(200); + + $arr = $response->json(); + + $this->assertArrayHasKey('custom_value1', $arr['data']['settings']); + $this->assertEquals($this->company->company_key, $arr['data']['company_key']); + } + + + +} From 715fdf5e2d116eea084bd38e62d9f8c55d7d1f52 Mon Sep 17 00:00:00 2001 From: David Bomba Date: Wed, 5 Aug 2020 12:27:47 +1000 Subject: [PATCH 3/4] Transformer improvements --- app/Transformers/Shop/CompanyShopProfileTransformer.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/Transformers/Shop/CompanyShopProfileTransformer.php b/app/Transformers/Shop/CompanyShopProfileTransformer.php index 12e0c9a80efd..45d2a2a3ad7d 100644 --- a/app/Transformers/Shop/CompanyShopProfileTransformer.php +++ b/app/Transformers/Shop/CompanyShopProfileTransformer.php @@ -79,7 +79,10 @@ class CompanyShopProfileTransformer extends EntityTransformer private function trimCompany($company) { + $std = new \stdClass; + $trimmed_company_settings = [ + 'custom_fields' => $company->custom_fields ?: $std, 'custom_value1' => $company->settings->custom_value1, 'custom_value2' => $company->settings->custom_value2, 'custom_value3' => $company->settings->custom_value3, From a5d2ac2cb9f2648c974ba6f399f00276da3db91f Mon Sep 17 00:00:00 2001 From: David Bomba Date: Wed, 5 Aug 2020 21:48:53 +1000 Subject: [PATCH 4/4] Fixes for fees and settings object --- app/Models/Client.php | 8 ++++++-- tests/Feature/CompanyGatewayTest.php | 12 +++++++++--- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/app/Models/Client.php b/app/Models/Client.php index 7ea45d0e4d29..e68f50a9a901 100644 --- a/app/Models/Client.php +++ b/app/Models/Client.php @@ -475,8 +475,12 @@ class Client extends BaseModel implements HasLocalePreference $valid_gateways = $gateways->filter(function ($method) use ($amount) { - if(isset($method->fees_and_limits)) - $fees_and_limits = $method->fees_and_limits->{"1"}; + if(isset($method->fees_and_limits)){ + //sometimes the key value of the fees and limits object are not static, + //we have to harvest the key value as follows + $properties = array_keys(get_object_vars($method->fees_and_limits)); + $fees_and_limits = $method->fees_and_limits->{$properties[0]}; + } else return true; diff --git a/tests/Feature/CompanyGatewayTest.php b/tests/Feature/CompanyGatewayTest.php index 5ee1de4482d3..ebb994a88349 100644 --- a/tests/Feature/CompanyGatewayTest.php +++ b/tests/Feature/CompanyGatewayTest.php @@ -63,7 +63,11 @@ class CompanyGatewayTest extends TestCase $cg->save(); $this->assertNotNull($cg->fees_and_limits); - $this->assertNotNull($cg->fees_and_limits->{"1"}); + + $properties = array_keys(get_object_vars($cg->fees_and_limits)); + $fees_and_limits = $cg->fees_and_limits->{$properties[0]}; + + $this->assertNotNull($fees_and_limits); //confirm amount filtering works @@ -83,8 +87,10 @@ class CompanyGatewayTest extends TestCase public function checkSieve($cg, $amount) { - if(isset($cg->fees_and_limits)) - $fees_and_limits = $cg->fees_and_limits->{"1"}; + if(isset($cg->fees_and_limits)){ + $properties = array_keys(get_object_vars($cg->fees_and_limits)); + $fees_and_limits = $cg->fees_and_limits->{$properties[0]}; + } else $passes = true;