Commit | Line | Data |
def17c59 |
1 | use strict; |
2 | use warnings; |
3 | |
4 | use Test::More; |
def17c59 |
5 | use lib qw(t/lib); |
6 | use DBICTest; |
052a832c |
7 | use DBIx::Class::_Util 'sigwarn_silencer'; |
def17c59 |
8 | |
9 | my $schema = DBICTest->init_schema(); |
10 | |
11 | # Attempt sequential nested find_or_create with autoinc |
12 | # As a side effect re-test nested default create (both the main object and the relation are {}) |
13 | my $bookmark_rs = $schema->resultset('Bookmark'); |
14 | my $last_bookmark = $bookmark_rs->search ({}, { order_by => { -desc => 'id' }, rows => 1})->single; |
15 | my $last_link = $bookmark_rs->search_related ('link', {}, { order_by => { -desc => 'link.id' }, rows => 1})->single; |
16 | |
17 | # find_or_create a bookmark-link combo with data for a non-existing link |
18 | my $o1 = $bookmark_rs->find_or_create ({ link => { url => 'something-weird' } }); |
19 | is ($o1->id, $last_bookmark->id + 1, '1st bookmark ID'); |
20 | is ($o1->link->id, $last_link->id + 1, '1st related link ID'); |
21 | |
22 | # find_or_create a bookmark-link combo without any data at all (default insert) |
23 | # should extend this test to all available Storage's, and fix them accordingly |
24 | my $o2 = $bookmark_rs->find_or_create ({ link => {} }); |
25 | is ($o2->id, $last_bookmark->id + 2, '2nd bookmark ID'); |
26 | is ($o2->link->id, $last_link->id + 2, '2nd related link ID'); |
27 | |
28 | # make sure the pre-existing link has only one related bookmark |
29 | is ($last_link->bookmarks->count, 1, 'Expecting only 1 bookmark and 1 link, someone mucked with the table!'); |
30 | |
31 | # find_or_create a bookmark withouyt any data, but supplying an existing link object |
32 | # should return $last_bookmark |
33 | my $o0 = $bookmark_rs->find_or_create ({ link => $last_link }); |
34 | is_deeply ({ $o0->columns}, {$last_bookmark->columns}, 'Correctly identify a row given a relationship'); |
35 | |
36 | # inject an additional bookmark and repeat the test |
37 | # should warn and return the first row |
38 | my $o3 = $last_link->create_related ('bookmarks', {}); |
39 | is ($o3->id, $last_bookmark->id + 3, '3rd bookmark ID'); |
40 | |
052a832c |
41 | local $SIG{__WARN__} = sigwarn_silencer( qr/Query returned more than one row/ ); |
def17c59 |
42 | my $oX = $bookmark_rs->find_or_create ({ link => $last_link }); |
43 | is_deeply ({ $oX->columns}, {$last_bookmark->columns}, 'Correctly identify a row given a relationship'); |
052a832c |
44 | |
45 | done_testing; |