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

OrderBookTest   A

Complexity

Total Complexity 7

Size/Duplication

Total Lines 54
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 28
c 1
b 0
f 0
dl 0
loc 54
rs 10
wmc 7

3 Methods

Rating   Name   Duplication   Size   Complexity  
A testOrderBookEndpoint() 0 25 3
A testOrderBookDTOBuilder() 0 15 3
A testOrderBookResponseHandlerBuilder() 0 5 1
1
<?php
2
namespace Carpenstar\ByBitAPI\Spot\MarketData\OrderBook\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\MarketData\MergedOrderBook\Response\MergedOrderBookPriceItemResponse;
12
use Carpenstar\ByBitAPI\Spot\MarketData\OrderBook\Overrides\TestOrderBook;
13
use Carpenstar\ByBitAPI\Spot\MarketData\OrderBook\Request\OrderBookRequest;
14
use Carpenstar\ByBitAPI\Spot\MarketData\OrderBook\Response\OrderBookPriceItemResponse;
15
use Carpenstar\ByBitAPI\Spot\MarketData\OrderBook\Response\OrderBookResponse;
16
use PHPUnit\Framework\TestCase;
17
18
class OrderBookTest extends TestCase
19
{
20
    private static string $orderBookApiResult = '{"retCode":0,"retMsg":"OK","result":{"asks":[["26847.07","0.026755"],["26847.09","0.018993"],["26847.11","0.023623"],["26847.13","0.054235"],["26847.15","0.02979"]],"bids":[["26844.02","0.017595"],["26844","0.020731"],["26843.98","0.039244"],["26843.96","0.035931"],["26843.94","0.053928"]],"time":1683984334496},"retExtInfo":{},"time":1683984334496}';
21
22
    public function testOrderBookDTOBuilder()
23
    {
24
        $dto = ResponseDtoBuilder::make(OrderBookResponse::class, json_decode(self::$orderBookApiResult, true)['result']);
25
        $this->assertInstanceOf(OrderBookResponse::class, $dto);
26
27
        /** @var OrderBookPriceItemResponse $bid */
28
        while(!empty($bid = $dto->getBids()->fetch())) {
29
            $this->assertIsFloat($bid->getPrice());
0 ignored issues
show
Bug introduced by
The method getPrice() does not exist on Carpenstar\ByBitAPI\Core...\IResponseDataInterface. It seems like you code against a sub-type of Carpenstar\ByBitAPI\Core...\IResponseDataInterface such as Carpenstar\ByBitAPI\Spot...LastTradedPriceResponse or Carpenstar\ByBitAPI\Spot...erBookPriceItemResponse or Carpenstar\ByBitAPI\Spot...erBookPriceItemResponse or Carpenstar\ByBitAPI\Spot...cTradingRecordsResponse. ( Ignorable by Annotation )

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

29
            $this->assertIsFloat($bid->/** @scrutinizer ignore-call */ getPrice());
Loading history...
30
            $this->assertIsFloat($bid->getQuantity());
0 ignored issues
show
Bug introduced by
The method getQuantity() does not exist on Carpenstar\ByBitAPI\Core...\IResponseDataInterface. It seems like you code against a sub-type of Carpenstar\ByBitAPI\Core...\IResponseDataInterface such as Carpenstar\ByBitAPI\Spot...erBookPriceItemResponse or Carpenstar\ByBitAPI\Spot...erBookPriceItemResponse or Carpenstar\ByBitAPI\Spot...cTradingRecordsResponse or Carpenstar\ByBitAPI\Spot...Response\ReedemResponse. ( Ignorable by Annotation )

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

30
            $this->assertIsFloat($bid->/** @scrutinizer ignore-call */ getQuantity());
Loading history...
31
        }
32
33
        /** @var OrderBookPriceItemResponse $ask */
34
        while(!empty($ask = $dto->getAsks()->fetch())) {
35
            $this->assertIsFloat($ask->getPrice());
36
            $this->assertIsFloat($ask->getQuantity());
37
        }
38
    }
39
40
    public function testOrderBookResponseHandlerBuilder()
41
    {
42
        $handler = ResponseHandlerBuilder::make(self::$orderBookApiResult, CurlResponseHandler::class, OrderBookResponse::class);
43
        $this->assertInstanceOf(EntityCollection::class, $handler->getBody());
44
        $this->assertGreaterThan(0, $handler->getBody()->count());
45
    }
46
47
    public function testOrderBookEndpoint()
48
    {
49
        $endpoint = RestBuilder::make(TestOrderBook::class, (new OrderBookRequest())
50
            ->setSymbol("BTCUSDT"));
51
52
        $entityResponse = $endpoint->execute(EnumOutputMode::MODE_ENTITY, self::$orderBookApiResult);
53
        $this->assertInstanceOf(CurlResponseDto::class, $entityResponse);
54
        $body = $entityResponse->getBody();
55
        $this->assertInstanceOf(EntityCollection::class, $body);
56
57
        $dto = $body->fetch();
58
59
        $this->assertInstanceOf(OrderBookResponse::class, $dto);
60
        $this->assertInstanceOf(\DateTime::class, $dto->getTime());
61
62
        /** @var MergedOrderBookPriceItemResponse $bid */
63
        while(!empty($bid = $dto->getBids()->fetch())) {
64
            $this->assertIsFloat($bid->getPrice());
65
            $this->assertIsFloat($bid->getQuantity());
66
        }
67
68
        /** @var MergedOrderBookPriceItemResponse $ask */
69
        while(!empty($ask = $dto->getAsks()->fetch())) {
70
            $this->assertIsFloat($ask->getPrice());
71
            $this->assertIsFloat($ask->getQuantity());
72
        }
73
    }
74
}