Test Failed
Pull Request — master (#9)
by Vladislav
08:00
created

MergedOrderBookTest   A

Complexity

Total Complexity 7

Size/Duplication

Total Lines 55
Duplicated Lines 0 %

Importance

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

3 Methods

Rating   Name   Duplication   Size   Complexity  
A testMergedOrderBookDTOBuilder() 0 16 3
A testMergedOrderBookResponseHandlerBuilder() 0 5 1
A testMergedOrderBookEndpoint() 0 25 3
1
<?php
2
namespace Carpenstar\ByBitAPI\Spot\MarketData\MergedOrderBook\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\Overrides\TestMergedOrderBook;
12
use Carpenstar\ByBitAPI\Spot\MarketData\MergedOrderBook\Request\MergedOrderBookRequest;
13
use Carpenstar\ByBitAPI\Spot\MarketData\MergedOrderBook\Response\MergedOrderBookPriceItemResponse;
14
use Carpenstar\ByBitAPI\Spot\MarketData\MergedOrderBook\Response\MergedOrderBookResponse;
15
use PHPUnit\Framework\TestCase;
16
17
class MergedOrderBookTest extends TestCase
18
{
19
    private static string $mergedOrderBookApiResponse = '{"retCode":0,"retMsg":"OK","result":{"asks":[["26796.1","0.011429"],["26796.9","0.000958"],["26800","0.026581"],["26807.7","0.000135"],["26810.2","0.000592"]],"bids":[["26796","0.077068"],["26795.9","0.115983"],["26711","0.002177"],["26693.1","0.001057"],["26683.9","0.001006"]],"time":1683983945762},"retExtInfo":{},"time":1683983945762}';
20
21
    public function testMergedOrderBookDTOBuilder()
22
    {
23
        $dto = ResponseDtoBuilder::make(MergedOrderBookResponse::class, json_decode(self::$mergedOrderBookApiResponse, true)['result']);
24
        $this->assertInstanceOf(MergedOrderBookResponse::class, $dto);
25
        $this->assertInstanceOf(\DateTime::class, $dto->getTime());
26
27
        /** @var MergedOrderBookPriceItemResponse $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 MergedOrderBookPriceItemResponse $ask */
34
        while(!empty($ask = $dto->getAsks()->fetch())) {
35
            $this->assertIsFloat($ask->getPrice());
36
            $this->assertIsFloat($ask->getQuantity());
37
        }
38
    }
39
40
    public function testMergedOrderBookResponseHandlerBuilder()
41
    {
42
        $handler = ResponseHandlerBuilder::make(self::$mergedOrderBookApiResponse, CurlResponseHandler::class, MergedOrderBookResponse::class);
43
        $this->assertInstanceOf(EntityCollection::class, $handler->getBody());
44
        $this->assertGreaterThan(0, $handler->getBody()->count());
45
    }
46
47
    public function testMergedOrderBookEndpoint()
48
    {
49
        $endpoint = RestBuilder::make(TestMergedOrderBook::class, (new MergedOrderBookRequest())
50
            ->setSymbol("BTCUSDT"));
51
52
        $entityResponse = $endpoint->execute(EnumOutputMode::MODE_ENTITY, self::$mergedOrderBookApiResponse);
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(MergedOrderBookResponse::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
}