Skip to content

Commit c6958fd

Browse files
committed
Split URL Helper tests
1 parent 5713da5 commit c6958fd

4 files changed

Lines changed: 850 additions & 707 deletions

File tree

Lines changed: 260 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,260 @@
1+
<?php
2+
3+
namespace CodeIgniter\Helpers\URLHelper;
4+
5+
use CodeIgniter\Config\Factories;
6+
use CodeIgniter\Config\Services;
7+
use CodeIgniter\HTTP\URI;
8+
use CodeIgniter\Router\Exceptions\RouterException;
9+
use CodeIgniter\Test\CIUnitTestCase;
10+
use Config\App;
11+
12+
final class BaseUrlTest extends CIUnitTestCase
13+
{
14+
/**
15+
* @var App
16+
*/
17+
private $config;
18+
19+
public static function setUpBeforeClass(): void
20+
{
21+
parent::setUpBeforeClass();
22+
23+
helper('url');
24+
}
25+
26+
protected function setUp(): void
27+
{
28+
parent::setUp();
29+
30+
Services::reset(true);
31+
32+
// Set a common base configuration (overriden by individual tests)
33+
$this->config = new App();
34+
$this->config->baseURL = 'http://example.com/';
35+
$this->config->indexPage = 'index.php';
36+
Factories::injectMock('config', 'App', $this->config);
37+
}
38+
39+
public function tearDown(): void
40+
{
41+
parent::tearDown();
42+
43+
$_SERVER = [];
44+
}
45+
46+
//--------------------------------------------------------------------
47+
// Test base_url
48+
49+
public function testBaseURLBasics()
50+
{
51+
$this->assertEquals('http://example.com', base_url());
52+
}
53+
54+
public function testBaseURLAttachesPath()
55+
{
56+
$this->assertEquals('http://example.com/foo', base_url('foo'));
57+
}
58+
59+
public function testBaseURLAttachesPathArray()
60+
{
61+
$this->assertEquals('http://example.com/foo/bar', base_url(['foo', 'bar']));
62+
}
63+
64+
public function testBaseURLAttachesScheme()
65+
{
66+
$this->assertEquals('https://example.com/foo', base_url('foo', 'https'));
67+
}
68+
69+
public function testBaseURLPathZero()
70+
{
71+
$this->assertEquals('http://example.com/0', base_url('0'));
72+
}
73+
74+
public function testBaseURLHeedsBaseURL()
75+
{
76+
// Since we're on a CLI, we must provide our own URI
77+
$this->config->baseURL = 'http://example.com/public';
78+
$request = Services::request($this->config);
79+
$request->uri = new URI('http://example.com/public');
80+
81+
Services::injectMock('request', $request);
82+
83+
$this->assertEquals('http://example.com/public', base_url());
84+
}
85+
86+
public function testBaseURLNoTrailingSlash()
87+
{
88+
// Since we're on a CLI, we must provide our own URI
89+
$this->config->baseURL = 'http://example.com';
90+
$request = Services::request($this->config);
91+
$request->uri = new URI('http://example.com/foobar');
92+
93+
Services::injectMock('request', $request);
94+
95+
$this->assertEquals('http://example.com', base_url());
96+
}
97+
98+
public function testBaseURLExample()
99+
{
100+
$this->assertEquals('http://example.com/blog/post/123', base_url('blog/post/123'));
101+
}
102+
103+
/**
104+
* @see https://github.com/codeigniter4/CodeIgniter4/issues/240
105+
*/
106+
public function testBaseURLWithSegments()
107+
{
108+
$_SERVER['HTTP_HOST'] = 'example.com';
109+
$_SERVER['REQUEST_URI'] = '/test';
110+
111+
// Since we're on a CLI, we must provide our own URI
112+
$request = Services::request($this->config, false);
113+
$request->uri = new URI('http://example.com/test');
114+
115+
Services::injectMock('request', $request);
116+
117+
$this->assertEquals('http://example.com', base_url());
118+
}
119+
120+
/**
121+
* @see https://github.com/codeigniter4/CodeIgniter4/issues/867
122+
*/
123+
public function testBaseURLHTTPS()
124+
{
125+
$_SERVER['HTTPS'] = 'on';
126+
127+
$this->assertEquals('https://example.com/blog/post/123', base_url('blog/post/123'));
128+
}
129+
130+
/**
131+
* @see https://github.com/codeigniter4/CodeIgniter4/issues/240
132+
*/
133+
public function testBaseURLWithSegmentsAgain()
134+
{
135+
$_SERVER['HTTP_HOST'] = 'example.com';
136+
$_SERVER['REQUEST_URI'] = '/test/page';
137+
138+
// Since we're on a CLI, we must provide our own URI
139+
$request = Services::request($this->config, false);
140+
$request->uri = new URI('http://example.com/test/page');
141+
142+
Services::injectMock('request', $request);
143+
144+
$this->assertEquals('http://example.com', base_url());
145+
$this->assertEquals('http://example.com/profile', base_url('profile'));
146+
}
147+
148+
public function testBaseURLHasSubfolder()
149+
{
150+
$_SERVER['HTTP_HOST'] = 'example.com';
151+
$_SERVER['REQUEST_URI'] = '/subfolder/test';
152+
$_SERVER['SCRIPT_NAME'] = '/subfolder/index.php';
153+
154+
// Since we're on a CLI, we must provide our own URI
155+
$this->config->baseURL = 'http://example.com/subfolder/';
156+
Factories::injectMock('config', 'App', $this->config);
157+
158+
$request = Services::request($this->config, false);
159+
Services::injectMock('request', $request);
160+
161+
$this->assertEquals('http://example.com/subfolder/foo', base_url('foo'));
162+
$this->assertEquals('http://example.com/subfolder', base_url());
163+
}
164+
165+
public function testBaseURLNoTrailingSlashHasSubfolder()
166+
{
167+
$_SERVER['HTTP_HOST'] = 'example.com';
168+
$_SERVER['REQUEST_URI'] = '/subfolder/test';
169+
$_SERVER['SCRIPT_NAME'] = '/subfolder/index.php';
170+
171+
// Since we're on a CLI, we must provide our own URI
172+
$this->config->baseURL = 'http://example.com/subfolder';
173+
Factories::injectMock('config', 'App', $this->config);
174+
175+
$request = Services::request($this->config, false);
176+
Services::injectMock('request', $request);
177+
178+
$this->assertEquals('http://example.com/subfolder/foo', base_url('foo'));
179+
$this->assertEquals('http://example.com/subfolder', base_url());
180+
}
181+
182+
//--------------------------------------------------------------------
183+
184+
public function testBasedNoIndex()
185+
{
186+
$_SERVER['HTTP_HOST'] = 'example.com';
187+
$_SERVER['REQUEST_URI'] = '/ci/v4/x/y';
188+
189+
$this->config->baseURL = 'http://example.com/ci/v4/';
190+
$request = Services::request($this->config);
191+
$request->uri = new URI('http://example.com/ci/v4/x/y');
192+
193+
Services::injectMock('request', $request);
194+
195+
$this->assertEquals('http://example.com/ci/v4/index.php/controller/method', site_url('controller/method', null, $this->config));
196+
$this->assertEquals('http://example.com/ci/v4/controller/method', base_url('controller/method', null, $this->config));
197+
}
198+
199+
public function testBasedNoTrailingSlash()
200+
{
201+
$_SERVER['HTTP_HOST'] = 'example.com';
202+
$_SERVER['REQUEST_URI'] = '/ci/v4/x/y';
203+
204+
$this->config->baseURL = 'http://example.com/ci/v4';
205+
$request = Services::request($this->config);
206+
$request->uri = new URI('http://example.com/ci/v4/x/y');
207+
208+
Services::injectMock('request', $request);
209+
210+
$this->assertEquals('http://example.com/ci/v4/index.php/controller/method', site_url('controller/method', null, $this->config));
211+
$this->assertEquals('http://example.com/ci/v4/controller/method', base_url('controller/method', null, $this->config));
212+
}
213+
214+
public function testBasedWithIndex()
215+
{
216+
$_SERVER['HTTP_HOST'] = 'example.com';
217+
$_SERVER['REQUEST_URI'] = '/ci/v4/index.php/x/y';
218+
219+
$this->config->baseURL = 'http://example.com/ci/v4/';
220+
$request = Services::request($this->config);
221+
$request->uri = new URI('http://example.com/ci/v4/index.php/x/y');
222+
223+
Services::injectMock('request', $request);
224+
225+
$this->assertEquals('http://example.com/ci/v4/index.php/controller/method', site_url('controller/method', null, $this->config));
226+
$this->assertEquals('http://example.com/ci/v4/controller/method', base_url('controller/method', null, $this->config));
227+
}
228+
229+
public function testBasedWithoutIndex()
230+
{
231+
$_SERVER['HTTP_HOST'] = 'example.com';
232+
$_SERVER['REQUEST_URI'] = '/ci/v4/x/y';
233+
234+
$this->config->baseURL = 'http://example.com/ci/v4/';
235+
$this->config->indexPage = '';
236+
$request = Services::request($this->config);
237+
$request->uri = new URI('http://example.com/ci/v4/x/y');
238+
239+
Services::injectMock('request', $request);
240+
241+
$this->assertEquals('http://example.com/ci/v4/controller/method', site_url('controller/method', null, $this->config));
242+
$this->assertEquals('http://example.com/ci/v4/controller/method', base_url('controller/method', null, $this->config));
243+
}
244+
245+
public function testBasedWithOtherIndex()
246+
{
247+
$_SERVER['HTTP_HOST'] = 'example.com';
248+
$_SERVER['REQUEST_URI'] = '/ci/v4/x/y';
249+
250+
$this->config->baseURL = 'http://example.com/ci/v4/';
251+
$this->config->indexPage = 'fc.php';
252+
$request = Services::request($this->config);
253+
$request->uri = new URI('http://example.com/ci/v4/x/y');
254+
255+
Services::injectMock('request', $request);
256+
257+
$this->assertEquals('http://example.com/ci/v4/fc.php/controller/method', site_url('controller/method', null, $this->config));
258+
$this->assertEquals('http://example.com/ci/v4/controller/method', base_url('controller/method', null, $this->config));
259+
}
260+
}

0 commit comments

Comments
 (0)