<?php
/**
 * Nextcloud - Gallery
 *
 *
 * This file is licensed under the Affero General Public License version 3 or
 * later. See the COPYING file.
 *
 * @author Olivier Paroz <galleryapps@oparoz.com>
 *
 * @copyright Olivier Paroz 2017
 */

namespace OCA\Gallery\Tests\Controller;

use OCP\Files\File;

use OCP\AppFramework\Http;

use OCA\Gallery\Controller\PreviewApiController;
use OCA\Gallery\Http\ImageResponse;

/**
 * Class PreviewApiControllerTest
 *
 * @package OCA\Gallery\Controller
 */
class PreviewApiControllerTest extends PreviewControllerTest {

	/** @var PreviewApiController */
	protected $controller;

	public function setUp() {
		parent::setUp();
		$this->controller = new PreviewApiController(
			$this->appName,
			$this->request,
			$this->urlGenerator,
			$this->configService,
			$this->thumbnailService,
			$this->previewService,
			$this->downloadService,
			$this->eventSource,
			$this->logger
		);
	}

	/**
	 * @return array
	 */
	public function providesTestDownloadData() {
		return [
			[1234, $this->mockSvgFile(1234), true, 'image/svg+xml'],
			[4567, $this->mockSvgFile(4567), false, 'text/plain']
		];
	}

	/**
	 * @dataProvider providesTestDownloadData
	 *
	 * @param int $fileId
	 * @param File $file
	 * @param string $nativeSvg
	 * @param string $expectedMimeType
	 *
	 * @internal param string $type
	 */
	public function testGetPreviewOfSvg($fileId, $file, $nativeSvg, $expectedMimeType) {
		$width = 1024;
		$height = 768;

		/** @type File $file */
		$preview = $this->mockGetData(
			$fileId, $file, $width, $height, $keepAspect = true, $animatedPreview = true,
			$base64Encode = false, $previewRequired = false
		);
		$preview['name'] = $file->getName();

		/** @type ImageResponse $response */
		$response = $this->controller->getPreview($fileId, $width, $height, $nativeSvg);

		$this->assertEquals(Http::STATUS_OK, $response->getStatus());

		$this->assertEquals(
			$expectedMimeType . '; charset=utf-8', $response->getHeaders()['Content-type']
		);
	}

}
