Passed
Push — master ( f32712...07732c )
by Vladislav
04:33 queued 01:39
created

PlaceOrderTest   A

Complexity

Total Complexity 3

Size/Duplication

Total Lines 43
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 24
c 1
b 0
f 0
dl 0
loc 43
rs 10
wmc 3

3 Methods

Rating   Name   Duplication   Size   Complexity  
A testPlaceOrderDTOBuilder() 0 6 1
A testPlaceOrderEndpoint() 0 20 1
A testPlaceOrderResponseHandlerBuilder() 0 5 1
1
<?php
2
namespace Carpenstar\ByBitAPI\Derivatives\Contract\Order\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\Enums\EnumTimeInForce;
11
use Carpenstar\ByBitAPI\Core\Objects\Collection\EntityCollection;
12
use Carpenstar\ByBitAPI\Core\Response\CurlResponseDto;
13
use Carpenstar\ByBitAPI\Core\Response\CurlResponseHandler;
14
use Carpenstar\ByBitAPI\Derivatives\Contract\Order\PlaceOrder\Overrides\TestPlaceOrder;
15
use Carpenstar\ByBitAPI\Derivatives\Contract\Order\PlaceOrder\Request\PlaceOrderRequest;
16
use Carpenstar\ByBitAPI\Derivatives\Contract\Order\PlaceOrder\Response\PlaceOrderResponse;
17
use PHPUnit\Framework\TestCase;
18
19
class PlaceOrderTest extends TestCase
20
{
21
    /**
22
     * Derivatives - Contract
23
     * Place Order
24
     */
25
    static private string $placeOrderResponse = '{"retCode":0,"retMsg":"OK","result":{"orderId":"dab5d5f2-c425-4620-8699-2daa56f55f7a","orderLinkId":"custom-something-order-id"},"retExtInfo":{},"time":1690993829923}';
26
27
    public function testPlaceOrderDTOBuilder()
28
    {
29
        $dto = ResponseDtoBuilder::make(PlaceOrderResponse::class, json_decode(self::$placeOrderResponse, true)['result']);
30
        $this->assertInstanceOf(PlaceOrderResponse::class, $dto);
31
        $this->assertIsString($dto->getOrderLinkId());
32
        $this->assertIsString($dto->getOrderId());
33
    }
34
35
    public function testPlaceOrderResponseHandlerBuilder()
36
    {
37
        $handler = ResponseHandlerBuilder::make(self::$placeOrderResponse, CurlResponseHandler::class, PlaceOrderResponse::class);
38
        $this->assertInstanceOf(EntityCollection::class, $handler->getBody());
39
        $this->assertGreaterThan(0, $handler->getBody()->count());
40
    }
41
42
    public function testPlaceOrderEndpoint()
43
    {
44
        $endpoint = RestBuilder::make(TestPlaceOrder::class,
45
            (new PlaceOrderRequest())
46
                ->setSymbol("BTCUSDT")
47
                ->setSide(EnumSide::BUY)
48
                ->setOrderType(EnumOrderType::MARKET)
49
                ->setQty(1)
50
                ->setTimeInForce(EnumTimeInForce::GOOD_TILL_CANCELED_FULL)
51
        );
52
53
        $entityResponse = $endpoint->execute(EnumOutputMode::MODE_ENTITY, self::$placeOrderResponse);
54
        $this->assertInstanceOf(CurlResponseDto::class, $entityResponse);
55
        $body = $entityResponse->getBody();
56
        $this->assertInstanceOf(EntityCollection::class, $body);
57
        $dto = $body->fetch();
58
59
        $this->assertInstanceOf(PlaceOrderResponse::class, $dto);
60
        $this->assertIsString($dto->getOrderLinkId());
61
        $this->assertIsString($dto->getOrderId());
62
    }
63
}