use warnings; use strict; use Test::More tests => 40; use DBIx::Class::Schema::PopulateMore::Test::Schema; ok my $schema = DBIx::Class::Schema::PopulateMore::Test::Schema->connect_and_setup => 'Got a schema'; diag "Created Datebase with @{$schema->storage->connect_info}[0]"; ok $schema->can('populate_more') => 'schema has required method'; ok my @sources = sort($schema->sources) => 'got some sources'; is_deeply \@sources, [qw/ Company CompanyPerson EmploymentHistory FriendList Gender Person/] => 'Got expected sources'; ok my $populate = [ {Gender => { fields => 'label', data => { male => 'male', female => 'female', }}}, {Person => { fields => ['name', 'age', 'gender'], data => { john => ['john', 38, "!Index:Gender.male"], jane => ['jane', 40, '!Index:Gender.female'], }}}, {Company => { fields => ['name', 'company_persons'], data => { bms => ['bristol meyers squibb', [ {employee=>'!Index:Person.john'}, {employee=>'!Index:Person.jane'}, ]], takkle => ['takkle', [ { employee => '!Index:Person.john', employment_history => { started=>'!Date:january 1, 2000', } }, ]], }}}, {FriendList => { fields => ['befriender', 'friendee'], data => { john_jane => ['!Index:Person.john', '!Index:Person.jane'], }}}, {Person => { fields => ['name', 'age', 'gender', 'friendlist'], data => { mike => ['mike', 25, "!Index:Gender.male", [ {friendee=>'!Index:Person.john'}, {friendee=>'!Index:Person.jane'}, ]], }}}, {CompanyPerson => { fields => ['employee', 'company', 'employment_history'], data => { mike_at_takkle => [ '!Index:Person.mike', '!Index:Company.takkle', {started=>'!Date:yesterday'} ], }}}, ] => 'Create structure to populate_more with'; ok my %index = $schema->populate_more($populate) => 'Successful populated.'; ## Find some Genders GENDER: { ok my $gender_rs = $schema->resultset('Gender') => 'Got a resultset of genders'; is $gender_rs->count, 2 => 'Got expected number of genders'; ok $gender_rs->find({label=>'male'}) => 'Found male'; ok $gender_rs->find({label=>'female'}) => 'Found female'; ok ! $gender_rs->find({label=>'transgender'}) => 'Correctly didn not find transgender'; } ## Find some People PERSON: { ok my $person_rs = $schema->resultset('Person') => 'Got a person resultset'; is $person_rs->count, 3 => 'Got expected number of person_rs'; ok my $john = $person_rs->search({name=>'john'})->first => 'Found John'; is $john->age, 38 => 'Got correct age for john'; ok my $jane = $person_rs->search({name=>'jane'})->first => 'Found John'; is $jane->age, 40 => 'Got correct age for jane'; } ## Find some companies COMPANY: { ok my $company_rs = $schema->resultset('Company') => 'Got a person resultset'; is $company_rs->count, 2 => 'Got expected number of person_rs'; ok my $takkle = $company_rs->search({name=>'takkle'})->first => 'Found takkle'; ok my $company_persons_rs = $takkle->company_persons => 'got company_persons'; is $company_persons_rs->count, 2 => 'got right number of $company_persons_rs'; ok my $employees_rs = $takkle->employees => 'got some employees'; ok my $john = $employees_rs->search({name=>'john'})->first => 'found john'; is $john->age, 38 => 'got correct age'; ok my $bms = $company_rs->search({name=>'bristol meyers squibb'})->first => 'Found bristol meyers squibb'; is $bms->employees->count, 2 => 'got correct count for bms employees'; } ## Test Friendlist FRIENDLIST: { ok my $friendlist_rs = $schema->resultset('FriendList') => 'Got a friendlist resultset'; is $friendlist_rs->count, 3 => 'Got expected number of friendlist_rs'; ok my $mike = $schema->resultset('Person')->search({name=>'mike'})->first => 'found mike'; is $mike->friends, 2 => 'got correct number of friends for mike'; } ## Extra tests for alternative ->populate_more argument styles ok my $extra = [ {Person => { fields => ['name', 'age', 'gender'], data => { joe => ['joe', 19, '!Find:Gender.[label=male]'], }}}, ], 'Created extra'; ok my %index2 = $schema->populate_more($extra) => 'Successful populated again.'; ok my $joe = $schema->resultset('Person')->search({name=>'joe'})->first, => 'Got a Person'; is $joe->age, 19, 'Joe is 19'; ok my %index3 = $schema->populate_more( Gender => { fields => 'label', data => { unknown => 'unknown', } }, Person => { fields => ['name', 'age', 'gender'], data => { toad => ['toad', 38, '!Index:Gender.unknown'], bill => ['bill', 40, '!Find:Gender.[label=male]'], york => ['york', 45, '!Find:Gender.[label=female]'], } }, ) => 'Successful populated.'; ok my ($bill,$toad,$york) = $schema->resultset('Person')->search({name=>[qw/bill toad york/]},{order_by=>\"name asc"}) => 'Found bill, toad and york'; is $bill->age, 40, 'Got correct age for bill'; is $toad->age, 38, 'Got correct age for toad'; is $york->age, 45, 'Got correct age for york';