=head1 Name

setupdb


=head1 Ziel

Vorbereitung der Datenbank für den Zugriff via C<kunde>


=head1 Testfälle

Diese Testfunktion füllt die für den Start des Kundeprogramms
notwendigen Einträge in die Datenbank und prüft deren prinzipielle
Aufrufbarkeit.

Insbesondere werden angelegt:

=over 4

=item *

das read-only-Attribut

=item *

ein Kunde 'POP', ID=1

=item *

Dessen Adresseintrag

=item *

ein Benutzer mit UID und Loginnamen des Testers.

=back

Damit kann der Tester mit den im L<Dbase::Test>-Modul beschriebenen
Environmentvariablen mit dem Kunde-Programm auf die Testdaten zugreifen.


=head1 nicht-Testfälle

Folgende Dinge sind noch nicht im Test:

=over 4

=item *

Es wird nur der Aufruf via C<edit_kunden> geprüft, nicht aber das
Drumherum in C<bin/kunde>.

=back


=cut


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

my %konfig = (
	ACCDB => 'single',
	ACCHOST => 'somewhere.acct.example',
	ACCPASS => 'WhatEverItIs',
	ACCUSER => 'acctwriter',
	CACHEDIR => '/var/cache/pop',
	DESCR => 'BlaFasel GbR',
	DOCUCOOKIE => '%da%17%00%cdN................%3d',
	DOCUHOST => 'docushare.fasel.test.example',
	DOCUSHARE => 'http://docushare.fasel.test.example',
	EURO => 1.95583,
	FORBIDDEN_DOMAINS => 'office.test.example nms.test.example',
	LOGDIR => '/var/log/pop',
	LOGSUB => 'accouting/\\T/\\M/\\J/\\X/\\C.\\S',
	MUSTERTEXT_TABELLEN => 'rt_template rt_formular rech_fuss adress_vorlage rt_eskalation_muster',
	MWST => 0.19,
	NAS_IP_ADDRESSES => '62.128.0.143 62.128.0.234 62.128.1.18 62.128.1.19',
	NAS_IP_ADDRESSES_IGNORE => '62.128.0.7',
	NS_EXT => 'dns.noris.ch dns.noris.de dns.noris.net dns1.noris.net dns2.noris.net dns3.noris.net',
	NSI_KEY_NAME => 'dns0.test.example',
	NSI_KEY => 'XXXXXXXXXXXXXXXXXXXXXX==',
	NSI => 'ns.fasel.test.example',
	RT_DOMAIN => 'rt.test.example',
	RT_MAIL_OK => 99,
	RT_MAX_SIZE => 2097152,
	TDSL_DOMAIN => 'noris.net speed-dsl.eu',
	UID_MINIMUM => 1000,
	URL4LANDKARTE => 'http://maps.google.de/maps?q=',
);

use Test::More tests => 52; $|=1;
BEGIN { $ENV{'DbLocalCf'}=1; }
use Dbase::Test;

use Cf qw($DEFAULT_ZIEL);
use Dbase::KundeTest qw(kunde kunde_at);
use Dbase::Globals qw(gen_descr get_person);
use File::Path qw(rmtree);
use Loader qw(add_dienst);
use Dbase::Help qw(Do DoFn qquote);

# steht auch in der config.dist, aber der real-Test verwendet die nicht
$ENV{"HOSTMASTER_KEY"}="0x24A71BB7";

okF "delete from startlog";
okF "delete from startlog_kram";
okF "delete from person";
okF "delete from nextid where name='person'";

okF "delete from kunde";
okF "delete from nextid where name='kunde'";

## fast-Minimal-Setup, um "kunde" aufzurufen...

for my $f qw(readonly rechnung dialin ppp verwaltung perso rechnung service pop) {
	okS "pwdomain//$f",
		sub {gen_descr("pwdomain",undef,$f,undef,"passwd")};
}
okS "pwdomain//ipass",
	sub {gen_descr("pwdomain",200,"ipass",undef,"passwd")};
okS "domainflags//dnszone",
	sub {gen_descr("domainflags",undef,"dnszone")};
for my $f qw(mail) {
	okS "pwdomain//$f",
		sub {gen_descr("pwdomain",undef,$f,undef,"passwd","mail")};
}
okS "domainstatus_ident//registriert",
	sub { gen_descr( domainstatus_ident => 9, 'registriert' ) };


for my $f qw(steuernr keine_ust vorausberechnen nicht_eu) {
	okS "kunde//$f",
		sub {gen_descr("kunde",undef,$f,undef)};
}

okS "ziel//default:$DEFAULT_ZIEL",
	sub {gen_descr("ziel","'$DEFAULT_ZIEL'","std","Standard-Ziel")};

okS "rstatus//manuell",
	sub {gen_descr("rstatus",undef,"manuell")};

okS "rkonto//fasel",
	sub {gen_descr("rkonto",undef,"fasel","123 ein Konto-Einerlei")};

okF "insert into kunde set name='POP', berechne='x'";
okQ "select name from kunde where id = 1","POP";

okF "insert into person set kunde=1, name='Test-POP'";
okF "insert into person set kunde=1, user='$ENV{'USER'}',
	name='Herr Joe Tester', uid=$<, pwuse=%DESCRS%pwdomain%rechnung%";

### TODO: entfernen ?!?
foreach my $d qw(admin-c tech-c zone-c) {
	okS "dienst//$d",sub {gen_descr("dienst",undef,$d)};
}
foreach my $d qw(: contact standort) {
	okS "dienst//$d",sub {gen_descr("dienst",undef,$d,undef,"person")};
}
foreach my $d qw(nic) {
	okS "dienst//$d",sub {gen_descr("dienst",undef,$d,undef,"domain")};
}
okF "insert into dienst set name='ip', info='Daten! Daten! Daten!'";

# Test ob das auch stimmt mit dem Kundeprogramm...
kunde_at 'edit_kunden';
kunde "POP", sub {
	kunde_at 'edit_kunde';
	kunde "m", sub {
		kunde_at 'edit_personen';

		kunde $ENV{'USER'}, sub {
			kunde_at 'edit_person';
			
			kunde "ac", sub {
				kunde_at "edit_person_acls";
			};
		};
	};
};
# mehr: siehe Test 35

# Überbleibsel aus 52_mailprep:
okS "ziel//unbekannt", sub {gen_descr("ziel",63,"unbekannt")}; # '?'
okS "ziel//telekom", sub {gen_descr("ziel",116,"telekom")}; # 't'
okS "ziel//deutsch", sub {gen_descr("ziel",100,"deutsch")}; # 'd'
okS "ziel//lokal", sub {gen_descr("ziel",108,"lokal")}; # 'l'

my $nr = DoFn("select id from konfig_namensraum where name='test'")
      || Do("insert into konfig_namensraum set name='test'");

while(my($var,$wert)=each %konfig) {
	my $nid = DoFn("select id from konfig_variable where name=${\qquote $var}")
	       || Do("insert into konfig_variable set name=${\qquote $var}");
	Do <<_ unless DoFn <<_;
insert into konfig_wert
   set namensraum=$nr,
       variable=$nid,
	   wert=${\qquote $wert}
_
select id from konfig_wert where namensraum=$nr and variable=$nid
_
}
