mirror of
https://github.com/usetrmnl/byos_laravel.git
synced 2026-01-13 23:18:10 +00:00
tests: add test for models Plugin, Playlist, PlaylistItem
This commit is contained in:
parent
ec862942cd
commit
2ef028527f
5 changed files with 118 additions and 1 deletions
|
|
@ -66,4 +66,9 @@ class User extends Authenticatable // implements MustVerifyEmail
|
||||||
{
|
{
|
||||||
return $this->hasMany(Device::class);
|
return $this->hasMany(Device::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function plugins(): HasMany
|
||||||
|
{
|
||||||
|
return $this->hasMany(Plugin::class);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@
|
||||||
|
|
||||||
pest()->extend(Tests\TestCase::class)
|
pest()->extend(Tests\TestCase::class)
|
||||||
->use(Illuminate\Foundation\Testing\RefreshDatabase::class)
|
->use(Illuminate\Foundation\Testing\RefreshDatabase::class)
|
||||||
->in('Feature');
|
->in('Feature', 'Unit');
|
||||||
|
|
||||||
registerSpatiePestHelpers();
|
registerSpatiePestHelpers();
|
||||||
|
|
||||||
|
|
|
||||||
24
tests/Unit/Models/PlaylistItemTest.php
Normal file
24
tests/Unit/Models/PlaylistItemTest.php
Normal file
|
|
@ -0,0 +1,24 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
use App\Models\Playlist;
|
||||||
|
use App\Models\PlaylistItem;
|
||||||
|
use App\Models\Plugin;
|
||||||
|
|
||||||
|
|
||||||
|
test('playlist item belongs to playlist', function () {
|
||||||
|
$playlist = Playlist::factory()->create();
|
||||||
|
$playlistItem = PlaylistItem::factory()->create(['playlist_id' => $playlist->id]);
|
||||||
|
|
||||||
|
expect($playlistItem->playlist)
|
||||||
|
->toBeInstanceOf(Playlist::class)
|
||||||
|
->id->toBe($playlist->id);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('playlist item belongs to plugin', function () {
|
||||||
|
$plugin = Plugin::factory()->create();
|
||||||
|
$playlistItem = PlaylistItem::factory()->create(['plugin_id' => $plugin->id]);
|
||||||
|
|
||||||
|
expect($playlistItem->plugin)
|
||||||
|
->toBeInstanceOf(Plugin::class)
|
||||||
|
->id->toBe($plugin->id);
|
||||||
|
});
|
||||||
46
tests/Unit/Models/PlaylistTest.php
Normal file
46
tests/Unit/Models/PlaylistTest.php
Normal file
|
|
@ -0,0 +1,46 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
use App\Models\Device;
|
||||||
|
use App\Models\Playlist;
|
||||||
|
use App\Models\PlaylistItem;
|
||||||
|
|
||||||
|
test('playlist has required attributes', function () {
|
||||||
|
$playlist = Playlist::factory()->create([
|
||||||
|
'name' => 'Test Playlist',
|
||||||
|
'is_active' => true,
|
||||||
|
'weekdays' => [1, 2, 3],
|
||||||
|
'active_from' => '09:00',
|
||||||
|
'active_until' => '17:00',
|
||||||
|
]);
|
||||||
|
|
||||||
|
expect($playlist)
|
||||||
|
->name->toBe('Test Playlist')
|
||||||
|
->is_active->toBeTrue()
|
||||||
|
->weekdays->toBe([1, 2, 3])
|
||||||
|
->active_from->format('H:i')->toBe('09:00')
|
||||||
|
->active_until->format('H:i')->toBe('17:00');
|
||||||
|
});
|
||||||
|
|
||||||
|
test('playlist belongs to device', function () {
|
||||||
|
$device = Device::factory()->create();
|
||||||
|
$playlist = Playlist::factory()->create(['device_id' => $device->id]);
|
||||||
|
|
||||||
|
expect($playlist->device)
|
||||||
|
->toBeInstanceOf(Device::class)
|
||||||
|
->id->toBe($device->id);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('playlist has many items', function () {
|
||||||
|
$playlist = Playlist::factory()->create();
|
||||||
|
$items = PlaylistItem::factory()->count(3)->create(['playlist_id' => $playlist->id]);
|
||||||
|
|
||||||
|
expect($playlist->items)
|
||||||
|
->toHaveCount(3)
|
||||||
|
->each->toBeInstanceOf(PlaylistItem::class);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('getNextPlaylistItem returns null when playlist is inactive', function () {
|
||||||
|
$playlist = Playlist::factory()->create(['is_active' => false]);
|
||||||
|
|
||||||
|
expect($playlist->getNextPlaylistItem())->toBeNull();
|
||||||
|
});
|
||||||
42
tests/Unit/Models/PluginTest.php
Normal file
42
tests/Unit/Models/PluginTest.php
Normal file
|
|
@ -0,0 +1,42 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
use App\Models\Plugin;
|
||||||
|
|
||||||
|
uses(\Illuminate\Foundation\Testing\RefreshDatabase::class);
|
||||||
|
|
||||||
|
test('plugin has required attributes', function () {
|
||||||
|
$plugin = Plugin::factory()->create([
|
||||||
|
'name' => 'Test Plugin',
|
||||||
|
'data_payload' => ['key' => 'value'],
|
||||||
|
]);
|
||||||
|
|
||||||
|
expect($plugin)
|
||||||
|
->name->toBe('Test Plugin')
|
||||||
|
->data_payload->toBe(['key' => 'value'])
|
||||||
|
->uuid->toBeString()
|
||||||
|
->uuid->toMatch('/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/');
|
||||||
|
});
|
||||||
|
|
||||||
|
test('plugin automatically generates uuid on creation', function () {
|
||||||
|
$plugin = Plugin::factory()->create();
|
||||||
|
|
||||||
|
expect($plugin->uuid)
|
||||||
|
->toBeString()
|
||||||
|
->toMatch('/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/');
|
||||||
|
});
|
||||||
|
|
||||||
|
test('plugin can have custom uuid', function () {
|
||||||
|
$uuid = \Illuminate\Support\Str::uuid();
|
||||||
|
$plugin = Plugin::factory()->create(['uuid' => $uuid]);
|
||||||
|
|
||||||
|
expect($plugin->uuid)->toBe($uuid);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('plugin data_payload is cast to array', function () {
|
||||||
|
$data = ['key' => 'value'];
|
||||||
|
$plugin = Plugin::factory()->create(['data_payload' => $data]);
|
||||||
|
|
||||||
|
expect($plugin->data_payload)
|
||||||
|
->toBeArray()
|
||||||
|
->toBe($data);
|
||||||
|
});
|
||||||
Loading…
Add table
Add a link
Reference in a new issue