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

OrderHistoryTest::testOrderHistoryEndpoint()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 30
Code Lines 26

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 3
eloc 26
c 1
b 0
f 0
nc 3
nop 0
dl 0
loc 30
rs 9.504
1
<?php
2
namespace Carpenstar\ByBitAPI\Spot\Trade\OrderHistory\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\OrderHistory\Overrides\TestOrderHistory;
12
use Carpenstar\ByBitAPI\Spot\Trade\OrderHistory\Request\OrderHistoryRequest;
13
use Carpenstar\ByBitAPI\Spot\Trade\OrderHistory\Response\OrderHistoryResponse;
14
use PHPUnit\Framework\TestCase;
15
16
class OrderHistoryTest extends TestCase
17
{
18
    static private string $orderHistoryResponse = '{"retCode":0,"retMsg":"OK","result":{"list":[{"accountId":"533287","symbol":"BTCUSDT","orderLinkId":"spotx003","orderId":"1210856408331857664","orderPrice":"23800","orderQty":"0.02","execQty":"0","cummulativeQuoteQty":"0","avgPrice":"0","status":"REJECTED","timeInForce":"GTC","orderType":"LIMIT_MAKER","side":"BUY","stopPrice":"0.0","icebergQty":"0.0","createTime":1659081332185,"updateTime":1659081332225,"isWorking":"1","blockTradeId":"","cancelType":"UNKNOWN","smpGroup":0,"smpOrderId":"","smpType":"None"}]},"retExtInfo":{},"time":1659082630638}';
19
20
    public function testOrderHistoryDTOBuilder()
21
    {
22
        foreach (json_decode(self::$orderHistoryResponse, true)['result']['list'] as $order) {
23
            $dto = ResponseDtoBuilder::make(OrderHistoryResponse::class, $order);
24
            $this->assertInstanceOf(OrderHistoryResponse::class, $dto);
25
        }
26
    }
27
28
    public function testOrderHistoryResponseHandlerBuilder()
29
    {
30
        $handler = ResponseHandlerBuilder::make(self::$orderHistoryResponse, CurlResponseHandler::class, OrderHistoryResponse::class);
31
        $this->assertInstanceOf(EntityCollection::class, $handler->getBody());
32
        $this->assertGreaterThan(0, $handler->getBody()->count());
33
    }
34
35
    public function testOrderHistoryEndpoint()
36
    {
37
        $endpoint = RestBuilder::make(TestOrderHistory::class, (new OrderHistoryRequest()));
38
39
        $entityResponse = $endpoint->execute(EnumOutputMode::MODE_ENTITY, self::$orderHistoryResponse);
40
        $this->assertInstanceOf(CurlResponseDto::class, $entityResponse);
41
        $body = $entityResponse->getBody();
42
        $this->assertInstanceOf(EntityCollection::class, $body);
43
44
        while (!empty($order = $body->fetch())) {
45
            $this->assertIsInt($order->getAccountId());
46
            $this->assertIsString($order->getSymbol());
47
            $this->assertIsString($order->getOrderLinkId());
48
            $this->assertIsInt($order->getOrderId());
49
            $this->assertIsFloat($order->getOrderPrice());
50
            $this->assertIsFloat($order->getOrderQty());
51
            $this->assertIsFloat($order->getExecQty());
52
            $this->assertIsFloat($order->getCummulativeQuoteQty());
53
            $this->assertIsFloat($order->getAvgPrice());
54
            $this->assertIsString($order->getStatus());
55
            $this->assertIsString($order->getTimeInForce());
56
            $this->assertIsString($order->getOrderType());
57
            $this->assertIsString($order->getSide());
58
            $this->assertIsFloat($order->getStopPrice());
59
            $this->assertInstanceOf(\DateTime::class, $order->getCreateTime());
60
            $this->assertInstanceOf(\DateTime::class, $order->getUpdateTime());
61
            $this->assertIsInt($order->getIsWorking());
62
            $this->assertIsInt($order->getOrderCategory());
63
            if (!is_null($order->getTriggerPrice())) {
64
                $this->assertIsFloat($order->getTriggerPrice());
65
            }
66
        }
67
    }
68
}