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

OpenOrdersTest::testOpenOrdersDTOBuilder()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 23
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 23
rs 9.6
1
<?php
2
namespace Carpenstar\ByBitAPI\Spot\Trade\OpenOrders\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\OpenOrders\Overrides\TestOpenOrders;
12
use Carpenstar\ByBitAPI\Spot\Trade\OpenOrders\Request\OpenOrdersRequest;
13
use Carpenstar\ByBitAPI\Spot\Trade\OpenOrders\Response\OpenOrdersResponse;
14
use PHPUnit\Framework\TestCase;
15
16
class OpenOrdersTest extends TestCase
17
{
18
    static private string $openOrdersResponse = '{"retCode":0,"retMsg":"OK","result":{"list":[{"accountId":"533287","symbol":"BTCUSDT","orderLinkId":"spotx004","orderId":"1210858291884732160","orderPrice":"23500","orderQty":"0.02","execQty":"0","cummulativeQuoteQty":"0","avgPrice":"0","status":"NEW","timeInForce":"GTC","orderType":"LIMIT_MAKER","side":"SELL","stopPrice":"0.0","icebergQty":"0.0","createTime":1659081556722,"updateTime":1659081556740,"isWorking":"1","blockTradeId":"","cancelType":"UNKNOWN","smpGroup":0,"smpOrderId":"","smpType":"None"}]},"retExtInfo": {},"time": 1659081570356}';
19
20
    public function testOpenOrdersDTOBuilder()
21
    {
22
        foreach (json_decode(self::$openOrdersResponse, true)['result']['list'] as $order) {
23
            $dto = ResponseDtoBuilder::make(OpenOrdersResponse::class, $order);
24
            $this->assertInstanceOf(OpenOrdersResponse::class, $dto);
25
26
            $this->assertNotNull($dto->getSide());
27
            $this->assertNotNull($dto->getAccountId());
28
            $this->assertNotNull($dto->getSymbol());
29
            $this->assertNotNull($dto->getOrderLinkId());
30
            $this->assertNotNull($dto->getOrderId());
31
            $this->assertNotNull($dto->getOrderPrice());
32
            $this->assertNotNull($dto->getOrderQty());
33
            $this->assertNotNull($dto->getExecQty());
34
            $this->assertNotNull($dto->getAvgPrice());
35
            $this->assertNotNull($dto->getCummulativeQuoteQty());
36
            $this->assertNotNull($dto->getStatus());
37
            $this->assertNotNull($dto->getTimeInForce());
38
            $this->assertNotNull($dto->getOrderType());
39
            $this->assertNotNull($dto->getStopPrice());
40
            $this->assertNotNull($dto->getCreateTime());
41
            $this->assertNotNull($dto->getUpdateTime());
42
            $this->assertNotNull($dto->getIsWorking());
43
        }
44
    }
45
46
    public function testOpenOrdersResponseHandlerBuilder()
47
    {
48
        $handler = ResponseHandlerBuilder::make(self::$openOrdersResponse, CurlResponseHandler::class, OpenOrdersResponse::class);
49
        $this->assertInstanceOf(EntityCollection::class, $handler->getBody());
50
        $this->assertGreaterThan(0, $handler->getBody()->count());
51
    }
52
53
    public function testOpenOrdersEndpoint()
54
    {
55
        $endpoint = RestBuilder::make(TestOpenOrders::class, (new OpenOrdersRequest()));
56
57
        $entityResponse = $endpoint->execute(EnumOutputMode::MODE_ENTITY, self::$openOrdersResponse);
58
        $this->assertInstanceOf(CurlResponseDto::class, $entityResponse);
59
        $body = $entityResponse->getBody();
60
        $this->assertInstanceOf(EntityCollection::class, $body);
61
62
        while (!empty($order = $body->fetch())) {
63
            $this->assertIsInt($order->getAccountId());
64
            $this->assertIsString($order->getSymbol());
65
            $this->assertIsString($order->getOrderLinkId());
66
            $this->assertIsInt($order->getOrderId());
67
            $this->assertIsFloat($order->getOrderPrice());
68
            $this->assertIsFloat($order->getOrderQty());
69
            $this->assertIsFloat($order->getExecQty());
70
            $this->assertIsFloat($order->getCummulativeQuoteQty());
71
            $this->assertIsFloat($order->getAvgPrice());
72
            $this->assertIsString($order->getStatus());
73
            $this->assertIsString($order->getTimeInForce());
74
            $this->assertIsString($order->getOrderType());
75
            $this->assertIsString($order->getSide());
76
            $this->assertIsFloat($order->getStopPrice());
77
            $this->assertInstanceOf(\DateTime::class, $order->getCreateTime());
78
            $this->assertInstanceOf(\DateTime::class, $order->getUpdateTime());
79
            $this->assertIsInt($order->getIsWorking());
80
            $this->assertIsInt($order->getOrderCategory());
81
            if (!is_null($order->getTriggerPrice())) {
82
                $this->assertIsFloat($order->getTriggerPrice());
83
            }
84
        }
85
    }
86
}