mirror of
https://github.com/usetrmnl/byos_laravel.git
synced 2026-01-14 07:27:47 +00:00
feat: show last refresh time for Device instead of last updated
This commit is contained in:
parent
f0b7180edd
commit
0ec6c27a53
6 changed files with 106 additions and 2 deletions
|
|
@ -21,6 +21,7 @@ class Device extends Model
|
||||||
'width' => 'integer',
|
'width' => 'integer',
|
||||||
'height' => 'integer',
|
'height' => 'integer',
|
||||||
'rotate' => 'integer',
|
'rotate' => 'integer',
|
||||||
|
'last_refreshed_at' => 'datetime',
|
||||||
];
|
];
|
||||||
|
|
||||||
public function getBatteryPercentAttribute()
|
public function getBatteryPercentAttribute()
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,28 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
use Illuminate\Database\Migrations\Migration;
|
||||||
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
|
use Illuminate\Support\Facades\Schema;
|
||||||
|
|
||||||
|
return new class extends Migration
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Run the migrations.
|
||||||
|
*/
|
||||||
|
public function up(): void
|
||||||
|
{
|
||||||
|
Schema::table('devices', function (Blueprint $table) {
|
||||||
|
$table->timestamp('last_refreshed_at')->nullable();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reverse the migrations.
|
||||||
|
*/
|
||||||
|
public function down(): void
|
||||||
|
{
|
||||||
|
Schema::table('devices', function (Blueprint $table) {
|
||||||
|
$table->dropColumn('last_refreshed_at');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
@ -268,8 +268,8 @@ new class extends Component {
|
||||||
<h1 class="text-xl font-medium dark:text-zinc-200">{{ $device->name }}</h1>
|
<h1 class="text-xl font-medium dark:text-zinc-200">{{ $device->name }}</h1>
|
||||||
</flux:tooltip>
|
</flux:tooltip>
|
||||||
<div class="flex gap-2">
|
<div class="flex gap-2">
|
||||||
<flux:tooltip content="Last update" position="bottom">
|
<flux:tooltip content="Last refresh" position="bottom">
|
||||||
<span class="dark:text-zinc-200">{{$device->updated_at->diffForHumans()}}</span>
|
<span class="dark:text-zinc-200">{{$device->last_refreshed_at?->diffForHumans()}}</span>
|
||||||
</flux:tooltip>
|
</flux:tooltip>
|
||||||
<flux:separator vertical/>
|
<flux:separator vertical/>
|
||||||
<flux:tooltip content="MAC Address" position="bottom">
|
<flux:tooltip content="MAC Address" position="bottom">
|
||||||
|
|
|
||||||
|
|
@ -43,6 +43,7 @@ Route::get('/display', function (Request $request) {
|
||||||
'last_rssi_level' => $request->header('rssi'),
|
'last_rssi_level' => $request->header('rssi'),
|
||||||
'last_battery_voltage' => $request->header('battery_voltage'),
|
'last_battery_voltage' => $request->header('battery_voltage'),
|
||||||
'last_firmware_version' => $request->header('fw-version'),
|
'last_firmware_version' => $request->header('fw-version'),
|
||||||
|
'last_refreshed_at' => now(),
|
||||||
]);
|
]);
|
||||||
|
|
||||||
// Get current screen image from mirror device or continue if not available
|
// Get current screen image from mirror device or continue if not available
|
||||||
|
|
|
||||||
|
|
@ -647,3 +647,53 @@ test('plugins in playlist are rendered in order', function () {
|
||||||
expect($thirdResponse['filename'])
|
expect($thirdResponse['filename'])
|
||||||
->not->toBe($secondResponse['filename']);
|
->not->toBe($secondResponse['filename']);
|
||||||
})->skipOnGitHubActions();
|
})->skipOnGitHubActions();
|
||||||
|
|
||||||
|
test('display endpoint updates last_refreshed_at timestamp', function () {
|
||||||
|
$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,
|
||||||
|
'rssi' => -70,
|
||||||
|
'battery_voltage' => 3.8,
|
||||||
|
'fw-version' => '1.0.0',
|
||||||
|
])->get('/api/display');
|
||||||
|
|
||||||
|
$response->assertOk();
|
||||||
|
|
||||||
|
$device->refresh();
|
||||||
|
expect($device->last_refreshed_at)->not->toBeNull()
|
||||||
|
->and($device->last_refreshed_at->diffInSeconds(now()))->toBeLessThan(2);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('display endpoint updates last_refreshed_at timestamp for mirrored devices', function () {
|
||||||
|
// Create source device
|
||||||
|
$sourceDevice = Device::factory()->create([
|
||||||
|
'mac_address' => '00:11:22:33:44:55',
|
||||||
|
'api_key' => 'source-api-key',
|
||||||
|
]);
|
||||||
|
|
||||||
|
// Create mirroring device
|
||||||
|
$mirrorDevice = Device::factory()->create([
|
||||||
|
'mac_address' => 'AA:BB:CC:DD:EE:FF',
|
||||||
|
'api_key' => 'mirror-api-key',
|
||||||
|
'mirror_device_id' => $sourceDevice->id,
|
||||||
|
]);
|
||||||
|
|
||||||
|
$response = $this->withHeaders([
|
||||||
|
'id' => $mirrorDevice->mac_address,
|
||||||
|
'access-token' => $mirrorDevice->api_key,
|
||||||
|
'rssi' => -70,
|
||||||
|
'battery_voltage' => 3.8,
|
||||||
|
'fw-version' => '1.0.0',
|
||||||
|
])->get('/api/display');
|
||||||
|
|
||||||
|
$response->assertOk();
|
||||||
|
|
||||||
|
$mirrorDevice->refresh();
|
||||||
|
expect($mirrorDevice->last_refreshed_at)->not->toBeNull()
|
||||||
|
->and($mirrorDevice->last_refreshed_at->diffInSeconds(now()))->toBeLessThan(2);
|
||||||
|
});
|
||||||
|
|
|
||||||
24
tests/Feature/DeviceConfigureTest.php
Normal file
24
tests/Feature/DeviceConfigureTest.php
Normal file
|
|
@ -0,0 +1,24 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Tests\Feature;
|
||||||
|
|
||||||
|
use App\Models\Device;
|
||||||
|
use App\Models\User;
|
||||||
|
use Illuminate\Foundation\Testing\RefreshDatabase;
|
||||||
|
use function Pest\Laravel\actingAs;
|
||||||
|
|
||||||
|
uses(RefreshDatabase::class);
|
||||||
|
|
||||||
|
test('configure view displays last_refreshed_at timestamp', function () {
|
||||||
|
$user = User::factory()->create();
|
||||||
|
$device = Device::factory()->create([
|
||||||
|
'user_id' => $user->id,
|
||||||
|
'last_refreshed_at' => now()->subMinutes(5),
|
||||||
|
]);
|
||||||
|
|
||||||
|
$response = actingAs($user)
|
||||||
|
->get(route('devices.configure', $device));
|
||||||
|
|
||||||
|
$response->assertOk()
|
||||||
|
->assertSee('5 minutes ago');
|
||||||
|
});
|
||||||
Loading…
Add table
Add a link
Reference in a new issue