Test Failed
Pull Request — master (#13)
by Vladislav
09:26 queued 01:13
created

testPartialSuccessResultEndpoint()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 49
Code Lines 32

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 32
nc 2
nop 0
dl 0
loc 49
rs 9.408
c 0
b 0
f 0
1
<?php
2
namespace Carpenstar\ByBitAPI\Spot\Trade\BatchCancelOrderById\Tests;
3
4
use Carpenstar\ByBitAPI\BybitAPI;
5
use Carpenstar\ByBitAPI\Core\Enums\EnumOrderType;
6
use Carpenstar\ByBitAPI\Core\Enums\EnumSide;
7
use Carpenstar\ByBitAPI\Core\Interfaces\IResponseInterface;
8
use Carpenstar\ByBitAPI\Core\Objects\AbstractResponse;
9
use Carpenstar\ByBitAPI\Core\Response\CurlResponseHandler;
10
use Carpenstar\ByBitAPI\Spot\Trade\BatchCancelOrderById\BatchCancelOrderById;
11
use Carpenstar\ByBitAPI\Spot\Trade\BatchCancelOrderById\Request\BatchCancelOrderByIdRequest;
12
use Carpenstar\ByBitAPI\Spot\Trade\BatchCancelOrderById\Response\BatchCancelOrderByIdResponse;
13
use Carpenstar\ByBitAPI\Spot\Trade\BatchCancelOrderById\Response\BatchCancelOrderByIdResponseItem;
14
use Carpenstar\ByBitAPI\Spot\Trade\PlaceOrder\PlaceOrder;
15
use Carpenstar\ByBitAPI\Spot\Trade\PlaceOrder\Request\PlaceOrderRequest;
16
use Carpenstar\ByBitAPI\Spot\Trade\PlaceOrder\Response\PlaceOrderResponse;
17
use PHPUnit\Framework\TestCase;
18
19
class BatchCancelOrderByIdTest extends TestCase
20
{
21
    /**
22
     * Тестирование заполнения структуры ответа
23
     * @return void
24
     */
25
    public function testBuildResponseData()
26
    {
27
        $json = '{"retCode":0,"retMsg":"OK","result":{"list":[]},"retExtInfo":{},"time":1659080815222}';
28
        $data = (new CurlResponseHandler())->build(json_decode($json, true), BatchCancelOrderByIdResponse::class);
29
30
        $this->assertEquals(0, $data->getReturnCode());
31
        $this->assertEquals('OK', $data->getReturnMessage());
32
        $this->assertInstanceOf(BatchCancelOrderByIdResponse::class, $data->getResult());
33
34
        $this->assertEmpty($data->getResult()->getErrorOrderList());
0 ignored issues
show
Bug introduced by
The method getErrorOrderList() does not exist on Carpenstar\ByBitAPI\Core\Objects\AbstractResponse. It seems like you code against a sub-type of Carpenstar\ByBitAPI\Core\Objects\AbstractResponse such as Carpenstar\ByBitAPI\Spot...CancelOrderByIdResponse. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

34
        $this->assertEmpty($data->getResult()->/** @scrutinizer ignore-call */ getErrorOrderList());
Loading history...
35
36
        $jsonPartialSuccess = '{"retCode":0,"retMsg":"","result":{"list":[{"orderId":"889208273689997824","code":"1139"}]},"time":1234567}';
37
        $data = (new CurlResponseHandler())->build(json_decode($jsonPartialSuccess, true), BatchCancelOrderByIdResponse::class);
38
39
        $this->assertEquals(0, $data->getReturnCode());
40
        $this->assertEmpty($data->getReturnMessage());
41
        $this->assertInstanceOf(BatchCancelOrderByIdResponse::class, $data->getResult());
42
        $this->assertEquals('889208273689997824', current($data->getResult()->getErrorOrderList())->getOrderId());
43
    }
44
45
    /**
46
     * Тестирование эндпоинта на корректное исполнение
47
     * @return void
48
     * @throws \Carpenstar\ByBitAPI\Core\Exceptions\SDKException
49
     */
50
    public function testSuccessResultEndpoint()
51
    {
52
        $bybit = (new BybitAPI())->setCredentials('https://api-testnet.bybit.com', 'fL02oi5qo8i2jDxlum', 'Ne1EE35XTprIWrId9vGEAc1ZYJTmodA4qFzZ');
53
54
        $params = (new PlaceOrderRequest())
55
            ->setSide(EnumSide::BUY)
56
            ->setOrderType(EnumOrderType::LIMIT)
57
            ->setOrderPrice(3000)
58
            ->setSymbol("ETHUSDT")
59
            ->setOrderQty(1);
60
61
62
        $idsList = [];
63
        for ($i = 0; $i < 3; $i++) {
64
            $placeOrderEndpoint = $bybit->privateEndpoint(PlaceOrder::class, $params)->execute();
65
66
            /** @var PlaceOrderResponse $orderInfo */
67
            $orderInfo = $placeOrderEndpoint->getResult();
68
69
            $this->assertNotEmpty($orderInfo->getOrderId());
70
            $this->assertNotEmpty($orderInfo->getOrderLinkId());
71
            $this->assertEquals('ETHUSDT', $orderInfo->getSymbol());
72
            $this->assertInstanceOf(\DateTime::class, $orderInfo->getCreateTime());
73
            $this->assertTrue($orderInfo->getOrderPrice() == 3000);
74
            $this->assertTrue($orderInfo->getOrderQty() == 1);
75
            $this->assertEquals(strtoupper(EnumOrderType::LIMIT), $orderInfo->getOrderType());
76
            $this->assertEquals(strtoupper(EnumSide::BUY), $orderInfo->getSide());
77
            $this->assertEquals('NEW', $orderInfo->getStatus());
78
            $this->assertEquals('GTC', $orderInfo->getTimeInForce());
79
            $this->assertNotEmpty($orderInfo->getAccountId());
80
            $this->assertEmpty($orderInfo->getTriggerPrice());
81
82
            $idsList[] = $orderInfo->getOrderId();
83
        }
84
85
        $params = (new BatchCancelOrderByIdRequest())->setOrderIds(implode(',', $idsList));
86
        $batchCancelEndpoint = $bybit->privateEndpoint(BatchCancelOrderById::class, $params)->execute();
87
        $canceledInfo = $batchCancelEndpoint->getResult();
88
89
        $this->assertEquals('OK', $batchCancelEndpoint->getReturnMessage());
90
        $this->assertEmpty($canceledInfo->getErrorOrderList()); // Если все ордеры удалены, то будет возвращен пустой массив
91
    }
92
93
    /**
94
     * Тестирование эндпоинта на корректное исполнение
95
     * @return void
96
     * @throws \Carpenstar\ByBitAPI\Core\Exceptions\SDKException
97
     */
98
    public function testPartialSuccessResultEndpoint()
99
    {
100
        $bybit = (new BybitAPI())->setCredentials('https://api-testnet.bybit.com', 'fL02oi5qo8i2jDxlum', 'Ne1EE35XTprIWrId9vGEAc1ZYJTmodA4qFzZ');
101
102
        $params = (new PlaceOrderRequest())
103
            ->setSide(EnumSide::BUY)
104
            ->setOrderType(EnumOrderType::LIMIT)
105
            ->setOrderPrice(3000)
106
            ->setSymbol("ETHUSDT")
107
            ->setOrderQty(1);
108
109
110
        $idsList = [];
111
        for ($i = 0; $i < 2; $i++) {
112
            $placeOrderEndpoint = (new BybitAPI())->privateEndpoint(PlaceOrder::class, $params)->execute();
113
114
            /** @var PlaceOrderResponse $orderInfo */
115
            $orderInfo = $placeOrderEndpoint->getResult();
116
117
            $this->assertNotEmpty($orderInfo->getOrderId());
118
            $this->assertNotEmpty($orderInfo->getOrderLinkId());
119
            $this->assertEquals('ETHUSDT', $orderInfo->getSymbol());
120
            $this->assertInstanceOf(\DateTime::class, $orderInfo->getCreateTime());
121
            $this->assertTrue($orderInfo->getOrderPrice() == 3000);
122
            $this->assertTrue($orderInfo->getOrderQty() == 1);
123
            $this->assertEquals(strtoupper(EnumOrderType::LIMIT), $orderInfo->getOrderType());
124
            $this->assertEquals(strtoupper(EnumSide::BUY), $orderInfo->getSide());
125
            $this->assertEquals('NEW', $orderInfo->getStatus());
126
            $this->assertEquals('GTC', $orderInfo->getTimeInForce());
127
            $this->assertNotEmpty($orderInfo->getAccountId());
128
            $this->assertEmpty($orderInfo->getTriggerPrice());
129
130
            $idsList[] = $orderInfo->getOrderId();
131
        }
132
133
        $fakeId = rand(0,100);
134
        $idsList[] = $fakeId;
135
136
        $params = (new BatchCancelOrderByIdRequest())->setOrderIds(implode(',', $idsList));
137
138
        $batchCancelEndpoint = $bybit->privateEndpoint(BatchCancelOrderById::class, $params)->execute();
139
140
        $canceledInfo = $batchCancelEndpoint->getResult();
141
142
        $this->assertEquals('OK', $batchCancelEndpoint->getReturnMessage());
143
144
        // Если все не все ордеры удалены, то будет возвращен массив с неудаленными заказами
145
        $this->assertNotEmpty($canceledInfo->getErrorOrderList());
146
        $this->assertEquals($fakeId, current($canceledInfo->getErrorOrderList())->getOrderId());
147
    }
148
}