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

KlineTest::testKlineResponseHandlerBuilder()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 3
c 1
b 0
f 0
nc 1
nop 0
dl 0
loc 5
rs 10
1
<?php
2
namespace Carpenstar\ByBitAPI\Spot\MarketData\Kline\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\EnumIntervals;
8
use Carpenstar\ByBitAPI\Core\Enums\EnumOutputMode;
9
use Carpenstar\ByBitAPI\Core\Objects\Collection\EntityCollection;
10
use Carpenstar\ByBitAPI\Core\Response\CurlResponseDto;
11
use Carpenstar\ByBitAPI\Core\Response\CurlResponseHandler;
12
use Carpenstar\ByBitAPI\Spot\MarketData\Kline\Overrides\TestKline;
13
use Carpenstar\ByBitAPI\Spot\MarketData\Kline\Request\KlineRequest;
14
use Carpenstar\ByBitAPI\Spot\MarketData\Kline\Response\KlineResponse;
15
use PHPUnit\Framework\TestCase;
16
17
class KlineTest extends TestCase
18
{
19
    private static string $klineApiResponse = '{"retCode":0,"retMsg":"OK","result":{"list":[{"t":1683922260000,"s":"BTCUSDT","sn":"BTCUSDT","c":"26413.58","h":"26444.15","l":"26413.58","o":"26440","v":"0.038419"},{"t":1683922320000,"s":"BTCUSDT","sn":"BTCUSDT","c":"26405.44","h":"26420.02","l":"26402.16","o":"26413.58","v":"0.024527"},{"t":1683922380000,"s":"BTCUSDT","sn":"BTCUSDT","c":"26390.96","h":"26406.3","l":"26390.95","o":"26405.44","v":"0.030255"},{"t":1683922440000,"s":"BTCUSDT","sn":"BTCUSDT","c":"26397.07","h":"26399.92","l":"26390.95","o":"26390.96","v":"0.028976"},{"t":1683922500000,"s":"BTCUSDT","sn":"BTCUSDT","c":"26390.98","h":"26397.07","l":"26390.95","o":"26397.07","v":"0.03669"},{"t":1683922560000,"s":"BTCUSDT","sn":"BTCUSDT","c":"26409.24","h":"26409.24","l":"26389.68","o":"26390.98","v":"0.024756"},{"t":1683922620000,"s":"BTCUSDT","sn":"BTCUSDT","c":"26443.27","h":"26453.24","l":"26390.95","o":"26409.24","v":"0.025462"},{"t":1683922680000,"s":"BTCUSDT","sn":"BTCUSDT","c":"26451.86","h":"26451.89","l":"26440.91","o":"26443.27","v":"0.026304"},{"t":1683922740000,"s":"BTCUSDT","sn":"BTCUSDT","c":"26426.59","h":"26451.86","l":"26424.63","o":"26451.86","v":"0.02513"},{"t":1683922800000,"s":"BTCUSDT","sn":"BTCUSDT","c":"26429.66","h":"26435.5","l":"26419.97","o":"26426.59","v":"0.021732"},{"t":1683922860000,"s":"BTCUSDT","sn":"BTCUSDT","c":"26426.6","h":"26435.01","l":"26421.77","o":"26429.66","v":"0.024761"},{"t":1683922920000,"s":"BTCUSDT","sn":"BTCUSDT","c":"26404.56","h":"26434.34","l":"26401.55","o":"26426.6","v":"0.020718"},{"t":1683922980000,"s":"BTCUSDT","sn":"BTCUSDT","c":"26403.24","h":"26414.24","l":"26386.61","o":"26404.56","v":"0.02995"},{"t":1683923040000,"s":"BTCUSDT","sn":"BTCUSDT","c":"26391.6","h":"26403.24","l":"26391.57","o":"26403.24","v":"0.016944"},{"t":1683923100000,"s":"BTCUSDT","sn":"BTCUSDT","c":"26386.62","h":"26391.6","l":"26386.61","o":"26391.6","v":"0.03116"}]},"retExtInfo":{},"time":1683982237622}';
20
21
    public function testKlineInfoDTOBuilder()
22
    {
23
        foreach (json_decode(self::$klineApiResponse, true)['result']['list'] as $dataItem) {
24
            $dto = ResponseDtoBuilder::make(KlineResponse::class, $dataItem);
25
            $this->assertInstanceOf(KlineResponse::class, $dto);
26
            $this->assertInstanceOf(\DateTime::class, $dto->getTime());
27
            $this->assertIsString($dto->getSymbol());
28
            $this->assertIsString($dto->getAlias());
29
            $this->assertIsFloat($dto->getClosePrice());
30
            $this->assertIsFloat($dto->getHighPrice());
31
            $this->assertIsFloat($dto->getLowPrice());
32
            $this->assertIsFloat($dto->getOpenPrice());
33
            $this->assertIsFloat($dto->getTradingVolume());
34
        }
35
    }
36
37
    public function testKlineResponseHandlerBuilder()
38
    {
39
        $handler = ResponseHandlerBuilder::make(self::$klineApiResponse, CurlResponseHandler::class, KlineResponse::class);
40
        $this->assertInstanceOf(EntityCollection::class, $handler->getBody());
41
        $this->assertGreaterThan(0, $handler->getBody()->count());
42
    }
43
44
    public function testKlineEndpoint()
45
    {
46
        $endpoint = RestBuilder::make(TestKline::class, (new KlineRequest())
47
            ->setSymbol("BTCUSDT")->setInterval(EnumIntervals::HOUR_1));
48
49
        $entityResponse = $endpoint->execute(EnumOutputMode::MODE_ENTITY, self::$klineApiResponse);
50
        $this->assertInstanceOf(CurlResponseDto::class, $entityResponse);
51
        $body = $entityResponse->getBody();
52
        $this->assertInstanceOf(EntityCollection::class, $body);
53
54
        foreach ($body->fetch() as $dataItem) {
55
            $dto = ResponseDtoBuilder::make(KlineResponse::class, $dataItem);
56
            $this->assertInstanceOf(KlineResponse::class, $dto);
57
            $this->assertInstanceOf(\DateTime::class, $dto->getTime());
58
            $this->assertIsString($dto->getSymbol());
59
            $this->assertIsString($dto->getAlias());
60
            $this->assertIsFloat($dto->getClosePrice());
61
            $this->assertIsFloat($dto->getHighPrice());
62
            $this->assertIsFloat($dto->getLowPrice());
63
            $this->assertIsFloat($dto->getOpenPrice());
64
            $this->assertIsFloat($dto->getTradingVolume());
65
        }
66
    }
67
}