Completed
Pull Request — master (#33)
by Franco
02:03
created

testDMSCartEditForm()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 5
rs 9.4285
c 0
b 0
f 0
cc 1
eloc 3
nc 1
nop 0
1
<?php
2
3
/**
4
 * Class DMSDocumentCartControllerTest contains all the tests for {@link DMSDocumentCartController}
5
 */
6
class DMSDocumentCartControllerTest 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
    protected static $fixture_file = 'dms-cart/tests/DMSDocumentCartTest.yml';
9
10
    /**
11
     * @var DMSDocumentCartController
12
     */
13
    protected $controller;
14
15
    /**
16
     * @var DMSDocumentCart
17
     */
18
    protected $cart;
19
20
    public function setUp()
21
    {
22
        parent::setUp();
23
        DMSDocumentCartController::add_extension('StubDMSDocumentCheckoutPageExtension');
24
        $this->controller = DMSDocumentCartController::create();
25
        $this->cart = $this->controller->getCart();
26
    }
27
28
    /**
29
     * Test the items method of the controller
30
     */
31
    public function testItems()
32
    {
33
        /** @var DMSDocument $doc1 */
34
        $doc1 = $this->objFromFixture('DMSDocument', 'doc1');
35
        /** @var DMSDocument $doc2 */
36
        $doc2 = $this->objFromFixture('DMSDocument', 'doc2');
37
        /** @var DMSRequestItem $item */
38
        $item1 = DMSRequestItem::create()->setDocument($doc1)->setQuantity(2);
39
        $item2 = DMSRequestItem::create()->setDocument($doc2)->setQuantity(5);
40
        $this->cart->addItem($item1);
41
        $this->cart->addItem($item2);
42
        $this->assertInstanceOf(
0 ignored issues
show
Bug introduced by
The method assertInstanceOf() does not seem to exist on object<DMSDocumentCartControllerTest>.

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...
43
            'ArrayList',
44
            $this->controller->items(),
45
            'DMSDocumentCartController->Items() returned an ArrayList'
46
        );
47
        $this->assertCount(
0 ignored issues
show
Bug introduced by
The method assertCount() does not seem to exist on object<DMSDocumentCartControllerTest>.

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...
48
            2,
49
            $this->controller->items(),
50
            'DMSDocumentCartController->Items()->count() returned the requisite number of items'
51
        );
52
    }
53
54
    public function testReceiverInfo()
55
    {
56
        // Now add some info
57
        $this->cart->setReceiverInfo(array('Name' => 'Joe', 'Surname' => 'Soap'));
58
        $this->assertCount(2, $this->controller->getReceiverInfo());
0 ignored issues
show
Bug introduced by
The method assertCount() does not seem to exist on object<DMSDocumentCartControllerTest>.

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...
59
    }
60
61
    public function testIsCartEmpty()
62
    {
63
        $this->assertTrue($this->controller->getIsCartEmpty());
0 ignored issues
show
Bug introduced by
The method assertTrue() does not seem to exist on object<DMSDocumentCartControllerTest>.

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...
64
        /** @var DMSDocument $doc */
65
        $doc1 = $this->objFromFixture('DMSDocument', 'doc1');
66
        /** @var DMSRequestItem $item */
67
        $item1 = DMSRequestItem::create()->setDocument($doc1)->setQuantity(2);
0 ignored issues
show
Documentation introduced by
$doc1 is of type object<DataObject>|null, but the function expects a object<DMSDocument>.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
68
        $this->cart->addItem($item1);
69
        $this->assertFalse($this->controller->getIsCartEmpty());
0 ignored issues
show
Bug introduced by
The method assertFalse() does not seem to exist on object<DMSDocumentCartControllerTest>.

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...
70
    }
71
72
    public function testAdd()
73
    {
74
        $this->logInWithPermission();
75
        $doc1 = $this->objFromFixture('DMSDocument', 'doc1');
76
        // Check cart is initially empty
77
        $this->assertTrue($this->controller->getIsCartEmpty());
0 ignored issues
show
Bug introduced by
The method assertTrue() does not seem to exist on object<DMSDocumentCartControllerTest>.

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
        // Now call controller add
79
        $request = new SS_HTTPRequest('POST', '', array(), array('quantity' => 5));
80
        $request->setRouteParams(array('ID' => $doc1->ID));
81
        $this->controller->add($request);
82
        $this->assertFalse($this->controller->getIsCartEmpty());
0 ignored issues
show
Bug introduced by
The method assertFalse() does not seem to exist on object<DMSDocumentCartControllerTest>.

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...
83
84
        // Do it again and assert quantity was updated
85
        $request = new SS_HTTPRequest('POST', '', array(), array('quantity' => 7));
86
        $request->setRouteParams(array('ID' => $doc1->ID));
87
        $this->controller->add($request);
88
89
        // Test ajax
90
        $request = new SS_HTTPRequest('POST', '', array(), array('quantity' => 7, 'ajax' => 1));
91
        $request->setRouteParams(array('ID' => $doc1->ID));
92
        $response = $this->controller->add($request);
93
        $this->assertTrue($request->isAjax());
0 ignored issues
show
Bug introduced by
The method assertTrue() does not seem to exist on object<DMSDocumentCartControllerTest>.

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...
94
        $this->assertJson($response, 'Confirmed that an ajax call to add() responded with json JSON');
0 ignored issues
show
Bug introduced by
The method assertJson() does not seem to exist on object<DMSDocumentCartControllerTest>.

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
        $item = $this->cart->getItem($doc1->ID);
97
        $this->assertEquals(19, $item->getQuantity());
0 ignored issues
show
Bug introduced by
The method assertEquals() does not seem to exist on object<DMSDocumentCartControllerTest>.

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...
98
    }
99
100
101
102
    public function testDeduct()
103
    {
104
        $doc1 = $this->objFromFixture('DMSDocument', 'doc1');
105
        // Check catty is initially empty
106
        $this->assertTrue($this->controller->getIsCartEmpty());
0 ignored issues
show
Bug introduced by
The method assertTrue() does not seem to exist on object<DMSDocumentCartControllerTest>.

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...
107
        // Now call controller add
108
        $request = new SS_HTTPRequest('POST', '', array(), array('quantity'=>5));
109
        $request->setRouteParams(array('ID' => $doc1->ID));
110
        $this->controller->deduct($request);
111
        // Assert cart still empty because item doesn't exist
112
        $this->assertTrue($this->controller->getIsCartEmpty());
0 ignored issues
show
Bug introduced by
The method assertTrue() does not seem to exist on object<DMSDocumentCartControllerTest>.

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...
113
        // Now add item
114
        $this->controller->add($request);
115
        $this->assertFalse($this->controller->getIsCartEmpty());
0 ignored issues
show
Bug introduced by
The method assertFalse() does not seem to exist on object<DMSDocumentCartControllerTest>.

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...
116
117
118
        // Now try and deduct 2 from the items
119
        $request = new SS_HTTPRequest('POST', '', array(), array('quantity' => -2));
120
        $request->setRouteParams(array('ID' => $doc1->ID));
121
        $this->controller->deduct($request);
122
123
        $item = $this->cart->getItem($doc1->ID);
124
        $this->assertEquals(3, $item->getQuantity());
0 ignored issues
show
Bug introduced by
The method assertEquals() does not seem to exist on object<DMSDocumentCartControllerTest>.

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...
125
126
        // Test ajax
127
        $request = new SS_HTTPRequest('POST', '', array(), array('quantity' => 7, 'ajax' => 1));
128
        $request->setRouteParams(array('ID' => $doc1->ID));
129
        $response = $this->controller->deduct($request);
130
        $this->assertTrue($request->isAjax());
0 ignored issues
show
Bug introduced by
The method assertTrue() does not seem to exist on object<DMSDocumentCartControllerTest>.

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...
131
        $this->assertJson($response, 'Confirmed that an ajax call to deduct() method responded with JSON');
0 ignored issues
show
Bug introduced by
The method assertJson() does not seem to exist on object<DMSDocumentCartControllerTest>.

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...
132
    }
133
134
    public function testRemove()
135
    {
136
        $doc1 = $this->objFromFixture('DMSDocument', 'doc1');
137
        // Check catty is initially empty
138
        $this->assertTrue($this->controller->getIsCartEmpty());
0 ignored issues
show
Bug introduced by
The method assertTrue() does not seem to exist on object<DMSDocumentCartControllerTest>.

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...
139
        // Now call controller add
140
        $request = new SS_HTTPRequest('POST', '', array(), array('quantity'=>5));
141
        $request->setRouteParams(array('ID' => $doc1->ID));
142
        // Now add item
143
        $this->controller->add($request);
144
        $this->assertFalse($this->controller->getIsCartEmpty());
0 ignored issues
show
Bug introduced by
The method assertFalse() does not seem to exist on object<DMSDocumentCartControllerTest>.

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...
145
        $this->controller->remove($request);
146
        $this->assertTrue($this->controller->getIsCartEmpty());
0 ignored issues
show
Bug introduced by
The method assertTrue() does not seem to exist on object<DMSDocumentCartControllerTest>.

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...
147
148
        // Test ajax
149
        $request = new SS_HTTPRequest('POST', '', array(), array('quantity' => 7, 'ajax' => 1));
150
        $request->setRouteParams(array('ID' => $doc1->ID));
151
        $response = $this->controller->remove($request);
152
        $this->assertTrue($request->isAjax());
0 ignored issues
show
Bug introduced by
The method assertTrue() does not seem to exist on object<DMSDocumentCartControllerTest>.

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...
153
        $this->assertJson($response, 'Confirmed that  an ajax call to remove() method responded with JSON');
0 ignored issues
show
Bug introduced by
The method assertJson() does not seem to exist on object<DMSDocumentCartControllerTest>.

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...
154
    }
155
156
    public function testCart()
157
    {
158
        $this->assertInstanceOf('DMSDocumentCart', $this->controller->getCart());
0 ignored issues
show
Bug introduced by
The method assertInstanceOf() does not seem to exist on object<DMSDocumentCartControllerTest>.

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...
159
        //For good measure assert it's empty
160
        $this->assertTrue($this->controller->getIsCartEmpty());
0 ignored issues
show
Bug introduced by
The method assertTrue() does not seem to exist on object<DMSDocumentCartControllerTest>.

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...
161
    }
162
163
    /**
164
     * Ensure that a validation error is shown when requesting to add more of a document that is allowed
165
     */
166
    public function testCannotAddMoreThanSuggestedQuantityOfItem()
167
    {
168
        $document = $this->objFromFixture('DMSDocument', 'limited_supply');
169
        $result = $this->get('/documentcart/add/' . $document->ID . '?quantity=5&ajax=1');
170
        $this->assertContains('You can\'t add 5 of', (string) $result->getBody());
171
    }
172
173
    /**
174
     * Ensure that when a document that cannot be added to the cart is added to the cart, a validation error is
175
     * returned
176
     */
177
    public function testValidationErrorReturnedOnInvalidAdd()
178
    {
179
        $document = $this->objFromFixture('DMSDocument', 'not_allowed_in_cart');
180
        $result = $this->get('/documentcart/add/' . $document->ID . '?ajax=1');
181
        $this->assertContains('You are not allowed to add this document', (string) $result->getBody());
182
    }
183
184
    /**
185
     * Tests whether the cart items are updated from the controller
186
     */
187
    public function testUpdateCartItems()
188
    {
189
        $doc = $this->objFromFixture('DMSDocument', 'doc1');
190
        /** @var DMSRequestItem $item */
191
        $item = DMSRequestItem::create()->setDocument($doc)->setQuantity(2);
0 ignored issues
show
Documentation introduced by
$doc is of type object<DataObject>|null, but the function expects a object<DMSDocument>.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
192
        $this->cart->addItem($item);
193
        $updatedQuantities = array(
194
            'ItemQuantity' => array($doc->ID => 5),
195
        );
196
        $form = Form::create(
197
            $this->controller,
198
            'Test',
199
            FieldList::create(),
200
            FieldList::create()
201
        );
202
        $request = new SS_HTTPRequest('POST', '');
203
        $this->controller->updateCartItems($updatedQuantities, $form, $request);
204
        $this->assertEquals(5, $this->cart->getItem($item->getItemId())->getQuantity());
0 ignored issues
show
Bug introduced by
The method assertEquals() does not seem to exist on object<DMSDocumentCartControllerTest>.

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...
205
    }
206
207
    /**
208
     * Ensure the link is "friendly", not a class name
209
     */
210
    public function testLink()
211
    {
212
        $this->assertSame('documentcart', $this->controller->Link());
0 ignored issues
show
Bug introduced by
The method assertSame() does not seem to exist on object<DMSDocumentCartControllerTest>.

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
        $this->assertSame('documentcart/view', $this->controller->Link('view'));
0 ignored issues
show
Bug introduced by
The method assertSame() does not seem to exist on object<DMSDocumentCartControllerTest>.

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...
214
    }
215
216
217
    /**
218
     * Tests DMSCartEditForm form has a FieldList
219
     */
220
    public function testDMSCartEditForm()
221
    {
222
        $form = $this->controller->DMSCartEditForm();
223
        $this->assertInstanceOf('FieldList', $form->Fields());
0 ignored issues
show
Bug introduced by
The method assertInstanceOf() does not seem to exist on object<DMSDocumentCartControllerTest>.

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...
224
    }
225
226
    /**
227
     * Tests if the DMSCartEditForm is extensible
228
     */
229
    public function testDMSCartEditFormIsExtensible()
230
    {
231
        $controller = $this->controller;
232
        $form = $controller->DMSCartEditForm();
233
        $this->assertNotNull(
0 ignored issues
show
Bug introduced by
The method assertNotNull() does not seem to exist on object<DMSDocumentCartControllerTest>.

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...
234
            $form->Fields()->fieldByName('NewTextField'),
235
            'DMSDocumentRequestForm() is extensible as it included the field from the extension'
236
        );
237
    }
238
}
239