#!/usr/bin/perl -w
# This script (sophomorix-test-functions) is maintained by Rüdiger Beck
# It is Free Software (License GPLv3)
# If you find errors, contact the author
# jeffbeck@web.de  or  jeffbeck@gmx.de


# weiter:

#Auswertung .add, .move, .kill


# Bibliotheken

use strict;
use Getopt::Long;
use Sophomorix::SophomorixConfig;
use Sophomorix::SophomorixBase;
use Sophomorix::SophomorixFiles;
use Sophomorix::SophomorixTest;
use Test::More "no_plan";

Getopt::Long::Configure ("bundling");

# Einlesen der Konfigurationsdatei für Entwickler
#{ package DevelConf ; do "/etc/sophomorix/devel/user/sophomorix-devel.conf"}


system("install -d /root/sophomorix-test");



print '
###########################################################################
#                          Testing update_user-db_entry                   #
###########################################################################
';


open(FILE,">/root/sophomorix-test/user_db-test");

print FILE "dachboden;one joop;joopma;linux;03.12.1977\n";
print FILE "g12kb;another joop;joopma;dbddhkp;04.10.1974\n";
print FILE "7a;klaus meier;meiekl;linux;10.10.1988\n";
print FILE "12b;juergen stiller;stilleju;linux;10.12.1978\n";

close(FILE);

&update_user_db_entry("meiekl",
                      "File=/root/sophomorix-test/user_db-test",
                      "TolerationDate=25.04.2004",
                      "ExitAdminClass=13a");

&check_line_in_file(
  "7a;klaus meier;meiekl;linux;10.10.1988;;;;25.04.2004;;13a;",
  "/root/sophomorix-test/user_db-test");


&update_user_db_entry("stilleju",
                      "File=/root/sophomorix-test/user_db-test",
                      "AdminClass=astro",
                      "Birthday=10.12.1979",
                      "FirstPass=dsf45rhR",
                      "DeactivationDate=25.04.2004",
                      "Name=linus",
                      "LastName=torvalds",
                      "Unid=123654789",
                      "SubClass=B",
                      "Status=E",
                      "DeactivationDate=25.04.2004",
                      "TolerationDate=30.03.2003",
                      "ExitAdminClass=oldastro");
&check_line_in_file(
  "astro;linus torvalds;stilleju;dsf45rhR;10.12.1979;123654789;B;E;30.03.2003;25.04.2004;oldastro;;;",
  "/root/sophomorix-test/user_db-test");


# Unid entfernen
&update_user_db_entry("stilleju",
                      "File=/root/sophomorix-test/user_db-test",
                      "Unid=");
&check_line_in_file(
  "astro;linus torvalds;stilleju;dsf45rhR;10.12.1979;;B;E;30.03.2003;25.04.2004;oldastro;;;",
  "/root/sophomorix-test/user_db-test");


# Versetzen
&update_user_db_entry("stilleju",
                      "File=/root/sophomorix-test/user_db-test",
                      "AdminClass=m2kb");
&check_line_in_file(
  "m2kb;linus torvalds;stilleju;dsf45rhR;10.12.1979;;B;E;30.03.2003;25.04.2004;oldastro;;;",
  "/root/sophomorix-test/user_db-test");


# Unid hochladen
&update_user_db_entry("stilleju",
                      "File=/root/sophomorix-test/user_db-test",
                      "Unid=AgooseSLoos");
&check_line_in_file(
  "m2kb;linus torvalds;stilleju;dsf45rhR;10.12.1979;AgooseSLoos;B;E;30.03.2003;25.04.2004;oldastro;;;",
  "/root/sophomorix-test/user_db-test");


# Subklasse wechseln
&update_user_db_entry("stilleju",
                      "File=/root/sophomorix-test/user_db-test",
                      "SubClass=C");
&check_line_in_file(
  "m2kb;linus torvalds;stilleju;dsf45rhR;10.12.1979;AgooseSLoos;C;E;30.03.2003;25.04.2004;oldastro;;;",
  "/root/sophomorix-test/user_db-test");


# Deact
&update_user_db_entry("stilleju",
                      "File=/root/sophomorix-test/user_db-test",
                      "DeactivationDate=12.03.2005",
                      "Status=D");
&check_line_in_file(
  "m2kb;linus torvalds;stilleju;dsf45rhR;10.12.1979;AgooseSLoos;C;D;30.03.2003;12.03.2005;oldastro;;;",
  "/root/sophomorix-test/user_db-test");


# Tol
&update_user_db_entry("stilleju",
                      "File=/root/sophomorix-test/user_db-test",
                      "TolerationDate=12.07.2002",
                      "Status=T");
&check_line_in_file(
  "m2kb;linus torvalds;stilleju;dsf45rhR;10.12.1979;AgooseSLoos;C;T;12.07.2002;12.03.2005;oldastro;;;",
  "/root/sophomorix-test/user_db-test");


# Activate
&update_user_db_entry("stilleju",
                      "File=/root/sophomorix-test/user_db-test",
                      "Status=R");
&check_line_in_file(
  "m2kb;linus torvalds;stilleju;dsf45rhR;10.12.1979;AgooseSLoos;C;R;12.07.2002;12.03.2005;",
  "/root/sophomorix-test/user_db-test");


# Name
&update_user_db_entry("stilleju",
                      "File=/root/sophomorix-test/user_db-test",
                      "Name=linux");
&check_line_in_file(
  "m2kb;linux torvalds;stilleju;dsf45rhR;10.12.1979;AgooseSLoos;C;R;12.07.2002;12.03.2005;oldastro;;;",
  "/root/sophomorix-test/user_db-test");


# Nachname
&update_user_db_entry("stilleju",
                      "File=/root/sophomorix-test/user_db-test",
                      "LastName=presley");
&check_line_in_file(
  "m2kb;linux presley;stilleju;dsf45rhR;10.12.1979;AgooseSLoos;C;R;12.07.2002;12.03.2005;oldastro;;;",
  "/root/sophomorix-test/user_db-test");


# Birthday
&update_user_db_entry("stilleju",
                      "File=/root/sophomorix-test/user_db-test",
                      "Birthday=14.01.1966");

&check_line_in_file(
  "m2kb;linux presley;stilleju;dsf45rhR;14.01.1966;AgooseSLoos;C;R;12.07.2002;12.03.2005;oldastro;;;",
  "/root/sophomorix-test/user_db-test");

# AccountType
&update_user_db_entry("stilleju",
                      "File=/root/sophomorix-test/user_db-test",
                      "AccountType=A");

&check_line_in_file(
  "m2kb;linux presley;stilleju;dsf45rhR;14.01.1966;AgooseSLoos;C;R;12.07.2002;12.03.2005;oldastro;A;;",
  "/root/sophomorix-test/user_db-test");

# AccountType
&update_user_db_entry("stilleju",
                      "File=/root/sophomorix-test/user_db-test",
                      "AccountType=X");

&check_line_in_file(
  "m2kb;linux presley;stilleju;dsf45rhR;14.01.1966;AgooseSLoos;C;R;12.07.2002;12.03.2005;oldastro;X;;",
  "/root/sophomorix-test/user_db-test");

# Quotastring
&update_user_db_entry("stilleju",
                      "File=/root/sophomorix-test/user_db-test",
                      "Quota=1600");

&check_line_in_file(
  "m2kb;linux presley;stilleju;dsf45rhR;14.01.1966;AgooseSLoos;C;R;12.07.2002;12.03.2005;oldastro;X;1600;",
  "/root/sophomorix-test/user_db-test");


# No match
&is( &update_user_db_entry("stil",
        "File=/root/sophomorix-test/user_db-test",
	"Birthday=14.01.1966") , 0 , "Testing for Zero Match");
&check_line_in_file(
  "m2kb;linux presley;stilleju;dsf45rhR;14.01.1966;AgooseSLoos;C;R;12.07.2002;12.03.2005;oldastro;X;1600;",
  "/root/sophomorix-test/user_db-test");


# Double match
&is( &update_user_db_entry("joopma",
        "File=/root/sophomorix-test/user_db-test",
	"Birthday=14.01.1966") , 2 , "Testing for Double Match");
&check_line_in_file(
  "dachboden;one joop;joopma;linux;03.12.1977",
  "/root/sophomorix-test/user_db-test");
&check_line_in_file(
  "g12kb;another joop;joopma;dbddhkp;04.10.1974",
  "/root/sophomorix-test/user_db-test");




print '
###########################################################################
#                          Testing create_project_db                      #
###########################################################################
';


open(FILE,">/root/sophomorix-test/projects-test");

print FILE "astro;Astronomie-AG;gallilga;peter,werner;12c;1000;16;\n";
print FILE "homepage;Schul-Homepage;gallilga;thuraudi,werner;7c;1000;16;\n";

close(FILE);

&create_project_db("astro",
                   "File=/root/sophomorix-test/projects-test",
                   "LongName=Astronomie fuer Eltern",
                   "Create=yes");

&check_line_in_file(
  "astro;Astronomie fuer Eltern;gallilga;peter,werner;12c;1000;16;",
  "/root/sophomorix-test/projects-test");
&create_project_db("astro",
                   "File=/root/sophomorix-test/projects-test",
                   "Name=astro",
                   "LongName=Astrokurs",
                   "Teachers=bz,kj",
                   "Members=thuraudi,bartalgi",
                   "MemberGroups=11a",
                   "AddQuota=400",
                   "MaxMembers=19",
                   "Create=yes");
&check_line_in_file(
  "astro;Astrokurs;bz,kj;thuraudi,bartalgi;11a;400;19;",
  "/root/sophomorix-test/projects-test");

&create_project_db("chemie",
                   "File=/root/sophomorix-test/projects-test",
                   "LongName=Chemie fuer Anfaenger",
                   "Teachers=gv",
                   "Members=thuraudi,kueblefe",
                   "MemberGroups=",
                   "AddQuota=100",
                   "MaxMembers=8",
                   "Create=yes");
&check_line_in_file(
  "chemie;Chemie fuer Anfaenger;gv;thuraudi,kueblefe;;100;8;",
  "/root/sophomorix-test/projects-test");

&create_project_db("chemie",
                   "File=/root/sophomorix-test/projects-test",
                   "LongName=Chemie im Alltag",
                   "Teachers=gallilga",
                   "Members=thuraudi,merckxed",
                   "MemberGroups=",
                   "AddQuota=300",
                   "MaxMembers=14",
                   "Create=yes");
&check_line_in_file(
  "chemie;Chemie im Alltag;gallilga;thuraudi,merckxed;;300;14;",
  "/root/sophomorix-test/projects-test");




print '
###########################################################################
#                          Testing quota_addition                      #
###########################################################################
';


my $result="";

$result=&quota_addition("50");
is($result, 50 ,"Adding 50 to check if quota_addition() can do this");


$result=&quota_addition("50","30");
is($result, 80 ,"Adding 50 and 30");

$result=&quota_addition("22","3000","78");
is($result, 3100 ,"Adding 22 and 3000 and 78");


$result=&quota_addition("22","3000","78","400", "6000");
is($result, 9500 ,"Adding 22 and 3000 and 78 and 400 and 6000");


$result=&quota_addition("22+300","33+3000");
is($result, "55+3300" ,"Adding 22+300 and 33+3000");

$result=&quota_addition("10+100+200+400+800+",
                        "20+200+400+600+1000",
                        "30+300+600+800+1200+");
is($result, 
   "60+600+1200+1800+3000" ,
   "Adding a lot of stuff (3 quotastrings with 5 filsystems each)");
