diff --git a/tests/CryptoEndpointTest.php b/tests/CryptoEndpointTest.php index b33d3d1..1db06e3 100644 --- a/tests/CryptoEndpointTest.php +++ b/tests/CryptoEndpointTest.php @@ -48,12 +48,9 @@ expect($response->json('result.0'))->toBeArray(); expect($response->json('result.0.currency'))->toBe('BTC'); - expect($response->json('result.0.address'))->toBe('3BtxdKw6XSbneNvmJTLVHS9XfNYM7VAe8k'); expect($response->json('result.0.tag'))->toBe(0); expect($response->json('result.0.time'))->toBe(1570893867); - expect($response->json('pagination'))->toBeArray(); - expect($response->json('pagination.page'))->toBe(1); expect($response->json('pagination.last'))->toBe(1); }); @@ -88,11 +85,155 @@ expect($response->getStatusCode())->toBe(200); expect($response->json('result'))->toBeArray(); - expect($response->json('result.txid'))->toBe('BTCWD0000012345'); - expect($response->json('result.adr'))->toBe('4asyjKw6XScneNvhJTLVHS9XfNYM7VBf8x'); expect($response->json('result.mem'))->toBe(''); expect($response->json('result.cur'))->toBe('BTC'); expect($response->json('result.amt'))->toBe(0.1); expect($response->json('result.fee'))->toBe(0.0002); expect($response->json('result.ts'))->toBe(1569999999); }); + +it('can call internalWithdrawal success', function () { + $psrClient = MockHttpClient::make() + ->addSequence(fn () => MockHttpClient::responseServerTimestamp()) + ->addSequence(fn () => MockHttpClient::response(200, [ + 'error' => 0, + 'result' => [ + 'txn' => 'BTCWD0000012345', + 'adr' => '4asyjKw6XScneNvhJTLVHS9XfNYM7VBf8x', + 'mem' => '', + 'cur' => 'BTC', + 'amt' => 0.1, + 'fee' => 0.0002, + 'ts' => 1569999999, + ], + ])); + + $client = ClientBuilder::create() + ->setCredentials('test', 'secret') + ->setHttpClient($psrClient) + ->build(); + + $response = $client->crypto()->internalWithdrawal([ + 'sym' => 'BTC', + 'amt' => 0.1, + 'adr' => '4asyjKw6XScneNvhJTLVHS9XfNYM7VBf8x', + 'mem' => '', + ])->throw(); + + expect($response->getStatusCode())->toBe(200); + expect($response->json('result'))->toBeArray(); + + expect($response->json('result.txn'))->toBe('BTCWD0000012345'); + expect($response->json('result.mem'))->toBe(''); + expect($response->json('result.cur'))->toBe('BTC'); + expect($response->json('result.fee'))->toBe(0.0002); + expect($response->json('result.ts'))->toBe(1569999999); +}); + +it('can call depositHistory success', function () { + $psrClient = MockHttpClient::make() + ->addSequence(fn () => MockHttpClient::responseServerTimestamp()) + ->addSequence(fn () => MockHttpClient::response(200, [ + 'error' => 0, + 'result' => [ + [ + 'hash' => 'XRPWD0000100276', + 'currency' => 'XRP', + 'amount' => 5.75111474, + 'from_address' => 'sender address', + 'to_address' => 'recipient address', + 'confirmations' => 1, + 'status' => 'complete', + 'time' => 1570893867, + ], + ], + 'pagination' => [ + 'page' => 1, + 'last' => 1, + ], + ])); + + $client = ClientBuilder::create() + ->setCredentials('test', 'secret') + ->setHttpClient($psrClient) + ->build(); + + $response = $client->crypto()->depositHistory([ + 'p' => 1, + 'lmt' => 1, + ])->throw(); + + expect($response->getStatusCode())->toBe(200); + expect($response->json('result'))->toBeArray(); + expect($response->json('result.0'))->toBeArray(); + + expect($response->json('result.0.hash'))->toBe('XRPWD0000100276'); + expect($response->json('result.0.time'))->toBe(1570893867); + + expect($response->json('pagination.last'))->toBe(1); +}); + +it('can call withdrawalHistory success', function () { + $psrClient = MockHttpClient::make() + ->addSequence(fn () => MockHttpClient::responseServerTimestamp()) + ->addSequence(fn () => MockHttpClient::response(200, [ + 'error' => 0, + 'result' => [ + [ + 'txn_id' => 'XRPWD0000100276', + 'hash' => 'send_internal', + 'currency' => 'XRP', + 'amount' => 5.75111474, + 'fee' => 0.01, + 'address' => 'rpXTzCuXtjiPDFysxq8uNmtZBe9Xo97JbW', + 'status' => 'complete', + 'time' => 1570893493, + ], + ], + 'pagination' => [ + 'page' => 1, + 'last' => 1, + ], + ])); + + $client = ClientBuilder::create() + ->setCredentials('test', 'secret') + ->setHttpClient($psrClient) + ->build(); + + $response = $client->crypto()->withdrawalHistory([ + 'p' => 1, + 'lmt' => 1, + ])->throw(); + + expect($response->getStatusCode())->toBe(200); + expect($response->json('result'))->toBeArray(); + expect($response->json('result.0'))->toBeArray(); + + expect($response->json('result.0.txn_id'))->toBe('XRPWD0000100276'); +}); + +it('can call generateAddress success', function () { + $psrClient = MockHttpClient::make() + ->addSequence(fn () => MockHttpClient::responseServerTimestamp()) + ->addSequence(fn () => MockHttpClient::response(200, [ + 'error' => 0, + 'result' => [ + 'currency' => 'ETH', + 'address' => '0x520165471daa570ab632dd504c6af257bd36edfb', + 'memo' => '', + ], + ])); + + $client = ClientBuilder::create() + ->setCredentials('test', 'secret') + ->setHttpClient($psrClient) + ->build(); + + $response = $client->crypto()->generateAddress('THB_ETH')->throw(); + + expect($response->getStatusCode())->toBe(200); + expect($response->json('result'))->toBeArray(); + + expect($response->json('result.currency'))->toBe('ETH'); +}); diff --git a/tests/MarketEndpointTest.php b/tests/MarketEndpointTest.php index 7044d8a..c929463 100644 --- a/tests/MarketEndpointTest.php +++ b/tests/MarketEndpointTest.php @@ -38,10 +38,341 @@ $response = $market->balances(); expect($response)->toBeInstanceOf(ResponseInterface::class); - expect($response->json('result'))->toBe([ - 'THB' => [ - 'available' => 1000, - 'reserved' => 0, - ], + expect($response->json('result.THB.available'))->toBe(1000); +}); + +it('should get symbols success', function () { + $psrClient = MockHttpClient::make() + ->addSequence(fn ($client) => $client->createResponse(200, json_encode([ + 'error' => 0, + 'result' => [ + 'THB_BTC' => [ + 'id' => 1, + 'last' => 1000, + 'lowestAsk' => 1000, + 'highestBid' => 1000, + 'percentChange' => 0, + 'baseVolume' => 0, + 'quoteVolume' => 0, + 'isFrozen' => 0, + 'high24hr' => 0, + 'low24hr' => 0, + ], + ], + ]))); + + $client = ClientBuilder::create() + ->setCredentials('test', 'secret') + ->setHttpClient($psrClient) + ->build(); + + $market = $client->market(); + + $response = $market->symbols(); + + expect($response)->toBeInstanceOf(ResponseInterface::class); + expect($response->json('result.THB_BTC.id'))->toBe(1); +}); + +it('should get ticker success', function () { + $psrClient = MockHttpClient::make() + ->addSequence(fn ($client) => $client->createResponse(200, json_encode([ + 'error' => 0, + 'result' => [ + 'THB_BTC' => [ + 'id' => 1, + 'last' => 1000, + 'lowestAsk' => 1000, + 'highestBid' => 1000, + 'percentChange' => 0, + 'baseVolume' => 0, + 'quoteVolume' => 0, + 'isFrozen' => 0, + 'high24hr' => 0, + 'low24hr' => 0, + ], + ], + ]))); + + $client = ClientBuilder::create() + ->setCredentials('test', 'secret') + ->setHttpClient($psrClient) + ->build(); + + $market = $client->market(); + + $response = $market->ticker(); + + expect($response)->toBeInstanceOf(ResponseInterface::class); + expect($response->json('result.THB_BTC.id'))->toBe(1); +}); + +it('should get trades success', function () { + $psrClient = MockHttpClient::make() + ->addSequence(fn ($client) => $client->createResponse(200, json_encode([ + 'error' => 0, + 'result' => [ + [ + 1529516287, + 10000.00, + 0.09975000, + 'BUY', + ], + ], + ]))); + + $client = ClientBuilder::create() + ->setCredentials('test', 'secret') + ->setHttpClient($psrClient) + ->build(); + + $market = $client->market(); + + $response = $market->trades([ + 'sym' => 'THB_BTC', + ]); + + expect($response)->toBeInstanceOf(ResponseInterface::class); + expect($response->json('result.0.0'))->toBe(1529516287); + expect($response->json('result.0.2'))->toBe(0.09975000); +}); + +it('should get bids success', function () { + $psrClient = MockHttpClient::make() + ->addSequence(fn ($client) => $client->createResponse(200, json_encode([ + 'error' => 0, + 'result' => [ + [ + '1', // order id + 1529453033, // timestamp + 997.50, // volume + 10000.00, // rate + 0.09975000, // amount + ], + ], + ]))); + + $client = ClientBuilder::create() + ->setCredentials('test', 'secret') + ->setHttpClient($psrClient) + ->build(); + + $market = $client->market(); + + $response = $market->bids([ + 'sym' => 'THB_BTC', + ]); + + expect($response)->toBeInstanceOf(ResponseInterface::class); + expect($response->json('result.0.0'))->toBe('1'); + expect($response->json('result.0.2'))->toBe(997.50); +}); + +it('should get asks success', function () { + $psrClient = MockHttpClient::make() + ->addSequence(fn ($client) => $client->createResponse(200, json_encode([ + 'error' => 0, + 'result' => [ + [ + '1', // order id + 1529453033, // timestamp + 997.50, // volume + 10000.00, // rate + 0.09975000, // amount + ], + ], + ]))); + + $client = ClientBuilder::create() + ->setCredentials('test', 'secret') + ->setHttpClient($psrClient) + ->build(); + + $market = $client->market(); + + $response = $market->asks([ + 'sym' => 'THB_BTC', ]); + + expect($response)->toBeInstanceOf(ResponseInterface::class); + expect($response->json('result.0.0'))->toBe('1'); + expect($response->json('result.0.2'))->toBe(997.50); +}); + +it('should get books success', function () { + $psrClient = MockHttpClient::make() + ->addSequence(fn ($client) => $client->createResponse(200, json_encode([ + 'error' => 0, + 'result' => [ + 'bids' => [ + [ + '1', // order id + 1529453033, // timestamp + 997.50, // volume + 10000.00, // rate + 0.09975000, // amount + ], + ], + 'asks' => [ + [ + '1', // order id + 1529453033, // timestamp + 997.50, // volume + 10000.00, // rate + 0.09975000, // amount + ], + ], + ], + ]))); + + $client = ClientBuilder::create() + ->setCredentials('test', 'secret') + ->setHttpClient($psrClient) + ->build(); + + $market = $client->market(); + + $response = $market->books([ + 'sym' => 'THB_BTC', + ]); + + expect($response)->toBeInstanceOf(ResponseInterface::class); + expect($response->json('result.bids.0.0'))->toBe('1'); + expect($response->json('result.bids.0.2'))->toBe(997.50); + expect($response->json('result.asks.0.0'))->toBe('1'); + expect($response->json('result.asks.0.2'))->toBe(997.50); +}); + +it('should get wallet success', function () { + $psrClient = MockHttpClient::make() + ->addSequence(fn ($client) => MockHttpClient::responseServerTimestamp()) + ->addSequence(fn ($client) => $client->createResponse(200, json_encode([ + 'error' => 0, + 'result' => [ + 'THB' => [ + 'available' => 1000, + 'reserved' => 0, + ], + 'BTC' => [ + 'available' => 0.09975000, + 'reserved' => 0, + ], + ], + ]))); + + $client = ClientBuilder::create() + ->setCredentials('test', 'secret') + ->setHttpClient($psrClient) + ->build(); + + $market = $client->market(); + + $response = $market->wallet(); + + expect($response)->toBeInstanceOf(ResponseInterface::class); + expect($response->json('result.THB.available'))->toBe(1000); + expect($response->json('result.BTC.available'))->toBe(0.09975000); +}); + +it('should call placeBid success', function () { + $psrClient = MockHttpClient::make() + ->addSequence(fn ($client) => MockHttpClient::responseServerTimestamp()) + ->addSequence(fn ($client) => $client->createResponse(200, json_encode([ + 'error' => 0, + 'result' => [ + 'id' => '1', + 'hash' => 'fwQ6dnQWQPs4cbatF5Am2xCDP1J', + 'typ' => 'limit', + 'amt' => 1000, + 'rat' => 10000, + 'fee' => 2.5, + 'cre' => 2.5, + 'rec' => 0.06666666, + 'ts' => 1533834547, + 'ci' => 'input_client_id', + ], + ]))); + + $client = ClientBuilder::create() + ->setCredentials('test', 'secret') + ->setHttpClient($psrClient) + ->build(); + + $market = $client->market(); + + $response = $market->placeBid([ + 'sym' => 'THB_BTC', + 'amt' => 1000, + 'rat' => 10000, + 'typ' => 'limit', + 'client_id' => 'xxxx', + ]); + + expect($response)->toBeInstanceOf(ResponseInterface::class); + expect($response->json('result.id'))->toBe('1'); + expect($response->json('result.hash'))->toBe('fwQ6dnQWQPs4cbatF5Am2xCDP1J'); +}); + +it('should call placeAsk success', function () { + $psrClient = MockHttpClient::make() + ->addSequence(fn ($client) => MockHttpClient::responseServerTimestamp()) + ->addSequence(fn ($client) => $client->createResponse(200, json_encode([ + 'error' => 0, + 'result' => [ + 'id' => '1', + 'hash' => 'fwQ6dnQWQPs4cbatF5Am2xCDP1J', + 'typ' => 'limit', + 'amt' => 1000, + 'rat' => 10000, + 'fee' => 2.5, + 'cre' => 2.5, + 'rec' => 0.06666666, + 'ts' => 1533834547, + 'ci' => 'input_client_id', + ], + ]))); + + $client = ClientBuilder::create() + ->setCredentials('test', 'secret') + ->setHttpClient($psrClient) + ->build(); + + $market = $client->market(); + + $response = $market->placeAsk([ + 'sym' => 'THB_BTC', + 'amt' => 1000, + 'rat' => 10000, + 'typ' => 'limit', + 'client_id' => 'xxxx', + ]); + + expect($response)->toBeInstanceOf(ResponseInterface::class); + expect($response->json('result.id'))->toBe('1'); + expect($response->json('result.hash'))->toBe('fwQ6dnQWQPs4cbatF5Am2xCDP1J'); +}); + +it('should call cancelOrder success', function () { + $psrClient = MockHttpClient::make() + ->addSequence(fn ($client) => MockHttpClient::responseServerTimestamp()) + ->addSequence(fn ($client) => $client->createResponse(200, json_encode([ + 'error' => 0, + ]))); + + $client = ClientBuilder::create() + ->setCredentials('test', 'secret') + ->setHttpClient($psrClient) + ->build(); + + $market = $client->market(); + + $response = $market->cancelOrder([ + 'sym' => 'THB_BTC', + 'id' => '1', + 'hash' => 'fwQ6dnQWQPs4cbatF5Am2xCDP1J', + 'sd' => 'buy', + ]); + + expect($response)->toBeInstanceOf(ResponseInterface::class); + expect($response->json('error'))->toBe(0); });