Completed
Push — master ( 301d75...7b46e5 )
by Russell
02:43
created

JSONTextSetValueTest::testSetValueOnSourceArray()   B

Complexity

Conditions 1
Paths 1

Size

Total Lines 32
Code Lines 15

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 1 Features 0
Metric Value
c 1
b 1
f 0
dl 0
loc 32
rs 8.8571
cc 1
eloc 15
nc 1
nop 0
1
<?php
2
3
/**
4
 * @package silverstripe-jsontext
5
 * @subpackage fields
6
 * @author Russell Michell <[email protected]>
7
 */
8
9
use JSONText\Fields;
10
use JSONText\Exceptions;
11
12
class JSONTextSetValueTest extends SapphireTest
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...
13
{
14
    /**
15
     * @var array
16
     */
17
    protected $fixtures = [
18
        'array'     => 'tests/fixtures/json/array.json',
19
        'object'    => 'tests/fixtures/json/object.json',
20
        'invalid'   => 'tests/fixtures/json/invalid.json'
21
    ];
22
23
    /**
24
     * JSONTextTest constructor.
25
     * 
26
     * Modify fixtures property to be able to run on PHP <5.6 without use of constant in class property which 5.6+ allows
27
     */
28
    public function __construct()
29
    {
30
        foreach($this->fixtures as $name => $path) {
31
            $this->fixtures[$name] = MODULE_DIR . '/' . $path;
32
        }
33
    }
34
35
    /**
36
     * Tests JSONText::setValue() by means of a simple JSONPath expression operating on a JSON array
37
     */
38
    public function testSetValueOnSourceArray()
39
    {
40
        // Data Source: Array
41
        // Return Type: ARRAY
42
        // Expression: '$.[2]' The third item
43
        $field = JSONText\Fields\JSONText::create('MyJSON');
44
        $field->setReturnType('array');
45
        $field->setValue($this->getFixture('array'));
46
        // Assert current value
47
        $this->assertEquals(['trabant'], $field->query('$.[2]'));
0 ignored issues
show
Bug introduced by
The method assertEquals() does not seem to exist on object<JSONTextSetValueTest>.

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
        // Now update it...
49
        $field->setValue('lada', null, '$.[2]');
50
        // Assert new value
51
        $this->assertEquals(['lada'], $field->query('$.[2]'));
0 ignored issues
show
Bug introduced by
The method assertEquals() does not seem to exist on object<JSONTextSetValueTest>.

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...
52
53
        // Data Source: Array
54
        // Return Type: ARRAY
55
        // Expression: '$.[6]' The seventh item
56
        $field = JSONText\Fields\JSONText::create('MyJSON');
57
        $field->setReturnType('array');
58
        $field->setValue($this->getFixture('array'));
59
        // Assert current value
60
        $this->assertEquals([33.3333], $field->query('$.[6]'));
0 ignored issues
show
Bug introduced by
The method assertEquals() does not seem to exist on object<JSONTextSetValueTest>.

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...
61
        // Now update it...
62
        $field->setValue(99.99, null, '$.[6]');
63
        // Assert new value
64
        $this->assertEquals([99.99], $field->query('$.[6]'));
0 ignored issues
show
Bug introduced by
The method assertEquals() does not seem to exist on object<JSONTextSetValueTest>.

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...
65
        
66
        // Invalid #1
67
        $this->setExpectedException('\JSONText\Exceptions\JSONTextException');
0 ignored issues
show
Bug introduced by
The method setExpectedException() does not seem to exist on object<JSONTextSetValueTest>.

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...
68
        $field->setValue(99.99, null, '$[6]'); // Invalid JSON path expression
69
    }
70
    
71
    /**
72
     * Get the contents of a fixture
73
     * 
74
     * @param string $fixture
75
     * @return string
76
     */
77
    private function getFixture($fixture)
78
    {
79
        $files = $this->fixtures;
80
        return file_get_contents($files[$fixture]);
81
    }
82
83
}
84