ModelTest   A
last analyzed

Complexity

Total Complexity 9

Size/Duplication

Total Lines 115
Duplicated Lines 0 %

Importance

Changes 5
Bugs 2 Features 0
Metric Value
wmc 9
eloc 51
c 5
b 2
f 0
dl 0
loc 115
rs 10

5 Methods

Rating   Name   Duplication   Size   Complexity  
A test_model_base_functions() 0 25 2
A test_collection() 0 5 1
A test_order() 0 18 1
A testGetService() 0 11 3
A test_lifeboat_model() 0 12 2
1
<?php
2
3
namespace Lifeboat\Tests\Models;
4
5
use Lifeboat\Exceptions\BadMethodException;
6
use Lifeboat\Factory\ClassMap;
7
use Lifeboat\Models\Collection;
8
use Lifeboat\Models\LifeboatModel;
9
use Lifeboat\Models\Model;
10
use Lifeboat\Models\Order;
11
use Lifeboat\Services\ApiService;
12
use Lifeboat\Tests\TestCase;
13
14
class ModelTest extends TestCase {
15
16
    /**
17
     * @test
18
     * @covers \Lifeboat\Models\Model::getService
19
     */
20
    public function testGetService()
21
    {
22
        /** @var Model $class */
23
        foreach (ClassMap::MODELS as $class) {
24
            $mock = new $class($this->getMockClient(), ['ID' => 0]);
25
            $this->assertInstanceOf(Model::class, $mock);
26
27
            try {
28
                $this->assertInstanceOf(ApiService::class, $mock->getService());
29
            } catch (BadMethodException $e) {
30
                $this->assertInstanceOf(LifeboatModel::class, $mock);
31
            }
32
        }
33
    }
34
35
    /**
36
     * @test
37
     * @covers \Lifeboat\Models\Model::exists
38
     * @covers \Lifeboat\Models\Model::toArray
39
     * @covers \Lifeboat\Models\Model::getIterator
40
     * @covers \Lifeboat\Models\Model::__set
41
     * @covers \Lifeboat\Models\Model::__get
42
     * @covers \Lifeboat\Models\Model::offsetGet
43
     * @covers \Lifeboat\Models\Model::offsetSet
44
     * @covers \Lifeboat\Models\Model::offsetExists
45
     * @covers \Lifeboat\Models\Model::count
46
     * @covers \Lifeboat\Models\Model::keys
47
     * @covers \Lifeboat\Models\Model::values
48
     */
49
    public function test_model_base_functions()
50
    {
51
        /** @var Model $class */
52
        foreach (ClassMap::MODELS as $class) {
53
            /** @var Model $mock */
54
            $mock = new $class($this->getMockClient(), ['ID' => 0]);
55
            $this->assertFalse($mock->exists());
56
            $mock->test = 'x';
0 ignored issues
show
Bug Best Practice introduced by
The property test does not exist on Lifeboat\Models\Model. Since you implemented __set, consider adding a @property annotation.
Loading history...
57
            $this->assertEquals('x', $mock->test);
0 ignored issues
show
Bug Best Practice introduced by
The property test does not exist on Lifeboat\Models\Model. Since you implemented __get, consider adding a @property annotation.
Loading history...
58
            $mock->offsetSet('test2', 'y');
59
            $this->assertEquals(['ID' => 0, 'test' => 'x', 'test2' => 'y'], $mock->toArray());
60
            $this->assertEquals('x', $mock->offsetGet('test'));
61
            $this->assertTrue($mock->offsetExists('test'));
62
            $mock->offsetUnset('test2');
63
            $this->assertEquals(['ID' => 0, 'test' => 'x'], $mock->toArray());
64
            $this->assertEquals(2, $mock->count());
65
            $this->assertEquals(['ID', 'test'], $mock->keys());
66
            $this->assertEquals([0, 'x'], $mock->values());
67
68
            /** @var Model $exists */
69
            $exists = new $class($this->getMockClient(), ['ID' => 1]);
70
            $this->assertTrue($exists->exists());
71
            $exists->test = 'y';
72
            $this->assertEquals(['ID' => 1, 'test' => 'y'], $exists->toArray());
73
            $this->assertEquals('y', $exists->offsetGet('test'));
74
        }
75
    }
76
77
    /**
78
     * @test
79
     * @covers \Lifeboat\Models\Collection::__construct
80
     */
81
    public function test_collection()
82
    {
83
        $data = ['ID' => 1, 'Rules' => '{"1":1}'];
84
        $collection = new Collection($this->getMockClient(), $data);
85
        $this->assertEquals([1 => 1], $collection->Rules);
86
    }
87
88
    /**
89
     * @test
90
     * @covers \Lifeboat\Models\LifeboatModel::getService
91
     */
92
    public function test_lifeboat_model()
93
    {
94
        $model = new LifeboatModel($this->getMockClient(), ['ID' => 1]);
95
96
        try {
97
            $model->getService();
98
            $this->fail('LifeboatModel::getService() should not be able to be called');
99
        } catch (BadMethodException $e) {
100
            // Should throw error
101
        }
102
103
        $this->assertIsObject($model);
104
    }
105
106
    /**
107
     * @test
108
     * @covers \Lifeboat\Models\Order::FulfillmentType
109
     * @covers \Lifeboat\Models\Order::Status
110
     */
111
    public function test_order()
112
    {
113
        $order = new Order($this->getMockClient(), ['ID' => 0]);
114
        $order->Status = 0;
115
        $this->assertEquals('', $order->Status());
116
        $order->Status = 1;
117
        $this->assertEquals('open', $order->Status());
118
        $order->Status = 2;
119
        $this->assertEquals('paid', $order->Status());
120
121
        $order->FulfillmentType = 0;
122
        $this->assertEquals('ship', $order->FulfillmentType());
123
        $order->FulfillmentType = 1;
124
        $this->assertEquals('deliver', $order->FulfillmentType());
125
        $order->FulfillmentType = 2;
126
        $this->assertEquals('pickup', $order->FulfillmentType());
127
        $order->FulfillmentType = 3;
128
        $this->assertEquals('', $order->FulfillmentType());
129
    }
130
}
131