<< Masa.20101224-check-problem-Ruby_1_8_7-study-ydim | 2010 | Masa.20101222-update-ch_oddb_org-generics_xls >>
ext/export/test/test_generics_xls.rb
      def test_export_generic
        pac = flexstub(Package) do |pacobj|
          pacobj.should_receive(:basename).and_return("basename")
          pacobj.should_receive(:dose).and_return("dose")
          pacobj.should_receive(:comparable_size).and_return(111)
          pacobj.should_receive(:barcode).and_return(222)
          pacobj.should_receive(:pharmacode).and_return(333)
          pacobj.should_receive(:name).and_return("name")
          pacobj.should_receive(:price_exfactory).and_return(444.444)
          pacobj.should_receive(:price_public).and_return(555.555)
          pacobj.should_receive(:company_name).and_return("company_name")
          pacobj.should_receive(:ikscat).and_return(666)
          pacobj.should_receive(:sl_entry).and_return('SL')
          pacobj.should_receive(:registration_date).and_return(Date.new(2010,12,31))
          pacobj.should_receive(:"registration.pointer").and_return(123)
          pacobj.should_receive(:pointer).and_return(123)
        end
        expect_row = ["", "", "", "", "", "", "", "", "", "", "", "", "",
                      "222", "333", "name", "dose", "111", "444.44", "555.55",
                      "company_name", "666", "SL", "31.12.2010",
                      "Generikum: neue Registration, Preissenkung"]
        flexstub(Spreadsheet::Excel) do |klass|
          klass.should_receive(:new).and_return(flexmock{|book|
            book.should_receive(:add_worksheet).and_return(flexmock{|sheet|
              sheet.should_receive(:format_column)
              sheet.should_receive(:write).with(0,0,Array, Spreadsheet::Format)
              sheet.should_receive(:write).with(1,0,expect_row) # This is the check point
            })
          })
        end
        generics_xls = GenericXls.new(".")
        assert_equal(2, generics_xls.export_generic(pac))
      end
Result
masa@masa ~/ywesee/oddb.org/ext/export/test $ ruby test_generics_xls.rb Loaded suite test_generics_xls Started ......... Finished in 0.028024 seconds. 9 tests, 10 assertions, 0 failures, 0 errors
Notes
      def test_export_comparable
        pac = flexstub(Package) do |pacobj|
          pacobj.should_receive(:basename).and_return("basename")
          pacobj.should_receive(:dose).and_return("dose")
          pacobj.should_receive(:comparable_size).and_return(111)
          pacobj.should_receive(:barcode).and_return(222)
          pacobj.should_receive(:pharmacode).and_return(333)
          pacobj.should_receive(:name).and_return("name")
          pacobj.should_receive(:price_exfactory).and_return(444.444)
          pacobj.should_receive(:price_public).and_return(555.555)
          pacobj.should_receive(:company_name).and_return("company_name")
          pacobj.should_receive(:ikscat).and_return(666)
          pacobj.should_receive(:sl_entry).and_return('SL')
          pacobj.should_receive(:registration_date).and_return(Date.new(2010,12,31))
          pacobj.should_receive(:"registration.pointer").and_return(123)
          pacobj.should_receive(:pointer).and_return(123)
        end
        expect_row =  ["basename", "basename dose/111", "222", "333", "name",
                       "dose", "111", "444.44", "555.55", "company_name", "666",
                       "SL", "31.12.2010", "222", "333", "name", "dose", "111",
                       "444.44", "555.55", "company_name", "666", "SL", "31.12.2010",
                       "Original: neue Registration, Preissenkung Generikum: neue Registration, Preissenkung"]
        flexstub(Spreadsheet::Excel) do |klass|
          klass.should_receive(:new).and_return(flexmock{|book|
            book.should_receive(:add_worksheet).and_return(flexmock{|sheet|
              sheet.should_receive(:format_column)
              sheet.should_receive(:write).with(0,0,Array, Spreadsheet::Format)
              sheet.should_receive(:write).with(1,0,expect_row) # This is the check point
            })
          })
        end
        generics_xls = GenericXls.new(".")
        assert_equal(2, generics_xls.export_comparable(pac, pac))
      end
Result
masa@masa ~/ywesee/oddb.org/ext/export/test $ ruby test_generics_xls.rb Loaded suite test_generics_xls Started .......... Finished in 0.033548 seconds. 10 tests, 11 assertions, 0 failures, 0 errors
      def test_export_comparables
        pac = flexstub(Package) do |pacobj|
          pacobj.should_receive(:basename).and_return("basename")
          pacobj.should_receive(:dose).and_return("dose")
          pacobj.should_receive(:comparable_size).and_return(111)
          pacobj.should_receive(:barcode).and_return(222)
          pacobj.should_receive(:pharmacode).and_return(333)
          pacobj.should_receive(:name).and_return("name")
          pacobj.should_receive(:price_exfactory).and_return(444.444)
          pacobj.should_receive(:price_public).and_return(555.555)
          pacobj.should_receive(:company_name).and_return("company_name")
          pacobj.should_receive(:ikscat).and_return(666)
          pacobj.should_receive(:sl_entry).and_return('SL')
          pacobj.should_receive(:registration_date).and_return(Date.new(2010,12,31))
          pacobj.should_receive(:"registration.pointer").and_return(123)
          pacobj.should_receive(:pointer).and_return(123)
          pacobj.should_receive(:comparables).and_return([pac])
          pacobj.should_receive(:"registration.generic?").and_return(true)
        end
        expect_row =  ["basename", "basename dose/111", "222", "333", "name",
                       "dose", "111", "444.44", "555.55", "company_name", "666",
                       "SL", "31.12.2010", "222", "333", "name", "dose", "111",
                       "444.44", "555.55", "company_name", "666", "SL", "31.12.2010",
                       "Original: neue Registration, Preissenkung Generikum: neue Registration, Preissenkung"]
        flexstub(Spreadsheet::Excel) do |klass|
          klass.should_receive(:new).and_return(flexmock{|book|
            book.should_receive(:add_worksheet).and_return(flexmock{|sheet|
              sheet.should_receive(:format_column)
              sheet.should_receive(:write).with(0,0,Array, Spreadsheet::Format)
              sheet.should_receive(:write).with(1,0,expect_row) # This is the check point
            })
          })
        end
        generics_xls = GenericXls.new(".")
        assert_equal(2, generics_xls.export_comparable(pac, pac))
      end
Result
masa@masa ~/ywesee/oddb.org/ext/export/test $ ruby test_generics_xls.rb Loaded suite test_generics_xls Started ........... Finished in 0.039299 seconds. 11 tests, 12 assertions, 0 failures, 0 errors
      def setup
        loggroup_swiss = LogGroup.new(:swissmedic_journal)
        loggroup_swiss.create_log(Date.today)
        loggroup_swiss.latest.change_flags = {123 => [:new]}
        loggroup_bsv = LogGroup.new(:bsv_sl)
        loggroup_bsv.create_log(Date.today)
        loggroup_bsv.latest.change_flags = {123 => [:price_cut]}
        pac = flexstub(Package) do |pack|
          pack.should_receive(:public?).and_return(true)
          pack.should_receive(:"registration.active?").and_return(true)
          pack.should_receive(:"registration.original?").and_return(true)
          pack.should_receive(:comparables).and_return([])
          pack.should_receive(:"registration.generic?").and_return(false)
        end
        flexstub(ODBA.cache) do |cacheobj|
           cacheobj.should_receive(:fetch_named).and_return do
             flexmock do |appobj|
               appobj.should_receive(:log_group).with(:swissmedic_journal).and_return(loggroup_swiss)
               appobj.should_receive(:log_group).with(:bsv_sl).and_return(loggroup_bsv)
               appobj.should_receive(:each_package).and_yield(pac)
             end
           end
        end
        @generics_xls = GenericXls.new(".")
      end
...
      def test_export_generics
        assert_equal(2, @generics_xls.export_generics)
      end
Result
masa@masa ~/ywesee/oddb.org/ext/export/test $ ruby test_generics_xls.rb Loaded suite test_generics_xls Started ............ Finished in 0.049937 seconds. 12 tests, 13 assertions, 0 failures, 0 errors
Notes
Updated
      def test_export_generics__case_no_output
        # Note:
        # if the return value of comparables is not empty (point.1), or
        # if the return value of registration.generics? is not false (ture) (point.2),
        # then you have to define the other method in the flexstub(Package),
        # since export_comparables or export_generic will be called.
        pac = flexstub(Package) do |pack|
          pack.should_receive(:public?).and_return(true)
          pack.should_receive(:"registration.active?").and_return(true)
          pack.should_receive(:"registration.original?").and_return(true)
          pack.should_receive(:comparables).and_return([])                # point.1
          pack.should_receive(:"registration.generic?").and_return(false) # point.2
        end
        # This is a trick code, a little bit different from the flexstub in setup method
        # That is why I can re-define the ODBA stub for this method
        flexstub(ODBA) do |odba|
          odba.should_receive(:cache).and_return(flexmock{|cache|
           cache.should_receive(:fetch_named).and_return(flexmock{|app|
             app.should_receive(:log_group).with(:swissmedic_journal).and_return(@loggroup_swiss)
             app.should_receive(:log_group).with(:bsv_sl).and_return(@loggroup_bsv)
             app.should_receive(:each_package).and_yield(pac)
           })
          })
        end
        generics_xls = GenericXls.new(".")
        assert_equal(2, generics_xls.export_generics)
      end
Result
masa@masa ~/ywesee/oddb.org/ext/export/test $ ruby test_generics_xls.rb Loaded suite test_generics_xls Started ............ Finished in 0.044519 seconds. 12 tests, 13 assertions, 0 failures, 0 errors
      def test_export_generics__case_warning
        pac = flexstub(Package) do |pack|
          pack.should_receive(:public?).and_return(true)
          pack.should_receive(:"registration.active?").and_return(true)
          pack.should_receive(:"registration.original?").and_return(true)
          pack.should_receive(:comparables).and_return([pac]) 
          pack.should_receive(:basename).and_return(nil)      # This is the point
          pack.should_receive(:company_name).and_return("company_name")
          pack.should_receive(:barcode).and_return("barcode")
        end
        flexstub(ODBA) do |odba|
          odba.should_receive(:cache).and_return(flexmock{|cache|
           cache.should_receive(:fetch_named).and_return(flexmock{|app|
             app.should_receive(:log_group).with(:swissmedic_journal).and_return(@loggroup_swiss)
             app.should_receive(:log_group).with(:bsv_sl).and_return(@loggroup_bsv)
             app.should_receive(:each_package).and_yield(pac)
           })
          })
        end
        # Note:
        # if the following flexstub is not defined,
        # an actual email will be sent.
        flexstub(Log) do |log|
          log.should_receive(:new)
        end
        generics_xls = GenericXls.new(".")
        assert_raise(NoMethodError) do    # This means the report process runs if this assert passes
          generics_xls.export_generics
        end
      end
Result
masa@masa ~/ywesee/oddb.org/ext/export/test $ ruby test_generics_xls.rb Loaded suite test_generics_xls Started ............. Finished in 0.049993 seconds. 13 tests, 14 assertions, 0 failures, 0 errors
      def test_export_generics__case_export
        pac = flexstub(Package) do |pack|
          pack.should_receive(:public?).and_return(true)
          pack.should_receive(:"registration.active?").and_return(true)
          pack.should_receive(:"registration.original?").and_return(true)
          pack.should_receive(:comparables).and_return([])
          pack.should_receive(:basename).and_return("basename")          # This is the point
          pack.should_receive(:"registration.generic?").and_return(true) # This is the point
          # for test_export_generic
          pack.should_receive(:dose).and_return("dose")
          pack.should_receive(:comparable_size).and_return(111)
          pack.should_receive(:barcode).and_return(222)
          pack.should_receive(:pharmacode).and_return(333)
          pack.should_receive(:name).and_return("name")
          pack.should_receive(:price_exfactory).and_return(444.444)
          pack.should_receive(:price_public).and_return(555.555)
          pack.should_receive(:company_name).and_return("company_name")
          pack.should_receive(:ikscat).and_return(666)
          pack.should_receive(:sl_entry).and_return('SL')
          pack.should_receive(:registration_date).and_return(Date.new(2010,12,31))
          pack.should_receive(:"registration.pointer").and_return(123)
          pack.should_receive(:pointer).and_return(123)
        end
        flexstub(ODBA) do |odba|
          odba.should_receive(:cache).and_return(flexmock{|cache|
           cache.should_receive(:fetch_named).and_return(flexmock{|app|
             app.should_receive(:log_group).with(:swissmedic_journal).and_return(@loggroup_swiss)
             app.should_receive(:log_group).with(:bsv_sl).and_return(@loggroup_bsv)
             app.should_receive(:each_package).and_yield(pac)
           })
          })
        end
        generics_xls = GenericXls.new(".")
        assert_equal(3, generics_xls.export_generics)
Result
masa@masa ~/ywesee/oddb.org/ext/export/test $ ruby test_generics_xls.rb Loaded suite test_generics_xls Started .............. Finished in 0.055982 seconds. 14 tests, 15 assertions, 0 failures, 0 errors
Memo
Example
      def setup
        @loggroup_swiss = LogGroup.new(:swissmedic_journal)
        @loggroup_swiss.create_log(Date.today)
        @loggroup_swiss.latest.change_flags = {123 => [:new]}
        @loggroup_bsv = LogGroup.new(:bsv_sl)
        @loggroup_bsv.create_log(Date.today)
        @loggroup_bsv.latest.change_flags = {123 => [:price_cut]}
        flexstub(ODBA.cache) do |cacheobj|
           cacheobj.should_receive(:fetch_named).and_return do
             flexmock do |appobj|
               appobj.should_receive(:log_group).with(:swissmedic_journal).and_return(@loggroup_swiss)
               appobj.should_receive(:log_group).with(:bsv_sl).and_return(@loggroup_bsv)
             end
           end
        end
        @pac = flexmock('Package') do |pack|
          pack.should_receive(:"registration.pointer").and_return(999)
          pack.should_receive(:pointer).and_return(999)
        end
        @generics_xls = GenericXls.new(".")
      end
      def test__remarks1
        #pac = flexstub(Package) do |pack|
        pac = flexstub(@pac) do |pack|
          #pack.should_receive(:"registration.pointer").and_return(999)
          #pack.should_receive(:pointer).and_return(999)
        end
        assert_nil(@generics_xls._remarks(pac, 'Generikum'))
      end
Note
Commit
dbi sample
# simple.rb - connection test by using Ruby DBI 
#require 'postgres'
require 'dbi'
#require 'dbd/pg'
begin
   # connection to database
   dbh = DBI.connect("dbi:pg:testdb:localhost", "masa", "")
   # get server version string
   row = dbh.select_one("select version()")
   puts "Server version: " + row[0]
rescue DBI::DatabaseError => e
   puts "An error occurred"
   puts "Error code: #{e.err}"
   puts "Error message: #{e.errstr}"
ensure
   # disconnect
   dbh.disconnect if dbh
end
Check PostgreSQL DB
masa@masa ~/work $ psql -U postgres
psql (8.4.2)
Geben Sie »help« für Hilfe ein.
postgres=# \l
                                   Liste der Datenbanken
    Name     | Eigentümer | Kodierung | Sortierfolge | Zeichentyp |    Zugriffsrechte     
-------------+-------------+-----------+--------------+------------+-----------------------
 testdb      | masa        | UTF8      | C            | C          | 
Check drivers
masa@masa ~/work $ gem list pg (0.9.0) postgres (0.7.9.2008.01.28)
Result
masa@masa ~/work $ ruby dbi_test.rb Server version: PostgreSQL 8.4.2 on x86_64-pc-linux-gnu, compiled by GCC x86_64-pc-linux-gnu-gcc (Gentoo 4.4.3 p1.0) 4.4.3, 64-bit
Check Ruby-DBI version
*  dev-ruby/ruby-dbi
      Latest version available: 0.2.0-r1
      Latest version installed: 0.2.0-r1
      Size of files: 97 kB
      Homepage:      http://ruby-dbi.rubyforge.org
      Description:   Ruby/DBI - a database independent interface for accessing databases - similar to Perl's DBI
      License:       BSD
Links
Memo
Important part
   dbh = DBI.connect("dbi:pg:testdb:localhost", "masa", "")
Notes
Experiment
require 'dbi' print "Available drivers=" p DBI.available_drivers
Result
masa@masa ~/work $ ruby test.rb Available drivers=["dbi:SQLRelay:", "dbi:Proxy:", "dbi:Pg:"]
Format
DBI.connect("DBI:[Driver]:[DB]:[Host]", "db_user", "db_pass")
Notes
dbd-pg (0.3.9)
masa@masa ~/work $ emerge -s dbd-pg
*  dev-ruby/dbd-pg
      Latest version available: 0.3.9
      Latest version installed: [ Not Installed ]
      Size of files: 63 kB
      Homepage:      http://ruby-dbi.rubyforge.org
      Description:   The PostgreSQL database driver (DBD) for Ruby/DBI
      License:       BSD
masa@masa ~/work $ gem search dbd-pg -r
*** REMOTE GEMS ***
dbd-pg (0.3.9)
pg (0.9.0)
*  dev-ruby/pg
      Latest version available: 0.9.0-r1
      Latest version installed: 0.9.0-r1
      Size of files: 98 kB
      Homepage:      http://bitbucket.org/ged/ruby-pg/
      Description:   Ruby extension library providing an API to PostgreSQL
      License:       || ( GPL-2 Ruby )
masa@masa ~/work $ gem search pg -r
pg (0.10.0, 0.9.0 x86-mingw32 x86-mswin32, 0.8.0 x86-mswin32-60)
ruby-pg (0.7.9.2008.01.28)
masa@masa ~/work $ gem search ruby-pg -r *** REMOTE GEMS *** ruby-pg (0.7.9.2008.01.28)
ruby-postgres (0.7.9.20080128)
masa@masa ~/work $ emerge -s ruby-postgre
*  dev-ruby/ruby-postgres
      Latest version available: 0.7.9.20080128-r1
      Latest version installed: 0.7.9.20080128
      Size of files: 32 kB
      Homepage:      http://ruby.scripting.ca/postgres
      Description:   An extension library to access a PostgreSQL database from Ruby
      License:       GPL-2 Ruby
masa@masa ~/work $ gem search ruby-postgres -r
*** REMOTE GEMS ***
ruby-postgres (0.7.1.2006.04.06 ruby mswin32)
postgres (0.7.9.2008.01.28)
masa@masa ~/work $ gem search postgres -r *** REMOTE GEMS *** postgres (0.7.9.2008.01.28)
postgres-pr (0.6.3)
masa@masa ~/work $ gem search postgres -r *** REMOTE GEMS *** postgres-pr (0.6.3)
Notes
Experiment
masa@masa ~/work $ ruby dbi_test.rb Server version: PostgreSQL 8.4.2 on x86_64-pc-linux-gnu, compiled by GCC x86_64-pc-linux-gnu-gcc (Gentoo 4.4.3 p1.0) 4.4.3, 64-bit
Uninstall ruby-postgres
masa@masa ~/ywesee/oddb.org $ sudo emerge -C ruby-postgres
Check dbi_test
masa@masa ~/work $ ruby dbi_test.rb Server version: PostgreSQL 8.4.2 on x86_64-pc-linux-gnu, compiled by GCC x86_64-pc-linux-gnu-gcc (Gentoo 4.4.3 p1.0) 4.4.3, 64-bit
Note
Uninstall pg
masa@masa ~/work $ sudo gem uninstall pg Successfully uninstalled pg-0.9.0
Check dbi_test
masa@masa ~/work $ ruby dbi_test.rb 
/usr/lib64/ruby/site_ruby/1.8/dbi.rb:368:in `load_driver': Could not load driver (no such file to load -- pg) (DBI::InterfaceError)
        from /usr/lib64/ruby/site_ruby/1.8/dbi.rb:233:in `_get_full_driver'
        from /usr/lib64/ruby/site_ruby/1.8/dbi.rb:219:in `connect'
        from dbi_test.rb:9
Re-install pg
masa@masa ~/work $ sudo gem install pg
ERROR:  Error installing pg:
        pg requires Ruby version >= 1.8.7.
Note
Oh my GOD!!
masa@masa ~/work $ sudo gem install pg --version "< 0.9.0" Passwort: Building native extensions. This could take a while... Successfully installed pg-0.8.0 1 gem installed /usr/lib64/ruby/gems/1.8/gems/rdoc-2.5.11/lib/rdoc/ruby_lex.rb:67: warning: parenthesize argument(s) for future version Installing ri documentation for pg-0.8.0... Installing RDoc documentation for pg-0.8.0...
Check dbi_test.rb
masa@masa ~/work $ ruby dbi_test.rb Server version: PostgreSQL 8.4.2 on x86_64-pc-linux-gnu, compiled by GCC x86_64-pc-linux-gnu-gcc (Gentoo 4.4.3 p1.0) 4.4.3, 64-bit
Check oddb.org
Run
Access
Result
Note
Commit
Installer
Installer
    * Devel / bison
    * Devel / gcc-core
    * Devel / flex
    * Devel / gettext-devel
    * Devel / make
    * Devel / readline
    * Devel / zlib-devel
    * Perl / perl
Check gem command on Cwgwin
masa@masa-win7 ~
$ gem list
/cygdrive/c/Ruby186/bin/gem:8:in `require': no such file to load -- rubygems (Lo
adError)
        from /cygdrive/c/Ruby186/bin/gem:8
Note
masa@masa-win7 ~/rubygems-1.3.7 $ ruby setup.rb masa@masa-win7 ~/rubygems-1.3.7 $ gem -v 1.3.7
Note
Donwload postgresql source code (same version with the postgreSQL installed)
Compile
$ tar jxvf postgresql-8.4.0.tar.bz2 $ cd postgresql-8.4.0 $ export PGSRC=`pwd` $ ./configure --enable-thread-safety $ cd $PGSRC/src/bin $ make $ make install $ cd $PGSRC/src/interfaces/libpq $ make install
Set environment variables
$ cat ~/.bashrc export PATH=/usr/local/pgsql/bin:/usr/local/pgsql/lib:$PATH export PGHOST=localhost
Confirm psql command
masa@masa-win7 ~/postgresql-8.4.6/src/interfaces/libpq $ psql --version psql (PostgreSQL) 8.4.6 contains support for command-line editing
Note
Next