Skip to content

Commit 0971367

Browse files
committed
Re-write unit tests for API License Endpoint, and clean up code
1 parent eea65c1 commit 0971367

6 files changed

Lines changed: 177 additions & 172 deletions

File tree

src/Api/V1/License/Api_License.php

Lines changed: 21 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@
55
use GFPDF\Api\V1\Base_Api;
66
use GFPDF\Helper\Helper_Data;
77
use GFPDF\Helper\Helper_Abstract_Addon;
8-
98
use Psr\Log\LoggerInterface;
9+
use WP_Error;
1010

1111
/**
1212
* @package Gravity PDF
@@ -48,41 +48,31 @@
4848
class Api_License extends Base_Api {
4949

5050
/**
51-
* Holds our log class
52-
*
53-
* @var \Monolog\Logger
54-
*
55-
* @since 4.0
51+
* @var LoggerInterface
52+
* @since 5.2
5653
*/
5754
public $log;
5855

5956
/**
60-
* Holds our Helper_Data object
61-
* which we can autoload with any data needed
62-
*
6357
* @var \GFPDF\Helper\Helper_Data
64-
*
6558
* @since 5.2
6659
*/
6760
protected $data;
6861

6962
/**
7063
* Api_License constructor.
7164
*
72-
* @param Helper_Data $data
65+
* @param LoggerInterface $log
66+
* @param Helper_Data $data
7367
*
7468
* @since 5.2
7569
*/
7670
public function __construct( LoggerInterface $log, Helper_Data $data ) {
77-
$this->log = $log;
71+
$this->log = $log;
7872
$this->data = $data;
7973
}
8074

8175
/**
82-
* Register our PDF save font endpoint
83-
*
84-
* @Internal Use this endpoint to save fonts
85-
*
8676
* @since 5.2
8777
*/
8878
public function register() {
@@ -101,39 +91,36 @@ public function register() {
10191
}
10292

10393
/**
104-
* Processes the rest API endpoint
94+
* Processes the REST API endpoint
10595
*
10696
* @param \WP_REST_Request $request
10797
*
108-
* @return array|\WP_Error
98+
* @return array|WP_Error
10999
*
110100
* @since 5.2
111101
*/
112102
public function process_license_deactivation( \WP_REST_Request $request ) {
113-
114103
$params = $request->get_json_params();
115-
116-
/* Get the required details */
117-
/* do not proceed if these are empty/null */
118-
if ( empty( $params['addon_name'] ) || empty( $params['license'] ) ) {
119-
return new \WP_Error( 'process_license_deactivation', 'Required Field is missing, please try again', [ 'status' => 400 ] );
104+
if ( ! isset( $params['addon_name'], $params['license'] ) ) {
105+
return new WP_Error( 'license_deactivation_fields_missing', 'Required Field is missing, please try again', [ 'status' => 400 ] );
120106
}
121107

122-
$addon = $this->data->addon( $params['addon_name'] );
123-
124108
/* Check add-on currently installed */
125-
if ( empty( $addon ) ) {
126-
return new \WP_Error( 'process_license_deactivation', 'An error occurred during deactivation, please try again', [ 'status' => 404 ] );
109+
if ( empty( $this->data->addon[ $params['addon_name'] ] ) ) {
110+
return new WP_Error( 'license_deactivation_addon_not_found', 'An error occurred during deactivation, please try again', [ 'status' => 404 ] );
127111
}
128112

113+
$addon = $this->data->addon[ $params['addon_name'] ];
129114
$was_deactivated = $this->deactivate_license_key( $addon, $params['license'] );
130-
115+
131116
if ( ! $was_deactivated ) {
132117
$license_info = $addon->get_license_info();
133-
return new \WP_Error( 'schedule_license_check', $license_info['message'], [ 'status' => 400 ] );
118+
119+
return new WP_Error( 'license_deactivation_schedule_license_check', $license_info['message'], [ 'status' => 400 ] );
134120
}
135121

136122
$this->log->addNotice( 'Successfully Deactivated License' );
123+
137124
return [ 'success' => esc_html__( 'License deactivated.', 'gravity-forms-pdf-extended' ) ];
138125
}
139126

@@ -147,7 +134,7 @@ public function process_license_deactivation( \WP_REST_Request $request ) {
147134
*
148135
* @since 5.2
149136
*/
150-
public function deactivate_license_key( Helper_Abstract_Addon $addon, $license_key ) {
137+
protected function deactivate_license_key( Helper_Abstract_Addon $addon, $license_key ) {
151138
$response = wp_remote_post(
152139
$this->data->store_url,
153140
[
@@ -161,18 +148,16 @@ public function deactivate_license_key( Helper_Abstract_Addon $addon, $license_k
161148
]
162149
);
163150

164-
/* If API error exit early */
165-
if ( is_wp_error( $response ) || 200 !== wp_remote_retrieve_response_code( $response ) ) {
151+
if ( is_wp_error( $response ) || wp_remote_retrieve_response_code( $response ) !== 200 ) {
166152
return false;
167153
}
168154

169-
/* Get API response and check license is now deactivated */
155+
/* Verify license is now deactivated */
170156
$license_data = json_decode( wp_remote_retrieve_body( $response ) );
171157
if ( ! isset( $license_data->license ) || $license_data->license !== 'deactivated' ) {
172158
return false;
173159
}
174160

175-
/* Remove license data from database */
176161
$addon->delete_license_info();
177162

178163
$this->log->addNotice(
@@ -185,4 +170,4 @@ public function deactivate_license_key( Helper_Abstract_Addon $addon, $license_k
185170

186171
return true;
187172
}
188-
}
173+
}

tests/phpunit/unit-tests/api/ApiFontsEndpointRoutes.php renamed to tests/phpunit/unit-tests/Api/ApiFontsEndpointRoutes.php

File renamed without changes.

tests/phpunit/unit-tests/api/ApiTemplateEndpointRoutes.php renamed to tests/phpunit/unit-tests/Api/ApiTemplateEndpointRoutes.php

File renamed without changes.

tests/phpunit/unit-tests/api/FontCoreApiEndpointRoutes.php renamed to tests/phpunit/unit-tests/Api/FontCoreApiEndpointRoutes.php

File renamed without changes.
Lines changed: 156 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,156 @@
1+
<?php
2+
3+
namespace GFPDF\Api\V1\License;
4+
5+
use GFPDF\Helper\Helper_Data;
6+
use GFPDF\Helper\Helper_Abstract_Addon;
7+
use GFPDF\Helper\Helper_Logger;
8+
use GFPDF\Helper\Helper_Singleton;
9+
use WP_UnitTestCase;
10+
use WP_REST_Request;
11+
use GPDFAPI;
12+
13+
/**
14+
* @package Gravity PDF GravityPDF
15+
* @copyright Copyright (c) 2018, Blue Liquid Designs
16+
* @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
17+
* @since 1.0
18+
*/
19+
20+
/* Exit if accessed directly */
21+
if ( ! defined( 'ABSPATH' ) ) {
22+
exit;
23+
}
24+
25+
/*
26+
This file is part of Gravity PDF GravityPDF.
27+
28+
Copyright (C) 2018, Blue Liquid Designs
29+
30+
This program is free software; you can redistribute it and/or modify
31+
it under the terms of the GNU General Public License as published by
32+
the Free Software Foundation; either version 2 of the License, or
33+
(at your option) any later version.
34+
35+
This program is distributed in the hope that it will be useful,
36+
but WITHOUT ANY WARRANTY; without even the implied warranty of
37+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
38+
GNU General Public License for more details.
39+
40+
You should have received a copy of the GNU General Public License
41+
along with this program; if not, write to the Free Software
42+
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
43+
*/
44+
45+
/**
46+
* Class TestApiLicenseEndpoint
47+
*
48+
* @package GFPDF\Tests\GravityPDF
49+
*
50+
* @group REST-API
51+
*/
52+
class TestApiLicenseEndpointRoutes extends WP_UnitTestCase {
53+
54+
/**
55+
* @var Api_License
56+
* @since 5.2
57+
*/
58+
protected $class;
59+
60+
/**
61+
* @var Helper_Data
62+
*/
63+
protected $data;
64+
65+
/**
66+
* @since 5.2
67+
*/
68+
public function setUp() {
69+
$this->data = GPDFAPI::get_data_class();
70+
$this->class = new Api_License( GPDFAPI::get_log_class(), $this->data );
71+
$this->class->init();
72+
73+
parent::setUp();
74+
}
75+
76+
/**
77+
* @since 5.2
78+
*/
79+
public function test_rest_api_license_endpoints() {
80+
$wp_rest_server = rest_get_server();
81+
do_action( 'rest_api_init' );
82+
83+
$this->assertContains( 'gravity-pdf/v1', $wp_rest_server->get_namespaces() );
84+
$this->assertArrayHasKey( '/gravity-pdf/v1/license/(?P<id>\d+)/deactivate', $wp_rest_server->get_routes() );
85+
}
86+
87+
/**
88+
* @param array $data
89+
*
90+
* @return WP_REST_Request
91+
*
92+
* @since 5.2
93+
*/
94+
protected function get_request( $data ) {
95+
$request = new WP_REST_Request();
96+
$request->set_body( json_encode( $data ) );
97+
$request->set_header( 'content-type', 'application/json' );
98+
$request->get_json_params();
99+
100+
return $request;
101+
}
102+
103+
/**
104+
* @since 5.2
105+
*/
106+
public function test_deactivate_license_key_validation() {
107+
$request = $this->get_request( [ 'addon_name' => '', 'license' => '' ] );
108+
$response = $this->class->process_license_deactivation( $request );
109+
$this->assertSame( 400, $response->get_error_data( 'license_deactivation_fields_missing' )['status'] );
110+
111+
/* Test unregistered addon */
112+
$request = $this->get_request( [ 'addon_name' => 'test', 'license' => '12345' ] );
113+
$response = $this->class->process_license_deactivation( $request );
114+
$this->assertSame( 404, $response->get_error_data( 'license_deactivation_addon_not_found' )['status'] );
115+
}
116+
117+
/**
118+
* @since 5.2
119+
*/
120+
public function test_deactivate_license_key_api() {
121+
$request = $this->get_request( [ 'addon_name' => 'test', 'license' => '12345' ] );
122+
123+
/* Mock remote request and simulate success */
124+
$this->data->addon['test'] = new TestAddon( 'test', 'Test', 'Gravity PDF', '1.0', '', $this->data, GPDFAPI::get_options_class(), new Helper_Singleton(), new Helper_Logger( 'test', 'Test' ), GPDFAPI::get_notice_class() );
125+
126+
$api_response = function() {
127+
return new \WP_Error();
128+
};
129+
130+
add_filter( 'pre_http_request', $api_response );
131+
132+
$response = $this->class->process_license_deactivation( $request );
133+
$this->assertSame( 400, $response->get_error_data( 'license_deactivation_schedule_license_check' )['status'] );
134+
135+
remove_filter( 'pre_http_request', $api_response );
136+
137+
/* Get a success test */
138+
$api_response = function() {
139+
return [
140+
'response' => [ 'code' => 200 ],
141+
'body' => json_encode( [ 'license' => 'deactivated' ] ),
142+
];
143+
};
144+
145+
add_filter( 'pre_http_request', $api_response );
146+
$response = $this->class->process_license_deactivation( $request );
147+
$this->assertArrayHasKey( 'success', $response );
148+
remove_filter( 'pre_http_request', $api_response );
149+
}
150+
}
151+
152+
class TestAddon extends Helper_Abstract_Addon {
153+
public function plugin_updater() {
154+
155+
}
156+
}

0 commit comments

Comments
 (0)