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

PlaceOrderTest::testPlaceOrderDTOBuilder()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 28
Code Lines 19

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 19
c 1
b 0
f 0
nc 1
nop 0
dl 0
loc 28
rs 9.6333
1
<?php
2
namespace Carpenstar\ByBitAPI\Spot\Trade\PlaceOrder\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\EnumOrderType;
8
use Carpenstar\ByBitAPI\Core\Enums\EnumOutputMode;
9
use Carpenstar\ByBitAPI\Core\Enums\EnumSide;
10
use Carpenstar\ByBitAPI\Core\Objects\Collection\EntityCollection;
11
use Carpenstar\ByBitAPI\Core\Response\CurlResponseDto;
12
use Carpenstar\ByBitAPI\Core\Response\CurlResponseHandler;
13
use Carpenstar\ByBitAPI\Spot\Trade\PlaceOrder\Overrides\TestPlaceOrder;
14
use Carpenstar\ByBitAPI\Spot\Trade\PlaceOrder\Request\PlaceOrderRequest;
15
use Carpenstar\ByBitAPI\Spot\Trade\PlaceOrder\Response\PlaceOrderResponse;
16
use PHPUnit\Framework\TestCase;
17
18
class PlaceOrderTest extends TestCase
19
{
20
    static private string $placeOrderResponse = '{"retCode":0,"retMsg":"OK","result":{"orderId":"1477137337600322304","orderLinkId":"64c7ef2bdf040","symbol":"BTCUSDT","createTime":"1690824492584","orderPrice":"1000","orderQty":"0.001","orderType":"LIMIT","side":"BUY","status":"NEW","timeInForce":"GTC","accountId":"1111837","execQty":"0","orderCategory":0,"smpType":"None"},"retExtInfo":{},"time":1690824492593}';
21
22
    public function testPlaceOrderDTOBuilder()
23
    {
24
        $dto = ResponseDtoBuilder::make(PlaceOrderResponse::class, json_decode(self::$placeOrderResponse, true)['result']);
25
        $this->assertInstanceOf(PlaceOrderResponse::class, $dto);
26
        $this->assertIsInt($dto->getOrderId());
27
        $this->assertIsString($dto->getOrderLinkId());
28
        $this->assertIsString($dto->getSymbol());
29
        $this->assertInstanceOf(\DateTime::class, $dto->getCreateTime());
30
31
        $this->assertIsFloat($dto->getOrderPrice());
32
        $this->assertNotEmpty($dto->getOrderPrice());
33
34
        $this->assertIsFloat($dto->getOrderQty());
35
        $this->assertNotEmpty($dto->getOrderQty());
36
37
        $this->assertIsString($dto->getSide());
38
        $this->assertNotEmpty($dto->getSide());
39
40
        $this->assertIsString($dto->getStatus());
41
        $this->assertNotEmpty($dto->getStatus());
42
43
        $this->assertIsString($dto->getTimeInForce());
44
        $this->assertNotEmpty($dto->getTimeInForce());
45
46
        $this->assertIsString($dto->getAccountId());
47
        $this->assertNotEmpty($dto->getAccountId());
48
49
        $this->assertIsInt($dto->getOrderCategory());
50
    }
51
52
    public function testPlaceOrderResponseHandlerBuilder()
53
    {
54
        $handler = ResponseHandlerBuilder::make(self::$placeOrderResponse, CurlResponseHandler::class, PlaceOrderResponse::class);
55
        $this->assertInstanceOf(EntityCollection::class, $handler->getBody());
56
        $this->assertGreaterThan(0, $handler->getBody()->count());
57
    }
58
59
    public function testPlaceOrderEndpoint()
60
    {
61
        $endpoint = RestBuilder::make(TestPlaceOrder::class, (new PlaceOrderRequest())
62
            ->setSymbol("BTCUSDT")
63
            ->setOrderQty(0.001)
64
            ->setSide(EnumSide::BUY)
65
            ->setOrderType(EnumOrderType::MARKET)
66
        );
67
68
        $entityResponse = $endpoint->execute(EnumOutputMode::MODE_ENTITY, self::$placeOrderResponse);
69
        $this->assertInstanceOf(CurlResponseDto::class, $entityResponse);
70
        $body = $entityResponse->getBody();
71
        $this->assertInstanceOf(EntityCollection::class, $body);
72
73
        foreach ($body->fetch() as $order) {
74
            $dto = ResponseDtoBuilder::make(PlaceOrderResponse::class, $order);
75
            $this->assertInstanceOf(PlaceOrderResponse::class, $dto);
76
            $this->assertIsInt($dto->getOrderId());
77
            $this->assertIsString($dto->getOrderLinkId());
78
            $this->assertIsString($dto->getSymbol());
79
            $this->assertInstanceOf(\DateTime::class, $dto->getCreateTime());
80
81
            $this->assertIsFloat($dto->getOrderPrice());
82
            $this->assertNotEmpty($dto->getOrderPrice());
83
84
            $this->assertIsFloat($dto->getOrderQty());
85
            $this->assertNotEmpty($dto->getOrderQty());
86
87
            $this->assertIsString($dto->getSide());
88
            $this->assertNotEmpty($dto->getSide());
89
90
            $this->assertIsString($dto->getStatus());
91
            $this->assertNotEmpty($dto->getStatus());
92
93
            $this->assertIsString($dto->getTimeInForce());
94
            $this->assertNotEmpty($dto->getTimeInForce());
95
96
            $this->assertIsString($dto->getAccountId());
97
            $this->assertNotEmpty($dto->getAccountId());
98
99
            $this->assertIsInt($dto->getOrderCategory());
100
        }
101
    }
102
}