Completed
Push — dev ( 5c06f5...dcd39b )
by Arnaud
09:19
created

AdminFactoryTest::doTestAdmin()   A

Complexity

Conditions 3
Paths 4

Size

Total Lines 15
Code Lines 10

Duplication

Lines 5
Ratio 33.33 %

Importance

Changes 2
Bugs 0 Features 1
Metric Value
c 2
b 0
f 1
dl 5
loc 15
rs 9.4285
cc 3
eloc 10
nc 4
nop 3
1
<?php
2
3
namespace LAG\AdminBundle\Tests\AdminBundle\Admin\Factory;
4
5
use Exception;
6
use LAG\AdminBundle\Admin\AdminInterface;
7
use LAG\AdminBundle\Tests\Base;
8
use Symfony\Component\HttpFoundation\Request;
9
10
class AdminFactoryTest extends Base
11
{
12
    /**
13
     * Init method should create Admin object according to given configuration
14
     */
15
    public function testInit()
16
    {
17
        // admin factory should work without configuration
18
        $this->mockAdminFactory();
19
        // test admin creation
20
        $configuration = $this->getAdminsConfiguration();
21
        $adminFactory = $this->mockAdminFactory($configuration);
22
        $adminFactory->init();
23
24
        foreach ($configuration as $name => $adminConfiguration) {
25
            $admin = $adminFactory->getAdmin($name);
26
            $this->doTestAdmin($admin, $adminConfiguration, $name);
27
        }
28
    }
29
30
    /**
31
     * Create method should return an Admin according to given configuration
32
     *
33
     * @throws Exception
34
     */
35
    public function testCreate()
36
    {
37
        // test minimal configuration
38
        $adminConfiguration = $this->getAdminsConfiguration()['minimal_configuration'];
39
        // mock admin factory with empty configuration
40
        $adminFactory = $this->mockAdminFactory();
41
        $admin = $adminFactory->create('admin_test', $adminConfiguration);
42
        $this->doTestAdmin($admin, $adminConfiguration, 'admin_test');
43
44
        // test full configuration
45
        $adminConfiguration = $this->getAdminsConfiguration()['full_configuration'];
46
        $admin = $adminFactory->create('admin_test2', $adminConfiguration);
47
        $this->doTestAdmin($admin, $adminConfiguration, 'admin_test2');
48
    }
49
50
    /**
51
     * GetAdminFromRequest method should return a configured Admin from request parameters
52
     *
53
     * @throws Exception
54
     */
55
    public function testGetAdminFromRequest()
56
    {
57
        $adminConfiguration = $this->getAdminsConfiguration();
58
        $adminFactory = $this->mockAdminFactory($adminConfiguration);
59
        $adminFactory->init();
60
61
        foreach ($adminConfiguration as $name => $configuration) {
62
            $request = new Request([], [], [
63
                '_route_params' => [
64
                    '_admin' => $name,
65
                    // see Base->mockActionFactory
66
                    '_action' => 'test'
67
                ]
68
            ]);
69
            $admin = $adminFactory->getAdminFromRequest($request);
70
            $this->doTestAdmin($admin, $configuration, $name);
71
        }
72
    }
73
74
    /**
75
     * GetAdmin method should return an configured Admin by its name
76
     *
77
     * @throws Exception
78
     */
79
    public function testGetAdmin()
80
    {
81
        // test with no configuration
82
        $adminFactory = $this->mockAdminFactory();
83
        // unknow admin not exists, it should throw an exception
84
        $this->assertExceptionRaised('Exception', function () use ($adminFactory) {
85
            $adminFactory->getAdmin('unknown_admin');
86
        });
87
        // test with configurations samples
88
        $adminsConfiguration = $this->getAdminsConfiguration();
89
        $adminFactory = $this->mockAdminFactory($adminsConfiguration);
90
        $adminFactory->init();
91
92
        foreach ($adminsConfiguration as $name => $configuration) {
93
            $admin = $adminFactory->getAdmin($name);
94
            $this->doTestAdmin($admin, $configuration, $name);
95
        }
96
    }
97
98
    /**
99
     * @param AdminInterface $admin
100
     * @param array $configuration
101
     * @param $adminName
102
     */
103
    protected function doTestAdmin(AdminInterface $admin, array $configuration, $adminName)
104
    {
105
        $this->assertEquals($admin->getName(), $adminName);
106
        $this->assertEquals($admin->getConfiguration()->getFormType(), $configuration['form']);
107
        $this->assertEquals($admin->getConfiguration()->getEntityName(), $configuration['entity']);
108
109
        if (array_key_exists('controller', $configuration)) {
110
            $this->assertEquals($admin->getConfiguration()->getControllerName(), $configuration['controller']);
111
        }
112 View Code Duplication
        if (array_key_exists('max_per_page', $configuration)) {
113
            $this->assertEquals($admin->getConfiguration()->getMaxPerPage(), $configuration['max_per_page']);
114
        } else {
115
            $this->assertEquals($admin->getConfiguration()->getMaxPerPage(), 25);
116
        }
117
    }
118
}
119