<?php
/**
 * @author Daniel J. Summers <daniel@bitbadger.solutions>
 * @license MIT
 */

declare(strict_types=1);

use BitBadger\PDODocument\DocumentException;

pest()->group('unit');

describe('Constructor', function () {
    test('fills code and prior exception if provided', function () {
        $priorEx = new Exception('Uh oh');
        expect(new DocumentException('Test Exception', 17, $priorEx))
            ->not->toBeNull()
            ->getMessage()->toBe('Test Exception')
            ->getCode()->toBe(17)
            ->getPrevious()->toBe($priorEx);
    });
    test('uses expected code and prior exception if not provided', function () {
        expect(new DocumentException('Oops'))
            ->not->toBeNull()
            ->getMessage()->toBe('Oops')
            ->getCode()->toBe(0)
            ->getPrevious()->toBeNull();
    });
});

describe('->__toString()', function () {
    test('excludes code if 0', function () {
        $ex = new DocumentException('Test failure');
        expect("$ex")->toBe("BitBadger\PDODocument\DocumentException: Test failure\n");
    });
    test('includes code if non-zero', function () {
        $ex = new DocumentException('Oof', -6);
        expect("$ex")->toBe("BitBadger\PDODocument\DocumentException: [-6] Oof\n");
    });
});