<?php

// Copyright (C) 2010-2024, the Friendica project
// SPDX-FileCopyrightText: 2010-2024 the Friendica project
//
// SPDX-License-Identifier: AGPL-3.0-or-later

declare(strict_types=1);

namespace Friendica\Test\Unit\Util;

use Friendica\Util\BasePath;
use PHPUnit\Framework\TestCase;

class BasePathTest extends TestCase
{
	public static function getDataPaths(): array
	{
		$basePath   = dirname(__DIR__, 3);
		$configPath = $basePath . DIRECTORY_SEPARATOR . 'config';

		return [
			'fullPath' => [
				'server'   => [],
				'baseDir'  => $configPath,
				'expected' => $configPath,
			],
			'relative' => [
				'server'   => [],
				'baseDir'  => 'config',
				'expected' => $configPath,
			],
			'document_root' => [
				'server' => [
					'DOCUMENT_ROOT' => $configPath,
				],
				'baseDir'  => '/noooop',
				'expected' => $configPath,
			],
			'pwd' => [
				'server' => [
					'PWD' => $configPath,
				],
				'baseDir'  => '/noooop',
				'expected' => $configPath,
			],
			'no_overwrite' => [
				'server' => [
					'DOCUMENT_ROOT' => $basePath,
					'PWD'           => $basePath,
				],
				'baseDir'  => 'config',
				'expected' => $configPath,
			],
			'no_overwrite_if_invalid' => [
				'server' => [
					'DOCUMENT_ROOT' => '/nopopop',
					'PWD'           => $configPath,
				],
				'baseDir'  => '/noatgawe22fafa',
				'expected' => $configPath,
			]
		];
	}

	/**
	 * Test the basepath determination
	 * @dataProvider getDataPaths
	 */
	public function testDetermineBasePath(array $server, string $baseDir, string $expected): void
	{
		$basepath = new BasePath($baseDir, $server);
		self::assertEquals($expected, $basepath->getPath());
	}

	/**
	 * Test the basepath determination with a complete wrong path
	 */
	public function testFailedBasePath(): void
	{
		$basepath = new BasePath('/now23452sgfgas', []);

		$this->expectException(\Exception::class);
		$this->expectExceptionMessage('\'/now23452sgfgas\' is not a valid basepath');

		$basepath->getPath();
	}
}