<?php

namespace Common\Tests\Adapter\Zip;

use PhpOffice\Common\Tests\TestHelperZip;

abstract class AbstractZipAdapterTest extends \PHPUnit\Framework\TestCase
{
    protected $zipTest;

    /**
     * Returns a new instance of the adapter to test
     * @return \PhpOffice\Common\Adapter\Zip\ZipInterface
     */
    abstract protected function createAdapter();

    public function setUp()
    {
        parent::setUp();

        $pathResources = PHPOFFICE_COMMON_TESTS_BASE_DIR.DIRECTORY_SEPARATOR.'resources'.DIRECTORY_SEPARATOR.'files'.DIRECTORY_SEPARATOR;
        $this->zipTest = tempnam(sys_get_temp_dir(), 'PhpOfficeCommon');
        copy($pathResources.'Sample_01_Simple.pptx', $this->zipTest);
    }

    public function tearDown()
    {
        parent::tearDown();

        if (is_file($this->zipTest)) {
            unlink($this->zipTest);
        }
    }

    public function testOpen()
    {
        $adapter = $this->createAdapter();
        $this->assertSame($adapter, $adapter->open($this->zipTest));
    }

    public function testClose()
    {
        $adapter = $this->createAdapter();
        $adapter->open($this->zipTest);
        $this->assertSame($adapter, $adapter->close());
    }

    public function testAddFromString()
    {
        $expectedPath = 'file.test';
        $expectedContent = 'Content';

        $adapter = $this->createAdapter();
        $adapter->open($this->zipTest);
        $this->assertSame($adapter, $adapter->addFromString($expectedPath, $expectedContent));
        $adapter->close();

        $this->assertTrue(TestHelperZip::assertFileExists($this->zipTest, $expectedPath));
        $this->assertTrue(TestHelperZip::assertFileContent($this->zipTest, $expectedPath, $expectedContent));
    }
}