#!/usr/bin/perl

=head1 Name

trouble_ticket

=head1 Ziel

Testen der noris::TroubleTicket Klasse.

=head1 Tests

Es wird getestet:

=over 4

=item *

Erstellen eines Trouble-Tickets.

=item *

Aendern diverser Parameter.

=item *

Speichern des Trouble-Tickets.

=item *

Loeschen des noch nicht bestaetigten Trouble-Tickets.

=back

=head1 nicht-Testfaelle

Folgende Dinge sind noch nicht im Test:

=over 4

=item *

Bestaetigen eines Trouble-Tickets.

=item *

Vermailen von Trouble-Tickets.

=back

=cut

package Test::trouble_ticket;

use utf8;
use warnings;
use strict; use warnings;
BEGIN { unshift(@INC,($ENV{'POPHOME'}||'@POPHOME@').'/lib')
			unless $ENV{'KUNDE_NO_PERLPATH'};
      }

use Test::More (tests => 28);
use Dbase::Test;

use Dbase::Globals (qw(gen_descr));

BEGIN { use_ok ('noris::TroubleTicket', 'tt_get_descriptor_list'); }

$| = 1; # autoflush on

{
	my %tt_types =
	(
		urgent_maintenance => 'Dringende Wartungsarbeiten',
		maintenance        => 'planmaessige Wartung',
		information        => 'Information',
		incident           => 'unerwarteter Ausfall'
	);
	for (keys %tt_types)
	{
		my $name = $_;
		my $info = $tt_types{$name};

		gen_descr ('tt_type', undef, $name, $info);
	}

	my %tt_prios =
	(
		high   => 'hoch',
		normal => 'normal',
		low    => 'niedrig'
	);
	for (keys %tt_prios)
	{
		my $name = $_;
		my $info = $tt_prios{$name};

		gen_descr ('tt_priority', undef, $name, $info);
	}
}

my $tt_obj;
ok ($tt_obj = new noris::TroubleTicket (subject => 'Test-Trouble-Ticket'), '->new ()');

my $flag_person = tt_get_descriptor_list ('flag_person');
isa_ok ($flag_person, 'HASH', '$flag_person from tt_get_descriptor_list');
ok (keys %$flag_person, 'Personen-Flags gefunden');
my $have_service_flag = grep { defined ($flag_person->{$_}{'name'}) and ($flag_person->{$_}{'name'} eq 'service') } (keys %$flag_person);
ok ($have_service_flag, 'Das Service-Flag ist definiert.');

ok ($tt_obj->set ('flag_person', 'service'), '->set (flag_person, service)');
is ($tt_obj->get ('select_kunden'), 'flags', '->get (select_kunden) == flags');
ok (scalar $tt_obj->get_kunden (), '->get_kunden ()');

ok (!$tt_obj->set ('foobar', 'nonsense'), '->set (foobar, nonsense) == false');
ok ($tt_obj->error (), '->error () returns error message');

my $beginn = time () + 3600;
my $ende = $beginn - 900;
ok ($tt_obj->set ('beginn', $beginn), "->set (beginn, $beginn)");
ok (!$tt_obj->set ('ende', $ende), "->set (ende, $ende) == false");
$ende = $beginn + 3600;
ok ($tt_obj->set ('ende', $ende), "->set (ende, $ende)");

ok ($tt_obj->set ('description', 'Beschreibung'), '->set (description, ...)');
ok ($tt_obj->set ('affected', 'Betroffen'), '->set (affected, ...)');

# fails because no subject is set, no type is set and, last but not least, no
# priority is set.
ok (!$tt_obj->to_mail (), '->to_mail () == flase');
ok ($tt_obj->error (), '->error () returns error message');
ok ($tt_obj->set ('subject', 'This is a test subject by the test script'), '->set (subject)');

ok ($tt_obj->save (), '->save () [insert]');

my @type_descriptors = tt_get_descriptor_list ('type');
ok (scalar (@type_descriptors), '{tt_,}type-Deskriptoren suchen');
ok ($tt_obj->set ('type', 'urgent_maintenance'), "->set (type, urgent_maintenance)");

my $prio_descriptors = tt_get_descriptor_list ('priority');
ok (scalar keys %$prio_descriptors, '{tt_,}priority-Deskriptoren suchen');
ok ($tt_obj->set ('priority', 'low'), "->set (priority, low)");

ok ($tt_obj->save (), '->save () [update]');
ok ($tt_obj->get ('id'), '->get (id)');

ok ($tt_obj->to_mail (), '->to_mail ()');

ok ($tt_obj->is_deletable (), '->is_deletable ()');
ok ($tt_obj->delete (), '->delete ()');

exit 0;

# vim: syntax=perl background=light
