Passed
Push — main ( 05477b...319ffc )
by Dylan
02:07
created

ModelTest   A

Complexity

Total Complexity 8

Size/Duplication

Total Lines 120
Duplicated Lines 0 %

Importance

Changes 3
Bugs 0 Features 0
Metric Value
wmc 8
eloc 56
c 3
b 0
f 0
dl 0
loc 120
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 27 1
A testGetService() 0 7 2
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
            $this->assertInstanceOf(ApiService::class, $mock->getService());
27
        }
28
    }
29
30
    /**
31
     * @test
32
     * @covers \Lifeboat\Models\Model::exists
33
     * @covers \Lifeboat\Models\Model::toArray
34
     * @covers \Lifeboat\Models\Model::getIterator
35
     * @covers \Lifeboat\Models\Model::__set
36
     * @covers \Lifeboat\Models\Model::__get
37
     * @covers \Lifeboat\Models\Model::offsetGet
38
     * @covers \Lifeboat\Models\Model::offsetSet
39
     * @covers \Lifeboat\Models\Model::offsetExists
40
     * @covers \Lifeboat\Models\Model::count
41
     * @covers \Lifeboat\Models\Model::keys
42
     * @covers \Lifeboat\Models\Model::values
43
     */
44
    public function test_model_base_functions()
45
    {
46
        /** @var Model $class */
47
        foreach (ClassMap::MODELS as $class) {
48
            /** @var Model $mock */
49
            $mock = new $class($this->getMockClient(), ['ID' => 0]);
50
            $this->assertFalse($mock->exists());
51
            $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...
52
            $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...
53
            $mock->offsetSet('test2', 'y');
54
            $this->assertEquals(['ID' => 0, 'test' => 'x', 'test2' => 'y'], $mock->toArray());
55
            $this->assertEquals('x', $mock->offsetGet('test'));
56
            $this->assertTrue($mock->offsetExists('test'));
57
            $mock->offsetUnset('test2');
58
            $this->assertEquals(['ID' => 0, 'test' => 'x'], $mock->toArray());
59
            $this->assertEquals(2, $mock->count());
60
            $this->assertEquals(['ID', 'test'], $mock->keys());
61
            $this->assertEquals([0, 'x'], $mock->values());
62
63
            /** @var Model $exists */
64
            $exists = new $class($this->getMockClient(), ['ID' => 1]);
65
            $this->assertTrue($exists->exists());
66
            $exists->test = 'y';
67
            $this->assertEquals(['ID' => 1, 'test' => 'y'], $exists->toArray());
68
            $this->assertEquals('y', $exists->offsetGet('test'));
69
        }
70
    }
71
72
    /**
73
     * @test
74
     * @covers \Lifeboat\Models\Collection::__construct
75
     */
76
    public function test_collection()
77
    {
78
        $data = ['ID' => 1, 'Rules' => '{"1":1}'];
79
        $collection = new Collection($this->getMockClient(), $data);
80
        $this->assertEquals([1 => 1], $collection->Rules);
81
    }
82
83
    /**
84
     * @test
85
     * @covers \Lifeboat\Models\LifeboatModel::getService
86
     */
87
    public function test_lifeboat_model()
88
    {
89
        $model = new LifeboatModel($this->getMockClient(), ['ID' => 1]);
90
91
        try {
92
            $model->getService();
93
            $this->fail('LifeboatModel::getService() should not be able to be called');
94
        } catch (BadMethodException $e) {
95
            // Should throw error
96
        }
97
98
        $this->assertIsObject($model);
99
    }
100
101
    /**
102
     * @test
103
     * @covers \Lifeboat\Models\Order::FulfillmentStatus
104
     * @covers \Lifeboat\Models\Order::FulfillmentType
105
     * @covers \Lifeboat\Models\Order::Status
106
     */
107
    public function test_order()
108
    {
109
        $order = new Order($this->getMockClient(), ['ID' => 0]);
110
        $order->Status = 0;
111
        $this->assertEquals('', $order->Status());
112
        $order->Status = 1;
113
        $this->assertEquals('open', $order->Status());
114
        $order->Status = 2;
115
        $this->assertEquals('paid', $order->Status());
116
117
        $order->Fulfillment = 0;
118
        $this->assertEquals('', $order->FulfillmentStatus());
119
        $order->Fulfillment = 1;
120
        $this->assertEquals('pending', $order->FulfillmentStatus());
121
        $order->Fulfillment = 2;
122
        $this->assertEquals('fulfilled', $order->FulfillmentStatus());
123
        $order->Fulfillment = 3;
124
        $this->assertEquals('delivered', $order->FulfillmentStatus());
125
126
        $order->FulfillmentType = 0;
127
        $this->assertEquals('ship', $order->FulfillmentType());
128
        $order->FulfillmentType = 1;
129
        $this->assertEquals('deliver', $order->FulfillmentType());
130
        $order->FulfillmentType = 2;
131
        $this->assertEquals('pickup', $order->FulfillmentType());
132
        $order->FulfillmentType = 3;
133
        $this->assertEquals('', $order->FulfillmentType());
134
    }
135
}
136