Passed
Push — master ( faa4ac...572ea2 )
by Vladislav
06:35 queued 04:06
created

TradeHistoryTest::testTradeHistoryEndpoint()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 24
Code Lines 20

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 2
eloc 20
c 1
b 0
f 0
nc 2
nop 0
dl 0
loc 24
rs 9.6
1
<?php
2
namespace Carpenstar\ByBitAPI\Spot\Trade\TradeHistory\Tests;
3
4
use Carpenstar\ByBitAPI\Core\Builders\ResponseDtoBuilder;
5
use Carpenstar\ByBitAPI\Core\Builders\ResponseHandlerBuilder;
6
use Carpenstar\ByBitAPI\Core\Builders\RestBuilder;
7
use Carpenstar\ByBitAPI\Core\Enums\EnumOutputMode;
8
use Carpenstar\ByBitAPI\Core\Objects\Collection\EntityCollection;
9
use Carpenstar\ByBitAPI\Core\Response\CurlResponseDto;
10
use Carpenstar\ByBitAPI\Core\Response\CurlResponseHandler;
11
use Carpenstar\ByBitAPI\Spot\Trade\TradeHistory\Overrides\TestTradeHistory;
12
use Carpenstar\ByBitAPI\Spot\Trade\TradeHistory\Request\TradeHistoryRequest;
13
use Carpenstar\ByBitAPI\Spot\Trade\TradeHistory\Response\TradeHistoryResponse;
14
use PHPUnit\Framework\TestCase;
15
16
class TradeHistoryTest extends TestCase
17
{
18
    static private string $tradeHistoryResponse = '{"retCode":0,"retMsg":"OK","result":{"list":[{"symbol":"BTCUSDT","id":"1210346127973428992","orderId":"1210073515485572864","tradeId":"2100000000001769786","orderPrice":"20500","orderQty":"0.02","execFee":"0.00002","feeTokenId":"BTC","creatTime":"1659020488738","isBuyer": "0","isMaker":"0", "matchOrderId":"1210346015893229312","makerRebate":"0","executionTime":"1659020502026","blockTradeId":""},{"symbol":"BTCUSDT","id":"1208702504949264128","orderId":"1208702504731160320","tradeId":"2100000000001753197","orderPrice":"20240","orderQty":"0.009881","execFee":"0.000009881","feeTokenId":"BTC","creatTime":"1658824566874","isBuyer":"0","isMaker":"1","matchOrderId":"1208677465155702529","makerRebate":"0","executionTime":"1658824566893","blockTradeId":""}]}, "retExtMap": {},"retExtInfo": {},"time":1659084254366}';
19
20
    public function testTradeHistoryDTOBuilder()
21
    {
22
        foreach (json_decode(self::$tradeHistoryResponse, true)['result']['list'] as $trade) {
23
            $dto = ResponseDtoBuilder::make(TradeHistoryResponse::class, $trade);
24
            $this->assertInstanceOf(TradeHistoryResponse::class, $dto);
25
        }
26
    }
27
28
    public function testTradeHistoryResponseHandlerBuilder()
29
    {
30
        $handler = ResponseHandlerBuilder::make(self::$tradeHistoryResponse, CurlResponseHandler::class, TradeHistoryResponse::class);
31
        $this->assertInstanceOf(EntityCollection::class, $handler->getBody());
32
        $this->assertGreaterThan(0, $handler->getBody()->count());
33
    }
34
35
    public function testTradeHistoryEndpoint()
36
    {
37
        $endpoint = RestBuilder::make(TestTradeHistory::class, (new TradeHistoryRequest()));
38
39
        $entityResponse = $endpoint->execute(EnumOutputMode::MODE_ENTITY, self::$tradeHistoryResponse);
40
        $this->assertInstanceOf(CurlResponseDto::class, $entityResponse);
41
        $body = $entityResponse->getBody();
42
        $this->assertInstanceOf(EntityCollection::class, $body);
43
44
        while (!empty($trade = $body->fetch())) {
45
            $this->assertIsString($trade->getSymbol());
46
            $this->assertIsInt($trade->getId());
47
            $this->assertIsInt($trade->getOrderId());
48
            $this->assertIsInt($trade->getTradeId());
49
            $this->assertIsFloat($trade->getOrderPrice());
50
            $this->assertIsFloat($trade->getOrderQty());
51
            $this->assertIsFloat($trade->getExecFee());
52
            $this->assertIsString($trade->getFeeTokenId());
53
            $this->assertInstanceOf(\DateTime::class, $trade->getCreatTime());
54
            $this->assertIsInt($trade->getIsBuyer());
55
            $this->assertIsInt($trade->getIsMaker());
56
            $this->assertIsInt($trade->getMatchOrderId());
57
            $this->assertIsInt($trade->getMakerRebate());
58
            $this->assertInstanceOf(\DateTime::class, $trade->getExecutionTime());
59
        }
60
    }
61
}