Test Setup Failed
Push — master ( d9a06b...c9d9e0 )
by Chema
03:47
created

FinanceYahooSiteCrawlerTest   A

Complexity

Total Complexity 2

Size/Duplication

Total Lines 50
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
wmc 2
eloc 27
dl 0
loc 50
rs 10
c 0
b 0
f 0

5 Methods

Rating   Name   Duplication   Size   Complexity  
A test_crawl_using_named_extractor() 0 15 1
stubJsonExtractor() 0 7 ?
A test_crawl_using_extractor_without_name() 0 14 1
A hp$0 ➔ extractFromJson() 0 4 1
A hp$0 ➔ stubJsonExtractor() 0 7 1
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Chemaclass\StockTickerTests\Unit\Domain\Crawler\Site\FinanceYahoo;
6
7
use Chemaclass\StockTicker\Domain\Crawler\Site\FinanceYahoo\FinanceYahooSiteCrawler;
8
use Chemaclass\StockTicker\Domain\Crawler\Site\FinanceYahoo\JsonExtractorInterface;
9
use Chemaclass\StockTicker\Domain\ReadModel\Site;
10
use Chemaclass\StockTicker\Domain\ReadModel\Symbol;
11
use Chemaclass\StockTickerTests\Unit\WithFakeHttpClient;
12
use PHPUnit\Framework\TestCase;
13
14
use function get_class;
15
16
final class FinanceYahooSiteCrawlerTest extends TestCase
17
{
18
    use WithFakeHttpClient;
19
20
    private const RESPONSE_BODY = <<<BODY
21
any random string 1
22
root.App.main = {"key": {"sub-key": "example expected value"}};
23
any random string 2
24
BODY;
25
26
    public function test_crawl_using_named_extractor(): void
27
    {
28
        $crawler = new FinanceYahooSiteCrawler([
29
            'extractor name' => $this->stubJsonExtractor(),
30
        ]);
31
32
        $actual = $crawler->crawl(
33
            $this->mockHttpClient(self::RESPONSE_BODY),
34
            Symbol::fromString('EXAMPLE_TICKER'),
35
        );
36
37
        self::assertEquals(new Site([
38
            'symbol' => 'EXAMPLE_TICKER',
39
            'extractor name' => ['example expected value'],
40
        ]), $actual);
41
    }
42
43
    public function test_crawl_using_extractor_without_name(): void
44
    {
45
        $jsonExtractor = $this->stubJsonExtractor();
46
        $crawler = new FinanceYahooSiteCrawler([$jsonExtractor]);
47
48
        $actual = $crawler->crawl(
49
            $this->mockHttpClient(self::RESPONSE_BODY),
50
            Symbol::fromString('EXAMPLE_TICKER'),
51
        );
52
53
        self::assertEquals(new Site([
54
            'symbol' => 'EXAMPLE_TICKER',
55
            get_class($jsonExtractor) => ['example expected value'],
56
        ]), $actual);
57
    }
58
59
    private function stubJsonExtractor(): JsonExtractorInterface
60
    {
61
        return new class() implements JsonExtractorInterface {
62
            public function extractFromJson(array $json): array
63
            {
64
                return [
65
                    $json['key']['sub-key'],
66
                ];
67
            }
68
        };
69
    }
70
}
71