Completed
Pull Request — master (#24)
by Quentin
03:03
created

MajoraSerializerTest::testDeserialize()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 23
Code Lines 14

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 23
rs 9.0856
cc 1
eloc 14
nc 1
nop 0
1
<?php
2
3
namespace Majora\Framework\Tests\Serializer;
4
5
use Majora\Framework\Serializer\MajoraSerializer;
6
use PHPUnit_Framework_TestCase;
7
use Prophecy\Argument;
8
9
/**
10
 * Unit test class for MajoraSerializer.php.
11
 *
12
 * @see Majora\Framework\Serializer\MajoraSerializer
13
 *
14
 * @group legacy
15
 */
16
class MajoraSerializerTest
17
    extends PHPUnit_Framework_TestCase
18
{
19
    /**
20
     * tests serialize methods without any handler defined.
21
     *
22
     * @expectedException              BadMethodCallException
23
     * @expectedExceptionMessageRegExp #Unsupported format "test"*#
24
     */
25
    public function testSerializeWithoutHandlers()
26
    {
27
        $serializer = new MajoraSerializer(array());
28
        $serializer->serialize(new \StdClass(), 'test');
29
    }
30
31
    /**
32
     * tests serialize cases.
33
     *
34
     * @dataProvider serializeProvider
35
     */
36
    public function testSerialize(
37
        array $formatHandlers,
38
        $data, $format, array $context,
39
        $expectedReturn
40
    ) {
41
        $serializer = new MajoraSerializer($formatHandlers);
42
        $this->assertEquals(
43
            $expectedReturn,
44
            $serializer->serialize($data, $format, $context)
45
        );
46
    }
47
48
    public function serializeProvider()
49
    {
50
        $cases = array();
51
52
        // Full case : 2 handlers and a scope
53
        $handler1 = $this->prophesize('Majora\Framework\Serializer\Handler\FormatHandlerInterface');
54
        $handler1->serialize('123', 'scope')
55
            ->willReturnArgument(0)
56
            ->shouldBeCalled()
57
        ;
58
59
        $handler2 = $this->prophesize('Majora\Framework\Serializer\Handler\FormatHandlerInterface');
60
        $handler2->serialize(Argument::any(), Argument::any())
61
            ->shouldNotBeCalled()
62
        ;
63
64
        $cases[] = array(
65
            array('json' => $handler1->reveal(), 'yaml' => $handler2->reveal()),
66
            '123', 'json', array('scope' => 'scope'),
67
            '123',
68
        );
69
70
        // Default case, 2 handlers and no scope
71
        $handler1 = $this->prophesize('Majora\Framework\Serializer\Handler\FormatHandlerInterface');
72
        $handler1->serialize(Argument::any(), Argument::any())
73
            ->shouldNotBeCalled()
74
        ;
75
76
        $handler2 = $this->prophesize('Majora\Framework\Serializer\Handler\FormatHandlerInterface');
77
        $handler2->serialize('123', 'default')
78
            ->willReturnArgument(0)
79
            ->shouldBeCalled()
80
        ;
81
82
        $cases[] = array(
83
            array('json' => $handler1->reveal(), 'yaml' => $handler2->reveal()),
84
            '123', 'yaml', array(),
85
            '123',
86
        );
87
88
        return $cases;
89
    }
90
91
    /**
92
     * tests deserialize methods without any handler defined.
93
     *
94
     * @expectedException              BadMethodCallException
95
     * @expectedExceptionMessageRegExp #Unsupported format "test"*#
96
     */
97
    public function testDeserializeWithoutHandlers()
98
    {
99
        $serializer = new MajoraSerializer(array());
100
        $serializer->deserialize('hello', 'StdClass', 'test', array());
101
    }
102
103
    /**
104
     * tests deserialize method.
105
     */
106
    public function testDeserialize()
107
    {
108
        $handler1 = $this->prophesize('Majora\Framework\Serializer\Handler\FormatHandlerInterface');
109
        $handler1->deserialize('123', 'StdClass')
110
            ->willReturnArgument(0)
111
            ->shouldBeCalled()
112
        ;
113
114
        $handler2 = $this->prophesize('Majora\Framework\Serializer\Handler\FormatHandlerInterface');
115
        $handler2->deserialize(Argument::any(), Argument::any())
116
            ->shouldNotBeCalled()
117
        ;
118
119
        $serializer = new MajoraSerializer(array(
120
            'json' => $handler1->reveal(),
121
            'yaml' => $handler2->reveal(),
122
        ));
123
124
        $this->assertEquals(
125
            '123',
126
            $serializer->deserialize('123', 'StdClass', 'json')
127
        );
128
    }
129
}
130