Completed
Push — master ( e42a4c...f187a0 )
by Daniel
03:17
created

CommentsTest::setUp()   B

Complexity

Conditions 1
Paths 1

Size

Total Lines 24
Code Lines 16

Duplication

Lines 23
Ratio 95.83 %
Metric Value
dl 23
loc 24
rs 8.9713
cc 1
eloc 16
nc 1
nop 0
1
<?php
2
3
/**
4
 * @package comments
5
 */
6
class CommentsTest extends FunctionalTest
0 ignored issues
show
Coding Style Compatibility introduced by
PSR1 recommends that each class must be in a namespace of at least one level to avoid collisions.

You can fix this by adding a namespace to your class:

namespace YourVendor;

class YourClass { }

When choosing a vendor namespace, try to pick something that is not too generic to avoid conflicts with other libraries.

Loading history...
7
{
8
9
    public static $fixture_file = 'comments/tests/CommentsTest.yml';
10
11
    protected $extraDataObjects = array(
12
        'CommentableItem',
13
        'CommentableItemEnabled',
14
        'CommentableItemDisabled'
15
    );
16
17 View Code Duplication
    public function setUp()
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
18
    {
19
        parent::setUp();
20
        Config::nest();
21
22
        // Set good default values
23
        Config::inst()->update('CommentsExtension', 'comments', array(
24
            'enabled' => true,
25
            'enabled_cms' => false,
26
            'require_login' => false,
27
            'require_login_cms' => false,
28
            'required_permission' => false,
29
            'require_moderation_nonmembers' => false,
30
            'require_moderation' => false,
31
            'require_moderation_cms' => false,
32
            'frontend_moderation' => false,
33
            'frontend_spam' => false,
34
        ));
35
36
        // Configure this dataobject
37
        Config::inst()->update('CommentableItem', 'comments', array(
38
            'enabled_cms' => true
39
        ));
40
    }
41
42
    public function tearDown()
43
    {
44
        Config::unnest();
45
        parent::tearDown();
46
    }
47
48
    public function testCommentsList()
49
    {
50
        // comments don't require moderation so unmoderated comments can be
51
        // shown but not spam posts
52
        Config::inst()->update('CommentableItem', 'comments', array(
53
            'require_moderation_nonmembers' => false,
54
            'require_moderation' => false,
55
            'require_moderation_cms' => false,
56
        ));
57
58
        $item = $this->objFromFixture('CommentableItem', 'spammed');
59
        $this->assertEquals('None', $item->ModerationRequired);
0 ignored issues
show
Bug introduced by
The method assertEquals() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
60
61
        $this->assertDOSEquals(array(
62
            array('Name' => 'Comment 1'),
63
            array('Name' => 'Comment 3')
64
        ), $item->Comments(), 'Only 2 non spam posts should be shown');
0 ignored issues
show
Unused Code introduced by
The call to CommentsTest::assertDOSEquals() has too many arguments starting with 'Only 2 non spam posts should be shown'.

This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue.

If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress.

In this case you can add the @ignore PhpDoc annotation to the duplicate definition and it will be ignored.

Loading history...
65
66
        // when moderated, only moderated, non spam posts should be shown.
67
        Config::inst()->update('CommentableItem', 'comments', array('require_moderation_nonmembers' => true));
68
        $this->assertEquals('NonMembersOnly', $item->ModerationRequired);
0 ignored issues
show
Bug introduced by
The method assertEquals() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
69
70
        // Check that require_moderation overrides this option
71
        Config::inst()->update('CommentableItem', 'comments', array('require_moderation' => true));
72
        $this->assertEquals('Required', $item->ModerationRequired);
0 ignored issues
show
Bug introduced by
The method assertEquals() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
73
74
        $this->assertDOSEquals(array(
75
            array('Name' => 'Comment 3')
76
        ), $item->Comments(), 'Only 1 non spam, moderated post should be shown');
0 ignored issues
show
Unused Code introduced by
The call to CommentsTest::assertDOSEquals() has too many arguments starting with 'Only 1 non spam, moderated post should be shown'.

This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue.

If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress.

In this case you can add the @ignore PhpDoc annotation to the duplicate definition and it will be ignored.

Loading history...
77
        $this->assertEquals(1, $item->Comments()->Count());
0 ignored issues
show
Bug introduced by
The method assertEquals() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
78
79
        // require_moderation_nonmembers still filters out unmoderated comments
80
        Config::inst()->update('CommentableItem', 'comments', array('require_moderation' => false));
81
        $this->assertEquals(1, $item->Comments()->Count());
0 ignored issues
show
Bug introduced by
The method assertEquals() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
82
83
        Config::inst()->update('CommentableItem', 'comments', array('require_moderation_nonmembers' => false));
84
        $this->assertEquals(2, $item->Comments()->Count());
0 ignored issues
show
Bug introduced by
The method assertEquals() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
85
86
        // With unmoderated comments set to display in frontend
87
        Config::inst()->update('CommentableItem', 'comments', array(
88
            'require_moderation' => true,
89
            'frontend_moderation' => true
90
        ));
91
        $this->assertEquals(1, $item->Comments()->Count());
0 ignored issues
show
Bug introduced by
The method assertEquals() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
92
93
        $this->logInWithPermission('ADMIN');
94
        $this->assertEquals(2, $item->Comments()->Count());
0 ignored issues
show
Bug introduced by
The method assertEquals() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
95
96
        // With spam comments set to display in frontend
97
        Config::inst()->update('CommentableItem', 'comments', array(
98
            'require_moderation' => true,
99
            'frontend_moderation' => false,
100
            'frontend_spam' => true,
101
        ));
102
        if ($member = Member::currentUser()) {
103
            $member->logOut();
104
        }
105
        $this->assertEquals(1, $item->Comments()->Count());
0 ignored issues
show
Bug introduced by
The method assertEquals() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
106
107
        $this->logInWithPermission('ADMIN');
108
        $this->assertEquals(2, $item->Comments()->Count());
0 ignored issues
show
Bug introduced by
The method assertEquals() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
109
110
111
        // With spam and unmoderated comments set to display in frontend
112
        Config::inst()->update('CommentableItem', 'comments', array(
113
            'require_moderation' => true,
114
            'frontend_moderation' => true,
115
            'frontend_spam' => true,
116
        ));
117
        if ($member = Member::currentUser()) {
118
            $member->logOut();
119
        }
120
        $this->assertEquals(1, $item->Comments()->Count());
0 ignored issues
show
Bug introduced by
The method assertEquals() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
121
122
        $this->logInWithPermission('ADMIN');
123
        $this->assertEquals(4, $item->Comments()->Count());
0 ignored issues
show
Bug introduced by
The method assertEquals() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
124
    }
125
126
    /**
127
     * Test moderation options configured via the CMS
128
     */
129
    public function testCommentCMSModerationList()
130
    {
131
        // comments don't require moderation so unmoderated comments can be
132
        // shown but not spam posts
133
        Config::inst()->update('CommentableItem', 'comments', array(
134
            'require_moderation' => true,
135
            'require_moderation_cms' => true,
136
        ));
137
138
        $item = $this->objFromFixture('CommentableItem', 'spammed');
139
        $this->assertEquals('None', $item->ModerationRequired);
0 ignored issues
show
Bug introduced by
The method assertEquals() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
140
141
        $this->assertDOSEquals(array(
142
            array('Name' => 'Comment 1'),
143
            array('Name' => 'Comment 3')
144
        ), $item->Comments(), 'Only 2 non spam posts should be shown');
0 ignored issues
show
Unused Code introduced by
The call to CommentsTest::assertDOSEquals() has too many arguments starting with 'Only 2 non spam posts should be shown'.

This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue.

If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress.

In this case you can add the @ignore PhpDoc annotation to the duplicate definition and it will be ignored.

Loading history...
145
146
        // when moderated, only moderated, non spam posts should be shown.
147
        $item->ModerationRequired = 'NonMembersOnly';
148
        $item->write();
149
        $this->assertEquals('NonMembersOnly', $item->ModerationRequired);
0 ignored issues
show
Bug introduced by
The method assertEquals() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
150
151
        // Check that require_moderation overrides this option
152
        $item->ModerationRequired = 'Required';
153
        $item->write();
154
        $this->assertEquals('Required', $item->ModerationRequired);
0 ignored issues
show
Bug introduced by
The method assertEquals() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
155
156
        $this->assertDOSEquals(array(
157
            array('Name' => 'Comment 3')
158
        ), $item->Comments(), 'Only 1 non spam, moderated post should be shown');
0 ignored issues
show
Unused Code introduced by
The call to CommentsTest::assertDOSEquals() has too many arguments starting with 'Only 1 non spam, moderated post should be shown'.

This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue.

If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress.

In this case you can add the @ignore PhpDoc annotation to the duplicate definition and it will be ignored.

Loading history...
159
        $this->assertEquals(1, $item->Comments()->Count());
0 ignored issues
show
Bug introduced by
The method assertEquals() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
160
161
        // require_moderation_nonmembers still filters out unmoderated comments
162
        $item->ModerationRequired = 'NonMembersOnly';
163
        $item->write();
164
        $this->assertEquals(1, $item->Comments()->Count());
0 ignored issues
show
Bug introduced by
The method assertEquals() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
165
166
        $item->ModerationRequired = 'None';
167
        $item->write();
168
        $this->assertEquals(2, $item->Comments()->Count());
0 ignored issues
show
Bug introduced by
The method assertEquals() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
169
    }
170
171
    public function testCanPostComment()
172
    {
173
        Config::inst()->update('CommentableItem', 'comments', array(
174
            'require_login' => false,
175
            'require_login_cms' => false,
176
            'required_permission' => false,
177
        ));
178
        $item = $this->objFromFixture('CommentableItem', 'first');
179
        $item2 = $this->objFromFixture('CommentableItem', 'second');
180
181
        // Test restriction free commenting
182
        if ($member = Member::currentUser()) {
183
            $member->logOut();
184
        }
185
        $this->assertFalse($item->CommentsRequireLogin);
0 ignored issues
show
Bug introduced by
The method assertFalse() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
186
        $this->assertTrue($item->canPostComment());
0 ignored issues
show
Bug introduced by
The method assertTrue() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
187
188
        // Test permission required to post
189
        Config::inst()->update('CommentableItem', 'comments', array(
190
            'require_login' => true,
191
            'required_permission' => 'POSTING_PERMISSION',
192
        ));
193
        $this->assertTrue($item->CommentsRequireLogin);
0 ignored issues
show
Bug introduced by
The method assertTrue() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
194
        $this->assertFalse($item->canPostComment());
0 ignored issues
show
Bug introduced by
The method assertFalse() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
195
        $this->logInWithPermission('WRONG_ONE');
196
        $this->assertFalse($item->canPostComment());
0 ignored issues
show
Bug introduced by
The method assertFalse() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
197
        $this->logInWithPermission('POSTING_PERMISSION');
198
        $this->assertTrue($item->canPostComment());
0 ignored issues
show
Bug introduced by
The method assertTrue() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
199
        $this->logInWithPermission('ADMIN');
200
        $this->assertTrue($item->canPostComment());
0 ignored issues
show
Bug introduced by
The method assertTrue() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
201
202
        // Test require login to post, but not any permissions
203
        Config::inst()->update('CommentableItem', 'comments', array(
204
            'required_permission' => false,
205
        ));
206
        $this->assertTrue($item->CommentsRequireLogin);
0 ignored issues
show
Bug introduced by
The method assertTrue() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
207
        if ($member = Member::currentUser()) {
208
            $member->logOut();
209
        }
210
        $this->assertFalse($item->canPostComment());
0 ignored issues
show
Bug introduced by
The method assertFalse() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
211
        $this->logInWithPermission('ANY_PERMISSION');
212
        $this->assertTrue($item->canPostComment());
0 ignored issues
show
Bug introduced by
The method assertTrue() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
213
214
        // Test options set via CMS
215
        Config::inst()->update('CommentableItem', 'comments', array(
216
            'require_login' => true,
217
            'require_login_cms' => true,
218
        ));
219
        $this->assertFalse($item->CommentsRequireLogin);
0 ignored issues
show
Bug introduced by
The method assertFalse() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
220
        $this->assertTrue($item2->CommentsRequireLogin);
0 ignored issues
show
Bug introduced by
The method assertTrue() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
221
        if ($member = Member::currentUser()) {
222
            $member->logOut();
223
        }
224
        $this->assertTrue($item->canPostComment());
0 ignored issues
show
Bug introduced by
The method assertTrue() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
225
        $this->assertFalse($item2->canPostComment());
0 ignored issues
show
Bug introduced by
The method assertFalse() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
226
227
        // Login grants permission to post
228
        $this->logInWithPermission('ANY_PERMISSION');
229
        $this->assertTrue($item->canPostComment());
0 ignored issues
show
Bug introduced by
The method assertTrue() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
230
        $this->assertTrue($item2->canPostComment());
0 ignored issues
show
Bug introduced by
The method assertTrue() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
231
    }
232
    public function testDeleteComment()
233
    {
234
        // Test anonymous user
235
        if ($member = Member::currentUser()) {
236
            $member->logOut();
237
        }
238
        $comment = $this->objFromFixture('Comment', 'firstComA');
239
        $commentID = $comment->ID;
240
        $this->assertNull($comment->DeleteLink(), 'No permission to see delete link');
0 ignored issues
show
Bug introduced by
The method assertNull() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
241
        $delete = $this->get('CommentingController/delete/'.$comment->ID.'?ajax=1');
242
        $this->assertEquals(403, $delete->getStatusCode());
0 ignored issues
show
Bug introduced by
The method assertEquals() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
243
        $check = DataObject::get_by_id('Comment', $commentID);
244
        $this->assertTrue($check && $check->exists());
0 ignored issues
show
Bug introduced by
The method assertTrue() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
245
246
        // Test non-authenticated user
247
        $this->logInAs('visitor');
248
        $this->assertNull($comment->DeleteLink(), 'No permission to see delete link');
0 ignored issues
show
Bug introduced by
The method assertNull() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
249
250
        // Test authenticated user
251
        $this->logInAs('commentadmin');
252
        $comment = $this->objFromFixture('Comment', 'firstComA');
253
        $commentID = $comment->ID;
254
        $adminComment1Link = $comment->DeleteLink();
255
        $this->assertContains('CommentingController/delete/'.$commentID.'?t=', $adminComment1Link);
256
257
        // Test that this link can't be shared / XSS exploited
258
        $this->logInAs('commentadmin2');
259
        $delete = $this->get($adminComment1Link);
260
        $this->assertEquals(400, $delete->getStatusCode());
0 ignored issues
show
Bug introduced by
The method assertEquals() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
261
        $check = DataObject::get_by_id('Comment', $commentID);
262
        $this->assertTrue($check && $check->exists());
0 ignored issues
show
Bug introduced by
The method assertTrue() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
263
264
        // Test that this other admin can delete the comment with their own link
265
        $adminComment2Link = $comment->DeleteLink();
266
        $this->assertNotEquals($adminComment2Link, $adminComment1Link);
0 ignored issues
show
Bug introduced by
The method assertNotEquals() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
267
        $this->autoFollowRedirection = false;
268
        $delete = $this->get($adminComment2Link);
269
        $this->assertEquals(302, $delete->getStatusCode());
0 ignored issues
show
Bug introduced by
The method assertEquals() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
270
        $check = DataObject::get_by_id('Comment', $commentID);
271
        $this->assertFalse($check && $check->exists());
0 ignored issues
show
Bug introduced by
The method assertFalse() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
272
    }
273
274 View Code Duplication
    public function testSpamComment()
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
275
    {
276
        // Test anonymous user
277
        if ($member = Member::currentUser()) {
278
            $member->logOut();
279
        }
280
        $comment = $this->objFromFixture('Comment', 'firstComA');
281
        $commentID = $comment->ID;
282
        $this->assertNull($comment->SpamLink(), 'No permission to see mark as spam link');
0 ignored issues
show
Bug introduced by
The method assertNull() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
283
        $spam = $this->get('CommentingController/spam/'.$comment->ID.'?ajax=1');
284
        $this->assertEquals(403, $spam->getStatusCode());
0 ignored issues
show
Bug introduced by
The method assertEquals() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
285
        $check = DataObject::get_by_id('Comment', $commentID);
286
        $this->assertEquals(0, $check->IsSpam, 'No permission to mark as spam');
0 ignored issues
show
Bug introduced by
The method assertEquals() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
287
288
        // Test non-authenticated user
289
        $this->logInAs('visitor');
290
        $this->assertNull($comment->SpamLink(), 'No permission to see mark as spam link');
0 ignored issues
show
Bug introduced by
The method assertNull() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
291
292
        // Test authenticated user
293
        $this->logInAs('commentadmin');
294
        $comment = $this->objFromFixture('Comment', 'firstComA');
295
        $commentID = $comment->ID;
296
        $adminComment1Link = $comment->SpamLink();
297
        $this->assertContains('CommentingController/spam/'.$commentID.'?t=', $adminComment1Link);
298
299
        // Test that this link can't be shared / XSS exploited
300
        $this->logInAs('commentadmin2');
301
        $spam = $this->get($adminComment1Link);
302
        $this->assertEquals(400, $spam->getStatusCode());
0 ignored issues
show
Bug introduced by
The method assertEquals() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
303
        $check = DataObject::get_by_id('Comment', $comment->ID);
304
        $this->assertEquals(0, $check->IsSpam, 'No permission to mark as spam');
0 ignored issues
show
Bug introduced by
The method assertEquals() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
305
306
        // Test that this other admin can spam the comment with their own link
307
        $adminComment2Link = $comment->SpamLink();
308
        $this->assertNotEquals($adminComment2Link, $adminComment1Link);
0 ignored issues
show
Bug introduced by
The method assertNotEquals() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
309
        $this->autoFollowRedirection = false;
310
        $spam = $this->get($adminComment2Link);
311
        $this->assertEquals(302, $spam->getStatusCode());
0 ignored issues
show
Bug introduced by
The method assertEquals() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
312
        $check = DataObject::get_by_id('Comment', $commentID);
313
        $this->assertEquals(1, $check->IsSpam);
0 ignored issues
show
Bug introduced by
The method assertEquals() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
314
315
        // Cannot re-spam spammed comment
316
        $this->assertNull($check->SpamLink());
0 ignored issues
show
Bug introduced by
The method assertNull() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
317
    }
318
319 View Code Duplication
    public function testHamComment()
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
320
    {
321
        // Test anonymous user
322
        if ($member = Member::currentUser()) {
323
            $member->logOut();
324
        }
325
        $comment = $this->objFromFixture('Comment', 'secondComC');
326
        $commentID = $comment->ID;
327
        $this->assertNull($comment->HamLink(), 'No permission to see mark as ham link');
0 ignored issues
show
Bug introduced by
The method assertNull() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
328
        $ham = $this->get('CommentingController/ham/'.$comment->ID.'?ajax=1');
329
        $this->assertEquals(403, $ham->getStatusCode());
0 ignored issues
show
Bug introduced by
The method assertEquals() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
330
        $check = DataObject::get_by_id('Comment', $commentID);
331
        $this->assertEquals(1, $check->IsSpam, 'No permission to mark as ham');
0 ignored issues
show
Bug introduced by
The method assertEquals() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
332
333
        // Test non-authenticated user
334
        $this->logInAs('visitor');
335
        $this->assertNull($comment->HamLink(), 'No permission to see mark as ham link');
0 ignored issues
show
Bug introduced by
The method assertNull() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
336
337
        // Test authenticated user
338
        $this->logInAs('commentadmin');
339
        $comment = $this->objFromFixture('Comment', 'secondComC');
340
        $commentID = $comment->ID;
341
        $adminComment1Link = $comment->HamLink();
342
        $this->assertContains('CommentingController/ham/'.$commentID.'?t=', $adminComment1Link);
343
344
        // Test that this link can't be shared / XSS exploited
345
        $this->logInAs('commentadmin2');
346
        $ham = $this->get($adminComment1Link);
347
        $this->assertEquals(400, $ham->getStatusCode());
0 ignored issues
show
Bug introduced by
The method assertEquals() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
348
        $check = DataObject::get_by_id('Comment', $comment->ID);
349
        $this->assertEquals(1, $check->IsSpam, 'No permission to mark as ham');
0 ignored issues
show
Bug introduced by
The method assertEquals() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
350
351
        // Test that this other admin can ham the comment with their own link
352
        $adminComment2Link = $comment->HamLink();
353
        $this->assertNotEquals($adminComment2Link, $adminComment1Link);
0 ignored issues
show
Bug introduced by
The method assertNotEquals() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
354
        $this->autoFollowRedirection = false;
355
        $ham = $this->get($adminComment2Link);
356
        $this->assertEquals(302, $ham->getStatusCode());
0 ignored issues
show
Bug introduced by
The method assertEquals() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
357
        $check = DataObject::get_by_id('Comment', $commentID);
358
        $this->assertEquals(0, $check->IsSpam);
0 ignored issues
show
Bug introduced by
The method assertEquals() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
359
360
        // Cannot re-ham hammed comment
361
        $this->assertNull($check->HamLink());
0 ignored issues
show
Bug introduced by
The method assertNull() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
362
    }
363
364 View Code Duplication
    public function testApproveComment()
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
365
    {
366
        // Test anonymous user
367
        if ($member = Member::currentUser()) {
368
            $member->logOut();
369
        }
370
        $comment = $this->objFromFixture('Comment', 'secondComB');
371
        $commentID = $comment->ID;
372
        $this->assertNull($comment->ApproveLink(), 'No permission to see approve link');
0 ignored issues
show
Bug introduced by
The method assertNull() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
373
        $approve = $this->get('CommentingController/approve/'.$comment->ID.'?ajax=1');
374
        $this->assertEquals(403, $approve->getStatusCode());
0 ignored issues
show
Bug introduced by
The method assertEquals() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
375
        $check = DataObject::get_by_id('Comment', $commentID);
376
        $this->assertEquals(0, $check->Moderated, 'No permission to approve');
0 ignored issues
show
Bug introduced by
The method assertEquals() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
377
378
        // Test non-authenticated user
379
        $this->logInAs('visitor');
380
        $this->assertNull($comment->ApproveLink(), 'No permission to see approve link');
0 ignored issues
show
Bug introduced by
The method assertNull() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
381
382
        // Test authenticated user
383
        $this->logInAs('commentadmin');
384
        $comment = $this->objFromFixture('Comment', 'secondComB');
385
        $commentID = $comment->ID;
386
        $adminComment1Link = $comment->ApproveLink();
387
        $this->assertContains('CommentingController/approve/'.$commentID.'?t=', $adminComment1Link);
388
389
        // Test that this link can't be shared / XSS exploited
390
        $this->logInAs('commentadmin2');
391
        $approve = $this->get($adminComment1Link);
392
        $this->assertEquals(400, $approve->getStatusCode());
0 ignored issues
show
Bug introduced by
The method assertEquals() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
393
        $check = DataObject::get_by_id('Comment', $comment->ID);
394
        $this->assertEquals(0, $check->Moderated, 'No permission to approve');
0 ignored issues
show
Bug introduced by
The method assertEquals() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
395
396
        // Test that this other admin can approve the comment with their own link
397
        $adminComment2Link = $comment->ApproveLink();
398
        $this->assertNotEquals($adminComment2Link, $adminComment1Link);
0 ignored issues
show
Bug introduced by
The method assertNotEquals() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
399
        $this->autoFollowRedirection = false;
400
        $approve = $this->get($adminComment2Link);
401
        $this->assertEquals(302, $approve->getStatusCode());
0 ignored issues
show
Bug introduced by
The method assertEquals() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
402
        $check = DataObject::get_by_id('Comment', $commentID);
403
        $this->assertEquals(1, $check->Moderated);
0 ignored issues
show
Bug introduced by
The method assertEquals() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
404
405
        // Cannot re-approve approved comment
406
        $this->assertNull($check->ApproveLink());
0 ignored issues
show
Bug introduced by
The method assertNull() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
407
    }
408
409
    public function testCommenterURLWrite()
410
    {
411
        $comment = new Comment();
412
        // We only care about the CommenterURL, so only set that
413
        // Check a http and https URL. Add more test urls here as needed.
414
        $protocols = array(
415
            'Http',
416
            'Https',
417
        );
418
        $url = '://example.com';
419
420
        foreach ($protocols as $protocol) {
421
            $comment->CommenterURL = $protocol . $url;
0 ignored issues
show
Bug introduced by
The property CommenterURL does not seem to exist. Did you mean Comment?

An attempt at access to an undefined property has been detected. This may either be a typographical error or the property has been renamed but there are still references to its old name.

If you really want to allow access to undefined properties, you can define magic methods to allow access. See the php core documentation on Overloading.

Loading history...
422
            // The protocol should stay as if, assuming it is valid
423
            $comment->write();
424
            $this->assertEquals($comment->CommenterURL, $protocol . $url, $protocol . ':// is a valid protocol');
0 ignored issues
show
Bug introduced by
The property CommenterURL does not seem to exist. Did you mean Comment?

An attempt at access to an undefined property has been detected. This may either be a typographical error or the property has been renamed but there are still references to its old name.

If you really want to allow access to undefined properties, you can define magic methods to allow access. See the php core documentation on Overloading.

Loading history...
Bug introduced by
The method assertEquals() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
425
        }
426
    }
427
428
    public function testSanitizesWithAllowHtml()
429
    {
430
        if (!class_exists('HTMLPurifier')) {
431
            $this->markTestSkipped('HTMLPurifier class not found');
0 ignored issues
show
Bug introduced by
The method markTestSkipped() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
432
            return;
433
        }
434
435
        // Add p for paragraph
436
        // NOTE: The config method appears to append to the existing array
437
        Config::inst()->update('CommentableItem', 'comments', array(
438
            'html_allowed_elements' => array('p'),
439
        ));
440
441
        // Without HTML allowed
442
        $comment1 = new Comment();
443
        $comment1->AllowHtml = false;
444
        $comment1->BaseClass = 'CommentableItem';
445
        $comment1->Comment = '<p><script>alert("w00t")</script>my comment</p>';
446
        $comment1->write();
447
        $this->assertEquals(
0 ignored issues
show
Bug introduced by
The method assertEquals() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
448
            '<p><script>alert("w00t")</script>my comment</p>',
449
            $comment1->Comment,
450
            'Does not remove HTML tags with html_allowed=false, ' .
451
            'which is correct behaviour because the HTML will be escaped'
452
        );
453
454
        // With HTML allowed
455
        $comment2 = new Comment();
456
        $comment2->AllowHtml = true;
457
        $comment2->BaseClass = 'CommentableItem';
458
        $comment2->Comment = '<p><script>alert("w00t")</script>my comment</p>';
459
        $comment2->write();
460
        $this->assertEquals(
0 ignored issues
show
Bug introduced by
The method assertEquals() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
461
            '<p>my comment</p>',
462
            $comment2->Comment,
463
            'Removes HTML tags which are not on the whitelist'
464
        );
465
    }
466
467
    public function testDefaultTemplateRendersHtmlWithAllowHtml()
468
    {
469
        if (!class_exists('HTMLPurifier')) {
470
            $this->markTestSkipped('HTMLPurifier class not found');
0 ignored issues
show
Bug introduced by
The method markTestSkipped() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
471
        }
472
473
        Config::inst()->update('CommentableItem', 'comments', array(
474
            'html_allowed_elements' => array('p'),
475
        ));
476
477
        $item = new CommentableItem();
478
        $item->write();
479
480
        // Without HTML allowed
481
        $comment = new Comment();
482
        $comment->Comment = '<p>my comment</p>';
483
        $comment->AllowHtml = false;
484
        $comment->ParentID = $item->ID;
485
        $comment->BaseClass = 'CommentableItem';
486
        $comment->write();
487
488
        $html = $item->customise(array('CommentsEnabled' => true))->renderWith('CommentsInterface');
489
        $this->assertContains(
490
            '&lt;p&gt;my comment&lt;/p&gt;',
491
            $html
492
        );
493
494
        $comment->AllowHtml = true;
495
        $comment->write();
496
        $html = $item->customise(array('CommentsEnabled' => true))->renderWith('CommentsInterface');
497
        $this->assertContains(
498
            '<p>my comment</p>',
499
            $html
500
        );
501
    }
502
503
504
    /**
505
     * Tests whether comments are enabled or disabled by default
506
     */
507
    public function testDefaultEnabled()
508
    {
509
        // Ensure values are set via cms (not via config)
510
        Config::inst()->update('CommentableItem', 'comments', array(
511
            'enabled_cms' => true,
512
            'require_moderation_cms' => true,
513
            'require_login_cms' => true
514
        ));
515
516
        // With default = true
517
        $obj = new CommentableItem();
518
        $this->assertTrue((bool)$obj->getCommentsOption('enabled'), "Default setting is enabled");
0 ignored issues
show
Documentation Bug introduced by
The method getCommentsOption does not exist on object<CommentableItem>? Since you implemented __call, maybe consider adding a @method annotation.

If you implement __call and you know which methods are available, you can improve IDE auto-completion and static analysis by adding a @method annotation to the class.

This is often the case, when __call is implemented by a parent class and only the child class knows which methods exist:

class ParentClass {
    private $data = array();

    public function __call($method, array $args) {
        if (0 === strpos($method, 'get')) {
            return $this->data[strtolower(substr($method, 3))];
        }

        throw new \LogicException(sprintf('Unsupported method: %s', $method));
    }
}

/**
 * If this class knows which fields exist, you can specify the methods here:
 *
 * @method string getName()
 */
class SomeClass extends ParentClass { }
Loading history...
Bug introduced by
The method assertTrue() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
519
        $this->assertTrue((bool)$obj->ProvideComments);
0 ignored issues
show
Documentation introduced by
The property ProvideComments does not exist on object<CommentableItem>. Since you implemented __get, maybe consider adding a @property annotation.

Since your code implements the magic getter _get, this function will be called for any read access on an undefined variable. You can add the @property annotation to your class or interface to document the existence of this variable.

<?php

/**
 * @property int $x
 * @property int $y
 * @property string $text
 */
class MyLabel
{
    private $properties;

    private $allowedProperties = array('x', 'y', 'text');

    public function __get($name)
    {
        if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
            return $properties[$name];
        } else {
            return null;
        }
    }

    public function __set($name, $value)
    {
        if (in_array($name, $this->allowedProperties)) {
            $properties[$name] = $value;
        } else {
            throw new \LogicException("Property $name is not defined.");
        }
    }

}

If the property has read access only, you can use the @property-read annotation instead.

Of course, you may also just have mistyped another name, in which case you should fix the error.

See also the PhpDoc documentation for @property.

Loading history...
Bug introduced by
The method assertTrue() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
520
        $this->assertEquals('None', $obj->ModerationRequired);
0 ignored issues
show
Documentation introduced by
The property ModerationRequired does not exist on object<CommentableItem>. Since you implemented __get, maybe consider adding a @property annotation.

Since your code implements the magic getter _get, this function will be called for any read access on an undefined variable. You can add the @property annotation to your class or interface to document the existence of this variable.

<?php

/**
 * @property int $x
 * @property int $y
 * @property string $text
 */
class MyLabel
{
    private $properties;

    private $allowedProperties = array('x', 'y', 'text');

    public function __get($name)
    {
        if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
            return $properties[$name];
        } else {
            return null;
        }
    }

    public function __set($name, $value)
    {
        if (in_array($name, $this->allowedProperties)) {
            $properties[$name] = $value;
        } else {
            throw new \LogicException("Property $name is not defined.");
        }
    }

}

If the property has read access only, you can use the @property-read annotation instead.

Of course, you may also just have mistyped another name, in which case you should fix the error.

See also the PhpDoc documentation for @property.

Loading history...
Bug introduced by
The method assertEquals() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
521
        $this->assertFalse((bool)$obj->CommentsRequireLogin);
0 ignored issues
show
Documentation introduced by
The property CommentsRequireLogin does not exist on object<CommentableItem>. Since you implemented __get, maybe consider adding a @property annotation.

Since your code implements the magic getter _get, this function will be called for any read access on an undefined variable. You can add the @property annotation to your class or interface to document the existence of this variable.

<?php

/**
 * @property int $x
 * @property int $y
 * @property string $text
 */
class MyLabel
{
    private $properties;

    private $allowedProperties = array('x', 'y', 'text');

    public function __get($name)
    {
        if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
            return $properties[$name];
        } else {
            return null;
        }
    }

    public function __set($name, $value)
    {
        if (in_array($name, $this->allowedProperties)) {
            $properties[$name] = $value;
        } else {
            throw new \LogicException("Property $name is not defined.");
        }
    }

}

If the property has read access only, you can use the @property-read annotation instead.

Of course, you may also just have mistyped another name, in which case you should fix the error.

See also the PhpDoc documentation for @property.

Loading history...
Bug introduced by
The method assertFalse() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
522
523
        $obj = new CommentableItemEnabled();
524
        $this->assertTrue((bool)$obj->ProvideComments);
0 ignored issues
show
Bug introduced by
The method assertTrue() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
Documentation introduced by
The property ProvideComments does not exist on object<CommentableItemEnabled>. Since you implemented __get, maybe consider adding a @property annotation.

Since your code implements the magic getter _get, this function will be called for any read access on an undefined variable. You can add the @property annotation to your class or interface to document the existence of this variable.

<?php

/**
 * @property int $x
 * @property int $y
 * @property string $text
 */
class MyLabel
{
    private $properties;

    private $allowedProperties = array('x', 'y', 'text');

    public function __get($name)
    {
        if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
            return $properties[$name];
        } else {
            return null;
        }
    }

    public function __set($name, $value)
    {
        if (in_array($name, $this->allowedProperties)) {
            $properties[$name] = $value;
        } else {
            throw new \LogicException("Property $name is not defined.");
        }
    }

}

If the property has read access only, you can use the @property-read annotation instead.

Of course, you may also just have mistyped another name, in which case you should fix the error.

See also the PhpDoc documentation for @property.

Loading history...
525
        $this->assertEquals('Required', $obj->ModerationRequired);
0 ignored issues
show
Documentation introduced by
The property ModerationRequired does not exist on object<CommentableItemEnabled>. Since you implemented __get, maybe consider adding a @property annotation.

Since your code implements the magic getter _get, this function will be called for any read access on an undefined variable. You can add the @property annotation to your class or interface to document the existence of this variable.

<?php

/**
 * @property int $x
 * @property int $y
 * @property string $text
 */
class MyLabel
{
    private $properties;

    private $allowedProperties = array('x', 'y', 'text');

    public function __get($name)
    {
        if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
            return $properties[$name];
        } else {
            return null;
        }
    }

    public function __set($name, $value)
    {
        if (in_array($name, $this->allowedProperties)) {
            $properties[$name] = $value;
        } else {
            throw new \LogicException("Property $name is not defined.");
        }
    }

}

If the property has read access only, you can use the @property-read annotation instead.

Of course, you may also just have mistyped another name, in which case you should fix the error.

See also the PhpDoc documentation for @property.

Loading history...
Bug introduced by
The method assertEquals() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
526
        $this->assertTrue((bool)$obj->CommentsRequireLogin);
0 ignored issues
show
Documentation introduced by
The property CommentsRequireLogin does not exist on object<CommentableItemEnabled>. Since you implemented __get, maybe consider adding a @property annotation.

Since your code implements the magic getter _get, this function will be called for any read access on an undefined variable. You can add the @property annotation to your class or interface to document the existence of this variable.

<?php

/**
 * @property int $x
 * @property int $y
 * @property string $text
 */
class MyLabel
{
    private $properties;

    private $allowedProperties = array('x', 'y', 'text');

    public function __get($name)
    {
        if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
            return $properties[$name];
        } else {
            return null;
        }
    }

    public function __set($name, $value)
    {
        if (in_array($name, $this->allowedProperties)) {
            $properties[$name] = $value;
        } else {
            throw new \LogicException("Property $name is not defined.");
        }
    }

}

If the property has read access only, you can use the @property-read annotation instead.

Of course, you may also just have mistyped another name, in which case you should fix the error.

See also the PhpDoc documentation for @property.

Loading history...
Bug introduced by
The method assertTrue() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
527
528
        $obj = new CommentableItemDisabled();
529
        $this->assertFalse((bool)$obj->ProvideComments);
0 ignored issues
show
Documentation introduced by
The property ProvideComments does not exist on object<CommentableItemDisabled>. Since you implemented __get, maybe consider adding a @property annotation.

Since your code implements the magic getter _get, this function will be called for any read access on an undefined variable. You can add the @property annotation to your class or interface to document the existence of this variable.

<?php

/**
 * @property int $x
 * @property int $y
 * @property string $text
 */
class MyLabel
{
    private $properties;

    private $allowedProperties = array('x', 'y', 'text');

    public function __get($name)
    {
        if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
            return $properties[$name];
        } else {
            return null;
        }
    }

    public function __set($name, $value)
    {
        if (in_array($name, $this->allowedProperties)) {
            $properties[$name] = $value;
        } else {
            throw new \LogicException("Property $name is not defined.");
        }
    }

}

If the property has read access only, you can use the @property-read annotation instead.

Of course, you may also just have mistyped another name, in which case you should fix the error.

See also the PhpDoc documentation for @property.

Loading history...
Bug introduced by
The method assertFalse() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
530
        $this->assertEquals('None', $obj->ModerationRequired);
0 ignored issues
show
Documentation introduced by
The property ModerationRequired does not exist on object<CommentableItemDisabled>. Since you implemented __get, maybe consider adding a @property annotation.

Since your code implements the magic getter _get, this function will be called for any read access on an undefined variable. You can add the @property annotation to your class or interface to document the existence of this variable.

<?php

/**
 * @property int $x
 * @property int $y
 * @property string $text
 */
class MyLabel
{
    private $properties;

    private $allowedProperties = array('x', 'y', 'text');

    public function __get($name)
    {
        if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
            return $properties[$name];
        } else {
            return null;
        }
    }

    public function __set($name, $value)
    {
        if (in_array($name, $this->allowedProperties)) {
            $properties[$name] = $value;
        } else {
            throw new \LogicException("Property $name is not defined.");
        }
    }

}

If the property has read access only, you can use the @property-read annotation instead.

Of course, you may also just have mistyped another name, in which case you should fix the error.

See also the PhpDoc documentation for @property.

Loading history...
Bug introduced by
The method assertEquals() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
531
        $this->assertFalse((bool)$obj->CommentsRequireLogin);
0 ignored issues
show
Documentation introduced by
The property CommentsRequireLogin does not exist on object<CommentableItemDisabled>. Since you implemented __get, maybe consider adding a @property annotation.

Since your code implements the magic getter _get, this function will be called for any read access on an undefined variable. You can add the @property annotation to your class or interface to document the existence of this variable.

<?php

/**
 * @property int $x
 * @property int $y
 * @property string $text
 */
class MyLabel
{
    private $properties;

    private $allowedProperties = array('x', 'y', 'text');

    public function __get($name)
    {
        if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
            return $properties[$name];
        } else {
            return null;
        }
    }

    public function __set($name, $value)
    {
        if (in_array($name, $this->allowedProperties)) {
            $properties[$name] = $value;
        } else {
            throw new \LogicException("Property $name is not defined.");
        }
    }

}

If the property has read access only, you can use the @property-read annotation instead.

Of course, you may also just have mistyped another name, in which case you should fix the error.

See also the PhpDoc documentation for @property.

Loading history...
Bug introduced by
The method assertFalse() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
532
533
        // With default = false
534
        // Because of config rules about falsey values, apply config to object directly
535
        Config::inst()->update('CommentableItem', 'comments', array(
536
            'enabled' => false,
537
            'require_login' => true,
538
            'require_moderation' => true
539
        ));
540
        $obj = new CommentableItem();
541
        $this->assertFalse((bool)$obj->getCommentsOption('enabled'), "Default setting is disabled");
0 ignored issues
show
Documentation Bug introduced by
The method getCommentsOption does not exist on object<CommentableItem>? Since you implemented __call, maybe consider adding a @method annotation.

If you implement __call and you know which methods are available, you can improve IDE auto-completion and static analysis by adding a @method annotation to the class.

This is often the case, when __call is implemented by a parent class and only the child class knows which methods exist:

class ParentClass {
    private $data = array();

    public function __call($method, array $args) {
        if (0 === strpos($method, 'get')) {
            return $this->data[strtolower(substr($method, 3))];
        }

        throw new \LogicException(sprintf('Unsupported method: %s', $method));
    }
}

/**
 * If this class knows which fields exist, you can specify the methods here:
 *
 * @method string getName()
 */
class SomeClass extends ParentClass { }
Loading history...
Bug introduced by
The method assertFalse() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
542
        $this->assertFalse((bool)$obj->ProvideComments);
0 ignored issues
show
Documentation introduced by
The property ProvideComments does not exist on object<CommentableItem>. Since you implemented __get, maybe consider adding a @property annotation.

Since your code implements the magic getter _get, this function will be called for any read access on an undefined variable. You can add the @property annotation to your class or interface to document the existence of this variable.

<?php

/**
 * @property int $x
 * @property int $y
 * @property string $text
 */
class MyLabel
{
    private $properties;

    private $allowedProperties = array('x', 'y', 'text');

    public function __get($name)
    {
        if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
            return $properties[$name];
        } else {
            return null;
        }
    }

    public function __set($name, $value)
    {
        if (in_array($name, $this->allowedProperties)) {
            $properties[$name] = $value;
        } else {
            throw new \LogicException("Property $name is not defined.");
        }
    }

}

If the property has read access only, you can use the @property-read annotation instead.

Of course, you may also just have mistyped another name, in which case you should fix the error.

See also the PhpDoc documentation for @property.

Loading history...
Bug introduced by
The method assertFalse() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
543
        $this->assertEquals('Required', $obj->ModerationRequired);
0 ignored issues
show
Documentation introduced by
The property ModerationRequired does not exist on object<CommentableItem>. Since you implemented __get, maybe consider adding a @property annotation.

Since your code implements the magic getter _get, this function will be called for any read access on an undefined variable. You can add the @property annotation to your class or interface to document the existence of this variable.

<?php

/**
 * @property int $x
 * @property int $y
 * @property string $text
 */
class MyLabel
{
    private $properties;

    private $allowedProperties = array('x', 'y', 'text');

    public function __get($name)
    {
        if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
            return $properties[$name];
        } else {
            return null;
        }
    }

    public function __set($name, $value)
    {
        if (in_array($name, $this->allowedProperties)) {
            $properties[$name] = $value;
        } else {
            throw new \LogicException("Property $name is not defined.");
        }
    }

}

If the property has read access only, you can use the @property-read annotation instead.

Of course, you may also just have mistyped another name, in which case you should fix the error.

See also the PhpDoc documentation for @property.

Loading history...
Bug introduced by
The method assertEquals() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
544
        $this->assertTrue((bool)$obj->CommentsRequireLogin);
0 ignored issues
show
Documentation introduced by
The property CommentsRequireLogin does not exist on object<CommentableItem>. Since you implemented __get, maybe consider adding a @property annotation.

Since your code implements the magic getter _get, this function will be called for any read access on an undefined variable. You can add the @property annotation to your class or interface to document the existence of this variable.

<?php

/**
 * @property int $x
 * @property int $y
 * @property string $text
 */
class MyLabel
{
    private $properties;

    private $allowedProperties = array('x', 'y', 'text');

    public function __get($name)
    {
        if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
            return $properties[$name];
        } else {
            return null;
        }
    }

    public function __set($name, $value)
    {
        if (in_array($name, $this->allowedProperties)) {
            $properties[$name] = $value;
        } else {
            throw new \LogicException("Property $name is not defined.");
        }
    }

}

If the property has read access only, you can use the @property-read annotation instead.

Of course, you may also just have mistyped another name, in which case you should fix the error.

See also the PhpDoc documentation for @property.

Loading history...
Bug introduced by
The method assertTrue() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
545
546
        $obj = new CommentableItemEnabled();
547
        $this->assertTrue((bool)$obj->ProvideComments);
0 ignored issues
show
Documentation introduced by
The property ProvideComments does not exist on object<CommentableItemEnabled>. Since you implemented __get, maybe consider adding a @property annotation.

Since your code implements the magic getter _get, this function will be called for any read access on an undefined variable. You can add the @property annotation to your class or interface to document the existence of this variable.

<?php

/**
 * @property int $x
 * @property int $y
 * @property string $text
 */
class MyLabel
{
    private $properties;

    private $allowedProperties = array('x', 'y', 'text');

    public function __get($name)
    {
        if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
            return $properties[$name];
        } else {
            return null;
        }
    }

    public function __set($name, $value)
    {
        if (in_array($name, $this->allowedProperties)) {
            $properties[$name] = $value;
        } else {
            throw new \LogicException("Property $name is not defined.");
        }
    }

}

If the property has read access only, you can use the @property-read annotation instead.

Of course, you may also just have mistyped another name, in which case you should fix the error.

See also the PhpDoc documentation for @property.

Loading history...
Bug introduced by
The method assertTrue() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
548
        $this->assertEquals('Required', $obj->ModerationRequired);
0 ignored issues
show
Bug introduced by
The method assertEquals() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
Documentation introduced by
The property ModerationRequired does not exist on object<CommentableItemEnabled>. Since you implemented __get, maybe consider adding a @property annotation.

Since your code implements the magic getter _get, this function will be called for any read access on an undefined variable. You can add the @property annotation to your class or interface to document the existence of this variable.

<?php

/**
 * @property int $x
 * @property int $y
 * @property string $text
 */
class MyLabel
{
    private $properties;

    private $allowedProperties = array('x', 'y', 'text');

    public function __get($name)
    {
        if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
            return $properties[$name];
        } else {
            return null;
        }
    }

    public function __set($name, $value)
    {
        if (in_array($name, $this->allowedProperties)) {
            $properties[$name] = $value;
        } else {
            throw new \LogicException("Property $name is not defined.");
        }
    }

}

If the property has read access only, you can use the @property-read annotation instead.

Of course, you may also just have mistyped another name, in which case you should fix the error.

See also the PhpDoc documentation for @property.

Loading history...
549
        $this->assertTrue((bool)$obj->CommentsRequireLogin);
0 ignored issues
show
Bug introduced by
The method assertTrue() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
Documentation introduced by
The property CommentsRequireLogin does not exist on object<CommentableItemEnabled>. Since you implemented __get, maybe consider adding a @property annotation.

Since your code implements the magic getter _get, this function will be called for any read access on an undefined variable. You can add the @property annotation to your class or interface to document the existence of this variable.

<?php

/**
 * @property int $x
 * @property int $y
 * @property string $text
 */
class MyLabel
{
    private $properties;

    private $allowedProperties = array('x', 'y', 'text');

    public function __get($name)
    {
        if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
            return $properties[$name];
        } else {
            return null;
        }
    }

    public function __set($name, $value)
    {
        if (in_array($name, $this->allowedProperties)) {
            $properties[$name] = $value;
        } else {
            throw new \LogicException("Property $name is not defined.");
        }
    }

}

If the property has read access only, you can use the @property-read annotation instead.

Of course, you may also just have mistyped another name, in which case you should fix the error.

See also the PhpDoc documentation for @property.

Loading history...
550
551
        $obj = new CommentableItemDisabled();
552
        $this->assertFalse((bool)$obj->ProvideComments);
0 ignored issues
show
Documentation introduced by
The property ProvideComments does not exist on object<CommentableItemDisabled>. Since you implemented __get, maybe consider adding a @property annotation.

Since your code implements the magic getter _get, this function will be called for any read access on an undefined variable. You can add the @property annotation to your class or interface to document the existence of this variable.

<?php

/**
 * @property int $x
 * @property int $y
 * @property string $text
 */
class MyLabel
{
    private $properties;

    private $allowedProperties = array('x', 'y', 'text');

    public function __get($name)
    {
        if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
            return $properties[$name];
        } else {
            return null;
        }
    }

    public function __set($name, $value)
    {
        if (in_array($name, $this->allowedProperties)) {
            $properties[$name] = $value;
        } else {
            throw new \LogicException("Property $name is not defined.");
        }
    }

}

If the property has read access only, you can use the @property-read annotation instead.

Of course, you may also just have mistyped another name, in which case you should fix the error.

See also the PhpDoc documentation for @property.

Loading history...
Bug introduced by
The method assertFalse() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
553
        $this->assertEquals('None', $obj->ModerationRequired);
0 ignored issues
show
Documentation introduced by
The property ModerationRequired does not exist on object<CommentableItemDisabled>. Since you implemented __get, maybe consider adding a @property annotation.

Since your code implements the magic getter _get, this function will be called for any read access on an undefined variable. You can add the @property annotation to your class or interface to document the existence of this variable.

<?php

/**
 * @property int $x
 * @property int $y
 * @property string $text
 */
class MyLabel
{
    private $properties;

    private $allowedProperties = array('x', 'y', 'text');

    public function __get($name)
    {
        if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
            return $properties[$name];
        } else {
            return null;
        }
    }

    public function __set($name, $value)
    {
        if (in_array($name, $this->allowedProperties)) {
            $properties[$name] = $value;
        } else {
            throw new \LogicException("Property $name is not defined.");
        }
    }

}

If the property has read access only, you can use the @property-read annotation instead.

Of course, you may also just have mistyped another name, in which case you should fix the error.

See also the PhpDoc documentation for @property.

Loading history...
Bug introduced by
The method assertEquals() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
554
        $this->assertFalse((bool)$obj->CommentsRequireLogin);
0 ignored issues
show
Documentation introduced by
The property CommentsRequireLogin does not exist on object<CommentableItemDisabled>. Since you implemented __get, maybe consider adding a @property annotation.

Since your code implements the magic getter _get, this function will be called for any read access on an undefined variable. You can add the @property annotation to your class or interface to document the existence of this variable.

<?php

/**
 * @property int $x
 * @property int $y
 * @property string $text
 */
class MyLabel
{
    private $properties;

    private $allowedProperties = array('x', 'y', 'text');

    public function __get($name)
    {
        if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
            return $properties[$name];
        } else {
            return null;
        }
    }

    public function __set($name, $value)
    {
        if (in_array($name, $this->allowedProperties)) {
            $properties[$name] = $value;
        } else {
            throw new \LogicException("Property $name is not defined.");
        }
    }

}

If the property has read access only, you can use the @property-read annotation instead.

Of course, you may also just have mistyped another name, in which case you should fix the error.

See also the PhpDoc documentation for @property.

Loading history...
Bug introduced by
The method assertFalse() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
555
    }
556
557
    /*
558
    When a parent comment is deleted, remove the children
559
     */
560
    public function testOnBeforeDelete()
561
    {
562
        $comment = $this->objFromFixture('Comment', 'firstComA');
563
564
        $child = new Comment();
565
        $child->Name = 'Fred Bloggs';
566
        $child->Comment = 'Child of firstComA';
567
        $child->write();
568
        $comment->ChildComments()->add($child);
569
        $this->assertEquals(4, $comment->ChildComments()->count());
0 ignored issues
show
Bug introduced by
The method assertEquals() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
570
571
        $commentID = $comment->ID;
572
        $childCommentID = $child->ID;
573
574
        $comment->delete();
575
576
        // assert that the new child been deleted
577
        $this->assertFalse(DataObject::get_by_id('Comment', $commentID));
0 ignored issues
show
Bug introduced by
The method assertFalse() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
578
        $this->assertFalse(DataObject::get_by_id('Comment', $childCommentID));
0 ignored issues
show
Bug introduced by
The method assertFalse() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
579
    }
580
581
    public function testRequireDefaultRecords()
582
    {
583
        $this->markTestSkipped('TODO');
0 ignored issues
show
Bug introduced by
The method markTestSkipped() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
584
    }
585
586
    public function testLink()
587
    {
588
        $comment = $this->objFromFixture('Comment', 'thirdComD');
589
        $this->assertEquals('CommentableItem_Controller#comment-'.$comment->ID,
0 ignored issues
show
Bug introduced by
The method assertEquals() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
590
            $comment->Link());
591
        $this->assertEquals($comment->ID, $comment->ID);
0 ignored issues
show
Bug introduced by
The method assertEquals() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
592
593
        // An orphan comment has no link
594
        $comment->ParentID = 0;
595
        $comment->write();
596
        $this->assertEquals('', $comment->Link());
0 ignored issues
show
Bug introduced by
The method assertEquals() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
597
    }
598
599
    public function testPermalink()
600
    {
601
        $comment = $this->objFromFixture('Comment', 'thirdComD');
602
        $this->assertEquals('comment-' . $comment->ID, $comment->Permalink());
0 ignored issues
show
Bug introduced by
The method assertEquals() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
603
    }
604
605
    /*
606
    Test field labels in 2 languages
607
     */
608
    public function testFieldLabels()
609
    {
610
        $locale = i18n::get_locale();
611
        i18n::set_locale('fr');
612
        $comment = $this->objFromFixture('Comment', 'firstComA');
613
        $labels = $comment->FieldLabels();
614
        $expected = array(
615
            'Name' => 'Nom de l\'Auteur',
616
            'Comment' => 'Commentaire',
617
            'Email' => 'Email',
618
            'URL' => 'URL',
619
            'BaseClass' => 'Base Class',
620
            'Moderated' => 'Modéré?',
621
            'IsSpam' => 'Spam?',
622
            'ParentID' => 'Parent ID',
623
            'AllowHtml' => 'Allow Html',
624
            'SecretToken' => 'Secret Token',
625
            'Depth' => 'Depth',
626
            'Author' => 'Author Member',
627
            'ParentComment' => 'Parent Comment',
628
            'ChildComments' => 'Child Comments',
629
            'ParentTitle' => 'Parent',
630
            'Created' => 'Date de publication'
631
        );
632
        i18n::set_locale($locale);
633
        $this->assertEquals($expected, $labels);
0 ignored issues
show
Bug introduced by
The method assertEquals() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
634
        $labels = $comment->FieldLabels();
635
        $expected = array(
636
            'Name' => 'Author Name',
637
            'Comment' => 'Comment',
638
            'Email' => 'Email',
639
            'URL' => 'URL',
640
            'BaseClass' => 'Base Class',
641
            'Moderated' => 'Moderated?',
642
            'IsSpam' => 'Spam?',
643
            'ParentID' => 'Parent ID',
644
            'AllowHtml' => 'Allow Html',
645
            'SecretToken' => 'Secret Token',
646
            'Depth' => 'Depth',
647
            'Author' => 'Author Member',
648
            'ParentComment' => 'Parent Comment',
649
            'ChildComments' => 'Child Comments',
650
            'ParentTitle' => 'Parent',
651
            'Created' => 'Date posted'
652
653
        );
654
        $this->assertEquals($expected, $labels);
0 ignored issues
show
Bug introduced by
The method assertEquals() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
655
    }
656
657
    public function testGetOption()
658
    {
659
        $this->markTestSkipped('TODO');
0 ignored issues
show
Bug introduced by
The method markTestSkipped() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
660
    }
661
662
    public function testGetParent()
663
    {
664
        $comment = $this->objFromFixture('Comment', 'firstComA');
665
        $item = $this->objFromFixture('CommentableItem', 'first');
666
        $parent = $comment->getParent();
667
        $this->assertEquals($item, $parent);
0 ignored issues
show
Bug introduced by
The method assertEquals() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
668
    }
669
670
    public function testGetParentTitle()
671
    {
672
        $comment = $this->objFromFixture('Comment', 'firstComA');
673
        $title = $comment->getParentTitle();
674
        $this->assertEquals('First', $title);
0 ignored issues
show
Bug introduced by
The method assertEquals() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
675
676
        // Title from a comment with no parent is blank
677
        $comment->ParentID = 0;
678
        $comment->write();
679
        $this->assertEquals('', $comment->getParentTitle());
0 ignored issues
show
Bug introduced by
The method assertEquals() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
680
    }
681
682
    public function testGetParentClassName()
683
    {
684
        $comment = $this->objFromFixture('Comment', 'firstComA');
685
        $className = $comment->getParentClassName();
0 ignored issues
show
Bug introduced by
The method getParentClassName() does not exist on DataObject. Did you maybe mean parentClass()?

This check marks calls to methods that do not seem to exist on an object.

This is most likely the result of a method being renamed without all references to it being renamed likewise.

Loading history...
686
        $this->assertEquals('CommentableItem', $className);
0 ignored issues
show
Bug introduced by
The method assertEquals() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
687
    }
688
689
    public function testCastingHelper()
690
    {
691
        $this->markTestSkipped('TODO');
0 ignored issues
show
Bug introduced by
The method markTestSkipped() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
692
    }
693
694
    public function testGetEscapedComment()
695
    {
696
        $this->markTestSkipped('TODO');
0 ignored issues
show
Bug introduced by
The method markTestSkipped() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
697
    }
698
699
    public function testIsPreview()
700
    {
701
        $comment = new Comment();
702
        $comment->Name = 'Fred Bloggs';
703
        $comment->Comment = 'this is a test comment';
704
        $this->assertTrue($comment->isPreview());
0 ignored issues
show
Bug introduced by
The method assertTrue() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
705
        $comment->write();
706
        $this->assertFalse($comment->isPreview());
0 ignored issues
show
Bug introduced by
The method assertFalse() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
707
    }
708
709
    public function testCanCreate()
710
    {
711
        $comment = $this->objFromFixture('Comment', 'firstComA');
712
713
        // admin can create - this is always false
714
        $this->logInAs('commentadmin');
715
        $this->assertFalse($comment->canCreate());
0 ignored issues
show
Bug introduced by
The method assertFalse() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
716
717
        // visitor can view
718
        $this->logInAs('visitor');
719
        $this->assertFalse($comment->canCreate());
0 ignored issues
show
Bug introduced by
The method assertFalse() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
720
    }
721
722 View Code Duplication
    public function testCanView()
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
723
    {
724
        $comment = $this->objFromFixture('Comment', 'firstComA');
725
726
        // admin can view
727
        $this->logInAs('commentadmin');
728
        $this->assertTrue($comment->canView());
0 ignored issues
show
Bug introduced by
The method assertTrue() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
729
730
        // visitor can view
731
        $this->logInAs('visitor');
732
        $this->assertTrue($comment->canView());
0 ignored issues
show
Bug introduced by
The method assertTrue() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
733
734
        $comment->ParentID = 0;
735
        $comment->write();
736
        $this->assertFalse($comment->canView());
0 ignored issues
show
Bug introduced by
The method assertFalse() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
737
    }
738
739 View Code Duplication
    public function testCanEdit()
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
740
    {
741
        $comment = $this->objFromFixture('Comment', 'firstComA');
742
743
        // admin can edit
744
        $this->logInAs('commentadmin');
745
        $this->assertTrue($comment->canEdit());
0 ignored issues
show
Bug introduced by
The method assertTrue() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
746
747
        // visitor cannot
748
        $this->logInAs('visitor');
749
        $this->assertFalse($comment->canEdit());
0 ignored issues
show
Bug introduced by
The method assertFalse() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
750
751
        $comment->ParentID = 0;
752
        $comment->write();
753
        $this->assertFalse($comment->canEdit());
0 ignored issues
show
Bug introduced by
The method assertFalse() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
754
    }
755
756 View Code Duplication
    public function testCanDelete()
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
757
    {
758
        $comment = $this->objFromFixture('Comment', 'firstComA');
759
760
        // admin can delete
761
        $this->logInAs('commentadmin');
762
        $this->assertTrue($comment->canDelete());
0 ignored issues
show
Bug introduced by
The method assertTrue() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
763
764
        // visitor cannot
765
        $this->logInAs('visitor');
766
        $this->assertFalse($comment->canDelete());
0 ignored issues
show
Bug introduced by
The method assertFalse() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
767
768
        $comment->ParentID = 0;
769
        $comment->write();
770
        $this->assertFalse($comment->canDelete());
0 ignored issues
show
Bug introduced by
The method assertFalse() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
771
    }
772
773
    public function testGetMember()
774
    {
775
        $this->logInAs('visitor');
776
        $current = Member::currentUser();
777
        $comment = $this->objFromFixture('Comment', 'firstComA');
778
        $method = $this->getMethod('getMember');
779
780
        // null case
781
        $member = $method->invokeArgs($comment, array());
782
        $this->assertEquals($current, $member);
0 ignored issues
show
Bug introduced by
The method assertEquals() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
783
784
        // numeric ID case
785
        $member = $method->invokeArgs($comment, array($current->ID));
786
        $this->assertEquals($current, $member);
0 ignored issues
show
Bug introduced by
The method assertEquals() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
787
788
        // identity case
789
        $member = $method->invokeArgs($comment, array($current));
790
        $this->assertEquals($current, $member);
0 ignored issues
show
Bug introduced by
The method assertEquals() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
791
    }
792
793
    public function testGetAuthorName()
794
    {
795
        $comment = $this->objFromFixture('Comment', 'firstComA');
796
        $this->assertEquals(
0 ignored issues
show
Bug introduced by
The method assertEquals() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
797
            'FA',
798
            $comment->getAuthorName()
799
        );
800
801
        $comment->Name = '';
802
        $this->assertEquals(
0 ignored issues
show
Bug introduced by
The method assertEquals() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
803
            '',
804
            $comment->getAuthorName()
805
        );
806
807
        $author = $this->objFromFixture('Member', 'visitor');
808
        $comment->AuthorID = $author->ID;
809
        $comment->write();
810
        $this->assertEquals(
0 ignored issues
show
Bug introduced by
The method assertEquals() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
811
            'visitor',
812
            $comment->getAuthorName()
813
        );
814
815
        // null the names, expect null back
816
        $comment->Name = null;
817
        $comment->AuthorID = 0;
818
        $this->assertNull($comment->getAuthorName());
0 ignored issues
show
Bug introduced by
The method assertNull() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
819
    }
820
821
822
    public function testLinks()
823
    {
824
        $comment = $this->objFromFixture('Comment', 'firstComA');
825
        $this->logInAs('commentadmin');
826
827
        $method = $this->getMethod('ActionLink');
828
829
        // test with starts of strings and tokens and salts change each time
830
        $this->assertStringStartsWith(
0 ignored issues
show
Bug introduced by
The method assertStringStartsWith() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
831
            '/CommentingController/theaction/'.$comment->ID,
832
            $method->invokeArgs($comment, array('theaction'))
833
        );
834
835
        $this->assertStringStartsWith(
0 ignored issues
show
Bug introduced by
The method assertStringStartsWith() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
836
            '/CommentingController/delete/'.$comment->ID,
837
            $comment->DeleteLink()
838
        );
839
840
        $this->assertStringStartsWith(
0 ignored issues
show
Bug introduced by
The method assertStringStartsWith() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
841
            '/CommentingController/spam/'.$comment->ID,
842
            $comment->SpamLink()
843
        );
844
845
        $comment->markSpam();
846
        $this->assertStringStartsWith(
0 ignored issues
show
Bug introduced by
The method assertStringStartsWith() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
847
            '/CommentingController/ham/'.$comment->ID,
848
            $comment->HamLink()
849
        );
850
851
        //markApproved
852
        $comment->markUnapproved();
853
        $this->assertStringStartsWith(
0 ignored issues
show
Bug introduced by
The method assertStringStartsWith() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
854
            '/CommentingController/approve/'.$comment->ID,
855
            $comment->ApproveLink()
856
        );
857
    }
858
859
    public function testMarkSpam()
860
    {
861
        $comment = $this->objFromFixture('Comment', 'firstComA');
862
        $comment->markSpam();
863
        $this->assertTrue($comment->Moderated);
0 ignored issues
show
Bug introduced by
The method assertTrue() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
864
        $this->assertTrue($comment->IsSpam);
0 ignored issues
show
Bug introduced by
The method assertTrue() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
865
    }
866
867
    public function testMarkApproved()
868
    {
869
        $comment = $this->objFromFixture('Comment', 'firstComA');
870
        $comment->markApproved();
871
        $this->assertTrue($comment->Moderated);
0 ignored issues
show
Bug introduced by
The method assertTrue() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
872
        $this->assertFalse($comment->IsSpam);
0 ignored issues
show
Bug introduced by
The method assertFalse() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
873
    }
874
875
    public function testMarkUnapproved()
876
    {
877
        $comment = $this->objFromFixture('Comment', 'firstComA');
878
        $comment->markApproved();
879
        $this->assertTrue($comment->Moderated);
0 ignored issues
show
Bug introduced by
The method assertTrue() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
880
    }
881
882
    public function testSpamClass()
883
    {
884
        $comment = $this->objFromFixture('Comment', 'firstComA');
885
        $this->assertEquals('notspam', $comment->spamClass());
0 ignored issues
show
Bug introduced by
The method assertEquals() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
886
        $comment->Moderated = false;
887
        $this->assertEquals('unmoderated', $comment->spamClass());
0 ignored issues
show
Bug introduced by
The method assertEquals() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
888
        $comment->IsSpam = true;
889
        $this->assertEquals('spam', $comment->spamClass());
0 ignored issues
show
Bug introduced by
The method assertEquals() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
890
    }
891
892
    public function testGetTitle()
893
    {
894
        $comment = $this->objFromFixture('Comment', 'firstComA');
895
        $this->assertEquals(
0 ignored issues
show
Bug introduced by
The method assertEquals() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
896
            'Comment by FA on First',
897
            $comment->getTitle()
898
        );
899
    }
900
901
    public function testGetCMSFields()
902
    {
903
        $comment = $this->objFromFixture('Comment', 'firstComA');
904
        $fields = $comment->getCMSFields();
905
        $names = array();
906
        foreach ($fields as $field) {
907
            $names[] = $field->getName();
908
        }
909
        $expected = array(
910
            'Created',
911
            'Name',
912
            'Comment',
913
            'Email',
914
            'URL',
915
            null #FIXME this is suspicious
916
        );
917
        $this->assertEquals($expected, $names);
0 ignored issues
show
Bug introduced by
The method assertEquals() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
918
    }
919
920
    public function testGetCMSFieldsCommentHasAuthor()
921
    {
922
        $member = Member::get()->filter('FirstName', 'visitor')->first();
923
        $comment = $this->objFromFixture('Comment', 'firstComA');
924
        $comment->AuthorID = $member->ID;
925
        $comment->write();
926
927
        $fields = $comment->getCMSFields();
928
        $names = array();
929
        foreach ($fields as $field) {
930
            $names[] = $field->getName();
931
        }
932
        $expected = array(
933
            'Created',
934
            'Name',
935
            'AuthorMember',
936
            'Comment',
937
            'Email',
938
            'URL',
939
            null #FIXME this is suspicious
940
        );
941
        $this->assertEquals($expected, $names);
0 ignored issues
show
Bug introduced by
The method assertEquals() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
942
    }
943
944
    public function testGetCMSFieldsWithParentComment()
945
    {
946
        $comment = $this->objFromFixture('Comment', 'firstComA');
947
948
        $child = new Comment();
949
        $child->Name = 'John Smith';
950
        $child->Comment = 'This is yet another test commnent';
951
        $child->ParentCommentID = $comment->ID;
0 ignored issues
show
Bug introduced by
The property ParentCommentID does not seem to exist. Did you mean Comment?

An attempt at access to an undefined property has been detected. This may either be a typographical error or the property has been renamed but there are still references to its old name.

If you really want to allow access to undefined properties, you can define magic methods to allow access. See the php core documentation on Overloading.

Loading history...
952
        $child->write();
953
954
        $fields = $child->getCMSFields();
955
        $names = array();
956
        foreach ($fields as $field) {
957
            $names[] = $field->getName();
958
        }
959
        $expected = array(
960
            'Created',
961
            'Name',
962
            'Comment',
963
            'Email',
964
            'URL',
965
            null, #FIXME this is suspicious
966
            'ParentComment_Title',
967
            'ParentComment_Created',
968
            'ParentComment_AuthorName',
969
            'ParentComment_EscapedComment'
970
        );
971
        $this->assertEquals($expected, $names);
0 ignored issues
show
Bug introduced by
The method assertEquals() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
972
    }
973
974
975
    public function testPurifyHtml()
976
    {
977
        $comment = $this->objFromFixture('Comment', 'firstComA');
978
979
        $dirtyHTML = '<p><script>alert("w00t")</script>my comment</p>';
980
        $this->assertEquals(
0 ignored issues
show
Bug introduced by
The method assertEquals() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
981
            'my comment',
982
            $comment->purifyHtml($dirtyHTML)
983
        );
984
    }
985
986
    public function testGravatar()
987
    {
988
        // Turn gravatars on
989
        Config::inst()->update('CommentableItem', 'comments', array(
990
            'use_gravatar' => true
991
        ));
992
        $comment = $this->objFromFixture('Comment', 'firstComA');
993
994
        $this->assertEquals(
0 ignored issues
show
Bug introduced by
The method assertEquals() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
995
            'http://www.gravatar.com/avatar/d41d8cd98f00b204e9800998ecf8427e?s'.
996
            '=80&d=identicon&r=g',
997
            $comment->gravatar()
998
        );
999
1000
        // Turn gravatars off
1001
        Config::inst()->update('CommentableItem', 'comments', array(
1002
            'use_gravatar' => false
1003
        ));
1004
        $comment = $this->objFromFixture('Comment', 'firstComA');
1005
1006
        $this->assertEquals(
0 ignored issues
show
Bug introduced by
The method assertEquals() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
1007
            '',
1008
            $comment->gravatar()
1009
        );
1010
    }
1011
1012
    public function testGetRepliesEnabled()
1013
    {
1014
        $comment = $this->objFromFixture('Comment', 'firstComA');
1015
        Config::inst()->update('CommentableItem', 'comments', array(
1016
            'nested_comments' => false
1017
        ));
1018
        $this->assertFalse($comment->getRepliesEnabled());
0 ignored issues
show
Bug introduced by
The method assertFalse() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
1019
1020
        Config::inst()->update('CommentableItem', 'comments', array(
1021
            'nested_comments' => true,
1022
            'nested_depth' => 4
1023
        ));
1024
        $this->assertTrue($comment->getRepliesEnabled());
0 ignored issues
show
Bug introduced by
The method assertTrue() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
1025
1026
        $comment->Depth = 4;
1027
        $this->assertFalse($comment->getRepliesEnabled());
0 ignored issues
show
Bug introduced by
The method assertFalse() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
1028
1029
1030
        // 0 indicates no limit for nested_depth
1031
        Config::inst()->update('CommentableItem', 'comments', array(
1032
            'nested_comments' => true,
1033
            'nested_depth' => 0
1034
        ));
1035
1036
        $comment->Depth = 234;
1037
        $this->assertTrue($comment->getRepliesEnabled());
0 ignored issues
show
Bug introduced by
The method assertTrue() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
1038
        $comment->markUnapproved();
1039
        $this->assertFalse($comment->getRepliesEnabled());
0 ignored issues
show
Bug introduced by
The method assertFalse() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
1040
        $comment->markSpam();
1041
        $this->assertFalse($comment->getRepliesEnabled());
0 ignored issues
show
Bug introduced by
The method assertFalse() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
1042
1043
        $comment->markApproved();
1044
        $this->assertTrue($comment->getRepliesEnabled());
0 ignored issues
show
Bug introduced by
The method assertTrue() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
1045
    }
1046
1047
    public function testAllReplies()
1048
    {
1049
        Config::inst()->update('CommentableItem', 'comments', array(
1050
            'nested_comments' => true,
1051
            'nested_depth' => 4
1052
        ));
1053
        $comment = $this->objFromFixture('Comment', 'firstComA');
1054
        $this->assertEquals(
0 ignored issues
show
Bug introduced by
The method assertEquals() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
1055
            3,
1056
            $comment->allReplies()->count()
1057
        );
1058
        $child = new Comment();
1059
        $child->Name = 'Fred Smith';
1060
        $child->Comment = 'This is a child comment';
1061
        $child->ParentCommentID = $comment->ID;
0 ignored issues
show
Bug introduced by
The property ParentCommentID does not seem to exist. Did you mean Comment?

An attempt at access to an undefined property has been detected. This may either be a typographical error or the property has been renamed but there are still references to its old name.

If you really want to allow access to undefined properties, you can define magic methods to allow access. See the php core documentation on Overloading.

Loading history...
1062
1063
        // spam should be returned by this method
1064
        $child->markSpam();
1065
        $child->write();
1066
        $replies = $comment->allReplies();
0 ignored issues
show
Unused Code introduced by
$replies is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
1067
        $this->assertEquals(
0 ignored issues
show
Bug introduced by
The method assertEquals() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
1068
            4,
1069
            $comment->allReplies()->count()
1070
        );
1071
1072
        Config::inst()->update('CommentableItem', 'comments', array(
1073
            'nested_comments' => false
1074
        ));
1075
1076
        $this->assertEquals(0, $comment->allReplies()->count());
0 ignored issues
show
Bug introduced by
The method assertEquals() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
1077
    }
1078
1079
    public function testReplies()
1080
    {
1081
        CommentableItem::add_extension('CommentsExtension');
1082
        $this->logInWithPermission('ADMIN');
1083
        Config::inst()->update('CommentableItem', 'comments', array(
1084
            'nested_comments' => true,
1085
            'nested_depth' => 4
1086
        ));
1087
        $comment = $this->objFromFixture('Comment', 'firstComA');
1088
        $this->assertEquals(
0 ignored issues
show
Bug introduced by
The method assertEquals() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
1089
            3,
1090
            $comment->Replies()->count()
1091
        );
1092
1093
        // Test that spam comments are not returned
1094
        $childComment = $comment->Replies()->first();
1095
        $childComment->IsSpam = 1;
1096
        $childComment->write();
1097
        $this->assertEquals(
0 ignored issues
show
Bug introduced by
The method assertEquals() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
1098
            2,
1099
            $comment->Replies()->count()
1100
        );
1101
1102
        // Test that unmoderated comments are not returned
1103
        //
1104
        $childComment = $comment->Replies()->first();
1105
1106
        // FIXME - moderation settings scenarios need checked here
1107
        $childComment->Moderated = 0;
1108
        $childComment->IsSpam = 0;
1109
        $childComment->write();
1110
        $this->assertEquals(
0 ignored issues
show
Bug introduced by
The method assertEquals() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
1111
            2,
1112
            $comment->Replies()->count()
1113
        );
1114
1115
1116
        // Test moderation required on the front end
1117
        $item = $this->objFromFixture('CommentableItem', 'first');
1118
        $item->ModerationRequired = 'Required';
1119
        $item->write();
1120
1121
        Config::inst()->update('CommentableItemDisabled', 'comments', array(
1122
            'nested_comments' => true,
1123
            'nested_depth' => 4,
1124
            'frontend_moderation' => true
1125
        ));
1126
1127
        $comment = DataObject::get_by_id('Comment', $comment->ID);
1128
1129
        $this->assertEquals(
0 ignored issues
show
Bug introduced by
The method assertEquals() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
1130
            2,
1131
            $comment->Replies()->count()
1132
        );
1133
1134
        // Turn off nesting, empty array should be returned
1135
        Config::inst()->update('CommentableItem', 'comments', array(
1136
            'nested_comments' => false
1137
        ));
1138
1139
        $this->assertEquals(
0 ignored issues
show
Bug introduced by
The method assertEquals() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
1140
            0,
1141
            $comment->Replies()->count()
1142
        );
1143
1144
        CommentableItem::remove_extension('CommentsExtension');
1145
    }
1146
1147
    public function testPagedReplies()
1148
    {
1149
        Config::inst()->update('CommentableItem', 'comments', array(
1150
            'nested_comments' => true,
1151
            'nested_depth' => 4,
1152
            'comments_per_page' => 2 #Force 2nd page for 3 items
1153
        ));
1154
1155
        $comment = $this->objFromFixture('Comment', 'firstComA');
1156
        $pagedList = $comment->pagedReplies();
1157
        $this->assertEquals(
0 ignored issues
show
Bug introduced by
The method assertEquals() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
1158
            2,
1159
            $pagedList->TotalPages()
1160
        );
1161
        $this->assertEquals(
0 ignored issues
show
Bug introduced by
The method assertEquals() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
1162
            3,
1163
            $pagedList->getTotalItems()
1164
        );
1165
        //TODO - 2nd page requires controller
1166
        //
1167
         Config::inst()->update('CommentableItem', 'comments', array(
1168
            'nested_comments' => false
1169
        ));
1170
1171
        $this->assertEquals(0, $comment->PagedReplies()->count());
0 ignored issues
show
Bug introduced by
The method assertEquals() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
1172
    }
1173
1174
    public function testReplyForm()
1175
    {
1176
        Config::inst()->update('CommentableItem', 'comments', array(
1177
            'nested_comments' => false,
1178
            'nested_depth' => 4
1179
        ));
1180
1181
        $comment = $this->objFromFixture('Comment', 'firstComA');
1182
1183
        // No nesting, no reply form
1184
        $form = $comment->replyForm();
1185
        $this->assertNull($form);
0 ignored issues
show
Bug introduced by
The method assertNull() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
1186
1187
        // parent item so show form
1188
        Config::inst()->update('CommentableItem', 'comments', array(
1189
            'nested_comments' => true,
1190
            'nested_depth' => 4
1191
        ));
1192
        $form = $comment->replyForm();
1193
1194
        $names = array();
1195
        foreach ($form->Fields() as $field) {
1196
            array_push($names, $field->getName());
1197
        }
1198
1199
        $this->assertEquals(
0 ignored issues
show
Bug introduced by
The method assertEquals() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
1200
            array(
1201
                null, #FIXME suspicious
1202
                'ParentID',
1203
                'ReturnURL',
1204
                'ParentCommentID',
1205
                'BaseClass'
1206
            ),
1207
            $names
1208
        );
1209
1210
        // no parent, no reply form
1211
1212
        $comment->ParentID = 0;
1213
        $comment->write();
1214
        $form = $comment->replyForm();
1215
        $this->assertNull($form);
0 ignored issues
show
Bug introduced by
The method assertNull() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
1216
    }
1217
1218
    public function testUpdateDepth()
1219
    {
1220
        Config::inst()->update('CommentableItem', 'comments', array(
1221
            'nested_comments' => true,
1222
            'nested_depth' => 4
1223
        ));
1224
1225
        $comment = $this->objFromFixture('Comment', 'firstComA');
1226
        $children = $comment->allReplies()->toArray();
1227
        // Make the second child a child of the first
1228
        // Make the third child a child of the second
1229
        $reply1 = $children[0];
1230
        $reply2 = $children[1];
1231
        $reply3 = $children[2];
1232
        $reply2->ParentCommentID = $reply1->ID;
1233
        $reply2->write();
1234
        $this->assertEquals(3, $reply2->Depth);
0 ignored issues
show
Bug introduced by
The method assertEquals() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
1235
        $reply3->ParentCommentID = $reply2->ID;
1236
        $reply3->write();
1237
        $this->assertEquals(4, $reply3->Depth);
0 ignored issues
show
Bug introduced by
The method assertEquals() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
1238
    }
1239
1240
    public function testGetToken()
1241
    {
1242
        $this->markTestSkipped('TODO');
0 ignored issues
show
Bug introduced by
The method markTestSkipped() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
1243
    }
1244
1245
    public function testMemberSalt()
1246
    {
1247
        $this->markTestSkipped('TODO');
0 ignored issues
show
Bug introduced by
The method markTestSkipped() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
1248
    }
1249
1250
    public function testAddToUrl()
1251
    {
1252
        $this->markTestSkipped('TODO');
0 ignored issues
show
Bug introduced by
The method markTestSkipped() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
1253
    }
1254
1255
    public function testCheckRequest()
1256
    {
1257
        $this->markTestSkipped('TODO');
0 ignored issues
show
Bug introduced by
The method markTestSkipped() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
1258
    }
1259
1260
    public function testGenerate()
1261
    {
1262
        $this->markTestSkipped('TODO');
0 ignored issues
show
Bug introduced by
The method markTestSkipped() does not seem to exist on object<CommentsTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
1263
    }
1264
1265
1266
    protected static function getMethod($name)
1267
    {
1268
        $class = new ReflectionClass('Comment');
1269
        $method = $class->getMethod($name);
1270
        $method->setAccessible(true);
1271
        return $method;
1272
    }
1273
}
1274
1275
1276
/**
1277
 * @package comments
1278
 * @subpackage tests
1279
 */
1280
class CommentableItem extends DataObject implements TestOnly
0 ignored issues
show
Coding Style Compatibility introduced by
PSR1 recommends that each class should be in its own file to aid autoloaders.

Having each class in a dedicated file usually plays nice with PSR autoloaders and is therefore a well established practice. If you use other autoloaders, you might not want to follow this rule.

Loading history...
Coding Style Compatibility introduced by
PSR1 recommends that each class must be in a namespace of at least one level to avoid collisions.

You can fix this by adding a namespace to your class:

namespace YourVendor;

class YourClass { }

When choosing a vendor namespace, try to pick something that is not too generic to avoid conflicts with other libraries.

Loading history...
1281
{
1282
1283
    private static $db = array(
0 ignored issues
show
Comprehensibility introduced by
Consider using a different property name as you override a private property of the parent class.
Loading history...
Unused Code introduced by
The property $db is not used and could be removed.

This check marks private properties in classes that are never used. Those properties can be removed.

Loading history...
1284
        'Title' => 'Varchar'
1285
    );
1286
1287
    private static $extensions = array(
0 ignored issues
show
Comprehensibility introduced by
Consider using a different property name as you override a private property of the parent class.
Loading history...
Unused Code introduced by
The property $extensions is not used and could be removed.

This check marks private properties in classes that are never used. Those properties can be removed.

Loading history...
1288
        'CommentsExtension'
1289
    );
1290
1291
    public function RelativeLink()
1292
    {
1293
        return "CommentableItem_Controller";
1294
    }
1295
1296
    public function canView($member = null)
1297
    {
1298
        return true;
1299
    }
1300
1301
    // This is needed for canModerateComments
1302
    public function canEdit($member = null)
1303
    {
1304
        if ($member instanceof Member) {
1305
            $memberID = $member->ID;
1306
        } elseif (is_numeric($member)) {
1307
            $memberID = $member;
1308
        } else {
1309
            $memberID = Member::currentUserID();
1310
        }
1311
1312
        if ($memberID && Permission::checkMember($memberID, array("ADMIN", "CMS_ACCESS_CommentAdmin"))) {
0 ignored issues
show
Unused Code introduced by
This if statement, and the following return statement can be replaced with return $memberID && \Per...ACCESS_CommentAdmin'));.
Loading history...
1313
            return true;
1314
        }
1315
        return false;
1316
    }
1317
1318
    public function Link()
1319
    {
1320
        return $this->RelativeLink();
1321
    }
1322
1323
    public function AbsoluteLink()
1324
    {
1325
        return Director::absoluteURL($this->RelativeLink());
1326
    }
1327
}
1328
1329 View Code Duplication
class CommentableItemEnabled extends CommentableItem
0 ignored issues
show
Duplication introduced by
This class seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
Coding Style Compatibility introduced by
PSR1 recommends that each class should be in its own file to aid autoloaders.

Having each class in a dedicated file usually plays nice with PSR autoloaders and is therefore a well established practice. If you use other autoloaders, you might not want to follow this rule.

Loading history...
Coding Style Compatibility introduced by
PSR1 recommends that each class must be in a namespace of at least one level to avoid collisions.

You can fix this by adding a namespace to your class:

namespace YourVendor;

class YourClass { }

When choosing a vendor namespace, try to pick something that is not too generic to avoid conflicts with other libraries.

Loading history...
1330
{
1331
    private static $defaults = array(
0 ignored issues
show
Comprehensibility introduced by
Consider using a different property name as you override a private property of the parent class.
Loading history...
Unused Code introduced by
The property $defaults is not used and could be removed.

This check marks private properties in classes that are never used. Those properties can be removed.

Loading history...
1332
        'ProvideComments' => true,
1333
        'ModerationRequired' => 'Required',
1334
        'CommentsRequireLogin' => true
1335
    );
1336
}
1337
1338
1339 View Code Duplication
class CommentableItemDisabled extends CommentableItem
0 ignored issues
show
Duplication introduced by
This class seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
Coding Style Compatibility introduced by
PSR1 recommends that each class should be in its own file to aid autoloaders.

Having each class in a dedicated file usually plays nice with PSR autoloaders and is therefore a well established practice. If you use other autoloaders, you might not want to follow this rule.

Loading history...
Coding Style Compatibility introduced by
PSR1 recommends that each class must be in a namespace of at least one level to avoid collisions.

You can fix this by adding a namespace to your class:

namespace YourVendor;

class YourClass { }

When choosing a vendor namespace, try to pick something that is not too generic to avoid conflicts with other libraries.

Loading history...
1340
{
1341
    private static $defaults = array(
0 ignored issues
show
Comprehensibility introduced by
Consider using a different property name as you override a private property of the parent class.
Loading history...
Unused Code introduced by
The property $defaults is not used and could be removed.

This check marks private properties in classes that are never used. Those properties can be removed.

Loading history...
1342
        'ProvideComments' => false,
1343
        'ModerationRequired' => 'None',
1344
        'CommentsRequireLogin' => false
1345
    );
1346
}
1347
1348
/**
1349
 * @package comments
1350
 * @subpackage tests
1351
 */
1352
class CommentableItem_Controller extends Controller implements TestOnly
0 ignored issues
show
Coding Style Compatibility introduced by
PSR1 recommends that each class should be in its own file to aid autoloaders.

Having each class in a dedicated file usually plays nice with PSR autoloaders and is therefore a well established practice. If you use other autoloaders, you might not want to follow this rule.

Loading history...
Coding Style Compatibility introduced by
PSR1 recommends that each class must be in a namespace of at least one level to avoid collisions.

You can fix this by adding a namespace to your class:

namespace YourVendor;

class YourClass { }

When choosing a vendor namespace, try to pick something that is not too generic to avoid conflicts with other libraries.

Loading history...
1353
{
1354
1355
    public function index()
0 ignored issues
show
Documentation introduced by
The return type could not be reliably inferred; please add a @return annotation.

Our type inference engine in quite powerful, but sometimes the code does not provide enough clues to go by. In these cases we request you to add a @return annotation as described here.

Loading history...
1356
    {
1357
        return CommentableItem::get()->first()->CommentsForm();
1358
    }
1359
}
1360