<?php

declare(strict_types=1);
namespace Tests\git2;
use git2\git;
use git2\git_error_code;
use git2\git_time;

final class SignatureTest extends GitTestCase
{

	public function testDefault(): void
	{
		$dir = $this->mkdir('default');
		$this->assertOK(git::repository_init($repo, $dir, false));
		$this->assertOK(git::repository_config($config, $repo));
		$this->assertOK(git::config_set_string($config, 'user.name', 'John Doe'));
		$this->assertOK(git::config_set_string($config, 'user.email', 'john.doe@example.com'));
		$this->assertOK(git::signature_default($sig, $repo));
		$this->assertSame('John Doe', $sig->name);
		$this->assertSame('john.doe@example.com', $sig->email);
		$this->assertOK(git::config_set_string($config, 'user.name', ''));
		$this->assertOK(git::config_set_string($config, 'user.email', ''));
		$this->assertSame(git_error_code::ERROR, git::signature_default($sig, $repo));
	}

	public function testNew(): void
	{
		$this->assertOK(git::signature_new(
			$sig,
			'John Doe', 'john.doe@example.com',
			1640165957, 60,
		));

		$this->assertSame('John Doe', $sig->name);
		$this->assertSame('john.doe@example.com', $sig->email);
		$this->assertInstanceOf(git_time::class, $sig->when);
		$this->assertSame(1640165957, $sig->when->time);
		$this->assertSame(60, $sig->when->offset);
		$this->assertSame('+', $sig->when->sign);
	}

	public function testNow(): void
	{
		$this->assertOK(git::signature_now($sig, 'John Doe', 'john.doe@example.com'));
		$this->assertSame('John Doe', $sig->name);
		$this->assertSame('john.doe@example.com', $sig->email);
	}

}