Skip to content

Commit cb54634

Browse files
author
Peter Klooster
committed
Increased code coverage
1 parent ed9b3ea commit cb54634

File tree

5 files changed

+406
-148
lines changed

5 files changed

+406
-148
lines changed

tests/Models/Post.php

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
<?php
2+
3+
namespace ProAI\Versioning\Tests\Models;
4+
5+
use Illuminate\Foundation\Auth\User as Authenticatable;
6+
7+
use ProAI\Versioning\Versionable;
8+
use ProAI\Versioning\SoftDeletes;
9+
10+
class Post extends Authenticatable
11+
{
12+
use Versionable, SoftDeletes;
13+
14+
/**
15+
* The attributes that are mass assignable.
16+
*
17+
* @var array
18+
*/
19+
protected $fillable = [
20+
'title', 'content'
21+
];
22+
23+
public $timestamps = true;
24+
25+
public $versioned = ['content', 'updated_at'];
26+
}

tests/Unit/BuilderTest.php

Lines changed: 217 additions & 148 deletions
Original file line numberDiff line numberDiff line change
@@ -1,148 +1,217 @@
1-
<?php
2-
3-
namespace ProAI\Versioning\Tests;
4-
5-
use Carbon\Carbon;
6-
use Illuminate\Support\Facades\DB;
7-
use ProAI\Versioning\Tests\Models\User;
8-
9-
class BuilderTest extends TestCase
10-
{
11-
/**
12-
* @test
13-
*/
14-
public function itWillRetrieveVersionedAttributes()
15-
{
16-
/** @var User $model */
17-
$model = factory(User::class)->create([]);
18-
19-
$this->assertArraySubset([
20-
'username' => $model->username,
21-
'email' => $model->email,
22-
'city' => $model->city,
23-
'latest_version' => $model->latest_version,
24-
'updated_at' => $model->updated_at,
25-
'created_at' => $model->created_at
26-
], User::first()->toArray());
27-
}
28-
29-
/**
30-
* @test
31-
*/
32-
public function itWillRetrieveTheLatestVersionedAttributes()
33-
{
34-
/** @var User $model */
35-
$model = factory(User::class)->create([]);
36-
37-
$model->update([
38-
'city' => 'Citadel'
39-
]);
40-
41-
$this->assertArraySubset([
42-
'latest_version' => 2,
43-
], User::first()->toArray());
44-
}
45-
46-
/**
47-
* @test
48-
*/
49-
public function itWillRetrieveTheCorrectVersionsAttributes()
50-
{
51-
/** @var User $model */
52-
$model = factory(User::class)->create([]);
53-
$city = $model->city;
54-
55-
$model->update([
56-
'city' => 'Citadel'
57-
]);
58-
59-
$model->update([
60-
'city' => 'Ricklantis'
61-
]);
62-
63-
$this->assertArraySubset([
64-
'city' => $city,
65-
'version' => 1
66-
], User::version(1)->find($model->id)->toArray());
67-
68-
$this->assertArraySubset([
69-
'city' => 'Citadel',
70-
'version' => 2
71-
], User::version(2)->find($model->id)->toArray());
72-
73-
$this->assertArraySubset([
74-
'city' => 'Ricklantis',
75-
'version' => 3
76-
], User::version(3)->find($model->id)->toArray());
77-
}
78-
79-
/**
80-
* @test
81-
*/
82-
public function itWillRetrieveAllVersions()
83-
{
84-
/** @var User $model */
85-
$model = factory(User::class)->create([]);
86-
$city = $model->city;
87-
88-
$model->update([
89-
'city' => 'Citadel'
90-
]);
91-
92-
$model->update([
93-
'city' => 'Ricklantis'
94-
]);
95-
96-
$this->assertArraySubset([
97-
[
98-
'city' => $city
99-
],
100-
[
101-
'city' => 'Citadel'
102-
],
103-
[
104-
'city' => 'Ricklantis'
105-
]
106-
], User::allVersions()->get()->toArray());
107-
}
108-
109-
/**
110-
* @test
111-
*/
112-
public function itWillRetrieveTheCorrectMomentsAttributes()
113-
{
114-
/** @var User $model */
115-
$model = factory(User::class)->create([
116-
'updated_at' => Carbon::now()->subDays(2)
117-
]);
118-
$date = $model->created_at;
119-
120-
DB::table('users_version')->insert([
121-
'ref_id' => 1,
122-
'version' => 2,
123-
'email' => $model->email,
124-
'city' => 'Citadel',
125-
'updated_at' => $date->copy()->addDays(1)
126-
]);
127-
128-
DB::table('users_version')->insert([
129-
'ref_id' => 1,
130-
'version' => 3,
131-
'email' => $model->email,
132-
'city' => 'Ricklantis',
133-
'updated_at' => $date->copy()->addDays(2)
134-
]);
135-
136-
$this->assertArraySubset([
137-
'version' => 1
138-
], User::moment($date)->find($model->id)->toArray());
139-
140-
$this->assertArraySubset([
141-
'version' => 2
142-
], User::moment($date->copy()->addDays(1))->find($model->id)->toArray());
143-
144-
$this->assertArraySubset([
145-
'version' => 3
146-
], User::moment($date->copy()->addDays(2))->find($model->id)->toArray());
147-
}
148-
}
1+
<?php
2+
3+
namespace ProAI\Versioning\Tests;
4+
5+
use Carbon\Carbon;
6+
use Illuminate\Support\Facades\DB;
7+
use ProAI\Versioning\Tests\Models\Post;
8+
use ProAI\Versioning\Tests\Models\User;
9+
10+
class BuilderTest extends TestCase
11+
{
12+
/**
13+
* @test
14+
*/
15+
public function itWillRetrieveVersionedAttributes()
16+
{
17+
/** @var User $model */
18+
$model = factory(User::class)->create([]);
19+
20+
$this->assertArraySubset([
21+
'username' => $model->username,
22+
'email' => $model->email,
23+
'city' => $model->city,
24+
'latest_version' => $model->latest_version,
25+
'updated_at' => $model->updated_at,
26+
'created_at' => $model->created_at
27+
], User::first()->toArray());
28+
}
29+
30+
/**
31+
* @test
32+
*/
33+
public function itWillRetrieveTheLatestVersionedAttributes()
34+
{
35+
/** @var User $model */
36+
$model = factory(User::class)->create([]);
37+
38+
$model->update([
39+
'city' => 'Citadel'
40+
]);
41+
42+
$this->assertArraySubset([
43+
'latest_version' => 2,
44+
], User::first()->toArray());
45+
}
46+
47+
/**
48+
* @test
49+
*/
50+
public function itWillRetrieveTheCorrectVersionsAttributes()
51+
{
52+
/** @var User $model */
53+
$model = factory(User::class)->create([]);
54+
$city = $model->city;
55+
56+
$model->update([
57+
'city' => 'Citadel'
58+
]);
59+
60+
$model->update([
61+
'city' => 'Ricklantis'
62+
]);
63+
64+
$this->assertArraySubset([
65+
'city' => $city,
66+
'version' => 1
67+
], User::version(1)->find($model->id)->toArray());
68+
69+
$this->assertArraySubset([
70+
'city' => 'Citadel',
71+
'version' => 2
72+
], User::version(2)->find($model->id)->toArray());
73+
74+
$this->assertArraySubset([
75+
'city' => 'Ricklantis',
76+
'version' => 3
77+
], User::version(3)->find($model->id)->toArray());
78+
}
79+
80+
/**
81+
* @test
82+
*/
83+
public function itWillRetrieveAllVersions()
84+
{
85+
/** @var User $model */
86+
$model = factory(User::class)->create([]);
87+
$city = $model->city;
88+
89+
$model->update([
90+
'city' => 'Citadel'
91+
]);
92+
93+
$model->update([
94+
'city' => 'Ricklantis'
95+
]);
96+
97+
$this->assertArraySubset([
98+
[
99+
'city' => $city
100+
],
101+
[
102+
'city' => 'Citadel'
103+
],
104+
[
105+
'city' => 'Ricklantis'
106+
]
107+
], User::allVersions()->get()->toArray());
108+
}
109+
110+
/**
111+
* @test
112+
*/
113+
public function itWillRetrieveTheCorrectMomentsAttributes()
114+
{
115+
/** @var User $model */
116+
$model = factory(User::class)->create([
117+
'updated_at' => Carbon::now()->subDays(2)
118+
]);
119+
$date = $model->created_at;
120+
121+
DB::table('users_version')->insert([
122+
'ref_id' => 1,
123+
'version' => 2,
124+
'email' => $model->email,
125+
'city' => 'Citadel',
126+
'updated_at' => $date->copy()->addDays(1)
127+
]);
128+
129+
DB::table('users_version')->insert([
130+
'ref_id' => 1,
131+
'version' => 3,
132+
'email' => $model->email,
133+
'city' => 'Ricklantis',
134+
'updated_at' => $date->copy()->addDays(2)
135+
]);
136+
137+
$this->assertArraySubset([
138+
'version' => 1
139+
], User::moment($date)->find($model->id)->toArray());
140+
141+
$this->assertArraySubset([
142+
'version' => 2
143+
], User::moment($date->copy()->addDays(1))->find($model->id)->toArray());
144+
145+
$this->assertArraySubset([
146+
'version' => 3
147+
], User::moment($date->copy()->addDays(2))->find($model->id)->toArray());
148+
}
149+
150+
/**
151+
* @test
152+
*/
153+
public function itWillRemovePreviousJoins()
154+
{
155+
/** @var User $model */
156+
$model = factory(User::class)->create([]);
157+
$city = $model->city;
158+
159+
$model->update([
160+
'city' => 'Citadel'
161+
]);
162+
163+
$builder = User::version(1);
164+
165+
// It should have one join right now
166+
$this->assertEquals(1, collect($builder->getQuery()->joins)->where('table', '=', 'users_version')->count());
167+
168+
$builder->version(2);
169+
170+
// It should still have one join right now
171+
$this->assertEquals(1, collect($builder->getQuery()->joins)->where('table', '=', 'users_version')->count());
172+
}
173+
174+
/**
175+
* @test
176+
*
177+
* @dataProvider modelProvider
178+
* @param string $model
179+
*/
180+
public function itWillDeleteTheVersionedTable(string $model)
181+
{
182+
factory($model)->create([]);
183+
factory($model)->create([]);
184+
185+
$model::version(1)->delete();
186+
187+
$this->assertEquals(0, User::all()->count());
188+
}
189+
190+
/**
191+
* @test
192+
*
193+
* @dataProvider modelProvider
194+
* @param string $model
195+
*/
196+
public function itWillForceDeleteTheVersionedTable(string $model)
197+
{
198+
factory($model)->create([]);
199+
factory($model)->create([]);
200+
201+
$model::version(1)->forceDelete();
202+
203+
$this->assertEquals(0, User::all()->count());
204+
}
205+
206+
public function modelProvider()
207+
{
208+
return [
209+
[
210+
User::class
211+
],
212+
[
213+
Post::class
214+
]
215+
];
216+
}
217+
}

0 commit comments

Comments
 (0)