1<?php
2
3namespace Composer\Installers\Test;
4
5use Composer\Composer;
6use Composer\Installers\SiteDirectInstaller;
7use Composer\Package\Package;
8
9class SiteDirectInstallerTest extends TestCase
10{
11    /** @var SiteDirectInstaller $installer */
12    protected $installer;
13
14    /** @var Package */
15    private $package;
16
17    public function SetUp()
18    {
19        $this->package = new Package('sitedirect/some_name', '1.0.9', '1.0');
20        $this->installer = new SiteDirectInstaller(
21            $this->package,
22            new Composer()
23        );
24
25    }
26
27    /**
28     * @dataProvider dataProvider
29     */
30    public function testInflectPackageVars($data, $expected)
31    {
32        $result = $this->installer->inflectPackageVars($data);
33        $this->assertEquals($result, $expected);
34    }
35
36    /**
37     * @dataProvider dataProvider
38     */
39    public function testInstallPath($data, $expected)
40    {
41        $result = $this->installer->inflectPackageVars($data);
42        $path = $this->createPackage($data);
43
44        // use $result to get the proper capitalization for the vendor path
45        $expectedPath = "modules/{$result['vendor']}/{$result['name']}/";
46        $notExpectedPath = "modules/{$data['vendor']}/{$data['name']}/";
47        $this->assertEquals($expectedPath, $path);
48        $this->assertNotEquals($notExpectedPath, $path);
49    }
50
51    /**
52     * @param string[] $data
53     * @return string
54     */
55    private function createPackage($data)
56    {
57        $fullName = "{$data['vendor']}/{$data['name']}";
58
59        $package = new Package($fullName, '1.0', '1.0');
60        $package->setType('sitedirect-module');
61        $installer = new SiteDirectInstaller($package, new Composer());
62
63        $path = $installer->getInstallPath($package, 'sitedirect');
64        return $path;
65    }
66
67    public function dataProvider()
68    {
69        return array(
70            array(
71                'data' => array(
72                    'name' => 'kernel',
73                    'vendor' => 'sitedirect',
74                    'type' => 'sitedirect-module',
75                ),
76                'expected' => array(
77                    'name' => 'Kernel',
78                    'vendor' => 'SiteDirect',
79                    'type' => 'sitedirect-module',
80                )
81            ),
82            array(
83                'data' => array(
84                    'name' => 'that_guy',
85                    'vendor' => 'whatGuy',
86                    'type' => 'sitedirect-module',
87                ),
88                'expected' => array(
89                    'name' => 'ThatGuy',
90                    'vendor' => 'whatGuy',
91                    'type' => 'sitedirect-module',
92                )
93            ),
94            array(
95                'data' => array(
96                    'name' => 'checkout',
97                    'vendor' => 'someVendor',
98                    'type' => 'sitedirect-plugin',
99                ),
100                'expected' => array(
101                    'name' => 'Checkout',
102                    'vendor' => 'someVendor',
103                    'type' => 'sitedirect-plugin',
104                )
105            ),
106            array(
107                'data' => array(
108                    'name' => 'checkout',
109                    'vendor' => 'siteDirect',
110                    'type' => 'sitedirect-plugin',
111                ),
112                'expected' => array(
113                    'name' => 'Checkout',
114                    'vendor' => 'SiteDirect',
115                    'type' => 'sitedirect-plugin',
116                )
117            ),
118        );
119    }
120}
121