Skip to content

Commit

Permalink
Update Unit Test code to work with PHPUnit8 whilst maintaining suppor… (
Browse files Browse the repository at this point in the history
  • Loading branch information
seamuslee001 authored May 22, 2021
1 parent 571319d commit beffb5e
Show file tree
Hide file tree
Showing 4 changed files with 7 additions and 170 deletions.
2 changes: 1 addition & 1 deletion phpunit.xml.dist
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version="1.0"?>
<phpunit backupGlobals="false" backupStaticAttributes="false" colors="true" convertErrorsToExceptions="true" convertNoticesToExceptions="true" convertWarningsToExceptions="true" processIsolation="false" stopOnFailure="false" bootstrap="tests/phpunit/bootstrap.php">
<phpunit backupGlobals="false" backupStaticAttributes="false" colors="true" convertErrorsToExceptions="true" convertNoticesToExceptions="true" convertWarningsToExceptions="true" processIsolation="false" stopOnFailure="false" bootstrap="tests/phpunit/bootstrap.php" cacheResult="false">
<testsuites>
<testsuite name="iATS Test Suite">
<directory>./tests/phpunit</directory>
Expand Down
166 changes: 2 additions & 164 deletions tests/phpunit/CRM/Iats/BaseTestClass.php
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,8 @@
* b. Disable TransactionalInterface, and handle all setup/teardown yourself.
*/
abstract class BaseTestClass extends \PHPUnit\Framework\TestCase implements HeadlessInterface, HookInterface, TransactionalInterface {
//class BaseTestClass extends \PHPUnit_Framework_TestCase implements HeadlessInterface, HookInterface {

use \Civi\Test\Api3TestTrait;

/**
* Configure the headless environment.
Expand All @@ -30,167 +31,4 @@ public function setUpHeadless() {
->apply();
}

private $_apiversion = 3;

/**
* wrap api functions.
* so we can ensure they succeed & throw exceptions without litterering the test with checks
*
* @param string $entity
* @param string $action
* @param array $params
* @param mixed $checkAgainst
* Optional value to check result against, implemented for getvalue,.
* getcount, getsingle. Note that for getvalue the type is checked rather than the value
* for getsingle the array is compared against an array passed in - the id is not compared (for
* better or worse )
*
* @return array|int
*/
public function callAPISuccess($entity, $action, $params, $checkAgainst = NULL) {
$params = array_merge(array(
'version' => $this->_apiversion,
'debug' => 1,
),
$params
);
switch (strtolower($action)) {
case 'getvalue':
return $this->callAPISuccessGetValue($entity, $params, $checkAgainst);

case 'getsingle':
return $this->callAPISuccessGetSingle($entity, $params, $checkAgainst);

case 'getcount':
return $this->callAPISuccessGetCount($entity, $params, $checkAgainst);
}
$result = $this->civicrm_api($entity, $action, $params);
$this->assertAPISuccess($result, "Failure in api call for $entity $action");
return $result;
}
/**
* This function exists to wrap api getValue function & check the result
* so we can ensure they succeed & throw exceptions without litterering the test with checks
* There is a type check in this
*
* @param string $entity
* @param array $params
* @param string $type
* Per http://php.net/manual/en/function.gettype.php possible types.
* - boolean
* - integer
* - double
* - string
* - array
* - object
*
* @return array|int
*/
public function callAPISuccessGetValue($entity, $params, $type = NULL) {
$params += array(
'version' => $this->_apiversion,
'debug' => 1,
);
$result = $this->civicrm_api($entity, 'getvalue', $params);
if ($type) {
if ($type == 'integer') {
// api seems to return integers as strings
$this->assertTrue(is_numeric($result), "expected a numeric value but got " . print_r($result, 1));
}
else {
$this->assertType($type, $result, "returned result should have been of type $type but was ");
}
}
return $result;
}
/**
* This function exists to wrap api getValue function & check the result
* so we can ensure they succeed & throw exceptions without litterering the test with checks
* There is a type check in this
* @param string $entity
* @param array $params
* @param null $count
* @throws Exception
* @return array|int
*/
public function callAPISuccessGetCount($entity, $params, $count = NULL) {
$params += array(
'version' => $this->_apiversion,
'debug' => 1,
);
$result = $this->civicrm_api($entity, 'getcount', $params);
if (!is_int($result) || !empty($result['is_error']) || isset($result['values'])) {
throw new Exception('Invalid getcount result : ' . print_r($result, TRUE) . " type :" . gettype($result));
}
if (is_int($count)) {
$this->assertEquals($count, $result, "incorrect count returned from $entity getcount");
}
return $result;
}
/**
* This function exists to wrap api getsingle function & check the result
* so we can ensure they succeed & throw exceptions without litterering the test with checks
*
* @param string $entity
* @param array $params
* @param array $checkAgainst
* Array to compare result against.
* - boolean
* - integer
* - double
* - string
* - array
* - object
*
* @throws Exception
* @return array|int
*/
public function callAPISuccessGetSingle($entity, $params, $checkAgainst = NULL) {
$params += array(
'version' => $this->_apiversion,
'debug' => 1,
);
$result = $this->civicrm_api($entity, 'getsingle', $params);
if (!is_array($result) || !empty($result['is_error']) || isset($result['values'])) {
throw new Exception('Invalid getsingle result' . print_r($result, TRUE));
}
if ($checkAgainst) {
// @todo - have gone with the fn that unsets id? should we check id?
$this->checkArrayEquals($result, $checkAgainst);
}
return $result;
}
/**
* Check that api returned 'is_error' => 0.
*
* @param array $apiResult
* Api result.
* @param string $prefix
* Extra test to add to message.
*/
public function assertAPISuccess($apiResult, $prefix = '') {
if (!empty($prefix)) {
$prefix .= ': ';
}
$errorMessage = empty($apiResult['error_message']) ? '' : " " . $apiResult['error_message'];
if (!empty($apiResult['debug_information'])) {
$errorMessage .= "\n " . print_r($apiResult['debug_information'], TRUE);
}
if (!empty($apiResult['trace'])) {
$errorMessage .= "\n" . print_r($apiResult['trace'], TRUE);
}
$this->assertEquals(0, $apiResult['is_error'], $prefix . $errorMessage);
}
/**
* A stub for the API interface. This can be overriden by subclasses to change how the API is called.
*
* @param $entity
* @param $action
* @param array $params
* @return array|int
*/
public function civicrm_api($entity, $action, $params) {
return civicrm_api($entity, $action, $params);
}

}
8 changes: 4 additions & 4 deletions tests/phpunit/CRM/Iats/ContributionIATSTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -35,19 +35,19 @@ public function setUpHeadless() {
->apply();
}

public function setUp() {
public function setUp(): void {
$this->_apiversion = 3;
parent::setUp();
}

public function tearDown() {
public function tearDown(): void {
parent::tearDown();
}

/**
* Test a Credit Card Contribution - one time iATS Credit Card - TEST41 - Backend
*/
public function testIATSCreditCardBackend() {
public function testIATSCreditCardBackend(): void {

$params = array(
'sequential' => 1,
Expand Down Expand Up @@ -120,7 +120,7 @@ public function testIATSCreditCardBackend() {
/**
* Test a SWIPE Contribution - one time iATS SWIPE - TEST41 - Backend
*/
public function testIATSSWIPEBackend() {
public function testIATSSWIPEBackend(): void {

$params = array(
'sequential' => 1,
Expand Down
1 change: 0 additions & 1 deletion tests/phpunit/bootstrap.php
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
<?php

ini_set('memory_limit', '2G');
ini_set('safe_mode', 0);
eval(cv('php:boot --level=classloader', 'phpcode'));

require_once __DIR__ . '/CRM/Iats/BaseTestClass.php';
Expand Down

0 comments on commit beffb5e

Please sign in to comment.