cvsuser     02/07/30 14:19:33

  Added:       P5EEx/Blue/t Repository.01.constructor.t
                        Repository.05.object.t
  Log:
  new file
  
  Revision  Changes    Path
  1.1                  p5ee/P5EEx/Blue/t/Repository.01.constructor.t
  
  Index: Repository.01.constructor.t
  ===================================================================
  #!/usr/local/bin/perl -wT
  
  use Test::More qw(no_plan);
  use lib ".";
  use lib "..";
  
  
  use P5EEx::Blue::P5EE;
  use strict;
  
  #$P5EEx::Blue::DEBUG = 6;
  my ($rep);
  
  ###########################################################################
  # CONSTRUCTOR
  ###########################################################################
  # The proper way to construct a Repository object is to use the factory
  # method on the Context.
  # 
  # P5EEx::Blue::P5EE->context()                     [get the global Context]
  # $context->repository($name, %named)
  #     $context->service("Repository", $name, %named)
  #         $context->wget()          [set attributes in {store} and {cache}]
  #         $context->wdelete()
  #         P5EEx::Blue::P5EE->use()                     [pull in class code]
  #         $service->init()
  #             $service->init2()  [get $ENV{DBNAME} etc. as $self->{dbname}]
  #             $service->connect()                     [connect to database]
  #             $service->load_rep_metadata()     [read metadata in database]
  #                 $service->load_rep_metadata_auto() [read native metadata]
  #                     $dbh->tables()
  #                     $dbh->type_info_all()
  #                     $service->serial()
  #                     $service->load_rep_metadata()         [another table]
  #         return ($service)
  
  {
      my $context = P5EEx::Blue::P5EE->context();
      $rep = $context->repository();
      ok(defined $rep, "constructor ok");
      isa_ok($rep, "P5EEx::Blue::Repository", "right class");
      ok($rep->{name} eq "default", "name ok");
      isa_ok($rep->{dbh}, "DBI::db", "dbh");
      ok($rep->is_connected(), "connected [yes]");
      ok($rep->disconnect(), "disconnect OK");
      ok(!$rep->is_connected(), "connected [no]");
      ok(! defined $rep->{dbh}, "dbh undefed");
  }
  
  use_ok("P5EEx::Blue::Repository");
  
  ###########################################################################
  # CONSTRUCTOR
  ###########################################################################
  # Using what looks like ordinary constructors is really kind of a weird way
  # to construct a Repository.  This is because the real constructor is a
  # factory method on the Context.  The new() method really just gets the
  # Context and calls the service() method with "Repository" as the type
  # for the first argument.
  # 
  # P5EEx::Blue::Repository->new($name, %named)
  #     P5EEx::Blue::P5EE->context()                 [get the global Context]
  #     $class->service_type()
  #     $context->service($type, $name, %named)
  #         $context->wget()          [set attributes in {store} and {cache}]
  #         $context->wdelete()
  #         P5EEx::Blue::P5EE->use()                     [pull in class code]
  #         $service->init()
  #             $service->init2()  [get $ENV{DBNAME} etc. as $self->{dbname}]
  #             $service->connect()                     [connect to database]
  #             $service->load_rep_metadata()     [read metadata in database]
  #                 $service->load_rep_metadata_auto() [read native metadata]
  #                     $dbh->tables()
  #                     $dbh->type_info_all()
  #                     $service->serial()
  #                     $service->load_rep_metadata()         [another table]
  #         return ($service)
  
  {
      # get a repository (whatever "default" is defined as in config file)
      $rep = P5EEx::Blue::Repository->new();   # no args! name=default!
      ok(defined $rep, "constructor ok");
      isa_ok($rep, "P5EEx::Blue::Repository", "right class");
      ok($rep->{name} eq "default", "name ok");
      ok($rep->connect(), "connect OK");
      isa_ok($rep->{dbh}, "DBI::db", "dbh");
      ok($rep->is_connected(), "connected [yes]");
      ok($rep->disconnect(), "disconnect OK");
      ok(!$rep->is_connected(), "connected [no]");
      ok(! defined $rep->{dbh}, "dbh undefed");
  }
  
  {
      # get a repository (no need for config file)
      $rep = P5EEx::Blue::Repository::DBI->new("test2",
        dbidriver => "mysql",
        dbname => "test",
        dbuser => "dbuser",
        dbpass => "dbuser7",
      );   # name=test2!
      ok(defined $rep, "constructor ok");
      isa_ok($rep, "P5EEx::Blue::Repository::DBI", "right class");
      ok($rep->{name} eq "test2", "name ok");
      isa_ok($rep->{dbh}, "DBI::db", "dbh");
      ok($rep->is_connected(), "connected [yes]");
      ok($rep->disconnect(), "disconnect OK");
      ok(!$rep->is_connected(), "connected [no]");
      ok(! defined $rep->{dbh}, "dbh undefed");
  }
  
  exit 0;
  
  
  
  
  1.1                  p5ee/P5EEx/Blue/t/Repository.05.object.t
  
  Index: Repository.05.object.t
  ===================================================================
  #!/usr/local/bin/perl -wT
  
  use Test::More qw(no_plan);
  use lib ".";
  use lib "..";
  
  use P5EEx::Blue::P5EE;
  use strict;
  
  #$P5EEx::Blue::DEBUG = 6;
  
  my $context = P5EEx::Blue::P5EE->context();
  
  {
      my $rep = $context->repository();
      #cheating... I know its a DBI, but I have to set up the test somehow
      my $dbh = $rep->{dbh};
      $dbh->do("drop table test_usr");
      $dbh->do("create table test_usr (usr_id integer, age integer, name 
varchar(16))");
      $context->shutdown();   # disconnect from and forget about all repositories
  }
  
  my $rep = $context->repository("default",
      override => 1,
      table => {
        test_usr => {
          prikey => ["usr_id"],
        },
      },
  );
  
  print join(" ", @{$rep->get_table_names()}), "\n";
  
  my $table = "test_usr";
  my $columns = [ "usr_id", "age", "name" ];
  my $rows = [
      [ 1, 39, "stephen" ],
      [ 2, 37, "susan" ],
      [ 3,  6, "maryalice" ],
      [ 4,  3, "paul" ],
      [ 5,  1, "christine" ],
      [ 6, 45, "tim" ],
      [ 7, 39, "keith" ],
  ];
  
  my $rval = $rep->store_rows($table, $columns, $rows);
  ok($rval, "insert rows");
  
  my $rows2 = $rep->select_rows($table, $columns);
  is_deeply($rows2, $rows, "got same data as inserted");
  
  my $obj = $rep->object($table, 1);
  my $name = $obj->get("name");
  is($name, "stephen", "get name");
  $obj->set("name", "steve");
  $name = $obj->get("name");
  is($name, "steve", "get modified name");
  $rep->commit();
  
  {
      my $dbh = $rep->{dbh};
      $dbh->do("drop table test_usr");
  }
  
  exit 0;
  
  
  
  


Reply via email to