1: <?php
2:
3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47:
48: class FrontController_Test extends PHPUnit_Framework_TestCase {
49: 50: 51: 52: 53: 54:
55: private $token;
56:
57: 58: 59: 60: 61: 62:
63: protected function setUp() {
64: if(!isset($this->token))
65: $this->token = $_GET['tk'];
66: $_GET['tk'] = null;
67: $_GET['act'] = null;
68: }
69:
70: 71: 72: 73: 74: 75:
76: protected function tearDown() {
77: $_GET['tk'] = $this->token;
78: }
79:
80: 81: 82: 83: 84:
85: public function testConstructActParam() {
86: $_GET['act'] = 'ViewArticle';
87: $front = new FrontController();
88:
89: $this->assertEquals('ViewArticle', $front->getPageController(), 'testing that the constructor will detect the page controller action we want to invoke from the global _GET array');
90: }
91:
92: 93: 94: 95: 96:
97: public function testConstructModRewrite() {
98: global $config;
99:
100: $request = $config->get('app.url').'ViewArticleTitle/title/Test_Title';
101: $_SERVER['REQUEST_URI'] = str_replace('http://'.$_SERVER['HTTP_HOST'], '', $request);
102: $front = new FrontController();
103:
104: $this->assertEquals('ViewArticleTitle', $front->getPageController(), 'testing that the constructor can parse the correct page controller action from a mod_rewrite style URL');
105: }
106:
107: 108: 109: 110: 111:
112: public function testConstructModRewriteWithAlias() {
113: global $config;
114:
115: $request = $config->get('app.url').'article/Test_Title';
116: $_SERVER['REQUEST_URI'] = str_replace('http://'.$_SERVER['HTTP_HOST'], '', $request);
117: $front = new FrontController();
118: $front->registerAlias('ViewArticleTitle','article','title');
119:
120: $this->assertEquals('ViewArticleTitle', $front->getPageController(), 'testing that the constructor can parse the correct page controller action from a mod_rewrite style URL when a controller alias is used');
121: }
122:
123: 124: 125: 126: 127:
128: public function testConstructorWithEncryptedToken() {
129: global $config;
130:
131: $params = 'act=ViewArticleTitle&title=Test_Title';
132: $_GET['tk'] = FrontController::encodeQuery($params);
133: $front = new FrontController();
134:
135: $this->assertEquals('ViewArticleTitle', $front->getPageController(), 'testing that the constructor can parse the correct page controller action from an encrypted token param');
136: }
137:
138: 139: 140: 141: 142:
143: public function testConstructorModRewriteWithEncryptedToken() {
144: global $config;
145:
146: $params = 'act=ViewArticleTitle&title=Test_Title';
147: $request = $config->get('app.url').'tk/'.FrontController::encodeQuery($params);
148: $_SERVER['REQUEST_URI'] = str_replace('http://'.$_SERVER['HTTP_HOST'], '', $request);
149: $front = new FrontController();
150:
151: $this->assertEquals('ViewArticleTitle', $front->getPageController(), 'testing that the constructor can parse the correct page controller action from an encrypted token param provided on a mod-rewrite style URL');
152: }
153:
154: 155: 156: 157: 158:
159: public function testEncodeQuery() {
160: global $config;
161:
162: $oldKey = $config->get('security.query.string.key');
163: $config->set('security.query.string.key', 'testkey');
164: $params = 'act=ViewArticleTitle&title=Test_Title';
165:
166: $this->assertEquals(FrontController::encodeQuery($params), '8kqoeebEej0V-FN5-DOdA1HBDDieFcNWTib2yLSUNjq0B0FWzAupIA==', 'testing the encodeQuery method with a known encrypted result for a test key');
167:
168: $config->set('security.query.string.key', $oldKey);
169: }
170:
171: 172: 173: 174: 175:
176: public function testDecodeQueryParams() {
177: global $config;
178:
179: $oldKey = $config->get('security.query.string.key');
180: $config->set('security.query.string.key', 'testkey');
181: $tk = '8kqoeebEej0V-FN5-DOdA1HBDDieFcNWTib2yLSUNjq0B0FWzAupIA==';
182:
183: $this->assertEquals('act=ViewArticleTitle&title=Test_Title', FrontController::decodeQueryParams($tk), 'testing the decodeQueryParams method with a known encrypted result for a test key');
184: }
185:
186: 187: 188: 189: 190:
191: public function testGetDecodeQueryParams() {
192: global $config;
193:
194: $oldKey = $config->get('security.query.string.key');
195: $config->set('security.query.string.key', 'testkey');
196: $tk = '8kqoeebEej0V-FN5-DOdA1HBDDieFcNWTib2yLSUNjq0B0FWzAupIA==';
197:
198: $decoded = FrontController::getDecodeQueryParams($tk);
199:
200: $this->assertEquals('ViewArticleTitle', $decoded['act'], 'testing that the getDecodeQueryParams method will return the known params with a known encrypted result for a test key');
201: $this->assertEquals('Test_Title', $decoded['title'], 'testing that the getDecodeQueryParams method will return the known params with a known encrypted result for a test key');
202: }
203:
204: 205: 206: 207: 208:
209: public function testLoadControllerFileNotFound() {
210: global $config;
211:
212: $request = $config->get('app.url').'doesNotExists';
213: $_SERVER['REQUEST_URI'] = str_replace('http://'.$_SERVER['HTTP_HOST'], '', $request);
214: $front = new FrontController();
215:
216: try{
217: $front->loadController(false);
218: $this->fail('testing that a request to a bad URL will result in a ResourceNotFoundException exception');
219: }catch (ResourceNotFoundException $e) {
220: $this->assertTrue($e->getMessage() != '', 'testing that a request to a bad URL will result in a ResourceNotFoundException exception');
221: }
222: }
223:
224: 225: 226: 227: 228:
229: public function testDefineAlias() {
230: $front = new FrontController();
231: $front->registerAlias('ViewArticleTitle','article','title');
232:
233: $this->assertTrue($front->hasAlias('ViewArticleTitle'), 'testing the setting up and checking for the existence of a controller alias');
234: $this->assertTrue($front->checkAlias('article'), 'testing the setting up and checking for the existence of a controller alias');
235: $this->assertEquals('ViewArticleTitle', $front->getAliasController('article'),
236: 'testing the setting up and checking for the existence of a controller alias');
237: $this->assertEquals('article', $front->getControllerAlias('ViewArticleTitle'),
238: 'testing the setting up and checking for the existence of a controller alias');
239: }
240:
241: 242: 243: 244: 245:
246: public function testAccessingAliasParamNames() {
247: $front = new FrontController();
248: $front->registerAlias('ViewArticleTitle','article','title');
249:
250: $this->assertEquals('title', $front->getAliasParam('article'), 'testing the accessing of the expected param for a given alias/controller');
251: $this->assertEquals('title', $front->getControllerParam('ViewArticleTitle'), 'testing the accessing of the expected param for a given alias/controller');
252: }
253:
254: 255: 256: 257: 258:
259: public function testRegisterFilterGood() {
260: try {
261: $front = new FrontController();
262: $front->registerFilter(new ClientBlacklistFilter());
263:
264: $found = false;
265:
266: foreach ($front->getFilters() as $filter) {
267: if($filter instanceof ClientBlacklistFilter)
268: $found = true;
269: }
270: $this->assertTrue($found, 'testing the registerFilter method with a valid filter object');
271: }catch (IllegalArguementException $e) {
272: $this->fail('testing the registerFilter method with a valid filter object');
273: }
274: }
275:
276: 277: 278: 279: 280:
281: public function testRegisterFilterBad() {
282: try {
283: $front = new FrontController();
284: $front->registerFilter(new FrontController());
285:
286: $this->fail('testing the registerFilter method with a bad filter object');
287: }catch (IllegalArguementException $e) {
288: $this->assertEquals('Supplied filter object is not a valid AlphaFilterInterface instance!', $e->getMessage(), 'testing the registerFilter method with a bad filter object');
289: }
290: }
291: }
292:
293: ?>