The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl

use lib "t/lib";

use strict;
use warnings;

use Test::More;
use Test::Exception;
use Carp qw(croak);
use URI;

eval "use Test::M3::ServerView::TestServer";
plan skip_all => "Can't test HTTP stuff since server won't load" if $@;

plan tests => 13;

require M3::ServerView;

my $s = Test::M3::ServerView::TestServer->new();
my $uri = $s->started_ok("Test::M3::ServerView::TestServer up and running on port " . $s->port);
my $conn = M3::ServerView->connect_to($uri);

no warnings 'redefine';

my $query_echo = "";
local *M3::ServerView::_get_page_contents = sub {
    my ($self, $uri) = @_;

    my $ua = LWP::UserAgent->new;
    my $req = HTTP::Request->new(GET => $uri);
    
    my $user = $self->user;
    my $password = $self->password;

    if (defined $user && defined $password) {
        $req->authorization_basic($user, $password);
    }
    
    my $t = time;
    
    my $res = $ua->request($req);
    unless ($res->is_success) {
        croak "Failed to get '$uri' because server returned: ", $res->status_line;
    }
    $query_echo = $res->header("X-EchoQuery");
    return wantarray ? ($res->content, time - $t) : $res->content;
};

$query_echo = "";
my $view = $conn->find_jobs({});
like($query_echo, qr/\bfind=Find\b/);

$query_echo = "";
$view = $conn->find_jobs({ user => "Foo" });
like($query_echo, qr/\bfind=Find\b/);
like($query_echo, qr/\bowner=Foo\b/);

$query_echo = "";
$view = $conn->find_jobs({ batch_job_number => 10 });
like($query_echo, qr/\bbjno=10\b/);

$query_echo = "";
$view = $conn->find_jobs({ name => "Bar" });
like($query_echo, qr/\bname=Bar\b/);

$query_echo = "";
$view = $conn->find_jobs({ queued => 2 });
like($query_echo, qr/\bqueued=on\b/);

$query_echo = "";
$view = $conn->find_jobs({ type => "B" });
like($query_echo, qr/\btype=B\b/);

$query_echo = "";
$view = $conn->find_jobs({ user => "is space" });
like($query_echo, qr/\bowner=is\+space\b/);

$query_echo = "";
$view = $conn->find_jobs({ user => "Foo", queued => 1, type => "I" });
like($query_echo, qr/\bfind=Find\b/);
like($query_echo, qr/\bowner=Foo\b/);
like($query_echo, qr/\bqueued=on\b/);
like($query_echo, qr/\btype=I\b/);