use Test::Deep;
use Test::More;
use Data::Dumper;
use aliased 'Tapper::Schema::TestrunDB::Result::Queue';
use aliased 'Tapper::MCP::Scheduler::Algorithm';
use aliased 'Tapper::MCP::Scheduler::Algorithm::WFQ';
use Tapper::Model 'model';
use Test::Fixture::DBIC::Schema;
use Tapper::Schema::TestTools;
use Tapper::MCP::Scheduler::Queue;
construct_fixture( schema => testrundb_schema, fixture => 't/fixtures/testrundb/testrun_empty.yml' );
my $algorithm = Algorithm->new_with_traits ( traits => [WFQ], queues => {} );
ok($algorithm->does(WFQ), 'does WFQ');
my %queues = (
A => Tapper::MCP::Scheduler::Queue->new({name => 'A', priority => 300, runcount => 0}),
B => Tapper::MCP::Scheduler::Queue->new({name => 'B', priority => 200, runcount => 0}),
C => Tapper::MCP::Scheduler::Queue->new({name => 'C', priority => 100, runcount => 0}),
D => Tapper::MCP::Scheduler::Queue->new({name => 'D', priority => 0, runcount => 0}),
);
my @order;
push @order, $algorithm->get_next_queue(\%queues);
push @order, $algorithm->get_next_queue(\%queues);
push @order, $algorithm->get_next_queue(\%queues);
push @order, $algorithm->get_next_queue(\%queues);
push @order, $algorithm->get_next_queue(\%queues);
push @order, $algorithm->get_next_queue(\%queues);
my $right_order=['A','B','A','A','B','C'];
my @order_names = map { $_->name } @order;
cmp_bag(\@order_names, $right_order, 'Scheduling');
done_testing;