#!perl

use strict;
use warnings;

use Test::More;
use Test::Exception;

use Pinto::Tester;

#------------------------------------------------------------------------------
# Test repository with master stack as default

{
	my $t = Pinto::Tester->new;

	$t->path_exists_ok( [qw(.pinto version)] );
	$t->path_exists_ok( [qw(.pinto config pinto.ini)] );
	$t->path_exists_ok( [qw(.pinto db pinto.db)] );
	$t->path_exists_ok( [qw(.pinto log)] );

	$t->path_exists_ok( [qw(modules 02packages.details.txt.gz)] );
	$t->path_exists_ok( [qw(modules 03modlist.data.gz)] );
	$t->path_exists_ok( [qw(authors 01mailrc.txt.gz)] );

	$t->path_exists_ok( [qw(stacks master modules 02packages.details.txt.gz)] );
	$t->path_exists_ok( [qw(stacks master modules 03modlist.data.gz)] );
	$t->path_exists_ok( [qw(stacks master authors 01mailrc.txt.gz)] );

	my $stack = $t->pinto->repo->get_stack('master');
	ok defined $stack, 'master stack exists';
	is $stack->name,         'master', 'stack has correct name';
	is $stack->is_default,          1, 'stack is the default stack';
	is $stack->head->is_root,       1, 'stack is at root revision';
	is $stack->head->is_committed,  1, 'root revision is committed';

	my $repo = $t->pinto->repo;
	is $repo->get_version, $Pinto::Repository::REPOSITORY_VERSION, 'Repo version matches';
}

#------------------------------------------------------------------------------
# Test repository created without default stack

{
	my $t = Pinto::Tester->new( init_args => {no_default => 1} );
	$t->no_default_stack_ok;
}

#------------------------------------------------------------------------------
# Test repository created with custom stack name

{
	my $t = Pinto::Tester->new( init_args => {stack => 'custom'} );
	$t->stack_is_default_ok('custom');
}

#------------------------------------------------------------------------------
# Test custom config

{
	my $config = {sources => 'MySource', log_level => 'debug'};
	my $t = Pinto::Tester->new(init_args => $config);

	is $t->pinto->config->log_level,   'debug', 'Got custom log_level';
	is $t->pinto->config->sources,  'MySource', 'Got custom source';
}

#------------------------------------------------------------------------------
# Test schema version

{
	my $t = Pinto::Tester->new;
	my $schema_version = $t->pinto->repo->db->schema->schema_version;
	is $schema_version, $Pinto::Schema::SCHEMA_VERSION, 'Schema version matches';
}

#------------------------------------------------------------------------------

done_testing;
