@@ -36,7 +36,7 @@ public function testTemplateCaptainHookDevelopment(): void
36
36
$ code = $ template ->getCode ('commit-msg ' );
37
37
38
38
$ this ->assertStringContainsString ('#!/bin/sh ' , $ code );
39
- $ this ->assertStringContainsString ('docker exec cap-container ' , $ code );
39
+ $ this ->assertStringContainsString ('docker exec -i -e GIT_INDEX_FILE cap-container ' , $ code );
40
40
$ this ->assertStringContainsString ('./bin/captainhook ' , $ code );
41
41
}
42
42
@@ -58,7 +58,7 @@ public function testTemplateCaptainHookAsLibrary(): void
58
58
$ code = $ template ->getCode ('commit-msg ' );
59
59
60
60
$ this ->assertStringContainsString ('#!/bin/sh ' , $ code );
61
- $ this ->assertStringContainsString ('docker exec cap-container ' , $ code );
61
+ $ this ->assertStringContainsString ('docker exec -i -e GIT_INDEX_FILE cap-container ' , $ code );
62
62
$ this ->assertStringContainsString ('./vendor/bin/captainhook ' , $ code );
63
63
}
64
64
@@ -81,8 +81,51 @@ public function testTemplateCustomPath(): void
81
81
$ code = $ template ->getCode ('commit-msg ' );
82
82
83
83
$ this ->assertStringContainsString ('#!/bin/sh ' , $ code );
84
- $ this ->assertStringContainsString ('docker exec cap-container ' , $ code );
84
+ $ this ->assertStringContainsString ('docker exec -i -e GIT_INDEX_FILE cap-container ' , $ code );
85
85
$ this ->assertStringContainsString ('./foo/captainhook ' , $ code );
86
86
$ this ->assertStringContainsString ('bootstrap=vendor/autoload.php ' , $ code );
87
87
}
88
+
89
+ /**
90
+ * Tests Docker::getCode
91
+ *
92
+ * @dataProvider replacementPossibilities
93
+ */
94
+ public function testDockerCommandOptimization (string $ exec , string $ expected , string $ msg ): void
95
+ {
96
+ $ pathInfo = $ this ->createMock (PathInfo::class);
97
+ $ pathInfo ->method ('getExecutablePath ' )->willReturn ('./vendor/bin/captainhook ' );
98
+ $ pathInfo ->method ('getConfigPath ' )->willReturn ('captainhook.json ' );
99
+
100
+ $ configMock = $ this ->createConfigMock (false , 'captainhook.json ' );
101
+ $ configMock ->method ('getBootstrap ' )->willReturn ('' );
102
+ $ configMock ->method ('getRunExec ' )->willReturn ('docker exec ' . $ exec );
103
+ $ configMock ->method ('getRunPath ' )->willReturn ('/usr/local/bin/captainhook ' );
104
+
105
+ $ template = new Docker ($ pathInfo , $ configMock );
106
+ $ code = $ template ->getCode ('prepare-commit-msg ' );
107
+
108
+ $ this ->assertStringContainsString ('docker exec ' . $ expected , $ code , $ msg );
109
+ $ this ->assertStringContainsString ('/usr/local/bin/captainhook ' , $ code );
110
+ }
111
+
112
+ /**
113
+ * The testDockerCommandOptimization data provider
114
+ *
115
+ * @return array
116
+ */
117
+ public function replacementPossibilities (): array
118
+ {
119
+ return [
120
+ ['cap-container ' , '-i -t -e GIT_INDEX_FILE cap-container ' , 'none ' ],
121
+ ['-it cap-container ' , '-e GIT_INDEX_FILE -it cap-container ' , '-it ' ],
122
+ ['-ti cap-container ' , '-e GIT_INDEX_FILE -ti cap-container ' , '-ti ' ],
123
+ ['--interactive --tty cap-container ' , '-e GIT_INDEX_FILE --interactive --tty cap-container ' , 'long it ' ],
124
+ ['--tty --interactive cap-container ' , '-e GIT_INDEX_FILE --tty --interactive cap-container ' , 'long ti ' ],
125
+ ['--tty cap-container ' , '-i -e GIT_INDEX_FILE --tty cap-container ' , 'no i ' ],
126
+ ['-xit cap-container ' , '-e GIT_INDEX_FILE -xit cap-container ' , 'prefixed i ' ],
127
+ ['-xite=GIT_INDEX_FILE cap-container ' , '-xite=GIT_INDEX_FILE cap-container ' , 'prefixed e ' ],
128
+ ['--env=GIT_INDEX_FILE cap-container ' , '-i -t --env=GIT_INDEX_FILE cap-container ' , 'long e ' ],
129
+ ];
130
+ }
88
131
}
0 commit comments