Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
146 changes: 141 additions & 5 deletions src/Hyperwallet/Model/User.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,18 +6,20 @@
*
* @property string $token The user token
* @property string $status The user status
* @property string $verificationStatus The status of user verification
* @property string $businessStakeholderVerificationStatus The status of Business Stakeholder verification
* @property string $letterOfAuthorizationStatus The status of Letter of Authorization verification
*
* @property \DateTime $createdOn The user creation date
*
* @property string $clientUserId The client user id
* @property string $profileType The profile type
*
* @property string $businessType The business type
* @property string $businessName The business name
* @property string $businessOperatingName The business operating name
* @property string $businessRegistrationId The business registration id
* @property string $businessRegistrationStateProvince The business registration state or province
* @property string $businessRegistrationCountry The business registration country
* @property string $businessRegistrationStateProvince The business registration state or province
* @property string $businessContactRole The business contact role
*
* @property string $firstName The first name
Expand All @@ -32,6 +34,7 @@
* @property string $email The email
*
* @property string $governmentId The goverment id
* @property string $governmentIdType The status of Letter of Authorization verification
* @property string $passportId The passport id
* @property string $driversLicenseId The drivers license id
* @property string $employerId The employer id
Expand All @@ -40,13 +43,14 @@
* @property string $addressLine2 The address line 2
* @property string $city The city
* @property string $stateProvince The state or province
* @property string $country The country
* @property string $postalCode The postal code
* @property string $country The country
*
* @property string $language The user language
* @property string $programToken The users program token
* @property string $verificationStatus The status of user verification
* @property string $timeZone The users program token
* @property array $documents The array of documents returned for document upload
* @property array $links The array of HATEOS links
*
* @package Hyperwallet\Model
*/
Expand All @@ -59,6 +63,7 @@ class User extends BaseModel implements IProgramAware {
*
* @var string[]
*/

private static $READ_ONLY_FIELDS = array('token', 'status', 'createdOn', 'documents');

const STATUS_PRE_ACTIVATED = 'PRE_ACTIVATED';
Expand All @@ -69,6 +74,7 @@ class User extends BaseModel implements IProgramAware {

const PROFILE_TYPE_INDIVIDUAL = 'INDIVIDUAL';
const PROFILE_TYPE_BUSINESS = 'BUSINESS';
const PROFILE_TYPE_UNKNOWN = 'UNKNOWN';

const BUSINESS_TYPE_CORPORATION = 'CORPORATION';
const BUSINESS_TYPE_PARTNERSHIP = 'PARTNERSHIP';
Expand All @@ -80,11 +86,29 @@ class User extends BaseModel implements IProgramAware {
const GENDER_MALE = 'MALE';
const GENDER_FEMALE = 'FEMALE';

const VERIFICATION_STATUS_REQUIRED = 'REQUIRED';
const VERIFICATION_STATUS_NOT_REQUIRED = 'NOT_REQUIRED';
const VERIFICATION_STATUS_REQUIRED = 'REQUIRED';
const VERIFICATION_STATUS_FAILED = 'FAILED';
const VERIFICATION_STATUS_UNDER_REVIEW = 'UNDER_REVIEW';
const VERIFICATION_STATUS_VERIFIED = 'VERIFIED';

const BUSINESSS_STAKEHOLDER_VERIFICATION_STATUS_NOT_REQUIRED = 'NOT_REQUIRED';
const BUSINESSS_STAKEHOLDER_VERIFICATION_STATUS_REQUIRED = 'REQUIRED';
const BUSINESSS_STAKEHOLDER_VERIFICATION_STATUS_FAILED = 'FAILED';
const BUSINESSS_STAKEHOLDER_VERIFICATION_STATUS_UNDER_REVIEW = 'UNDER_REVIEW';
const BUSINESSS_STAKEHOLDER_VERIFICATION_STATUS_VERIFIED = 'VERIFIED';
const BUSINESSS_STAKEHOLDER_VERIFICATION_STATUS_READY_FOR_REVIEW = 'READY_FOR_REVIEW';

const LETTER_OF_AUTHORIZATION_STATUS_NOT_REQUIRED = 'NOT_REQUIRED';
const LETTER_OF_AUTHORIZATION_STATUS_REQUIRED = 'REQUIRED';
const LETTER_OF_AUTHORIZATION_STATUS_FAILED = 'FAILED';
const LETTER_OF_AUTHORIZATION_STATUS_UNDER_REVIEW = 'UNDER_REVIEW';
const LETTER_OF_AUTHORIZATION_STATUS_VERIFIED = 'VERIFIED';
const LETTER_OF_AUTHORIZATION_STATUS_READY_FOR_REVIEW = 'READY_FOR_REVIEW';

const GOVERNMENT_ID_TYPE_PASSPORT = 'PASSPORT';
const GOVERNMENT_ID_TYPE_NATIONAL_ID_CARD = 'NATIONAL_ID_CARD';

/**
* Creates a instance of User
*
Expand Down Expand Up @@ -123,6 +147,19 @@ public function getStatus() {
return $this->status;
}

/**
* set the User status
*
* @param string $status
* @return User
*/
/*
public function setStatus($status) {
$this->$status = $status;
return $this;
}

*/
/**
* Get the user creation time
*
Expand Down Expand Up @@ -778,4 +815,103 @@ public function getDocuments() {
return $this->documents;
}

/**
* get Business Stakeholder verification status
*
* @return string
*/
public function getBusinessStakeholderVerificationStatus() {
return $this->businessStakeholderVerificationStatus;
}

/**
* set Business Stakeholder verification status
*
* @param string $businessStakeholderVerificationStatus
* @return User
*/
public function setBusinessStakeholderVerificationStatus($businessStakeholderVerificationStatus) {
$this->businessStakeholderVerificationStatus = $businessStakeholderVerificationStatus;
return $this;
}

/**
* Get the users Letter of Authorization status
*
* @return string
*/
public function getLetterOfAuthorizationStatus() {
return $this->letterOfAuthorizationStatus;
}

/**
* Set the users Letter of Authorization status
*
* @param string $letterOfAuthorizationStatus
* @return User
*/
public function setLetterOfAuthorizationStatus($letterOfAuthorizationStatus) {
$this->letterOfAuthorizationStatus = $letterOfAuthorizationStatus;
return $this;
}

/**
* get the users government Id Type
*
* @return string
*/
public function getGovernmentIdType() {
return $this->governmentIdType;
}

/**
* Set the users government Id Type
*
* @param string $governmentIdType
* @return User
*/
public function setGovernmentIdType($governmentIdType) {
$this->governmentIdType = $governmentIdType;
return $this;
}

/**
* get the user's time zone
*
* @return string
*/
public function getTimeZone() {
return $this->timeZone;
}

/**
* set the user's time zone
*
* @param string $timeZone
* @return User
*/
public function setTimeZone($timeZone) {
$this->timeZone = $timeZone;
return $this;
}

/**
* get the HATEOS links
*
* @return array
*/
public function getLinks() {
return $this->links;
}

/**
* set the HATEOS links
*
* @param array $links
* @return User
*/
public function setLinks($links) {
$this->links = $links;
return $this;
}
}
25 changes: 23 additions & 2 deletions tests/Hyperwallet/Tests/HyperwalletTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -125,16 +125,37 @@ public function testCreateUser_withProgramTokenInUserObject() {
$client = new Hyperwallet('test-username', 'test-password', 'test-program-token');
$apiClientMock = $this->createAndInjectApiClientMock($client);
$user = new User(array('programToken' => 'test-program-token2'));
$user->setVerificationStatus(User::VERIFICATION_STATUS_VERIFIED);
$user->setBusinessStakeholderVerificationStatus(User::BUSINESSS_STAKEHOLDER_VERIFICATION_STATUS_VERIFIED);
$user->setLetterOfAuthorizationStatus(User::LETTER_OF_AUTHORIZATION_STATUS_VERIFIED);
$user->setGovernmentIdType(User::GOVERNMENT_ID_TYPE_NATIONAL_ID_CARD);
$user->setFirstName("test-first-name");
$user->setBusinessOperatingName("test-business-operating-name");
$user->setTimeZone("test-time-zone");

\Phake::when($apiClientMock)->doPost('/rest/v4/users', array(), $user, array())->thenReturn(array('success' => 'true'));
$expectedResponse = array('success' => 'true','verificationStatus'=>User::VERIFICATION_STATUS_VERIFIED,
'businessStakeholderVerificationStatus'=>User::BUSINESSS_STAKEHOLDER_VERIFICATION_STATUS_VERIFIED,
'letterOfAuthorizationStatus'=>User::LETTER_OF_AUTHORIZATION_STATUS_VERIFIED,
'governmentIdType'=>User::GOVERNMENT_ID_TYPE_NATIONAL_ID_CARD,
'firstName'=>"test-first-name",
'businessOperatingName'=>"test-business-operating-name",
'timeZone'=>'test-time-zone');

\Phake::when($apiClientMock)->doPost('/rest/v4/users', array(), $user, array())->thenReturn($expectedResponse);

// Run test
$this->assertEquals('test-program-token2', $user->getProgramToken());

$newUser = $client->createUser($user);
$this->assertNotNull($newUser);
$this->assertEquals('test-program-token2', $user->getProgramToken());
$this->assertEquals(array('success' => 'true'), $newUser->getProperties());
$this->assertEquals(array('success' => 'true','verificationStatus'=>User::VERIFICATION_STATUS_VERIFIED,
'businessStakeholderVerificationStatus'=>User::BUSINESSS_STAKEHOLDER_VERIFICATION_STATUS_VERIFIED,
'letterOfAuthorizationStatus'=>User::LETTER_OF_AUTHORIZATION_STATUS_VERIFIED,
'governmentIdType'=>User::GOVERNMENT_ID_TYPE_NATIONAL_ID_CARD,
'firstName'=>"test-first-name",
'businessOperatingName'=>"test-business-operating-name",
'timeZone'=>'test-time-zone'), $newUser->getProperties());

// Validate mock
\Phake::verify($apiClientMock)->doPost('/rest/v4/users', array(), $user, array());
Expand Down