View | Details | Raw Unified | Return to bug 14256
Collapse All | Expand All

(-)a/t/lib/TestBuilder.pm (-8 / +56 lines)
Lines 155-167 sub _buildColumnValues { Link Here
155
155
156
    my $col_values;
156
    my $col_values;
157
    my @columns = $self->schema->source($source)->columns;
157
    my @columns = $self->schema->source($source)->columns;
158
    for my $col_name( @columns ) {
158
    my %unique_constraints = $self->schema->source($source)->unique_constraints();
159
        my $col_value = $self->_buildColumnValue({
159
160
            source      => $source,
160
    my $values_ok = 0;
161
            column_name => $col_name,
161
    my $at_least_one_constraint_failed;
162
            value       => $value,
162
163
        });
163
    while ( not $values_ok ) {
164
        $col_values->{$col_name} = $col_value if( defined( $col_value ) );
164
165
        $at_least_one_constraint_failed = 0;
166
        # generate random values
167
        for my $col_name( @columns ) {
168
            my $col_value = $self->_buildColumnValue({
169
                source      => $source,
170
                column_name => $col_name,
171
                value       => $value,
172
            });
173
            $col_values->{$col_name} = $col_value if( defined( $col_value ) );
174
        }
175
176
        # If default values are set, maybe the data exist in the DB
177
        # But no need to wait for another value
178
        last if exists( $default_value->{$source} );
179
180
        if ( scalar keys %unique_constraints > 0 ) {
181
182
            # verify the data would respect each unique constraint
183
            foreach my $constraint (keys %unique_constraints) {
184
185
                my $condition;
186
                my @constraint_columns = $unique_constraints{$constraint};
187
                # loop through all constraint columns and build the condition
188
                foreach my $constraint_column ( @constraint_columns ) {
189
                    # build the filter
190
                    $condition->{ $constraint_column } =
191
                            $col_values->{ $constraint_column };
192
                }
193
194
                my $count = $self->schema
195
                                 ->resultset( $source )
196
                                 ->search( $condition )
197
                                 ->count();
198
                if ( $count > 0 ) {
199
                    $at_least_one_constraint_failed = 1;
200
                    # no point checking more stuff, exit the loop
201
                    last;
202
                }
203
            }
204
205
            if ( $at_least_one_constraint_failed ) {
206
                $values_ok = 0;
207
            } else {
208
                $values_ok = 1;
209
            }
210
211
        } else {
212
            $values_ok = 1;
213
        }
165
    }
214
    }
166
    return $col_values;
215
    return $col_values;
167
}
216
}
168
- 

Return to bug 14256