<?php

use Lightscale\LaralightAssets\Assets;
use Lightscale\LaralightAssets\Manifest;

it('instantiates', function() {
    new Assets();
})->throwsNoExceptions();

it('instantiates from container', function() {
    app(Assets::class);
})->throwsNoExceptions();

it('is singleton', function() {
    expect(app(Assets::class))->toBe(app(Assets::class));
});

it('adds manifests', function() {
    app(Assets::class)->addManifest(
        'main',
        new Manifest(
            public_path('dist/manifest.json'),
            '/dist',
        ),
        isDefault: true,
    );
})->throwsNoExceptions();

it('registers manifests', function() {
    app(Assets::class)->registerManifest(
        'main', public_path('dist/manifest.json'), '/dist', isDefault: true,
    );
})->throwsNoExceptions();

it('gets manifests', function() {
    $assets = app(Assets::class);
    $assets->registerManifest(
        'main', public_path('dist/manifest.json'), '/dist', isDefault: true,
    );

    expect($assets->getManifests())
        ->toHaveLength(1)
        ->toContainOnlyInstancesOf(Manifest::class);
});

it('gets manifest', function() {
    $assets = app(Assets::class);
    $manifest = new Manifest(
        public_path('dist/manifest.json'),
        '/dist',
    );
    $name = 'main';
    $assets->addManifest($name, $manifest, true);

    expect($assets->getManifest($name))->toBe($manifest);
});

it('gets default manifest', function() {
    $assets = app(Assets::class);
    $manifest = new Manifest(
        public_path('dist/manifest.json'),
        '/dist',
    );
    $name = 'main';
    $assets->addManifest($name, $manifest, true);

    expect($assets->getDefaultManifest())->toBe($manifest);
});

it('throws exception missing manifest', function() {
    $assets = app(Assets::class);
    $assets->getManifest('main');
})->throws(Exception::class);

it('throws exception without default', function() {
    $assets = app(Assets::class);
    $assets->getDefaultManifest();
})->throws(Error::class);