87 lines
2.1 KiB
Perl
87 lines
2.1 KiB
Perl
package WebGUI::Form_Checking;
|
|
|
|
use Test::MockObject;
|
|
use Test::More;
|
|
use Test::Deep;
|
|
|
|
sub auto_check {
|
|
my ($session, $formType, $testBlock) = @_;
|
|
my $origSessionRequest = $session->{_request};
|
|
|
|
##Create a by-name interface to the test to simplify the
|
|
##mocked request.
|
|
my %tests = map { $_->{key} => $_ } @{ $testBlock };
|
|
is(scalar keys %tests, scalar @{ $testBlock }, 'no collisions in testBlock');
|
|
|
|
my $request = Test::MockObject->new;
|
|
$request->mock('body',
|
|
sub {
|
|
my ($self, $value) = @_;
|
|
return unless exists $tests{$value};
|
|
if (ref $tests{$value}->{testValue} eq "ARRAY") {
|
|
return @{ $tests{$value}->{testValue} } ;
|
|
}
|
|
else {
|
|
return $tests{$value}->{testValue};
|
|
}
|
|
}
|
|
);
|
|
$request->mock('param', sub {shift->body(@_)});
|
|
|
|
$session->{_request} = $request;
|
|
|
|
foreach my $test ( @{ $testBlock } ) {
|
|
$test->{dataType} ||= 'SCALAR';
|
|
$test->{expected} = $test->{testValue} if $test->{expected} eq 'EQUAL';
|
|
if ($test->{dataType} eq 'SCALAR') {
|
|
my $value = $session->form->get($test->{key}, $formType);
|
|
is($value, $test->{expected}, $test->{comment});
|
|
}
|
|
elsif ($test->{dataType} eq 'ARRAY') {
|
|
my @value = $session->form->get($test->{key}, $formType);
|
|
cmp_bag(\@value, $test->{expected}, $test->{comment});
|
|
}
|
|
}
|
|
|
|
$session->{_request} = $origSessionRequest;
|
|
}
|
|
|
|
|
|
|
|
#######################################################################
|
|
|
|
=head2 get_request
|
|
|
|
!!! TODO !!!
|
|
|
|
Gets a Test::MockObject to be given to the session object that will allow for
|
|
processing of form parameters.
|
|
|
|
This will be easier to manage, as you won't have
|
|
to make multiple forms for elements that can return differently formatted data
|
|
based on configuration.
|
|
|
|
Usage:
|
|
|
|
my $old_request = $session->{_request};
|
|
|
|
my $request = WebGUI::Form_Checking::get_request($session,$value);
|
|
# $value can be either a scalar value or an array reference
|
|
$session->{_request} = $request;
|
|
|
|
# Test the value here
|
|
# Maybe make more mock request objects and test more values
|
|
|
|
# Reset the session back
|
|
$session->{_request} = $old_session;
|
|
|
|
=cut
|
|
|
|
sub get_request
|
|
{
|
|
warn "WebGUI::Form_Checking::get_request is still TODO!";
|
|
}
|
|
|
|
|
|
|
|
1;
|