StubRulesFactory::createRules()   A
last analyzed

Complexity

Conditions 2
Paths 1

Size

Total Lines 30
Code Lines 16

Duplication

Lines 0
Ratio 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
eloc 16
c 2
b 0
f 0
dl 0
loc 30
rs 9.7333
cc 2
nc 1
nop 2
1
<?php
2
3
namespace AbterPhp\Admin\TestDouble\Validation;
4
5
use AbterPhp\Framework\Validation\Rules\Uuid;
6
use Opulence\Validation\Rules\Errors\Compilers\ICompiler;
7
use Opulence\Validation\Rules\Errors\ErrorTemplateRegistry;
8
use Opulence\Validation\Rules\Factories\RulesFactory;
9
use Opulence\Validation\Rules\IRule;
10
use Opulence\Validation\Rules\RuleExtensionRegistry;
11
use Opulence\Validation\Rules\Rules;
12
use PHPUnit\Framework\MockObject\MockObject;
13
use PHPUnit\Framework\TestCase;
14
15
class StubRulesFactory
16
{
17
    /**
18
     * @return IRule[]
19
     */
20
    protected static function createDefaultRules()
21
    {
22
        return [
23
            'uuid' => new Uuid(),
24
        ];
25
    }
26
27
    /**
28
     * @param TestCase     $testCase
29
     * @param IRule[]|null $rules
30
     *
31
     * @return RulesFactory|MockObject
32
     */
33
    public static function createRulesFactory(TestCase $testCase, array $rules = null): RulesFactory
34
    {
35
        $rulesFactoryMock = $testCase->getMockBuilder(RulesFactory::class)
36
            ->disableOriginalConstructor()
37
            ->getMock();
38
39
        $rulesMock = static::createRules($testCase, $rules);
40
41
        $rulesFactoryMock
42
            ->expects($testCase->any())
43
            ->method('createRules')
44
            ->willReturnCallback(function () use ($rulesMock) {
45
                return clone $rulesMock;
46
            });
47
48
        return $rulesFactoryMock;
0 ignored issues
show
Bug Best Practice introduced by
The expression return $rulesFactoryMock returns the type PHPUnit\Framework\MockObject\MockObject which is incompatible with the type-hinted return Opulence\Validation\Rules\Factories\RulesFactory.
Loading history...
49
    }
50
51
    /**
52
     * @param TestCase     $testCase
53
     * @param IRule[]|null $rules
54
     *
55
     * @return Rules
56
     */
57
    public static function createRules(TestCase $testCase, ?array $rules = null): Rules
58
    {
59
        $rules = $rules ?: static::createDefaultRules();
60
61
        /** @var RuleExtensionRegistry|MockObject $ruleExtensionRegistryStub */
62
        $ruleExtensionRegistryStub = $testCase->getMockBuilder(RuleExtensionRegistry::class)->getMock();
63
64
        /** @var ErrorTemplateRegistry|MockObject $errorTemplateRegistryStub */
65
        $errorTemplateRegistryStub = $testCase->getMockBuilder(ErrorTemplateRegistry::class)->getMock();
66
67
        /** @var ICompiler|MockObject $compilerStub */
68
        $compilerStub = $testCase->getMockBuilder(ICompiler::class)->getMock();
69
70
        $rulesStub = new Rules($ruleExtensionRegistryStub, $errorTemplateRegistryStub, $compilerStub);
71
72
        $ruleExtensionRegistryStub
73
            ->expects($testCase->any())
74
            ->method('hasRule')
75
            ->willReturnCallback(function (string $methodName) use ($rules): bool {
76
                return array_key_exists($methodName, $rules);
77
            });
78
79
        $ruleExtensionRegistryStub
80
            ->expects($testCase->any())
81
            ->method('getRule')
82
            ->willReturnCallback(function (string $methodName) use ($rules): IRule {
83
                return $rules[$methodName];
84
            });
85
86
        return $rulesStub;
87
    }
88
}
89