Promote resolve_relationship_condition to a 1st-class API method
[dbsrgits/DBIx-Class.git] / xt / extra / diagnostics / divergent_metadata.t
CommitLineData
73f54e27 1BEGIN { do "./t/lib/ANFANG.pm" or die ( $@ || $! ) }
2
3# things will die if this is set
4BEGIN { $ENV{DBIC_ASSERT_NO_ERRONEOUS_METAINSTANCE_USE} = 0 }
5
6use strict;
7use warnings;
8
9use Test::More;
10
11use DBICTest::Util 'capture_stderr';
12use DBICTest;
13
14my ($fn) = __FILE__ =~ /( [^\/\\]+ ) $/x;
15my @divergence_lines;
16
17my $art = DBICTest->init_schema->resultset("Artist")->find(1);
18
19push @divergence_lines, __LINE__ + 1;
20DBICTest::Schema::Artist->add_columns("Something_New");
21
22push @divergence_lines, __LINE__ + 1;
23$_->add_column("Something_New_2") for grep
24 { $_ != $art->result_source }
25 DBICTest::Schema::Artist->result_source_instance->__derived_instances
26;
27
28push @divergence_lines, __LINE__ + 1;
29DBICTest::Schema::Artist->result_source_instance->name("foo");
30
31my $orig_class_rsrc_before_table_triggered_reinit = DBICTest::Schema::Artist->result_source_instance;
32
33push @divergence_lines, __LINE__ + 1;
34DBICTest::Schema::Artist->table("bar");
35
36is(
37 capture_stderr {
38 ok(
39 DBICTest::Schema::Artist->has_column( "Something_New" ),
40 'Added column visible'
41 );
42
43 ok(
44 (! DBICTest::Schema::Artist->has_column( "Something_New_2" ) ),
45 'Column added on children not visible'
46 );
47 },
48 '',
49 'No StdErr output during rsrc augmentation'
50);
51
52my $err = capture_stderr {
53 ok(
54 ! $art->has_column($_),
55 "Column '$_' not visible on @{[ $art->table ]}"
56 ) for qw(Something_New Something_New_2);
57};
58
59# Tricky text - check it painstakingly as things may go off
60# in very subtle ways
61my $expected_warning_1 = join '.+?', map { quotemeta $_ }
62 "@{[ $art->result_source ]} (the metadata instance of source 'Artist') is *OUTDATED*",
63
64 "${orig_class_rsrc_before_table_triggered_reinit}->add_columns(...) at",
65 "$fn line $divergence_lines[0]",
66
67 "@{[ DBICTest::Schema->source('Artist') ]}->add_column(...) at",
68 "$fn line $divergence_lines[1]",
69
70 "Stale metadata accessed by 'getter' @{[ $art->result_source ]}->has_column(...)",
71;
72
73like
74 $err,
75 qr/$expected_warning_1/s,
76 'Correct warning on diverged metadata'
77;
78
79my $expected_warning_2 = join '.+?', map { quotemeta $_ }
80 "@{[ $art->result_source ]} (the metadata instance of source 'Artist') is *OUTDATED*",
81
82 "${orig_class_rsrc_before_table_triggered_reinit}->name(...) at",
83 "$fn line $divergence_lines[2]",
84
85 "${orig_class_rsrc_before_table_triggered_reinit}->table(...) at",
86 "$fn line $divergence_lines[3]",
87
88 "Stale metadata accessed by 'getter' @{[ $art->result_source ]}->table(...)",
89;
90
91like
92 $err,
93 qr/$expected_warning_2/s,
94 'Correct warning on diverged metadata'
95;
96
97done_testing;