mirror of
https://github.com/usetrmnl/byos_laravel.git
synced 2026-01-13 15:07:49 +00:00
feat: add trmnlp support
This commit is contained in:
parent
f1d5c196e8
commit
989ad2e985
8 changed files with 718 additions and 61 deletions
73
tests/Feature/Api/PluginSettingsArchiveTest.php
Normal file
73
tests/Feature/Api/PluginSettingsArchiveTest.php
Normal file
|
|
@ -0,0 +1,73 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
use App\Models\Plugin;
|
||||
use App\Models\User;
|
||||
use Illuminate\Http\UploadedFile;
|
||||
use Illuminate\Support\Str;
|
||||
use Laravel\Sanctum\Sanctum;
|
||||
|
||||
it('accepts a plugin settings archive and updates the plugin', function () {
|
||||
$user = User::factory()->create();
|
||||
$plugin = Plugin::factory()->create([
|
||||
'user_id' => $user->id,
|
||||
'uuid' => (string) Str::uuid(),
|
||||
]);
|
||||
|
||||
// Authenticate via Sanctum (endpoint requires auth:sanctum)
|
||||
Sanctum::actingAs($user);
|
||||
|
||||
// Build a temporary ZIP with required structure: src/settings.yml and src/full.liquid
|
||||
$tempDir = sys_get_temp_dir().'/trmnl_zip_'.uniqid();
|
||||
$srcDir = $tempDir.'/src';
|
||||
if (! is_dir($srcDir)) {
|
||||
mkdir($srcDir, 0777, true);
|
||||
}
|
||||
|
||||
$settingsYaml = <<<'YAML'
|
||||
name: Sample Imported
|
||||
strategy: static
|
||||
refresh_interval: 10
|
||||
custom_fields:
|
||||
- keyname: title
|
||||
default: "Hello"
|
||||
static_data: '{"message":"world"}'
|
||||
YAML;
|
||||
|
||||
$fullLiquid = <<<'LIQUID'
|
||||
<h1>{{ config.title }}</h1>
|
||||
<div>{{ data.message }}</div>
|
||||
LIQUID;
|
||||
|
||||
file_put_contents($srcDir.'/settings.yml', $settingsYaml);
|
||||
file_put_contents($srcDir.'/full.liquid', $fullLiquid);
|
||||
|
||||
$zipPath = sys_get_temp_dir().'/plugin_'.uniqid().'.zip';
|
||||
$zip = new ZipArchive();
|
||||
$zip->open($zipPath, ZipArchive::CREATE);
|
||||
$zip->addFile($srcDir.'/settings.yml', 'src/settings.yml');
|
||||
$zip->addFile($srcDir.'/full.liquid', 'src/full.liquid');
|
||||
$zip->close();
|
||||
|
||||
// Prepare UploadedFile
|
||||
$uploaded = new UploadedFile($zipPath, 'plugin.zip', 'application/zip', null, true);
|
||||
|
||||
// Make request (multipart form-data)
|
||||
$response = $this->post('/api/plugin_settings/'.$plugin->uuid.'/archive', [
|
||||
'file' => $uploaded,
|
||||
], ['Accept' => 'application/json']);
|
||||
|
||||
$response->assertSuccessful();
|
||||
|
||||
$imported = Plugin::query()
|
||||
->where('user_id', $user->id)
|
||||
->where('name', 'Sample Imported')
|
||||
->first();
|
||||
|
||||
expect($imported)->not->toBeNull();
|
||||
expect($imported->markup_language)->toBe('liquid');
|
||||
expect($imported->render_markup)->toContain('<h1>{{ config.title }}</h1>');
|
||||
// Configuration should have default for title (set on create)
|
||||
expect($imported->configuration['title'] ?? null)->toBe('Hello');
|
||||
});
|
||||
Loading…
Add table
Add a link
Reference in a new issue