diff --git a/tests/functional/fileupload_test.php b/tests/functional/fileupload_test.php new file mode 100644 index 0000000000..ff62bad7bd --- /dev/null +++ b/tests/functional/fileupload_test.php @@ -0,0 +1,86 @@ +add_lang('posting'); + $this->login(); + + // Test 1: Invalid extension + $crawler = $this->request('GET', 'posting.php?mode=reply&f=2&t=1&sid=' . $this->sid); + $form = $crawler->selectButton('add_file')->form(); + $form['fileupload']->upload($path . 'illegal-extension.bif'); + $crawler = $this->client->submit($form); + $this->assertEquals(1, $crawler->filter('p.error')->count()); + + // Test 2: Empty file + $crawler = $this->request('GET', 'posting.php?mode=reply&f=2&t=1&sid=' . $this->sid); + $form = $crawler->selectButton('add_file')->form(); + $form['fileupload']->upload($path . 'empty.png'); + $crawler = $this->client->submit($form); + $this->assertEquals(1, $crawler->filter('p.error')->count()); + + // Test 3: File too large + $crawler = $this->request('GET', 'posting.php?mode=reply&f=2&t=1&sid=' . $this->sid); + $form = $crawler->selectButton('add_file')->form(); + $form['fileupload']->upload($path . 'too-large.png'); + $crawler = $this->client->submit($form); + $this->assertEquals(1, $crawler->filter('div#message')->count()); + + // Test 4: Valid file + $crawler = $this->request('GET', 'posting.php?mode=reply&f=2&t=1&sid=' . $this->sid); + $form = $crawler->selectButton('add_file')->form(); + $form['fileupload']->upload($path . 'valid.jpg'); + $crawler = $this->client->submit($form); + $this->assertEquals(0, $crawler->filter('p.error')->count()); + $this->assertContains($this->lang('POSTED_ATTACHMENTS'), $crawler->filter('#postform h3')->eq(1)->text()); + } + + public function test_remote_upload() + { + // Only doing this within the functional framework because we need a + // URL + global $config; + + if (!is_array($config)) + { + $config = array(); + } + + $config['rand_seed'] = ''; + $config['rand_seed_last_update'] = time() + 600; + + // Test 1: Invalid extension + $upload = new fileupload('', array('jpg'), 100); + $file = $upload->remote_upload('http://example.com/image.gif'); + $this->assertEquals(1, sizeof($file->error)); + + // Test 2: Non-existant file + $upload = new fileupload('', array('jpg'), 100); + $file = $upload->remote_upload('http://example.com/image.jpg'); + $this->assertEquals(1, sizeof($file->error)); + + // Test 3: File too large + $upload = new fileupload('', array('gif'), 100); + $file = $upload->remote_upload($this->root_url . 'styles/prosilver/theme/images/forum_read.gif'); + $this->assertEquals(1, sizeof($file->error)); + + // Test 4: Successful upload + $upload = new fileupload('', array('gif'), 1000); + $file = $upload->remote_upload($this->root_url . 'styles/prosilver/theme/images/forum_read.gif'); + $this->assertEquals(0, sizeof($file->error)); + $this->assertTrue(file_exists($file->filename)); + } +} diff --git a/tests/functional/fixtures/files/empty.png b/tests/functional/fixtures/files/empty.png new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/functional/fixtures/files/illegal-extension.bif b/tests/functional/fixtures/files/illegal-extension.bif new file mode 100644 index 0000000000..3cd5038e38 Binary files /dev/null and b/tests/functional/fixtures/files/illegal-extension.bif differ diff --git a/tests/functional/fixtures/files/too-large.png b/tests/functional/fixtures/files/too-large.png new file mode 100644 index 0000000000..ed4b0abd80 Binary files /dev/null and b/tests/functional/fixtures/files/too-large.png differ diff --git a/tests/functional/fixtures/files/valid.jpg b/tests/functional/fixtures/files/valid.jpg new file mode 100644 index 0000000000..95a87ddbdf Binary files /dev/null and b/tests/functional/fixtures/files/valid.jpg differ