mirror of
https://github.com/usetrmnl/byos_laravel.git
synced 2026-01-13 15:07:49 +00:00
feat: initial implementation of recipe catalog
Some checks are pending
tests / ci (push) Waiting to run
Some checks are pending
tests / ci (push) Waiting to run
This commit is contained in:
parent
7434911275
commit
6d7968a7b0
6 changed files with 399 additions and 8 deletions
102
tests/Feature/Livewire/Catalog/IndexTest.php
Normal file
102
tests/Feature/Livewire/Catalog/IndexTest.php
Normal file
|
|
@ -0,0 +1,102 @@
|
|||
<?php
|
||||
|
||||
use App\Models\User;
|
||||
use Illuminate\Support\Facades\Cache;
|
||||
use Illuminate\Support\Facades\Http;
|
||||
use Livewire\Volt\Volt;
|
||||
use Symfony\Component\Yaml\Yaml;
|
||||
|
||||
beforeEach(function () {
|
||||
Cache::flush();
|
||||
});
|
||||
|
||||
it('can render catalog component', function () {
|
||||
// Mock empty catalog response
|
||||
Http::fake([
|
||||
config('app.catalog_url') => Http::response('', 200),
|
||||
]);
|
||||
|
||||
$component = Volt::test('catalog.index');
|
||||
|
||||
$component->assertSee('No plugins available');
|
||||
});
|
||||
|
||||
it('loads plugins from catalog URL', function () {
|
||||
// Clear cache first to ensure fresh data
|
||||
Cache::forget('catalog_plugins');
|
||||
|
||||
// Mock the HTTP response for the catalog URL
|
||||
$catalogData = [
|
||||
'test-plugin' => [
|
||||
'name' => 'Test Plugin',
|
||||
'author' => ['name' => 'Test Author', 'github' => 'testuser'],
|
||||
'author_bio' => [
|
||||
'description' => 'A test plugin',
|
||||
'learn_more_url' => 'https://example.com',
|
||||
],
|
||||
'license' => 'MIT',
|
||||
'trmnlp' => [
|
||||
'zip_url' => 'https://example.com/plugin.zip',
|
||||
],
|
||||
'logo_url' => 'https://example.com/logo.png',
|
||||
],
|
||||
];
|
||||
|
||||
$yamlContent = Yaml::dump($catalogData);
|
||||
|
||||
// Override the default mock with specific data
|
||||
Http::fake([
|
||||
config('app.catalog_url') => Http::response($yamlContent, 200),
|
||||
]);
|
||||
|
||||
$component = Volt::test('catalog.index');
|
||||
|
||||
$component->assertSee('Test Plugin');
|
||||
$component->assertSee('testuser');
|
||||
$component->assertSee('A test plugin');
|
||||
$component->assertSee('MIT');
|
||||
});
|
||||
|
||||
it('shows error when plugin not found', function () {
|
||||
$user = User::factory()->create();
|
||||
|
||||
$this->actingAs($user);
|
||||
|
||||
$component = Volt::test('catalog.index');
|
||||
|
||||
$component->call('installPlugin', 'non-existent-plugin');
|
||||
|
||||
// The component should dispatch an error notification
|
||||
$component->assertHasErrors();
|
||||
});
|
||||
|
||||
it('shows error when zip_url is missing', function () {
|
||||
$user = User::factory()->create();
|
||||
|
||||
// Mock the HTTP response for the catalog URL without zip_url
|
||||
$catalogData = [
|
||||
'test-plugin' => [
|
||||
'name' => 'Test Plugin',
|
||||
'author' => ['name' => 'Test Author'],
|
||||
'author_bio' => ['description' => 'A test plugin'],
|
||||
'license' => 'MIT',
|
||||
'trmnlp' => [],
|
||||
],
|
||||
];
|
||||
|
||||
$yamlContent = Yaml::dump($catalogData);
|
||||
|
||||
Http::fake([
|
||||
config('app.catalog_url') => Http::response($yamlContent, 200),
|
||||
]);
|
||||
|
||||
$this->actingAs($user);
|
||||
|
||||
$component = Volt::test('catalog.index');
|
||||
|
||||
$component->call('installPlugin', 'test-plugin');
|
||||
|
||||
// The component should dispatch an error notification
|
||||
$component->assertHasErrors();
|
||||
|
||||
});
|
||||
|
|
@ -94,7 +94,7 @@ it('throws exception for missing required files', function () {
|
|||
|
||||
$pluginImportService = new PluginImportService();
|
||||
expect(fn () => $pluginImportService->importFromZip($zipFile, $user))
|
||||
->toThrow(Exception::class, 'Invalid ZIP structure. Required files settings.yml and full.liquid/full.blade.php are missing.');
|
||||
->toThrow(Exception::class, 'Invalid ZIP structure. Required files settings.yml and full.liquid are missing.');
|
||||
});
|
||||
|
||||
it('sets default values when settings are missing', function () {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue