<?php

namespace LdapRecord\Testing;

use LdapRecord\Container;

class DirectoryFake
{
    /**
     * Setup the fake connection.
     *
     * @param string|null $name
     *
     * @throws \LdapRecord\ContainerException
     *
     * @return ConnectionFake
     */
    public static function setup($name = null)
    {
        $connection = Container::getConnection($name);

        $fake = static::makeConnectionFake(
            $connection->getConfiguration()->all()
        );

        // Replace the connection with a fake.
        Container::addConnection($fake, $name);

        return $fake;
    }

    /**
     * Reset the container.
     *
     * @return void
     */
    public static function tearDown()
    {
        Container::reset();
    }

    /**
     * Make a connection fake.
     *
     * @param array $config
     *
     * @return ConnectionFake
     */
    public static function makeConnectionFake(array $config = [])
    {
        return ConnectionFake::make($config)->shouldBeConnected();
    }
}
