oddb.org 1.0.0 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gemtest +0 -0
- data/Guide.txt +23 -17
- data/{README → INSTALL_from_Source.txt} +64 -75
- data/Manifest.txt +110 -4
- data/README.txt +4 -2
- data/Rakefile +5 -0
- data/doc/favicon.ico +0 -0
- data/doc/index.rbx +15 -0
- data/doc/resources/anthroposophy/favicon.ico +0 -0
- data/doc/resources/anthroposophy/logo.png +0 -0
- data/doc/resources/atupri/logo.gif +0 -0
- data/doc/resources/desitin/logo.jpg +0 -0
- data/doc/resources/downloads/datadesc/analysis.csv.txt +57 -0
- data/doc/resources/downloads/datadesc/doctors.csv.txt +43 -0
- data/doc/resources/downloads/datadesc/doctors.yaml.txt +52 -0
- data/doc/resources/downloads/datadesc/fachinfo.yaml.txt +107 -0
- data/doc/resources/downloads/datadesc/generics.xls.txt +42 -0
- data/doc/resources/downloads/datadesc/index_therapeuticus.txt +38 -0
- data/doc/resources/downloads/datadesc/interactions.yaml.txt +78 -0
- data/doc/resources/downloads/datadesc/migel.csv.txt +84 -0
- data/doc/resources/downloads/datadesc/narcotics.csv.txt +49 -0
- data/doc/resources/downloads/datadesc/narcotics.yaml.txt +40 -0
- data/doc/resources/downloads/datadesc/oddb.csv.txt +98 -0
- data/doc/resources/downloads/datadesc/oddb.yaml.txt +255 -0
- data/doc/resources/downloads/datadesc/oddb2.csv.txt +94 -0
- data/doc/resources/downloads/datadesc/oddbdat.txt +228 -0
- data/doc/resources/downloads/datadesc/patents.xls.txt +29 -0
- data/doc/resources/downloads/datadesc/patinfo.yaml.txt +79 -0
- data/doc/resources/downloads/datadesc/price_history.csv.txt +43 -0
- data/doc/resources/downloads/datadesc/price_history.yaml.txt +55 -0
- data/doc/resources/downloads/datadesc/s31x.txt +40 -0
- data/doc/resources/downloads/datadesc/swissdrug-update.xls.txt +59 -0
- data/doc/resources/downloads/examples/Inderal.Preisvergleich.csv +19 -0
- data/doc/resources/downloads/examples/analysis.csv +35 -0
- data/doc/resources/downloads/examples/compendium_ch.oddb.org.firefox.epub +0 -0
- data/doc/resources/downloads/examples/compendium_ch.oddb.org.htc.prc +0 -0
- data/doc/resources/downloads/examples/compendium_ch.oddb.org.kindle.mobi +0 -0
- data/doc/resources/downloads/examples/compendium_ch.oddb.org.stanza.epub +0 -0
- data/doc/resources/downloads/examples/doctors.csv +13 -0
- data/doc/resources/downloads/examples/doctors.yaml +238 -0
- data/doc/resources/downloads/examples/fachinfo.yaml +1255 -0
- data/doc/resources/downloads/examples/fachinfos_de.pdf +51565 -0
- data/doc/resources/downloads/examples/fachinfos_fr.pdf +52072 -0
- data/doc/resources/downloads/examples/generics.xls +0 -0
- data/doc/resources/downloads/examples/index_therapeuticus.tar.gz +0 -0
- data/doc/resources/downloads/examples/interactions.yaml +161 -0
- data/doc/resources/downloads/examples/migel.csv +36 -0
- data/doc/resources/downloads/examples/narcotics.yaml +92 -0
- data/doc/resources/downloads/examples/oddb.csv +1378 -0
- data/doc/resources/downloads/examples/oddb.yaml +14976 -0
- data/doc/resources/downloads/examples/oddb2.csv +1566 -0
- data/doc/resources/downloads/examples/oddbdat.tar.gz +0 -0
- data/doc/resources/downloads/examples/patents.xls +0 -0
- data/doc/resources/downloads/examples/patinfo.yaml +2505 -0
- data/doc/resources/downloads/examples/price_history.csv +99 -0
- data/doc/resources/downloads/examples/price_history.yaml +431 -0
- data/doc/resources/downloads/examples/swissdrug-update.xls +0 -0
- data/doc/resources/errors/appdown.html +50 -0
- data/doc/resources/errors/logo.png +0 -0
- data/doc/resources/errors/logo_de.gif +0 -0
- data/doc/resources/gcc/banner.gif +0 -0
- data/doc/resources/gcc/logo.png +0 -0
- data/doc/resources/gcc/logo_de.gif +0 -0
- data/doc/resources/gcc/logo_doc.gif +0 -0
- data/doc/resources/gcc/logo_fr.gif +0 -0
- data/doc/resources/gcc/logo_rss.png +0 -0
- data/doc/resources/generika/favicon.ico +0 -0
- data/doc/resources/generika/logo.gif +0 -0
- data/doc/resources/generika/logo_de.gif +0 -0
- data/doc/resources/generika/logo_fr.gif +0 -0
- data/doc/resources/homeopathy/favicon.ico +0 -0
- data/doc/resources/homeopathy/logo.png +0 -0
- data/doc/resources/icon_twitter.gif +0 -0
- data/doc/resources/innova/logo.gif +0 -0
- data/doc/resources/innova/logo_de.gif +0 -0
- data/doc/resources/javascript/admin.js +14 -0
- data/doc/resources/javascript/autofill.js +21 -0
- data/doc/resources/javascript/bit.ly.js +29 -0
- data/doc/resources/javascript/company.js +22 -0
- data/doc/resources/javascript/dojo/Editor.js +219 -0
- data/doc/resources/javascript/dojo/HtmlEditorToolbar.html +163 -0
- data/doc/resources/javascript/dojo/sigma.gif +0 -0
- data/doc/resources/javascript/widget/SymbolPalette.js +162 -0
- data/doc/resources/javascript/widget/Tooltip.js +85 -0
- data/doc/resources/javascript/widget/__package__.js +2 -0
- data/doc/resources/livemarks16.png +0 -0
- data/doc/resources/mail.gif +0 -0
- data/doc/resources/mobile/logo.png +0 -0
- data/doc/resources/paypal_donate.gif +0 -0
- data/doc/resources/phyto-pharma/favicon.ico +0 -0
- data/doc/resources/phyto-pharma/logo.png +0 -0
- data/doc/resources/plugins/Generika.cc.gif +0 -0
- data/doc/resources/plugins/Generika.cc.html +34 -0
- data/doc/resources/plugins/Generika.cc.src +34 -0
- data/doc/resources/plugins/oddb.org.gif +0 -0
- data/doc/resources/plugins/oddb.org.html +34 -0
- data/doc/resources/plugins/oddb.org.src +34 -0
- data/doc/resources/print.css +33 -0
- data/doc/resources/provita/logo_de.gif +0 -0
- data/doc/resources/santesuisse/logo_de.gif +0 -0
- data/doc/resources/schoenenberger/logo_de.gif +0 -0
- data/doc/resources/swissmedic/logo.png +0 -0
- data/doc/resources/swissmedic/logo_de.gif +0 -0
- data/doc/resources/swissmedic/logo_doc.gif +0 -0
- data/doc/resources/swissmedic/logo_fr.gif +0 -0
- data/doc/resources/sympany/logo.gif +0 -0
- data/doc/robots.txt +29 -0
- data/ext/export/src/generics_xls.rb +29 -5
- data/ext/export/src/oddbdat.rb +1 -1
- data/ext/export/test/test_generics_xls.rb +216 -0
- data/ext/export/test/test_oddbdat.rb +880 -0
- data/lib/oddb.org.rb +1 -1
- data/src/model/package.rb +3 -2
- data/src/plugin/analysis.rb +2 -0
- data/src/plugin/bsv_xml.rb +1 -1
- data/src/plugin/hospitals.rb +1 -0
- data/src/plugin/oddbdat_export.rb +12 -2
- data/src/plugin/text_info.rb +16 -29
- data/src/util/exporter.rb +21 -1
- data/src/util/log.rb +3 -0
- data/src/util/oddbapp.rb +1 -1
- data/src/util/oddbconfig.rb +1 -1
- data/src/util/updater.rb +9 -1
- data/test/data/html/interaction/flockhart/prepared_table.asp +820 -0
- data/test/data/html/interaction/flockhart/table.asp +820 -0
- data/test/data/html/text_info/News.html +18 -93
- data/test/suite.rb +78 -4
- data/test/test_model/package.rb +38 -0
- data/test/test_plugin/bsv_xml.rb +4 -2
- data/test/test_plugin/flockhart.rb +1 -1
- data/test/test_plugin/oddbdat_export.rb +79 -658
- data/test/test_plugin/ouwerkerk.rb +2 -2
- data/test/test_plugin/suite.rb +8 -6
- data/test/test_plugin/text_info.rb +40 -52
- data/test/test_plugin/{doctors.rb → zdoctor.rb} +0 -0
- data/test/test_util/exporter.rb +500 -0
- data/test/test_util/suite.rb +8 -6
- data/test/test_util/{log.rb → zlog.rb} +19 -0
- data/test/test_view/{search.rb → asearch.rb} +0 -0
- data/test/test_view/suite.rb +8 -6
- metadata +143 -14
|
@@ -13,6 +13,7 @@ require 'model/indication'
|
|
|
13
13
|
require 'model/activeagent'
|
|
14
14
|
require 'model/composition'
|
|
15
15
|
require 'mock'
|
|
16
|
+
require 'fileutils'
|
|
16
17
|
|
|
17
18
|
module ODDB
|
|
18
19
|
class OuwerkerkPlugin < Plugin
|
|
@@ -83,8 +84,7 @@ class TestOuwerkerkPlugin < Test::Unit::TestCase
|
|
|
83
84
|
end
|
|
84
85
|
def teardown
|
|
85
86
|
if(File.exists? @plugin.file_path)
|
|
86
|
-
|
|
87
|
-
#File.delete(@plugin.file_path)
|
|
87
|
+
FileUtils.rm_f(@plugin.file_path)
|
|
88
88
|
end
|
|
89
89
|
ODBA.storage = nil
|
|
90
90
|
end
|
data/test/test_plugin/suite.rb
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
#!/usr/bin/env ruby
|
|
2
|
-
# OneDirSuite -- oddb --
|
|
2
|
+
# OneDirSuite -- oddb -- 08.02.2011 -- mhatakeyama@ywesee.com
|
|
3
3
|
|
|
4
4
|
$: << File.expand_path(File.dirname(__FILE__))
|
|
5
5
|
|
|
6
|
-
Dir.
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
6
|
+
Dir.open(File.dirname(__FILE__)) do |dir|
|
|
7
|
+
dir.sort.each do |file|
|
|
8
|
+
if /.*\.rb$/o.match(file)&&file!='suite.rb'
|
|
9
|
+
require file
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
@@ -616,74 +616,70 @@ Parse Errors: 0
|
|
|
616
616
|
assert_nothing_raised do
|
|
617
617
|
news = @plugin.fachinfo_news agent
|
|
618
618
|
end
|
|
619
|
-
assert_equal
|
|
620
|
-
assert_equal
|
|
621
|
-
"Abseamed®"], news.first
|
|
619
|
+
assert_equal 7, news.size
|
|
620
|
+
assert_equal "Abilify\302\256", news.first
|
|
622
621
|
end
|
|
623
622
|
def test_old_fachinfo_news
|
|
624
623
|
## no file means no news
|
|
625
624
|
assert_equal [], @plugin.old_fachinfo_news
|
|
626
625
|
File.open File.join(@vardir, 'fachinfo.txt'), 'w' do |fh|
|
|
627
626
|
fh.puts <<-EOS
|
|
628
|
-
|
|
629
|
-
|
|
627
|
+
Amiodarone Winthrop\302\256/- Mite
|
|
628
|
+
AcetaPhos\302\256 750 mg
|
|
630
629
|
EOS
|
|
631
630
|
end
|
|
632
631
|
## the file is parsed properly
|
|
633
632
|
news = @plugin.old_fachinfo_news
|
|
634
633
|
assert_equal 2, news.size
|
|
635
|
-
assert_equal
|
|
636
|
-
"Amiodarone Winthrop\302\256/- Mite"], news.first
|
|
637
|
-
## the file is also parsed properly when names aren't included
|
|
638
|
-
assert_equal ["1e5d1ba9-3073-47cb-8ebb-ecd3f88ecacf"], news.last
|
|
634
|
+
assert_equal "Amiodarone Winthrop\302\256/- Mite", news.first
|
|
639
635
|
end
|
|
640
636
|
def test_true_news
|
|
641
637
|
## there are no news
|
|
642
638
|
news = [
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
639
|
+
"Abseamed\302\256",
|
|
640
|
+
"Aclasta\302\256",
|
|
641
|
+
"Alcacyl\302\256 500 Instant-Pulver",
|
|
642
|
+
"Aldurazyme\302\256",
|
|
643
|
+
"Allopur\302\256",
|
|
644
|
+
"Allopurinol - 1 A Pharma100 mg/300 mg",
|
|
645
|
+
"Amavita Acetylcystein 600",
|
|
646
|
+
"Amavita Carbocistein",
|
|
647
|
+
"Amavita Ibuprofen 400",
|
|
648
|
+
"Amavita Paracetamol 500"
|
|
653
649
|
]
|
|
654
650
|
old_news = [
|
|
655
|
-
|
|
656
|
-
|
|
651
|
+
"Abseamed\302\256",
|
|
652
|
+
"Aclasta\302\256",
|
|
657
653
|
]
|
|
658
|
-
|
|
654
|
+
expected_news = [
|
|
655
|
+
"Alcacyl\302\256 500 Instant-Pulver",
|
|
656
|
+
"Aldurazyme\302\256",
|
|
657
|
+
"Allopur\302\256",
|
|
658
|
+
"Allopurinol - 1 A Pharma100 mg/300 mg",
|
|
659
|
+
"Amavita Acetylcystein 600",
|
|
660
|
+
"Amavita Carbocistein",
|
|
661
|
+
"Amavita Ibuprofen 400",
|
|
662
|
+
"Amavita Paracetamol 500"
|
|
663
|
+
]
|
|
664
|
+
assert_equal expected_news, @plugin.true_news(news, old_news)
|
|
659
665
|
## clean disection
|
|
660
666
|
old_news = [
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
667
|
+
"Allopurinol - 1 A Pharma100 mg/300 mg",
|
|
668
|
+
"Amavita Acetylcystein 600",
|
|
669
|
+
"Amavita Carbocistein",
|
|
670
|
+
"Amavita Ibuprofen 400",
|
|
671
|
+
"Amavita Paracetamol 500"
|
|
666
672
|
]
|
|
667
673
|
expected = [
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
]
|
|
674
|
-
assert_equal expected, @plugin.true_news(news, old_news)
|
|
675
|
-
## disection also works for ids recorded without name
|
|
676
|
-
old_news = [
|
|
677
|
-
["3d808e28-3445-46e1-be00-68f053499bc1"],
|
|
678
|
-
["b287ecf9-84c2-48f0-b0c0-2dd9cff30d1f"],
|
|
679
|
-
["78163fd4-6cf0-40ea-91b8-06c258722a7d"],
|
|
680
|
-
["1885f45a-b9df-4462-adb9-c46140859835"],
|
|
681
|
-
["0a717d39-a873-4bff-87ab-b6b08b861da0"]
|
|
674
|
+
"Abseamed\302\256",
|
|
675
|
+
"Aclasta\302\256",
|
|
676
|
+
"Alcacyl\302\256 500 Instant-Pulver",
|
|
677
|
+
"Aldurazyme\302\256",
|
|
678
|
+
"Allopur\302\256",
|
|
682
679
|
]
|
|
683
680
|
assert_equal expected, @plugin.true_news(news, old_news)
|
|
684
681
|
## recorded news don't appear on the news-page
|
|
685
|
-
old_news = [
|
|
686
|
-
"Amiodarone Winthrop\302\256/- Mite"]]
|
|
682
|
+
old_news = ["Amiodarone Winthrop\302\256/- Mite"]
|
|
687
683
|
assert_equal news, @plugin.true_news(news, old_news)
|
|
688
684
|
end
|
|
689
685
|
def test_search_product
|
|
@@ -766,18 +762,10 @@ c413ce2d-a88e-4d71-b6b9-1c55e021edc0 Amiodarone Winthrop\302\256/- Mite
|
|
|
766
762
|
@parser.should_receive(:parse_patinfo_html).and_return PatinfoDocument.new
|
|
767
763
|
@app.should_receive(:sorted_fachinfos).and_return []
|
|
768
764
|
success = @plugin.import_news agent
|
|
769
|
-
expected =
|
|
770
|
-
13e742d9-f404-4681-ab82-71d347acfb93 Abseamed®
|
|
771
|
-
8a7f708c-c738-4425-a9a5-5ad294f20be4 Aclasta®
|
|
772
|
-
EOS
|
|
765
|
+
expected = "Abilify\302\256\nAbilify\302\256 Injektionsl\303\266sung\nAbseamed\302\256\nAceril\302\256- mite\nAcetaPhos\302\256 750 mg\nAcimethin\302\256\nAclasta\302\256"
|
|
773
766
|
assert_equal 5, @pages.size
|
|
774
767
|
assert_equal expected, File.read(logfile)
|
|
775
768
|
assert_equal true, success
|
|
776
769
|
end
|
|
777
|
-
def test_extract_fachinfo_id
|
|
778
|
-
href = 'http://textinfo.ch/Monographie.aspx?Id=3914c196-70d8-43b7-816d-8fe923649740&lang=de&MonType=fi'
|
|
779
|
-
assert_equal '3914c196-70d8-43b7-816d-8fe923649740',
|
|
780
|
-
@plugin.extract_fachinfo_id(href)
|
|
781
|
-
end
|
|
782
770
|
end
|
|
783
771
|
end
|
|
File without changes
|
|
@@ -0,0 +1,500 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
# TestExporter -- oddb -- 07.02.2011 -- mhatakeyama@ywesee.com
|
|
3
|
+
|
|
4
|
+
$: << File.expand_path("../../src", File.dirname(__FILE__))
|
|
5
|
+
|
|
6
|
+
require 'test/unit'
|
|
7
|
+
require 'flexmock'
|
|
8
|
+
require 'util/exporter'
|
|
9
|
+
require 'util/log'
|
|
10
|
+
require 'date'
|
|
11
|
+
|
|
12
|
+
module ODDB
|
|
13
|
+
include FlexMock::TestCase
|
|
14
|
+
class StubDRbObject
|
|
15
|
+
def clear
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
class Exporter
|
|
19
|
+
remove_const :EXPORT_SERVER
|
|
20
|
+
EXPORT_SERVER = StubDRbObject.new
|
|
21
|
+
end
|
|
22
|
+
class TestExporter < Test::Unit::TestCase
|
|
23
|
+
include FlexMock::TestCase
|
|
24
|
+
def test_test
|
|
25
|
+
assert(true)
|
|
26
|
+
end
|
|
27
|
+
def setup
|
|
28
|
+
@app = flexmock('app')
|
|
29
|
+
@exporter = ODDB::Exporter.new(@app)
|
|
30
|
+
flexstub(@exporter).should_receive(:sleep).and_return('sleep')
|
|
31
|
+
@log = flexmock('log') do |log|
|
|
32
|
+
log.should_receive(:report)
|
|
33
|
+
log.should_receive(:notify)
|
|
34
|
+
log.should_receive(:report=)
|
|
35
|
+
log.should_receive(:date_str=)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
# plugins
|
|
39
|
+
# @plugins will be modifed depending on a test-case in each test method
|
|
40
|
+
@plugin = flexmock('plugin')
|
|
41
|
+
flexstub(OdbaExporter::OddbDatExport).should_receive(:new).and_return(@plugin)
|
|
42
|
+
flexstub(SwissmedicPlugin).should_receive(:new).and_return(@plugin)
|
|
43
|
+
flexstub(XlsExportPlugin).should_receive(:new).and_return(@plugin)
|
|
44
|
+
flexstub(CsvExportPlugin).should_receive(:new).and_return(@plugin)
|
|
45
|
+
flexstub(FiPDFExporter).should_receive(:new).and_return(@plugin)
|
|
46
|
+
flexstub(OuwerkerkPlugin).should_receive(:new).and_return(@plugin)
|
|
47
|
+
flexstub(YamlExporter).should_receive(:new).and_return(@plugin)
|
|
48
|
+
flexstub(DownloadInvoicer).should_receive(:new).and_return(@plugin)
|
|
49
|
+
flexstub(FachinfoInvoicer).should_receive(:new).and_return(@plugin)
|
|
50
|
+
flexstub(PatinfoInvoicer).should_receive(:new).and_return(@plugin)
|
|
51
|
+
end
|
|
52
|
+
def test_export_oddbdat__on_sunday
|
|
53
|
+
flexstub(@exporter, :today => Date.new(2011,1,2))
|
|
54
|
+
flexstub(Log) do |logclass|
|
|
55
|
+
# white box test: Log.new is never called
|
|
56
|
+
# if dose_missing_list is not empty or an error raises,
|
|
57
|
+
# Log.new will be called
|
|
58
|
+
logclass.should_receive(:new).times(0).and_return(@log)
|
|
59
|
+
end
|
|
60
|
+
flexstub(@plugin) do |exporter|
|
|
61
|
+
exporter.should_receive(:export).and_return([]) # this is the key point
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
# the 'nil' means 'if' condition runs, otherwise it may indicate an error
|
|
65
|
+
assert_equal(nil, @exporter.export_oddbdat)
|
|
66
|
+
end
|
|
67
|
+
def test_export_oddbdat__on_monday
|
|
68
|
+
flexstub(@exporter, :today => Date.new(2011,1,3)) # Monday
|
|
69
|
+
flexstub(Log) do |logclass|
|
|
70
|
+
logclass.should_receive(:new).times(0).and_return(@log)
|
|
71
|
+
end
|
|
72
|
+
flexstub(@plugin) do |exporter|
|
|
73
|
+
exporter.should_receive(:export).and_return([]) # this is the key point
|
|
74
|
+
exporter.should_receive(:export_fachinfos).once.with_no_args
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
assert_equal(nil, @exporter.export_oddbdat)
|
|
78
|
+
end
|
|
79
|
+
def test_export_oddbdat__dose_missing
|
|
80
|
+
flexstub(Log) do |logclass|
|
|
81
|
+
# white box test: Log.new is once called because of dose data missing
|
|
82
|
+
logclass.should_receive(:new).times(1).and_return(@log)
|
|
83
|
+
end
|
|
84
|
+
flexstub(@plugin) do |exporter|
|
|
85
|
+
exporter.should_receive(:export).and_return(['dose_missing']) # this is the key point
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
assert_equal(nil, @exporter.export_oddbdat)
|
|
89
|
+
end
|
|
90
|
+
def test_run__on_1st_day
|
|
91
|
+
# totally whilte box test
|
|
92
|
+
flexstub(@exporter) do |exp|
|
|
93
|
+
exp.should_receive(:today).and_return(Date.new(2011,1,1)) # Saturday
|
|
94
|
+
exp.should_receive(:mail_patinfo_invoices).once.with_no_args
|
|
95
|
+
exp.should_receive(:mail_fachinfo_log).once.with_no_args
|
|
96
|
+
exp.should_receive(:mail_download_invoices).once.with_no_args
|
|
97
|
+
exp.should_receive(:mail_download_stats).times(0).with_no_args
|
|
98
|
+
exp.should_receive(:mail_feedback_stats).times(0).with_no_args
|
|
99
|
+
exp.should_receive(:export_sl_pcodes).once.with_no_args
|
|
100
|
+
exp.should_receive(:export_yaml).once.with_no_args
|
|
101
|
+
exp.should_receive(:export_oddbdat).once.with_no_args
|
|
102
|
+
exp.should_receive(:export_csv).once.with_no_args
|
|
103
|
+
exp.should_receive(:export_doc_csv).once.with_no_args
|
|
104
|
+
exp.should_receive(:export_index_therapeuticus_csv).once.with_no_args
|
|
105
|
+
exp.should_receive(:export_price_history_csv).once.with_no_args
|
|
106
|
+
end
|
|
107
|
+
assert_equal(nil, @exporter.run)
|
|
108
|
+
end
|
|
109
|
+
def test_run__on_15th_day
|
|
110
|
+
flexstub(@exporter) do |exp|
|
|
111
|
+
exp.should_receive(:today).and_return(Date.new(2011,1,15)) # Saturday
|
|
112
|
+
exp.should_receive(:mail_patinfo_invoices).once.with_no_args
|
|
113
|
+
exp.should_receive(:mail_fachinfo_log).once.with_no_args
|
|
114
|
+
exp.should_receive(:mail_download_invoices).once.with_no_args
|
|
115
|
+
exp.should_receive(:mail_download_stats).times(0).with_no_args
|
|
116
|
+
exp.should_receive(:mail_feedback_stats).times(0).with_no_args
|
|
117
|
+
exp.should_receive(:export_sl_pcodes).once.with_no_args
|
|
118
|
+
exp.should_receive(:export_yaml).once.with_no_args
|
|
119
|
+
exp.should_receive(:export_oddbdat).once.with_no_args
|
|
120
|
+
exp.should_receive(:export_csv).once.with_no_args
|
|
121
|
+
exp.should_receive(:export_doc_csv).once.with_no_args
|
|
122
|
+
exp.should_receive(:export_index_therapeuticus_csv).once.with_no_args
|
|
123
|
+
exp.should_receive(:export_price_history_csv).once.with_no_args
|
|
124
|
+
end
|
|
125
|
+
assert_equal(nil, @exporter.run)
|
|
126
|
+
end
|
|
127
|
+
def test_run__on_sunday
|
|
128
|
+
flexstub(@exporter) do |exp|
|
|
129
|
+
exp.should_receive(:today).and_return(Date.new(2011,1,2)) # Sunday
|
|
130
|
+
exp.should_receive(:mail_patinfo_invoices).once.with_no_args
|
|
131
|
+
exp.should_receive(:mail_fachinfo_log).once.with_no_args
|
|
132
|
+
exp.should_receive(:mail_download_invoices).times(0).with_no_args
|
|
133
|
+
exp.should_receive(:mail_download_stats).once.with_no_args
|
|
134
|
+
exp.should_receive(:mail_feedback_stats).once.with_no_args
|
|
135
|
+
exp.should_receive(:export_sl_pcodes).once.with_no_args
|
|
136
|
+
exp.should_receive(:export_yaml).once.with_no_args
|
|
137
|
+
exp.should_receive(:export_oddbdat).once.with_no_args
|
|
138
|
+
exp.should_receive(:export_csv).once.with_no_args
|
|
139
|
+
exp.should_receive(:export_doc_csv).once.with_no_args
|
|
140
|
+
exp.should_receive(:export_index_therapeuticus_csv).once.with_no_args
|
|
141
|
+
exp.should_receive(:export_price_history_csv).once.with_no_args
|
|
142
|
+
end
|
|
143
|
+
assert_equal(nil, @exporter.run)
|
|
144
|
+
end
|
|
145
|
+
def test_export_helper
|
|
146
|
+
flexstub(Exporter::EXPORT_SERVER) do |exp|
|
|
147
|
+
exp.should_receive(:remote_safe_export).and_yield('path')
|
|
148
|
+
end
|
|
149
|
+
@exporter.export_helper('name') do |path|
|
|
150
|
+
assert_equal('path', path)
|
|
151
|
+
end
|
|
152
|
+
end
|
|
153
|
+
def test_export_all_csv
|
|
154
|
+
# totally white box test
|
|
155
|
+
flexstub(@exporter) do |exp|
|
|
156
|
+
exp.should_receive(:export_csv).once.with_no_args
|
|
157
|
+
exp.should_receive(:export_doc_csv).once.with_no_args
|
|
158
|
+
exp.should_receive(:export_index_therapeuticus_csv).once.with_no_args
|
|
159
|
+
exp.should_receive(:export_price_history_csv).once.with_no_args.and_return('export_price_history_csv')
|
|
160
|
+
end
|
|
161
|
+
assert_equal('export_price_history_csv', @exporter.export_all_csv)
|
|
162
|
+
end
|
|
163
|
+
def test_export_competition_xls
|
|
164
|
+
flexstub(@plugin) do |plug|
|
|
165
|
+
plug.should_receive(:export_competition)
|
|
166
|
+
end
|
|
167
|
+
assert_equal(@plugin, @exporter.export_competition_xls('company'))
|
|
168
|
+
end
|
|
169
|
+
def test_export_csv
|
|
170
|
+
flexstub(@plugin) do |plug|
|
|
171
|
+
plug.should_receive(:export_drugs)
|
|
172
|
+
plug.should_receive(:export_drugs_extended)
|
|
173
|
+
end
|
|
174
|
+
assert_equal('sleep', @exporter.export_csv)
|
|
175
|
+
end
|
|
176
|
+
def test_export_csv__errorcase1
|
|
177
|
+
flexstub(@plugin) do |plug|
|
|
178
|
+
plug.should_receive(:export_drugs).and_raise(StandardError)
|
|
179
|
+
plug.should_receive(:export_drugs_extended)
|
|
180
|
+
end
|
|
181
|
+
flexstub(Log) do |logclass|
|
|
182
|
+
# white box test: Log.new is once called because of error
|
|
183
|
+
logclass.should_receive(:new).times(1).and_return(@log)
|
|
184
|
+
end
|
|
185
|
+
assert_equal('sleep', @exporter.export_csv)
|
|
186
|
+
end
|
|
187
|
+
def test_export_csv__errorcase2
|
|
188
|
+
flexstub(@plugin) do |plug|
|
|
189
|
+
plug.should_receive(:export_drugs)
|
|
190
|
+
plug.should_receive(:export_drugs_extended).and_raise(StandardError)
|
|
191
|
+
end
|
|
192
|
+
flexstub(Log) do |logclass|
|
|
193
|
+
# white box test: Log.new is once called because of error
|
|
194
|
+
logclass.should_receive(:new).times(1).and_return(@log)
|
|
195
|
+
end
|
|
196
|
+
assert_equal('sleep', @exporter.export_csv)
|
|
197
|
+
end
|
|
198
|
+
def test_export_analysis_csv
|
|
199
|
+
flexstub(@plugin) do |plug|
|
|
200
|
+
plug.should_receive(:export_analysis)
|
|
201
|
+
end
|
|
202
|
+
assert_equal('sleep', @exporter.export_analysis_csv)
|
|
203
|
+
end
|
|
204
|
+
def test_export_doc_csv
|
|
205
|
+
flexstub(@plugin) do |plug|
|
|
206
|
+
plug.should_receive(:export_doctors)
|
|
207
|
+
end
|
|
208
|
+
assert_equal('sleep', @exporter.export_doc_csv)
|
|
209
|
+
end
|
|
210
|
+
def test_export_doc_csv__error
|
|
211
|
+
flexstub(@plugin) do |plug|
|
|
212
|
+
plug.should_receive(:export_doctors).and_raise(StandardError)
|
|
213
|
+
end
|
|
214
|
+
flexstub(Log) do |logclass|
|
|
215
|
+
# white box test: Log.new is once called because of error
|
|
216
|
+
logclass.should_receive(:new).times(1).and_return(@log)
|
|
217
|
+
end
|
|
218
|
+
assert_equal('sleep', @exporter.export_doc_csv)
|
|
219
|
+
end
|
|
220
|
+
def test_export_fachinfo_pdf
|
|
221
|
+
# this method will be removed
|
|
222
|
+
end
|
|
223
|
+
def test_export_generics_xls
|
|
224
|
+
flexstub(@plugin) do |plug|
|
|
225
|
+
plug.should_receive(:export_generics)
|
|
226
|
+
end
|
|
227
|
+
assert_equal(@plugin, @exporter.export_generics_xls)
|
|
228
|
+
end
|
|
229
|
+
def test_export_swissdrug_xls
|
|
230
|
+
flexstub(@plugin) do |plug|
|
|
231
|
+
plug.should_receive(:export_xls)
|
|
232
|
+
plug.should_receive(:file_path)
|
|
233
|
+
end
|
|
234
|
+
flexstub(FileUtils).should_receive(:cp)
|
|
235
|
+
flexstub(Exporter::EXPORT_SERVER).should_receive(:compress)
|
|
236
|
+
assert_equal(@plugin, @exporter.export_swissdrug_xls)
|
|
237
|
+
end
|
|
238
|
+
def test_export_index_therapeuticus_csv
|
|
239
|
+
flexstub(@plugin) do |plug|
|
|
240
|
+
plug.should_receive(:export_index_therapeuticus)
|
|
241
|
+
end
|
|
242
|
+
assert_equal('sleep', @exporter.export_index_therapeuticus_csv)
|
|
243
|
+
end
|
|
244
|
+
def test_export_index_therapeuticus_csv__error
|
|
245
|
+
flexstub(@plugin) do |plug|
|
|
246
|
+
plug.should_receive(:export_index_therapeuticus).and_raise(StandardError)
|
|
247
|
+
end
|
|
248
|
+
flexstub(Log) do |logclass|
|
|
249
|
+
# white box test: Log.new is once called because of error
|
|
250
|
+
logclass.should_receive(:new).times(1).and_return(@log)
|
|
251
|
+
end
|
|
252
|
+
assert_equal('sleep', @exporter.export_index_therapeuticus_csv)
|
|
253
|
+
end
|
|
254
|
+
def test_export_migel_csv
|
|
255
|
+
flexstub(@plugin) do |plug|
|
|
256
|
+
plug.should_receive(:export_migel)
|
|
257
|
+
end
|
|
258
|
+
assert_equal('sleep', @exporter.export_migel_csv)
|
|
259
|
+
end
|
|
260
|
+
def test_export_narcotics_csv
|
|
261
|
+
flexstub(@plugin) do |plug|
|
|
262
|
+
plug.should_receive(:export_narcotics)
|
|
263
|
+
end
|
|
264
|
+
assert_equal('sleep', @exporter.export_narcotics_csv)
|
|
265
|
+
end
|
|
266
|
+
def test_export_pdf
|
|
267
|
+
flexstub(@plugin) do |plug|
|
|
268
|
+
plug.should_receive(:run).and_return('run')
|
|
269
|
+
end
|
|
270
|
+
assert_equal('run', @exporter.export_pdf)
|
|
271
|
+
end
|
|
272
|
+
def test_export_sl_pcodes
|
|
273
|
+
flexstub(@app) do |app|
|
|
274
|
+
app.should_receive(:each_package).and_yield(flexmock('pac') do |pac|
|
|
275
|
+
pac.should_receive(:sl_entry).and_return(true)
|
|
276
|
+
pac.should_receive(:pharmacode).and_return('pharmacode')
|
|
277
|
+
end)
|
|
278
|
+
end
|
|
279
|
+
|
|
280
|
+
# test
|
|
281
|
+
expected = 'pharmacode'
|
|
282
|
+
fh = flexmock('file_pointer') do |file_pointer|
|
|
283
|
+
file_pointer.should_receive(:puts).with(expected)
|
|
284
|
+
end
|
|
285
|
+
flexstub(File) do |file|
|
|
286
|
+
file.should_receive(:open).and_yield(fh)
|
|
287
|
+
end
|
|
288
|
+
assert_equal(nil, @exporter.export_sl_pcodes)
|
|
289
|
+
end
|
|
290
|
+
def test_export_sl_pcodes__error
|
|
291
|
+
flexstub(File) do |file|
|
|
292
|
+
file.should_receive(:open).and_raise(StandardError)
|
|
293
|
+
end
|
|
294
|
+
flexstub(Log) do |logclass|
|
|
295
|
+
# white box test: Log.new is once called because of error
|
|
296
|
+
logclass.should_receive(:new).times(1).and_return(@log)
|
|
297
|
+
end
|
|
298
|
+
assert_equal('sleep', @exporter.export_sl_pcodes)
|
|
299
|
+
end
|
|
300
|
+
def test_export_patents_xls
|
|
301
|
+
flexstub(@plugin) do |plug|
|
|
302
|
+
plug.should_receive(:export_patents)
|
|
303
|
+
end
|
|
304
|
+
assert_equal(@plugin, @exporter.export_patents_xls)
|
|
305
|
+
end
|
|
306
|
+
def test_export_yaml__on_monday
|
|
307
|
+
flexstub(@exporter, :today => Date.new(2011,1,3)) # Monday
|
|
308
|
+
# totally white box test
|
|
309
|
+
flexstub(@plugin) do |plug|
|
|
310
|
+
plug.should_receive(:export).once.with_no_args
|
|
311
|
+
plug.should_receive(:export_atc_classes).once.with_no_args
|
|
312
|
+
plug.should_receive(:export_interactions).once.with_no_args
|
|
313
|
+
plug.should_receive(:export_narcotics).once.with_no_args
|
|
314
|
+
plug.should_receive(:export_prices).once.with_no_args
|
|
315
|
+
plug.should_receive(:export_fachinfos).times(0).with_no_args
|
|
316
|
+
plug.should_receive(:export_patinfos).times(0).with_no_args
|
|
317
|
+
plug.should_receive(:export_doctors).times(0).with_no_args
|
|
318
|
+
end
|
|
319
|
+
assert_equal('sleep', @exporter.export_yaml)
|
|
320
|
+
end
|
|
321
|
+
def test_export_yaml__on_tuesday
|
|
322
|
+
flexstub(@exporter, :today => Date.new(2011,1,4)) # Tuesday
|
|
323
|
+
# totally white box test
|
|
324
|
+
flexstub(@plugin) do |plug|
|
|
325
|
+
plug.should_receive(:export).once.with_no_args
|
|
326
|
+
plug.should_receive(:export_atc_classes).once.with_no_args
|
|
327
|
+
plug.should_receive(:export_interactions).once.with_no_args
|
|
328
|
+
plug.should_receive(:export_narcotics).once.with_no_args
|
|
329
|
+
plug.should_receive(:export_prices).once.with_no_args
|
|
330
|
+
plug.should_receive(:export_fachinfos).once.with_no_args
|
|
331
|
+
plug.should_receive(:export_patinfos).times(0).with_no_args
|
|
332
|
+
plug.should_receive(:export_doctors).times(0).with_no_args
|
|
333
|
+
end
|
|
334
|
+
assert_equal('sleep', @exporter.export_yaml)
|
|
335
|
+
end
|
|
336
|
+
def test_export_yaml__on_wednesday
|
|
337
|
+
flexstub(@exporter, :today => Date.new(2011,1,5)) # Wednesday
|
|
338
|
+
# totally white box test
|
|
339
|
+
flexstub(@plugin) do |plug|
|
|
340
|
+
plug.should_receive(:export).once.with_no_args
|
|
341
|
+
plug.should_receive(:export_atc_classes).once.with_no_args
|
|
342
|
+
plug.should_receive(:export_interactions).once.with_no_args
|
|
343
|
+
plug.should_receive(:export_narcotics).once.with_no_args
|
|
344
|
+
plug.should_receive(:export_prices).once.with_no_args
|
|
345
|
+
plug.should_receive(:export_fachinfos).times(0).with_no_args
|
|
346
|
+
plug.should_receive(:export_patinfos).once.with_no_args
|
|
347
|
+
plug.should_receive(:export_doctors).times(0).with_no_args
|
|
348
|
+
end
|
|
349
|
+
assert_equal('sleep', @exporter.export_yaml)
|
|
350
|
+
end
|
|
351
|
+
def test_export_yaml__on_thursday
|
|
352
|
+
flexstub(@exporter, :today => Date.new(2011,1,6)) # Tursday
|
|
353
|
+
# totally white box test
|
|
354
|
+
flexstub(@plugin) do |plug|
|
|
355
|
+
plug.should_receive(:export).once.with_no_args
|
|
356
|
+
plug.should_receive(:export_atc_classes).once.with_no_args
|
|
357
|
+
plug.should_receive(:export_interactions).once.with_no_args
|
|
358
|
+
plug.should_receive(:export_narcotics).once.with_no_args
|
|
359
|
+
plug.should_receive(:export_prices).once.with_no_args
|
|
360
|
+
plug.should_receive(:export_fachinfos).times(0).with_no_args
|
|
361
|
+
plug.should_receive(:export_patinfos).times(0).with_no_args
|
|
362
|
+
plug.should_receive(:export_doctors).once.with_no_args
|
|
363
|
+
end
|
|
364
|
+
assert_equal('sleep', @exporter.export_yaml)
|
|
365
|
+
end
|
|
366
|
+
def test_mail_download_stats
|
|
367
|
+
flexstub(Log) do |logclass|
|
|
368
|
+
# white box test: Log.new is once called in any case
|
|
369
|
+
logclass.should_receive(:new).times(1).and_return(@log)
|
|
370
|
+
end
|
|
371
|
+
flexstub(File).should_receive(:read)
|
|
372
|
+
flexstub(LogFile).should_receive(:filename).times(1).with('download', Date)
|
|
373
|
+
assert_equal(nil, @exporter.mail_download_stats)
|
|
374
|
+
end
|
|
375
|
+
def test_mail_download_invoices
|
|
376
|
+
flexstub(@plugin) do |plug|
|
|
377
|
+
plug.should_receive(:run).and_return('run')
|
|
378
|
+
end
|
|
379
|
+
assert_equal('run', @exporter.mail_download_invoices)
|
|
380
|
+
end
|
|
381
|
+
def test_mail_fachinfo_log__noreport
|
|
382
|
+
flexstub(@plugin) do |plug|
|
|
383
|
+
plug.should_receive(:run)
|
|
384
|
+
plug.should_receive(:report).and_return(nil)
|
|
385
|
+
end
|
|
386
|
+
assert_equal(nil, @exporter.mail_fachinfo_log)
|
|
387
|
+
end
|
|
388
|
+
def test_mail_fachinfo_log__report
|
|
389
|
+
flexstub(@plugin) do |plug|
|
|
390
|
+
plug.should_receive(:run)
|
|
391
|
+
plug.should_receive(:report).and_return('report')
|
|
392
|
+
end
|
|
393
|
+
flexstub(Log) do |logclass|
|
|
394
|
+
# white box test: Log.new is once called if there is a report
|
|
395
|
+
logclass.should_receive(:new).times(1).and_return(@log)
|
|
396
|
+
end
|
|
397
|
+
assert_equal(nil, @exporter.mail_fachinfo_log)
|
|
398
|
+
end
|
|
399
|
+
|
|
400
|
+
def test_mail_feedback_stats
|
|
401
|
+
flexstub(Log) do |logclass|
|
|
402
|
+
# white box test: Log.new is once called in any case
|
|
403
|
+
logclass.should_receive(:new).times(1).and_return(@log)
|
|
404
|
+
end
|
|
405
|
+
flexstub(File).should_receive(:read)
|
|
406
|
+
flexstub(LogFile).should_receive(:filename).times(1).with('feedback', Date)
|
|
407
|
+
assert_equal(nil, @exporter.mail_feedback_stats)
|
|
408
|
+
end
|
|
409
|
+
def test_mail_notification_stats
|
|
410
|
+
flexstub(@app) do |app|
|
|
411
|
+
app.should_receive(:"notification_logger.create_csv").and_return('file')
|
|
412
|
+
end
|
|
413
|
+
flexstub(@log) do |log|
|
|
414
|
+
log.should_receive(:notify_attachment).with('file', Hash).and_return('notify_attachment')
|
|
415
|
+
end
|
|
416
|
+
flexstub(Log) do |logclass|
|
|
417
|
+
# white box test: Log.new is once called
|
|
418
|
+
logclass.should_receive(:new).times(1).and_return(@log)
|
|
419
|
+
end
|
|
420
|
+
assert_equal('notify_attachment', @exporter.mail_notification_stats)
|
|
421
|
+
end
|
|
422
|
+
def test_mail_patinfo_invoice
|
|
423
|
+
flexstub(@plugin) do |plug|
|
|
424
|
+
plug.should_receive(:run).and_return('run')
|
|
425
|
+
end
|
|
426
|
+
assert_equal('run', @exporter.mail_patinfo_invoices)
|
|
427
|
+
end
|
|
428
|
+
def test_export_price_history_csv
|
|
429
|
+
flexstub(@plugin) do |plug|
|
|
430
|
+
plug.should_receive(:export_price_history)
|
|
431
|
+
end
|
|
432
|
+
flexstub(Log) do |logclass|
|
|
433
|
+
# white box test: Log.new is never called
|
|
434
|
+
logclass.should_receive(:new).times(0).and_return(@log)
|
|
435
|
+
end
|
|
436
|
+
assert_equal('sleep', @exporter.export_price_history_csv)
|
|
437
|
+
end
|
|
438
|
+
def test_export_price_history_csv
|
|
439
|
+
flexstub(@plugin) do |plug|
|
|
440
|
+
plug.should_receive(:export_price_history).and_raise(StandardError)
|
|
441
|
+
end
|
|
442
|
+
flexstub(Log) do |logclass|
|
|
443
|
+
# white box test: Log.new is once called if there is an error
|
|
444
|
+
logclass.should_receive(:new).times(1).and_return(@log)
|
|
445
|
+
end
|
|
446
|
+
assert_equal('sleep', @exporter.export_price_history_csv)
|
|
447
|
+
end
|
|
448
|
+
def test_mail_stats__before_8th
|
|
449
|
+
flexstub(@exporter, :today => Date.new(2011,1,5))
|
|
450
|
+
flexstub(Log) do |logclass|
|
|
451
|
+
# white box test: Log.new is once called in any case
|
|
452
|
+
logclass.should_receive(:new).times(1).and_return(@log)
|
|
453
|
+
end
|
|
454
|
+
flexstub(File).should_receive(:read)
|
|
455
|
+
|
|
456
|
+
# test
|
|
457
|
+
expected_date = Date.new(2010,12,5)
|
|
458
|
+
flexstub(LogFile).should_receive(:filename).with('key', expected_date)
|
|
459
|
+
assert_equal(nil, @exporter.mail_stats('key'))
|
|
460
|
+
end
|
|
461
|
+
def test_mail_stats__after_8th
|
|
462
|
+
flexstub(@exporter, :today => Date.new(2011,1,10))
|
|
463
|
+
flexstub(Log) do |logclass|
|
|
464
|
+
# white box test: Log.new is once called in any case
|
|
465
|
+
logclass.should_receive(:new).times(1).and_return(@log)
|
|
466
|
+
end
|
|
467
|
+
flexstub(File).should_receive(:read)
|
|
468
|
+
|
|
469
|
+
# test
|
|
470
|
+
expected_date = Date.new(2011,1,10)
|
|
471
|
+
flexstub(LogFile).should_receive(:filename).with('key', expected_date)
|
|
472
|
+
assert_equal(nil, @exporter.mail_stats('key'))
|
|
473
|
+
end
|
|
474
|
+
def test_mail_swissmedic_notifications
|
|
475
|
+
flexstub(@plugin) do |plug|
|
|
476
|
+
plug.should_receive(:mail_notifications).and_return('mail_notifications')
|
|
477
|
+
end
|
|
478
|
+
assert_equal('mail_notifications', @exporter.mail_swissmedic_notifications)
|
|
479
|
+
end
|
|
480
|
+
def test_safe_export
|
|
481
|
+
flexstub(Log) do |logclass|
|
|
482
|
+
# white box test: Log.new is never called if there is no error
|
|
483
|
+
logclass.should_receive(:new).times(0).and_return(@log)
|
|
484
|
+
end
|
|
485
|
+
@exporter.safe_export('test_safe_export') do
|
|
486
|
+
'no error'
|
|
487
|
+
end
|
|
488
|
+
end
|
|
489
|
+
def test_safe_export__error
|
|
490
|
+
flexstub(Log) do |logclass|
|
|
491
|
+
# white box test: Log.new is never called if there is no error
|
|
492
|
+
logclass.should_receive(:new).times(1).and_return(@log)
|
|
493
|
+
end
|
|
494
|
+
@exporter.safe_export('test_safe_export') do
|
|
495
|
+
raise
|
|
496
|
+
end
|
|
497
|
+
end
|
|
498
|
+
end
|
|
499
|
+
end
|
|
500
|
+
|