The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
# -*- mode: cperl; tab-width: 8; indent-tabs-mode: nil; basic-offset: 2 -*-
# vim:ts=8:sw=2:et:sta:sts=2
use strict;
use warnings;
use Test::More tests => 7;

eval {
  require "./bin/clearpress";
};

{
  my $in = {
	    'course' => {
			 'name'     => 'course',
			 'has_a'    => [
					'category'
				       ],
			 'has_many' => [
					'course_user'
				       ]
			},
	   };
  my $received = [map { $_->{name} }
		  sort _sorter
		  values %{$in}];
  my $expected = [qw(course)];
  is_deeply($received,
	    $expected);
}

{
  my $in = {
	    'family' => {
			 'name'     => 'family',
			 'has_many' => [
					'kid'
				       ]
			},
	    'kid'    => {
			 'name'     => 'kid',
			 'has_a'    => [
                                        'family'
                                       ]
			},
	   };
  my $received = [map { $_->{name} }
		  sort _sorter
		  values %{$in}];
  my $expected = [qw(family kid)];

  is_deeply($received,
	    $expected);

  my $received2 = [map { $_->{name} }
		   sort _sorter
		   reverse values %{$in}];
  is_deeply($received2,
	    $expected);
}

{
  my $in = {
	    'house'  => {
			 name => 'house',
			},
	    'family' => {
			 'name'     => 'family',
			 'has_a'    => ['house'],
			 'has_many' => ['kid'],
			},
	    'kid'    => {
			 'name'     => 'kid',
			 'has_a' => [
				     'family'
				    ]
			},
	   };
  my $received = [map { $_->{name} }
		  sort _sorter
		  values %{$in}];
  my $expected = [qw(house family kid)];

  is_deeply($received,
	    $expected);

  my $received2 = [map { $_->{name} }
		   sort _sorter
		   reverse values %{$in}];
  is_deeply($received2,
	    $expected);
}


{
  my $in  = {
	     'course' => {
			  'name'     => 'course',
			  'has_a'    => [
					 'category'
					],
			  'has_many' => [
					 'course_user'
					]
			 },
	     'course_user' => {
			       'name'   => 'course_user',
			       'has_a'  => [
					    'user',
					    'course'
					   ]
			      },
	     'user' => {
			'name'     => 'user',
			'has_many' => [
				       'course_user'
				      ]
		       },
	     'category' => {
			    'name'     => 'category',
			    'has_many' => [
					   'course'
					  ]
			   }
	    };

  my $expected = [qw(category user course course_user)];
  my $received = [map { $_->{name} }
		  sort _sorter
		  values %{$in}];
#  use Data::Dumper; diag Dumper($received, $expected);
  is_deeply($received,
	    $expected);

  my $expected2 = [qw(category user course course_user)];
  my $received2 = [map { $_->{name} }
		   sort _sorter
		   reverse values %{$in}];
#  use Data::Dumper; diag Dumper($received);
  is_deeply($received2,
	    $expected2);
}