aboutsummaryrefslogtreecommitdiffstats
path: root/tests/functional/posting_test.php
blob: f54a3591b2d5001b879e24fe17b92d7ef0a09295 (plain)
1
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
<?php
/**
*
* @package testing
* @copyright (c) 2012 phpBB Group
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/

/**
* @group functional
*/
class phpbb_functional_posting_test extends phpbb_functional_test_case
{
	public function test_post_new_topic()
	{
		$this->login();
		$this->add_lang('posting');

		$crawler = $this->request('GET', 'posting.php?mode=post&f=2&sid=' . $this->sid);
		$this->assertContains($this->lang('POST_TOPIC'), $crawler->filter('html')->text());

		$hidden_fields = array();
		$hidden_fields[] = $crawler->filter('[type="hidden"]')->each(function ($node, $i) {
			return array('name' => $node->getAttribute('name'), 'value' => $node->getAttribute('value'));
		});

		$test_message = 'This is a test topic posted by the testing framework.';
		$form_data = array(
			'subject'		=> 'Test Topic 1',
			'message'		=> $test_message,
			'post'			=> true,
			'f'				=> 2,
			'mode'			=> 'post',
			'sid'			=> $this->sid,
		);

		foreach ($hidden_fields as $fields)
		{
			foreach($fields as $field)
			{
				$form_data[$field['name']] = $field['value'];
			}
		}

		// Bypass time restriction that said that if the lastclick time (i.e. time when the form was opened)
		// is not at least 2 seconds before submission, cancel the form
		$form_data['lastclick'] = 0;

		// I use a request because the form submission method does not allow you to send data that is not
		// contained in one of the actual form fields that the browser sees (i.e. it ignores "hidden" inputs)
		// Instead, I send it as a request with the submit button "post" set to true.
		$crawler = $this->client->request('POST', 'posting.php', $form_data);
		$this->assertContains($this->lang('POST_STORED'), $crawler->filter('html')->text());

		$crawler = $this->request('GET', 'viewtopic.php?t=2&sid=' . $this->sid);
		$this->assertContains($test_message, $crawler->filter('html')->text());
	}

	public function test_post_reply()
	{
		$this->login();
		$this->add_lang('posting');

		$crawler = $this->request('GET', 'posting.php?mode=reply&t=2&f=2&sid=' . $this->sid);
		$this->assertContains($this->lang('POST_REPLY'), $crawler->filter('html')->text());

		$hidden_fields = array();
		$hidden_fields[] = $crawler->filter('[type="hidden"]')->each(function ($node, $i) {
			return array('name' => $node->getAttribute('name'), 'value' => $node->getAttribute('value'));
		});

		$test_message = 'This is a test post posted by the testing framework.';
		$form_data = array(
			'subject'		=> 'Re: Test Topic 1',
			'message'		=> $test_message,
			'post'			=> true,
			't'				=> 2,
			'f'				=> 2,
			'mode'			=> 'reply',
			'sid'			=> $this->sid,
		);

		foreach ($hidden_fields as $fields)
		{
			foreach($fields as $field)
			{
				$form_data[$field['name']] = $field['value'];
			}
		}

		// For reasoning behind the following command, see the test_post_new_topic() test
		$form_data['lastclick'] = 0;

		// Submit the post
		$crawler = $this->client->request('POST', 'posting.php', $form_data);
		$this->assertContains($this->lang('POST_STORED'), $crawler->filter('html')->text());

		$crawler = $this->request('GET', 'viewtopic.php?t=2&sid=' . $this->sid);
		$this->assertContains($test_message, $crawler->filter('html')->text());
	}
}