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
![]() |
|||
57 | $this->assertEquals('x', $mock->test); |
||
0 ignored issues
–
show
The property
test does not exist on Lifeboat\Models\Model . Since you implemented __get , consider adding a @property annotation.
![]() |
|||
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 |