ActiveRecord-Simple

 view release on metacpan or  search on metacpan

t/10-relations.t  view on Meta::CPAN


	my $_DATA_SQL_CA = q{
	INSERT INTO `customer_achievement` (`customer_id`, `achievement_id`)
	VALUES
		(1, 1),
		(1, 2),
		(2, 1),
		(2, 3),
		(3, 1),
		(3, 2),
		(3, 3);
	};

	Schema->dbh->do($_DROP_SQL_CA);
	Schema->dbh->do($_INIT_SQL_CA);
	Schema->dbh->do($_DATA_SQL_CA);
}




package Purchase;

our @ISA = qw/Schema/;

__PACKAGE__->table_name('purchase');
__PACKAGE__->columns(qw/id title amount customer_id/);
__PACKAGE__->primary_key('id');

__PACKAGE__->belongs_to(customer => 'Customer');


package Customer;

our @ISA = qw/Schema/;

__PACKAGE__->table_name('customer');
__PACKAGE__->columns(qw/id first_name last_name age email/);
__PACKAGE__->primary_key('id');

__PACKAGE__->has_many(purchases => 'Purchase');
__PACKAGE__->has_many(achievements => 'Achievement', { via => 'customer_achievement' });


package Achievement;

our @ISA = qw/Schema/;

__PACKAGE__->table_name('achievement');
__PACKAGE__->columns(qw/id title/);
__PACKAGE__->primary_key('id');

__PACKAGE__->has_many(customers => 'Customer', { via => 'customer_achievement' });




package main;

use Test::More;
use Data::Dumper;
use 5.010;


ok my $customer = Customer->objects->get(1);
is $customer->first_name, 'Bob';

my @purchases = $customer->purchases->fetch;
is scalar @purchases, 2;

my $purchase = Purchase->objects->get(2);
is $purchase->id, 2;
is $purchase->title, 'The Order #2';
is $purchase->customer->first_name, 'John';

my $achievement = Achievement->objects->get(1);
is $achievement->title, 'Bronze';

my @customers = $achievement->customers->fetch;
is scalar @customers, 3;

my @achievements = $customer->achievements->fetch;
is scalar @achievements, 2;


ok my $Bill = Customer->objects->get(3), 'got Bill';
ok $achievement = Achievement->new({ title => 'Bill Achievement', id => 4 })->save, 'create achievement';

is $Bill->id, 3;
is $achievement->id, 4;

ok $Bill->achievements($achievement)->save, 'trying to bind achievement to the customer';

ok my $cnt = $Bill->achievements({ title => 'Bill Achievement' })->count(), 'trying to count customers achievements';
is $cnt, 1, 'looks good';

ok $Bill->achievements({ title => 'Bill Achievement' })->exists;
ok !$Bill->achievements({ title => 'Not Existing Achievement' })->exists;

ok my @bills_orders = $Bill->purchases->fetch, 'got Bill\'s orders';

is scalar @bills_orders, 1;
ok my $order = Purchase->objects->get(3), 'order';
ok $order->customer, 'the order has a customer';
is $order->customer->id, $bills_orders[0]->id;

ok @achievements = $Bill->achievements->fetch;#

is @achievements, 4;
isa_ok $achievements[0], 'Achievement';

ok my $a = Achievement->objects->get(1);
ok @customers = $a->customers->order_by('id')->fetch;
is @customers, 3;



done_testing();



( run in 3.908 seconds using v1.01-cache-2.11-cpan-437f7b0c052 )