<?php declare(strict_types=1);
/**
 * Banker
 *
 * A Caching library implementing psr/cache
 *
 * PHP version 7.0
 *
 * @package     Banker
 * @author      Timothy J. Warren <tim@timshomepage.net>
 * @copyright   2016  Timothy J. Warren
 * @license     http://www.opensource.org/licenses/mit-license.html  MIT License
 * @version     1.0.0
 * @link        https://git.timshomepage.net/timw4mail/banker
 */

namespace Aviat\Banker\Tests\Driver;

use PHPUnit\Framework\TestCase;

class DriverTestBase extends TestCase {

	protected $driver;

	public function tearDown()
	{
		$this->driver->__destruct();
	}

	public function testGetSet()
	{
		$this->driver->set('foo', 'bar');
		$this->assertEquals('bar', $this->driver->get('foo'));

		$bar = [
			'foo' => [
				'apple' => 'orange'
			],
			'bar' => 'baz'
		];

		$this->driver->set('bar', $bar);
		$this->assertEquals($bar, $this->driver->get('bar'));
	}

	public function testGetMultiple()
	{
		$this->driver->set('foo', ['bar']);
		$this->driver->set('bar', (object) [
			'foo' => [
				'bar' => 'baz'
			]
		]);

		// Intentionally set the same key with different values
		$this->driver->set('baz', 34);
		$this->driver->set('baz', 42);

		$expected = [
			'foo' => ['bar'],
			'bar' => (object) [
				'foo' => [
					'bar' => 'baz'
				]
			],
		];

		$actual = $this->driver->getMultiple(['foo', 'bar']);

		$this->assertEquals($expected, $actual);
	}

	public function testSetWithExpires()
	{
		$this->driver->set('foo', 'bar', 30);
		$this->assertEquals('bar', $this->driver->get('foo'));
	}
}