Laravel Hetzner Storagebox

PHP MIT

Production-ready Laravel package for integrating Hetzner Storage Box into Laravel applications using the native Storage facade and filesystem API.

Stars
19
Forks
0
Downloads
2,357
Open Issues
0
Files main

Repository Files

Loading file structure...
tests/Feature/LaravelIntegrationTest.php
<?php

namespace GhostCompiler\Hetzner\StorageBox\Tests\Feature;

use GhostCompiler\Hetzner\StorageBox\Facades\HetznerStorageBox;
use GhostCompiler\Hetzner\StorageBox\Http\Client\HetznerClient;
use GhostCompiler\Hetzner\StorageBox\Managers\HetznerStorageBoxManager;
use GhostCompiler\Hetzner\StorageBox\Managers\StorageBoxManager;
use GhostCompiler\Hetzner\StorageBox\Managers\StorageBoxTypeManager;
use GhostCompiler\Hetzner\StorageBox\Tests\TestCase;

class LaravelIntegrationTest extends TestCase
{
    public function test_facade_resolves_to_manager()
    {
        $manager = HetznerStorageBox::getFacadeRoot();
        $this->assertInstanceOf(HetznerStorageBoxManager::class, $manager);
    }

    public function test_container_resolves_singleton_manager()
    {
        $manager1 = $this->app->make(HetznerStorageBoxManager::class);
        $manager2 = $this->app->make('hetzner-storagebox');

        $this->assertSame($manager1, $manager2);
    }

    public function test_container_resolves_singleton_client()
    {
        $client = $this->app->make(HetznerClient::class);
        $manager = $this->app->make(HetznerStorageBoxManager::class);

        $this->assertSame($client, $manager->client());
    }

    public function test_facade_submanagers()
    {
        $this->assertInstanceOf(StorageBoxManager::class, HetznerStorageBox::storageBoxes());
        $this->assertInstanceOf(StorageBoxTypeManager::class, HetznerStorageBox::storageBoxTypes());
    }

    public function test_install_command_runs_successfully()
    {
        $this->artisan('ghost:storagebox install')
            ->expectsOutput('Installing Hetzner Storage Box SDK...')
            ->expectsOutput('Config file published successfully!')
            ->assertExitCode(0);
    }

    public function test_global_helper_resolves_manager()
    {
        $manager = HetznerStorageBox();
        $this->assertInstanceOf(HetznerStorageBoxManager::class, $manager);
        $this->assertSame($this->app->make(HetznerStorageBoxManager::class), $manager);
    }

    public function test_global_helper_with_token_creates_dynamic_instance()
    {
        $manager = HetznerStorageBox('dynamic-token');
        $this->assertInstanceOf(HetznerStorageBoxManager::class, $manager);

        $reflection = new \ReflectionClass($manager->client());
        $tokenProp = $reflection->getProperty('token');
        $tokenProp->setAccessible(true);

        $this->assertEquals('dynamic-token', $tokenProp->getValue($manager->client()));
        $this->assertNotSame($this->app->make(HetznerStorageBoxManager::class), $manager);
    }
}