Completed
Branch v1.x-dev (5736e4)
by Benjamin
04:09
created

RuleHelperTest   A

Complexity

Total Complexity 6

Size/Duplication

Total Lines 73
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 43
c 0
b 0
f 0
dl 0
loc 73
rs 10
wmc 6
1
<?php
2
3
namespace Obblm\Core\Tests\Helper;
4
5
use Obblm\Core\Contracts\RuleHelperInterface;
6
use Obblm\Core\Entity\Rule;
7
use Obblm\Core\Helper\CoreTranslation;
8
use Obblm\Core\Helper\Rule\Config\ConfigResolver;
9
use Obblm\Core\Helper\Rule\Config\RuleConfigResolver;
10
use Obblm\Core\Helper\RuleHelper;
11
use Obblm\Core\Service\Rule\Lrb6Rule;
12
use Symfony\Bundle\FrameworkBundle\Console\Application;
13
use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase;
14
use Symfony\Component\Finder\Finder;
15
use Symfony\Component\Yaml\Yaml;
16
17
class RuleHelperTest extends KernelTestCase
18
{
19
    const REAL_RULE_PATH = '/../Resources/datas/rules/';
20
    protected $application;
21
    protected $ruleHelper;
22
    protected $realRule;
23
24
    protected function setUp(): void
25
    {
26
        self::bootKernel();
27
        $this->application = new Application(self::$kernel);
28
        $this->ruleHelper = self::$kernel->getContainer()->get(RuleHelper::class);
29
    }
30
31
    public function testRealLrb6Rule():void
32
    {
33
        $this->loadRealLrb6Rule();
34
        $this->ruleHelper->addHelper(new Lrb6Rule());
35
        $this->ruleHelper->addRule($this->realRule);
36
        // Not cached helper
37
        $helper = $this->ruleHelper->getHelper($this->realRule);
38
        $this->assertInstanceOf(RuleHelperInterface::class, $helper);
39
        // Same helper Cached
40
        $helper = $this->ruleHelper->getHelper($this->realRule);
41
        $this->assertInstanceOf(RuleHelperInterface::class, $helper);
42
        /** @var RuleHelperInterface $helper */
43
        // LRB6 got 24 rosters
44
        $this->assertEquals(24, $helper->getRosters()->count());
45
        // LRB6 got 79 skills
46
        $this->assertEquals(79, $helper->getSkills()->count());
47
        // LRB6 got 56 star players
48
        $this->assertEquals(56, $helper->getStarPlayers()->count());
49
        // LRB6 got 7 inducements (8 - star player line)
50
        $this->assertEquals(7, $helper->getInducements()->count());
51
    }
52
53
    protected function loadRealLrb6Rule(): void
54
    {
55
        $finder = new Finder();
56
        $key = 'lrb6';
57
        $directory = dirname(__DIR__) . self::REAL_RULE_PATH . $key;
58
        $rules = [];
59
        $finder->files()->ignoreDotFiles(true)->name(['*.yaml', '*.yml'])->in($directory);
60
        if ($finder->hasResults()) {
61
            foreach ($finder as $file) {
62
                $content = Yaml::parseFile($file->getPathname());
63
                $rules = array_merge_recursive($rules, $content);
64
            }
65
            $ruleArray = $rules['rules'][$key];
66
67
            $treeResolver = new ConfigResolver(new RuleConfigResolver());
68
            $ruleArray = $treeResolver->resolve($ruleArray);
69
70
            /** @var Rule|null $rule */
71
            $this->realRule = (new Rule())
72
                ->setRuleKey($key)
73
                ->setReadOnly(true)
74
                ->setName(CoreTranslation::getRuleTitle($key))
75
                ->setRuleDirectory($directory)
76
                ->setPostBb2020($ruleArray['post_bb_2020'] ?? false)
77
                ->setTemplate($ruleArray['template'] ?? 'base')
78
                ->setRule($ruleArray);
79
        }
80
    }
81
82
    protected function tearDown(): void
83
    {
84
        parent::tearDown();
85
86
        // doing this is recommended to avoid memory leaks
87
        $this->application = null;
88
        $this->ruleHelper = null;
89
        $this->realRule = null;
90
    }
91
}
92