diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 00000000..ab57f9f3 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,11 @@ +sudo: required + +language: php + +services: + - docker + +before_install: + - docker build -t sdk . + +script: docker run sdk diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..50df9070 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,10 @@ +FROM ubuntu:16.04 + +RUN apt update && apt install -y php7.0 php7.0-curl php7.0-mbstring php7.0-xml composer wget tar bzip2 zip + +RUN mkdir /sdk_php +COPY . /sdk_php +WORKDIR /sdk_php +RUN composer install + +CMD vendor/bin/paratest -p 1 \ No newline at end of file diff --git a/src/Util/InstallationUtil.php b/src/Util/InstallationUtil.php index a03b22fa..161a5cd5 100644 --- a/src/Util/InstallationUtil.php +++ b/src/Util/InstallationUtil.php @@ -64,10 +64,12 @@ public static function interactiveInstall() try { $context = static::createApiContextWithoutConstructor(); - $environmentType = new BunqEnumApiEnvironmentType(static::readLine( - self::PROMPT_ENVIRONMENT, - self::ERROR_EMPTY_ENVIRONMENT - )); + $environmentType = new BunqEnumApiEnvironmentType( + static::readLine( + self::PROMPT_ENVIRONMENT, + self::ERROR_EMPTY_ENVIRONMENT + ) + ); static::setPrivateProperty($context, self::PROPERTY_ENVIRONMENT_TYPE, $environmentType); $apiKey = static::readLine( @@ -114,71 +116,6 @@ public static function interactiveInstall() } } - /** - * @param BunqEnumApiEnvironmentType $environmentType - * @param string $contextFileName - * @param string|null $apiKey - */ - public static function automaticInstall( - BunqEnumApiEnvironmentType $environmentType, - string $contextFileName, - string $apiKey = null - ) { - try { - $context = static::createApiContextWithoutConstructor(); - - if (is_null($environmentType)) { - $environmentType = BunqEnumApiEnvironmentType::SANDBOX(); - } else { - // Environment already passed - } - - static::setPrivateProperty($context, self::PROPERTY_ENVIRONMENT_TYPE, $environmentType); - - if ($environmentType->equals(BunqEnumApiEnvironmentType::SANDBOX()) && is_null($apiKey)) { - $methodCreateSandboxUser = static::createAccessibleReflectionMethod( - ApiContext::class, - self::METHOD_CREATE_SANDBOX_USER - ); - - $methodCreateSandboxUser->invoke($context); - } elseif (!is_null($apiKey)) { - static::setPrivateProperty($context, self::PROPERTY_API_KEY, $apiKey); - } else { - throw new BunqException(self::ERROR_CANNOT_CREATE_API_KEY_PRODUCTION); - } - - $methodInitializeInstallationContext = static::createAccessibleReflectionMethod( - ApiContext::class, - self::METHOD_INITIALIZE_INSTALLATION_CONTEXT - ); - $methodInitializeInstallationContext->invoke($context); - - $methodRegisterDevice = static::createAccessibleReflectionMethod( - ApiContext::class, - self::METHOD_REGISTER_DEVICE - ); - $methodRegisterDevice->invoke($context, gethostname(), []); - - $methodInitializeSessionContext = static::createAccessibleReflectionMethod( - ApiContext::class, - self::METHOD_INITIALIZE_SESSION_CONTEXT - ); - $methodInitializeSessionContext->invoke($context); - - if ($contextFileName === null) { - $context->save(); - } else { - $context->save($contextFileName); - } - } catch (BunqException $exception) { - echo sprintf(self::ERROR_BUNQ_EXCEPTION, $exception->getMessage()); - var_dump($exception); - } catch (Exception $exception) { - echo sprintf(self::ERROR_EXCEPTION, $exception->getMessage()); - } - } - /** * @return ApiContext */ @@ -287,4 +224,64 @@ private static function assertIpIsValid(string $ip) throw new BunqException(self::ERROR_INVALID_IP_ADDRESS, [$ip]); } } + + /** + * @param BunqEnumApiEnvironmentType $environmentType + * @param string|null $contextFileName + * @param string|null $apiKey + * @param bool $saveToConfFile + * + * @return ApiContext + */ + public static function automaticInstall( + BunqEnumApiEnvironmentType $environmentType, + string $contextFileName = null, + string $apiKey = null, + bool $saveToConfFile = false + ): ApiContext { + $context = static::createApiContextWithoutConstructor(); + + if (!is_null($environmentType)) { + $environmentType = BunqEnumApiEnvironmentType::SANDBOX(); + } + + static::setPrivateProperty($context, self::PROPERTY_ENVIRONMENT_TYPE, $environmentType); + + if ($environmentType->equals(BunqEnumApiEnvironmentType::SANDBOX()) && is_null($apiKey)) { + $methodCreateSandboxUser = static::createAccessibleReflectionMethod( + ApiContext::class, + self::METHOD_CREATE_SANDBOX_USER + ); + + $methodCreateSandboxUser->invoke($context); + } elseif (!is_null($apiKey)) { + static::setPrivateProperty($context, self::PROPERTY_API_KEY, $apiKey); + } else { + throw new BunqException(self::ERROR_CANNOT_CREATE_API_KEY_PRODUCTION); + } + + $methodInitializeInstallationContext = static::createAccessibleReflectionMethod( + ApiContext::class, + self::METHOD_INITIALIZE_INSTALLATION_CONTEXT + ); + $methodInitializeInstallationContext->invoke($context); + + $methodRegisterDevice = static::createAccessibleReflectionMethod( + ApiContext::class, + self::METHOD_REGISTER_DEVICE + ); + $methodRegisterDevice->invoke($context, gethostname(), []); + + $methodInitializeSessionContext = static::createAccessibleReflectionMethod( + ApiContext::class, + self::METHOD_INITIALIZE_SESSION_CONTEXT + ); + $methodInitializeSessionContext->invoke($context); + + if (!$contextFileName === null && $saveToConfFile) { + $context->save($contextFileName); + } + + return $context; + } } diff --git a/tests/BunqSdkTestBase.php b/tests/BunqSdkTestBase.php index a86addb1..3743fd8e 100644 --- a/tests/BunqSdkTestBase.php +++ b/tests/BunqSdkTestBase.php @@ -67,6 +67,13 @@ class BunqSdkTestBase extends TestCase */ const INDEX_FIRST = 0; + /** + * Spending money constants. + */ + const SPENDING_MONEY_AMOUNT = '500'; + const SPENDING_MONEY_RECIPIENT = 'sugardaddy@bunq.com'; + const SPENDING_MONEY_DESCRIPTION = 'sdk php test, thanks daddy <3'; + /** * @var MonetaryAccountBank */ @@ -77,30 +84,21 @@ class BunqSdkTestBase extends TestCase */ protected $cashRegister; - /** - * Spending money constants. - */ - const SPENDING_MONEY_AMOUNT = '500'; - const SPENDING_MONEY_RECIPIENT = 'sugardaddy@bunq.com'; - const SPENDING_MONEY_DESCRIPTION = 'sdk php test, thanks daddy <3'; - /** */ public static function setUpBeforeClass() { - static::createApiContext(); BunqContext::loadApiContext( - ApiContext::restore(self::FILE_PATH_CONTEXT_CONFIG) + static::createApiContext() ); } /** */ - protected static function createApiContext() + protected static function createApiContext(): ApiContext { - InstallationUtil::automaticInstall( - BunqEnumApiEnvironmentType::SANDBOX(), - self::FILE_PATH_CONTEXT_CONFIG + return InstallationUtil::automaticInstall( + BunqEnumApiEnvironmentType::SANDBOX() ); } @@ -114,43 +112,6 @@ protected function setUp() BunqContext::getUserContext()->refreshUserContext(); } - /** - */ - private function setCashRegister() - { - $attachmentUuid = AttachmentPublic::create( - FileUtil::getFileContents(__DIR__ . self::FILE_PATH_AVATAR), - [ - ApiClient::HEADER_CONTENT_TYPE => $this->getAttachmentContentType(), - ApiClient::HEADER_ATTACHMENT_DESCRIPTION => $this->getAttachmentDescription(), - ] - ); - $avatarUuid = Avatar::create($attachmentUuid->getValue()); - $cashRegisterId = CashRegister::create( - self::CASH_REGISTER_NAME, - self::CASH_REGISTER_STATUS, - $avatarUuid->getValue() - ); - - $this->cashRegister = CashRegister::get($cashRegisterId->getValue()); - } - - /** - * @return string - */ - protected function getAttachmentContentType(): string - { - return self::ATTACHMENT_CONTENT_TYPE; - } - - /** - * @return string - */ - protected function getAttachmentDescription(): string - { - return self::ATTACHMENT_DESCRIPTION; - } - /** */ private function setSecondMonetaryAccountBank() @@ -183,6 +144,14 @@ private function requestSpendingMoney() ); } + /** + * @return int + */ + protected function getSecondMonetaryAccountId(): int + { + return $this->secondMonetaryAccountBank->getId(); + } + /** * @return Pointer * @@ -236,14 +205,6 @@ protected function getPointerUserBravo(): Pointer ); } - /** - * @return int - */ - protected function getSecondMonetaryAccountId(): int - { - return $this->secondMonetaryAccountBank->getId(); - } - /** * @return int */ @@ -257,13 +218,40 @@ protected function getCashRegisterId(): int } /** - * @return bool */ - protected function isMonetaryAccountBalanceSufficient(): bool + private function setCashRegister() { - $balance = floatval(BunqContext::getUserContext()->getPrimaryMonetaryAccount()->getBalance()->getValue()); + $attachmentUuid = AttachmentPublic::create( + FileUtil::getFileContents(__DIR__ . self::FILE_PATH_AVATAR), + [ + ApiClient::HEADER_CONTENT_TYPE => $this->getAttachmentContentType(), + ApiClient::HEADER_ATTACHMENT_DESCRIPTION => $this->getAttachmentDescription(), + ] + ); + $avatarUuid = Avatar::create($attachmentUuid->getValue()); + $cashRegisterId = CashRegister::create( + self::CASH_REGISTER_NAME, + self::CASH_REGISTER_STATUS, + $avatarUuid->getValue() + ); - return $balance > self::MONETARY_ACCOUNT_BALANCE_THRESHOLD; + $this->cashRegister = CashRegister::get($cashRegisterId->getValue()); + } + + /** + * @return string + */ + protected function getAttachmentContentType(): string + { + return self::ATTACHMENT_CONTENT_TYPE; + } + + /** + * @return string + */ + protected function getAttachmentDescription(): string + { + return self::ATTACHMENT_DESCRIPTION; } /** @@ -277,4 +265,14 @@ protected function skipTestIfNeededDueToInsufficientBalance(): bool return true; } + + /** + * @return bool + */ + protected function isMonetaryAccountBalanceSufficient(): bool + { + $balance = floatval(BunqContext::getUserContext()->getPrimaryMonetaryAccount()->getBalance()->getValue()); + + return $balance > self::MONETARY_ACCOUNT_BALANCE_THRESHOLD; + } } diff --git a/tests/Model/Generated/Object/NotificationUrlTest.php b/tests/Model/Generated/Object/NotificationUrlTest.php index 8547fb60..da8d5cb4 100644 --- a/tests/Model/Generated/Object/NotificationUrlTest.php +++ b/tests/Model/Generated/Object/NotificationUrlTest.php @@ -55,7 +55,7 @@ class NotificationUrlTest extends BunqSdkTestBase /** * Model json paths constants. */ - const BASE_PATH_JSON_MODEL = __DIR__ . '/../../../Resource/NotificationUrlJsons'; + const BASE_PATH_JSON_MODEL = __DIR__ . '../../../Resource/NotificationUrlJsons'; const JSON_PATH_MUTATION_MODEL = self::BASE_PATH_JSON_MODEL . '/Mutation.json'; const JSON_PATH_BUNQ_ME_TAB_MODEL = self::BASE_PATH_JSON_MODEL . '/BunqMeTab.json'; const JSON_PATH_CHAT_MESSAGE_ANNOUNCEMENT_MODEL = self::BASE_PATH_JSON_MODEL . '/ChatMessageAnnouncement.json';