Handle order project and refactor api
This commit is contained in:
@@ -27,6 +27,7 @@ require $_tests_dir . '/includes/bootstrap.php';
|
||||
|
||||
# Require Wiaas Unit Test case class
|
||||
require_once '/tmp/wiaas-backend-test/app/plugins/wiaas/tests/wiaas-unit-test-case.php';
|
||||
require_once '/tmp/wiaas-backend-test/app/plugins/wiaas/tests/wiaas-api-unit-test-case.php';
|
||||
|
||||
function load_active_plugins_list() {
|
||||
return array(
|
||||
|
||||
@@ -0,0 +1,81 @@
|
||||
<?php
|
||||
|
||||
class Wiaas_Order_Project_API_Test extends Wiaas_API_Unit_Test_Case {
|
||||
|
||||
function setUp() {
|
||||
parent::setUp();
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers Wiaas_Order_Projects_API::get_order_projects()
|
||||
*/
|
||||
function test_get_order_projects_as_guest() {
|
||||
$this->check_endpoint_forbidden_for_guest(
|
||||
new WP_REST_Request( 'GET', '/wiaas/order-projects')
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers Wiaas_Order_Projects_API::get_order_projects()
|
||||
*/
|
||||
function test_get_order_projects_as_customer() {
|
||||
Wiaas_Order_Project::add_order_project('Test Available 1', true);
|
||||
Wiaas_Order_Project::add_order_project('Test Available 2', true);
|
||||
|
||||
$customer_id = $this->create_new_customer();
|
||||
wp_set_current_user($customer_id);
|
||||
|
||||
$data = $this->dispatch_endpoint_request(
|
||||
new WP_REST_Request( 'GET', '/wiaas/order-projects')
|
||||
);
|
||||
$this->assertNotNull($data);
|
||||
$this->assertTrue(is_array($data));
|
||||
|
||||
$this->assertCount(2, $data);
|
||||
foreach ($data as $project) {
|
||||
$this->assertArrayHasKey('id', $project);
|
||||
$this->assertArrayHasKey('name', $project);
|
||||
|
||||
$this->assertContains($project['name'], array(
|
||||
'Test Available 1',
|
||||
'Test Available 2',
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers Wiaas_Order_Projects_API::create_order_project()
|
||||
*/
|
||||
function test_create_order_project_as_guest() {
|
||||
$request = new WP_REST_Request( 'POST', '/wiaas/order-projects');
|
||||
$request->set_body_params(array(
|
||||
'name' => 'Test'
|
||||
));
|
||||
$this->check_endpoint_forbidden_for_guest($request);
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers Wiaas_Order_Projects_API::create_order_project()
|
||||
*/
|
||||
function test_create_valid_order_project_as_customer() {
|
||||
$customer_id = $this->create_new_customer();
|
||||
wp_set_current_user($customer_id);
|
||||
|
||||
$request = new WP_REST_Request( 'POST', '/wiaas/order-projects');
|
||||
$request->set_body_params(array(
|
||||
'name' => 'Test Project'
|
||||
));
|
||||
$data = $this->dispatch_endpoint_request($request);
|
||||
|
||||
$this->assertNotNull($data);
|
||||
$this->assertTrue(is_array($data));
|
||||
|
||||
$this->assertArrayHasKey('messages', $data);
|
||||
$this->assertNotEmpty($data['messages']);
|
||||
|
||||
$message = $data['messages'][0];
|
||||
$this->assertArrayHasKey('code', $message);
|
||||
$this->assertEquals('success', $message['code']);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,84 @@
|
||||
<?php
|
||||
|
||||
class Wiaas_Order_Project_Test extends Wiaas_Unit_Test_Case {
|
||||
|
||||
/**
|
||||
* @covers Wiaas_Order_Project::register_order_project_taxonomy()
|
||||
*/
|
||||
function test_order_project_taxonomy_created() {
|
||||
$taxonomy = get_taxonomy('shop_order_project');
|
||||
$this->assertInstanceOf(WP_Taxonomy::class, $taxonomy);
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers Wiaas_Order_Project::add_order_project()
|
||||
*/
|
||||
function test_adding_order_project() {
|
||||
Wiaas_Order_Project::add_order_project('Test', true);
|
||||
|
||||
$added_order_project = get_term_by('name', 'Test', 'shop_order_project');
|
||||
|
||||
$this->assertInstanceOf(WP_Term::class, $added_order_project);
|
||||
$this->assertEquals($added_order_project->name, 'Test');
|
||||
|
||||
$saved_available_flag = get_term_meta($added_order_project->term_id, '_wiaas_is_available', true);
|
||||
$this->assertEquals('yes', $saved_available_flag);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers Wiaas_Order_Project::is_order_project_available()
|
||||
*/
|
||||
function test_is_order_project_available() {
|
||||
Wiaas_Order_Project::add_order_project('Test', true);
|
||||
$added_order_project = get_term_by('name', 'Test', 'shop_order_project');
|
||||
|
||||
$this->assertTrue(Wiaas_Order_Project::is_order_project_available($added_order_project));
|
||||
|
||||
$this->assertTrue(Wiaas_Order_Project::is_order_project_available($added_order_project->term_id));
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers Wiaas_Order_Project::set_is_order_project_available()
|
||||
*/
|
||||
function test_set_is_order_project_available() {
|
||||
Wiaas_Order_Project::add_order_project('Test', true);
|
||||
$added_order_project = get_term_by('name', 'Test', 'shop_order_project');
|
||||
|
||||
Wiaas_Order_Project::set_is_order_project_available($added_order_project, false);
|
||||
$saved_available_flag = get_term_meta($added_order_project->term_id, '_wiaas_is_available', true);
|
||||
$this->assertEquals('no', $saved_available_flag);
|
||||
|
||||
Wiaas_Order_Project::set_is_order_project_available($added_order_project->term_id, true);
|
||||
$saved_available_flag = get_term_meta($added_order_project->term_id, '_wiaas_is_available', true);
|
||||
$this->assertEquals('yes', $saved_available_flag);
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers Wiaas_Order_Project::get_available_order_projects()
|
||||
*/
|
||||
function test_get_available_order_projects() {
|
||||
Wiaas_Order_Project::add_order_project('Test Available 1', true);
|
||||
Wiaas_Order_Project::add_order_project('Test Available 2', true);
|
||||
Wiaas_Order_Project::add_order_project('Test Available 3', true);
|
||||
|
||||
Wiaas_Order_Project::add_order_project('Test Not Available 1', false);
|
||||
Wiaas_Order_Project::add_order_project('Test Not Available 2', false);
|
||||
Wiaas_Order_Project::add_order_project('Test Not Available 3', false);
|
||||
|
||||
$available_projects = Wiaas_Order_Project::get_available_order_projects();
|
||||
|
||||
$this->assertCount(3, $available_projects);
|
||||
|
||||
foreach ($available_projects as $project) {
|
||||
$this->assertArrayHasKey('id', $project);
|
||||
$this->assertArrayHasKey('name', $project);
|
||||
|
||||
$this->assertContains($project['name'], array(
|
||||
'Test Available 1',
|
||||
'Test Available 2',
|
||||
'Test Available 3'
|
||||
));
|
||||
}
|
||||
}
|
||||
}
|
||||
63
backend/app/plugins/wiaas/tests/wiaas-api-unit-test-case.php
Normal file
63
backend/app/plugins/wiaas/tests/wiaas-api-unit-test-case.php
Normal file
@@ -0,0 +1,63 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Implements common logic for testing Wiaas API
|
||||
*
|
||||
* Class Wiaas_API_Unit_Test_Case
|
||||
*/
|
||||
class Wiaas_API_Unit_Test_Case extends Wiaas_Unit_Test_Case {
|
||||
protected $server;
|
||||
|
||||
function setUp() {
|
||||
parent::setUp();
|
||||
|
||||
/** @var WP_REST_Server $wp_rest_server */
|
||||
global $wp_rest_server;
|
||||
$this->server = $wp_rest_server = new \WP_REST_Server;
|
||||
do_action( 'rest_api_init' );
|
||||
}
|
||||
|
||||
/**
|
||||
* Test that given endpoint is forbidden when accessed as guest
|
||||
*
|
||||
* @param WP_REST_Request $request Request to test
|
||||
*/
|
||||
function check_endpoint_forbidden_for_guest($request) {
|
||||
wp_set_current_user(0);
|
||||
|
||||
$response = $this->server->dispatch( $request );
|
||||
|
||||
$this->assertNotNull($response);
|
||||
$this->assertInstanceOf('WP_REST_Response',$response);
|
||||
$this->assertTrue($response->is_error());
|
||||
$this->assertEquals($response->get_status(), 401);
|
||||
|
||||
$error_data = $response->as_error();
|
||||
$this->assertEquals($error_data->get_error_message(), 'Sorry, you are not allowed to do that.');
|
||||
}
|
||||
|
||||
/**
|
||||
* Handles common action during dispatching of rest request
|
||||
*
|
||||
* @param WP_REST_Request $request
|
||||
* @param int $expected_status_code
|
||||
* @param bool $is_error_expected
|
||||
*
|
||||
* @return mixed Result error when error is expected, result data otherwise
|
||||
*/
|
||||
function dispatch_endpoint_request($request, $expected_status_code = 200, $is_error_expected = false) {
|
||||
$response = $this->server->dispatch( $request );
|
||||
|
||||
$this->assertNotNull($response);
|
||||
$this->assertInstanceOf('WP_REST_Response',$response);
|
||||
$this->assertEquals($response->get_status(), $expected_status_code);
|
||||
|
||||
if ($is_error_expected) {
|
||||
$this->assertTrue($response->is_error());
|
||||
return $response->as_error();
|
||||
}
|
||||
|
||||
$this->assertFalse($response->is_error());
|
||||
return $response->get_data();
|
||||
}
|
||||
}
|
||||
@@ -24,6 +24,8 @@ class Wiaas_Unit_Test_Case extends WP_UnitTestCase {
|
||||
Wiaas_Product_Category::register_product_categories();
|
||||
|
||||
Wiaas_Package_Type::register_package_type_taxonomy();
|
||||
|
||||
Wiaas_Order_Project::register_order_project_taxonomy();
|
||||
|
||||
define('WP_TEST_IN_PROGRESS',true);
|
||||
}
|
||||
@@ -85,4 +87,28 @@ class Wiaas_Unit_Test_Case extends WP_UnitTestCase {
|
||||
|
||||
$package->sync(true);
|
||||
}
|
||||
|
||||
function create_new_customer($login = 'customer_test', $organization_name = 'test-customer-organization') {
|
||||
$customer_id = wp_insert_user(array(
|
||||
'user_login' => $login,
|
||||
'user_pass' => 'test',
|
||||
'user_email' => $login . '@mail.com',
|
||||
'role' => 'customer',
|
||||
));
|
||||
|
||||
$organization = get_term_by('name', $organization_name, Wiaas_User_Organization::TAXONOMY_NAME);
|
||||
if (is_wp_error($organization)) {
|
||||
$organization = wp_insert_term(
|
||||
$organization_name,
|
||||
Wiaas_User_Organization::TAXONOMY_NAME
|
||||
);
|
||||
}
|
||||
|
||||
wp_set_terms_for_user(
|
||||
$customer_id,
|
||||
Wiaas_User_Organization::TAXONOMY_NAME,
|
||||
[$organization_name]);
|
||||
|
||||
return $customer_id;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user