mirror of
https://github.com/usetrmnl/byos_laravel.git
synced 2026-01-14 15:37:53 +00:00
* according to https://docs.usetrmnl.com/go/diy/byos#screens
This commit is contained in:
parent
4b88726c96
commit
eacb891cba
2 changed files with 68 additions and 0 deletions
|
|
@ -276,6 +276,34 @@ Route::post('/display/update', function (Request $request) {
|
||||||
->name('display.update')
|
->name('display.update')
|
||||||
->middleware('auth:sanctum', 'ability:update-screen');
|
->middleware('auth:sanctum', 'ability:update-screen');
|
||||||
|
|
||||||
|
Route::post('/screens', function (Request $request) {
|
||||||
|
$mac_address = $request->header('id');
|
||||||
|
$access_token = $request->header('access-token');
|
||||||
|
$device = Device::where('mac_address', $mac_address)
|
||||||
|
->where('api_key', $access_token)
|
||||||
|
->first();
|
||||||
|
|
||||||
|
if (! $device) {
|
||||||
|
return response()->json([
|
||||||
|
'message' => 'MAC Address not registered or invalid access token',
|
||||||
|
], 404);
|
||||||
|
}
|
||||||
|
|
||||||
|
$request->validate([
|
||||||
|
'image' => 'array|required',
|
||||||
|
'image.content' => 'string|required',
|
||||||
|
'image.file_name' => 'string',
|
||||||
|
]);
|
||||||
|
$content = $request['image']['content'];
|
||||||
|
|
||||||
|
$view = Blade::render($content);
|
||||||
|
GenerateScreenJob::dispatchSync($device->id, null, $view);
|
||||||
|
|
||||||
|
return response()->json([
|
||||||
|
'message' => 'success',
|
||||||
|
]);
|
||||||
|
})->name('screens.update');
|
||||||
|
|
||||||
Route::get('/display/status', function (Request $request) {
|
Route::get('/display/status', function (Request $request) {
|
||||||
$request->validate([
|
$request->validate([
|
||||||
'device_id' => 'required|exists:devices,id',
|
'device_id' => 'required|exists:devices,id',
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
use App\Jobs\GenerateScreenJob;
|
||||||
use App\Models\Device;
|
use App\Models\Device;
|
||||||
use App\Models\Playlist;
|
use App\Models\Playlist;
|
||||||
use App\Models\PlaylistItem;
|
use App\Models\PlaylistItem;
|
||||||
|
|
@ -838,3 +839,42 @@ test('device returns sleep.png and correct refresh time when paused', function (
|
||||||
expect($json['image_url'])->toContain('sleep.png');
|
expect($json['image_url'])->toContain('sleep.png');
|
||||||
expect($json['refresh_rate'])->toBeLessThanOrEqual(3600); // ~60 min
|
expect($json['refresh_rate'])->toBeLessThanOrEqual(3600); // ~60 min
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('screens endpoint accepts nullable file_name', function () {
|
||||||
|
Queue::fake();
|
||||||
|
|
||||||
|
$device = Device::factory()->create([
|
||||||
|
'mac_address' => '00:11:22:33:44:55',
|
||||||
|
'api_key' => 'test-api-key',
|
||||||
|
]);
|
||||||
|
|
||||||
|
$response = $this->withHeaders([
|
||||||
|
'id' => $device->mac_address,
|
||||||
|
'access-token' => $device->api_key,
|
||||||
|
])->post('/api/screens', [
|
||||||
|
'image' => [
|
||||||
|
'content' => '<div>Test content</div>',
|
||||||
|
],
|
||||||
|
]);
|
||||||
|
|
||||||
|
$response->assertOk();
|
||||||
|
|
||||||
|
Queue::assertPushed(GenerateScreenJob::class);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('screens endpoint returns 404 for invalid device credentials', function () {
|
||||||
|
$response = $this->withHeaders([
|
||||||
|
'id' => 'invalid-mac',
|
||||||
|
'access-token' => 'invalid-key',
|
||||||
|
])->post('/api/screens', [
|
||||||
|
'image' => [
|
||||||
|
'content' => '<div>Test content</div>',
|
||||||
|
'file_name' => 'test.blade.php',
|
||||||
|
],
|
||||||
|
]);
|
||||||
|
|
||||||
|
$response->assertNotFound()
|
||||||
|
->assertJson([
|
||||||
|
'message' => 'MAC Address not registered or invalid access token',
|
||||||
|
]);
|
||||||
|
});
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue