=head1 NAME

XAO::testcases::base - base class for easier XAO::Web project testing

=head1 DESCRIPTION

This class extends XAO::testcases::base for easier testing of Web based
projects. It adds a CGI variable to the setup.

=cut

###############################################################################
package XAO::testcases::Web::base;
use strict;
use IO::File;
use XAO::Utils;
use XAO::Base;
use XAO::Objects;
use XAO::Web;
use XAO::Projects qw(:all);

use base qw(XAO::testcases::base);

sub new ($) {
    my $proto=shift;
    my $self=$proto->SUPER::new(@_);

    # Site root is not set up yet at this point, so can't use the data
    # from the test site configuration.
    #
    # Nearly identical code is in t/xao/projects/test/objects/Config.pm
    #
    my %d;
    if(1) {
        open(F,'.config') ||
            die "No .config found, run 'perl Makefile.PL'";
        local($/);
        my $t=<F>;
        close(F);
        eval $t;
    }

    $self->{'skip_db_tests'}=$d{'test_dsn'} eq 'none' ? 1 : 0;

    return $self;
}

sub list_tests ($) {
    my $self=shift;

    my @tests=$self->SUPER::list_tests(@_);

    if($self->{'skip_db_tests'}) {
        @tests=grep { ! /_db_/ } @tests;
    }

    return wantarray ? @tests : \@tests;
}

sub set_up {
    my $self=shift;

    $self->SUPER::set_up();

    my $site=XAO::Web->new(sitename => 'test');
    $site->set_current();

    my $cgi=$self->cgi_object;

    if(my $charset=$site->config->get('charset')) {
        if($cgi->can('set_param_charset')) {
            $cgi->set_param_charset($charset);
        }
        else {
            eprint "CGI object we have does not support set_param_charset";
        }
        $site->config->header_args(
            -Charset   => $charset,
        );
    }

    $site->config->embedded('web')->enable_special_access();
    $site->config->cgi($cgi);
    $site->config->embedded('web')->disable_special_access();

    $self->{'siteconfig'}=$site->config;
    $self->{'web'}=$site;
    $self->{'cgi'}=$cgi;

    return $self;
}

sub cgi_object {
    XAO::Objects->new(
        objname => 'CGI',
        query   => 'foo=bar&ucode=%D1%82%D0%B5%D1%81%D1%82&bytes=%01%02%03%04&test=1',
    );
}

sub web {
    my $self=shift;
    return $self->{'web'};
}

sub cgi {
    my $self=shift;
    return $self->{'cgi'};
}

###############################################################################
1;
__END__

=head1 AUTHORS

Copyright (c) 2006 Ejelta LLC
Andrew Maltsev, am@ejelta.com