aboutsummaryrefslogtreecommitdiffstats
path: root/tests/profilefields/type_bool_test.php
blob: 86cee66f5a107005870e063e24e69e00221d1a4b (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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
<?php
/**
 * @package testing
 * @copyright (c) 2014 phpBB Group
 * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
 *
 */

class phpbb_profilefield_type_bool_test extends phpbb_test_case
{
    protected $cp;
    protected $field_options = array();
    protected $options = array();

    /**
     * Sets up basic test objects
     *
     * @access public
     * @return void
     */
    public function setUp()
    {
        $user = $this->getMock('\phpbb\user');
        $user->expects($this->any())
            ->method('lang')
            ->will($this->returnCallback(array($this, 'return_callback_implode')));

        $lang = $this->getMock('\phpbb\profilefields\lang_helper', array(), array(null, null));

        $lang->expects($this->any())
            ->method('get_options_lang');

        $lang->expects($this->any())
            ->method('is_set')
            ->will($this->returnCallback(array($this, 'is_set_callback')));

        $lang->expects($this->any())
            ->method('get')
            ->will($this->returnCallback(array($this, 'get')));

        $request = $this->getMock('\phpbb\request\request');
        $template = $this->getMock('\phpbb\template\template');

        $this->cp = new \phpbb\profilefields\type\type_bool(
            $lang,
            $request,
            $template,
            $user
        );

        $this->field_options = array(
            'field_type'       => '\phpbb\profilefields\type\type_bool',
            'field_name' 	   => 'field',
            'field_id'	 	   => 1,
            'lang_id'	 	   => 1,
            'lang_name'        => 'field',
            'field_required'   => false,
            'field_default_value' => 1,
            'field_length' => 1,
        );

        $this->options = array(
            0 => 'Yes',
            1 => 'No',
        );
    }

    public function get_validate_profile_field_data()
    {
        return array(
                array(
                    false,
                    array('field_required' => true),
                    'FIELD_REQUIRED-field',
                    'Field should not accept empty values for required fields',
                ),
        );
    }

    /**
     * @dataProvider get_validate_profile_field_data
     */
    public function test_validate_profile_field($value, $field_options, $expected, $description)
    {
        $field_options = array_merge($this->field_options, $field_options);

        $result = $this->cp->validate_profile_field($value, $field_options);

        $this->assertSame($expected, $result, $description);
    }

    public function get_profile_value_data()
    {
        return array(
                array(
                    false,
                    array('field_show_novalue' => true),
                    'No',
                    'Field should output the default value',
                ),
                array(
                    false,
                    array('field_show_novalue' => false, 'field_length' => 2),
                    null,
                    'Field should not show anything for empty value',
                ),
                array(
                    0,
                    array(),
                    'Yes',
                    'Field should show the set value',
                ),
        );
    }


    /**
     * @dataProvider get_profile_value_data
     */
    public function test_get_profile_value($value, $field_options, $expected, $description)
    {
        $field_options = array_merge($this->field_options, $field_options);

        $result = $this->cp->get_profile_value($value, $field_options);

        $this->assertSame($expected, $result, $description);
    }

    public function is_set_callback($field_id, $lang_id, $field_value)
    {
        return isset($this->options[$field_value]);
    }

    public function get($field_id, $lang_id, $field_value)
    {
        return $this->options[$field_value];
    }

    public function return_callback_implode()
    {
        return implode('-', func_get_args());
    }
}