Bugfix: Update im Warendialog hatte die Warengruppe verschluckt.
[kivitendo-erp.git] / t / selenium / AllTests.t
index 254472a..c5ebf1d 100644 (file)
@@ -1,12 +1,12 @@
 #=====================================================================
 # LX-Office ERP
-# Copyright (C) 2006
+# Copyright (C) 2006/2007
 # Web http://www.lx-office.org
 #
 #=====================================================================
 #
-#  Author: Udo Spallek
-#   Email: udono@gmx.net
+#  Author: Udo Spallek, Thomas Kasulke
+#   Email: udono@gmx.net, tkasulke@linet-services.de
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
 #
 #######################################################################
   no strict;
-  push @INC, ['/tselenium'];
+  push @INC, ['/t/selenium', \&init_server];
   use vars qw( $lxdebug $lxtest $sel );
   use strict;
-
-  use Test::WWW::Selenium;
   use Carp;
-  use Test::More tests => 86; # Need to be cutomized
 
-  diag('Pretests and initialisation');
+  use Test::WWW::Selenium;
+  use Test::More qw(no_plan);
+  use IO::Socket;
 
+  if(-f "/tmp/lxtest-temp.conf") {
+    eval { require('/tmp/lxtest-temp.conf'); };
+  }
+  else {
     eval { require('t/lxtest.conf'); };
+  }
   if ($@) {
     diag("No test configuration found in t/lxtest.conf.\n
     Maybe you forget to copy t/lxtest.conf.default to t/lxtest.conf. Exit test...\n");
   exit 0;
-  };
-
-  $lxtest->{test_id} = time; # create individual ids by unixtime
-  $lxtest->{testuserlogin}   = $lxtest->{testlogin} . $lxtest->{test_id};
-  $lxtest->{testuserpasswd}  = $lxtest->{test_id};
-  $lxtest->{db}              = $lxtest->{db} . $lxtest->{test_id};
+  }
 
-  ok(defined $lxtest->{rpw}, "Get root password");
+  sub server_is_running {
+    return IO::Socket::INET->new(PeerAddr => $ENV{SRC_HOST} || $lxtest->{seleniumhost},
+                                 PeerPort => $ENV{SRC_PORT} || $lxtest->{seleniumport},
+                                );
+  }
   
-  ok(defined $lxtest->{dbhost}, "found dbhost in config");
-  ok(defined $lxtest->{dbport}, "found dbport in config");
-  ok(defined $lxtest->{dbuser}, "found dbuser in config");
-  ok(defined $lxtest->{dbpasswd}, "found dbpasswd in config");
+#   if (server_is_running) {
+#     plan tests => 200; # Need to be cutomized
+#   }
+  sub init_server {
+    my $singlefileonly = 0;
+    if ($_[0] eq "singlefileonly") {  
+      $singlefileonly = 1;
+      shift;
+    }
+    if(!server_is_running) {
+      print "No selenium server found! "
+           ."Maybe you forgot to start it or "
+           ."the preferences in t/lxtest.conf doesen't fit to your system";
+      exit 0;
+    }
 
-  $lxtest->{lxadmin} = $lxtest->{lxbaseurl} . "admin.pl?path=$lxtest->{path}&rpw=$lxtest->{rpw}&nextsub=list_users&action=Weiter";
+    diag('Pretests and initialisation');
 
 
-  eval { $sel = Test::WWW::Selenium->new(
-    host => $lxtest->{seleniumhost},
-    port => $lxtest->{seleniumport},
-    browser => $lxtest->{seleniumbrowser},
-    browser_url => $lxtest->{lxadmin});
-  };
-  if ($@) {
-    diag("No Selenium Server running, or wrong preferences\n\n");
-    exit 0;
-  }
 
-  ok(defined $sel, 'Creating Selenium Object');
+    $lxtest->{test_id} = time; # create individual ids by unixtime
+    $lxtest->{testuserlogin}   = $lxtest->{testlogin} . $lxtest->{test_id} if(!$lxtest->{testuserlogin});
+    $lxtest->{testuserpasswd}  = $lxtest->{test_id} if(!$lxtest->{testuserpasswd});
+    $lxtest->{db}              = $lxtest->{db} . $lxtest->{test_id} if(!($lxtest->{db} =~ /^seleniumtestdatabase[0-9]{10}$/));
+
+    ok(defined $lxtest->{rpw}, "Get root password");
+  
+    ok(defined $lxtest->{dbhost}, "found dbhost in config");
+    ok(defined $lxtest->{dbport}, "found dbport in config");
+    ok(defined $lxtest->{dbuser}, "found dbuser in config");
+    ok(defined $lxtest->{dbpasswd}, "found dbpasswd in config");
 
-  diag('Starting Selenium tests...');
+    $lxtest->{lxadmin_url} = $lxtest->{lxbaseurl} . "admin.pl";
+    $lxtest->{lxadmin_with_get} = $lxtest->{lxadmin_url} . "?rpw=$lxtest->{rpw}&nextsub=list_users&action=Weiter";
+    $lxtest->{lxadmin} = $lxtest->{lxadmin_url} . "?rpw=$lxtest->{rpw}&nextsub=list_users&action=Weiter";
 
-  require('t/selenium/001CreateTestDatabase.t');
-  require('t/selenium/002CreateTestUser.t');
 
-  require('t/selenium/998DeleteTestUser.t');
-  require('t/selenium/999DeleteTestDatabase.t');
 
-  $sel=''; # Destroy selenium object
 
-  exit 1;
+    eval { $sel = Test::WWW::Selenium->new(
+      host => $lxtest->{seleniumhost},
+      port => $lxtest->{seleniumport},
+      browser => $lxtest->{seleniumbrowser},
+      browser_url => $lxtest->{lxadmin},
+      auto_stop => '0',
+      );
+    };
+    if ($@) {
+      diag("No Selenium Server running, or wrong preferences\n\n");
+      exit 0;
+    }
+    
+    ok(defined $sel, 'Creating Selenium Object');
 
+    diag('Starting Selenium tests...');
+    
+    if(!$singlefileonly) {
+      foreach my $scriptdir (@_) {
+        opendir(SCRIPTS, 't/selenium/testscripts/' . $scriptdir) or die "Can't open directory!" . $!;
+        foreach (sort readdir(SCRIPTS)) {
+          if ( $_ =~ /^\w\d\d\d.*\.t$|^\d\d\d.*\.t$/  && !$sel->{ran_tests}{"t/selenium/testscripts/". $scriptdir . "/" . $_}) {
+            require_ok("t/selenium/testscripts/". $scriptdir . "/" . $_);
+            $sel->{ran_tests}{"t/selenium/testscripts/". $scriptdir . "/" . $_} = 1;
+          }
+        }
+        closedir(SCRIPTS);
+      }
+    }
+    else {
+      foreach (@_) { 
+        if ( $_ =~ /^.*\/\w\d\d\d.*\.t$|^.*\/\d\d\d.*\.t$/  && !$sel->{ran_tests}{$_}) {
+          require_ok($_); 
+          $sel->{ran_tests}{$_} = 1;
+        }
+      }
+    }
+    if($!) {
+      @! = ("Test fehlgeschlagen!");
+    }
+    $sel->stop();
+  }
+  
+  sub start_login() {
+    require "t/selenium/testscripts/base/000Login.t" if(!$sel->{_page_opened});
+    skip("Failed page to load pages!",) if(!$sel->{_page_opened});
+
+    if($sel->get_title() ne "Lx-Office Version 2.4.3 - Selenium - " . $lxtest->{db}){
+      require "t/selenium/testscripts/base/000Login.t";
+    }
+
+    $sel->select_frame_ok("relative=up");
+  }
+  
+1;