oddb2xml 2.2.7 → 2.2.8
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/History.txt +5 -0
- data/lib/oddb2xml/builder.rb +1 -1
- data/lib/oddb2xml/downloader.rb +1 -1
- data/lib/oddb2xml/version.rb +1 -1
- data/oddb2xml.xsd +7 -7
- data/spec/builder_spec.rb +297 -23
- data/spec/calc_spec.rb +62 -20
- data/spec/data/swissmedic_package.xlsx +0 -0
- data/spec/downloader_spec.rb +1 -0
- data/spec/extractor_spec.rb +30 -19
- data/spec/spec_helper.rb +36 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0a750539ac436cafb6b5b818c9767cdce87ba5a4
|
4
|
+
data.tar.gz: 98b62a3bbc44b6b68d69f7b1fb474c66d5627b74
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5325bf91c6a88bc753c4d9611397923bf1e62e1fd2c974e894c939eefd737c88201196ce919d69b35458aa6e281560fc3e9fa1201252c5e383baf3238609098c
|
7
|
+
data.tar.gz: 75990e37f5267bcebf5bf97a347cc6df2d4bc2863ea15b29c1fc5dfc73f5edee1d8d8553527c56e9a0d8f54a2ec53a4850ad8769e1c2b9c6e5fe3927da34f40b
|
data/Gemfile.lock
CHANGED
data/History.txt
CHANGED
data/lib/oddb2xml/builder.rb
CHANGED
@@ -1103,7 +1103,7 @@ module Oddb2xml
|
|
1103
1103
|
Oddb2xml.add_hash(_builder.to_xml)
|
1104
1104
|
end
|
1105
1105
|
def detect_nincd(de_idx)
|
1106
|
-
if @lppvs[de_idx[:ean]] # LPPV
|
1106
|
+
if @lppvs[de_idx[:ean].to_s] # LPPV
|
1107
1107
|
20
|
1108
1108
|
elsif @items[de_idx[:pharmacode]] # BAG-XML (SL/LS)
|
1109
1109
|
10
|
data/lib/oddb2xml/downloader.rb
CHANGED
@@ -183,7 +183,7 @@ module Oddb2xml
|
|
183
183
|
file = File.join(WorkDir, 'XMLPublications.zip')
|
184
184
|
Oddb2xml.log "BagXmlDownloader #{__LINE__}: #{file}"
|
185
185
|
unless Oddb2xml.skip_download(file)
|
186
|
-
Oddb2xml.log "BagXmlDownloader #{__LINE__}: #{file}"
|
186
|
+
Oddb2xml.log "BagXmlDownloader #{__LINE__}: #{file}"
|
187
187
|
begin
|
188
188
|
response = @agent.get(@url)
|
189
189
|
response.save_as(file)
|
data/lib/oddb2xml/version.rb
CHANGED
data/oddb2xml.xsd
CHANGED
@@ -184,12 +184,12 @@
|
|
184
184
|
<xs:element name="LIMPTS">
|
185
185
|
<xs:simpleType>
|
186
186
|
<xs:restriction base="xs:byte">
|
187
|
+
<xs:enumeration value="10" />
|
187
188
|
<xs:enumeration value="20" />
|
188
189
|
<xs:enumeration value="30" />
|
189
|
-
<xs:enumeration value="60" />
|
190
|
-
<xs:enumeration value="10" />
|
191
190
|
<xs:enumeration value="40" />
|
192
191
|
<xs:enumeration value="50" />
|
192
|
+
<xs:enumeration value="60" />
|
193
193
|
<xs:enumeration value="80" />
|
194
194
|
<xs:enumeration value="100" />
|
195
195
|
</xs:restriction>
|
@@ -1084,12 +1084,12 @@
|
|
1084
1084
|
<xs:element name="CDVALMD">
|
1085
1085
|
<xs:simpleType>
|
1086
1086
|
<xs:restriction base="xs:string">
|
1087
|
-
<xs:enumeration value="X" />
|
1088
|
-
<xs:enumeration value="E" />
|
1089
|
-
<xs:enumeration value="D" />
|
1090
|
-
<xs:enumeration value="C" />
|
1091
|
-
<xs:enumeration value="B" />
|
1092
1087
|
<xs:enumeration value="A" />
|
1088
|
+
<xs:enumeration value="B" />
|
1089
|
+
<xs:enumeration value="C" />
|
1090
|
+
<xs:enumeration value="D" />
|
1091
|
+
<xs:enumeration value="E" />
|
1092
|
+
<xs:enumeration value="X" />
|
1093
1093
|
</xs:restriction>
|
1094
1094
|
</xs:simpleType>
|
1095
1095
|
</xs:element>
|
data/spec/builder_spec.rb
CHANGED
@@ -3,7 +3,232 @@
|
|
3
3
|
require 'spec_helper'
|
4
4
|
require "rexml/document"
|
5
5
|
include REXML
|
6
|
-
RUN_ALL =
|
6
|
+
RUN_ALL = true
|
7
|
+
|
8
|
+
# TODO: Add articles which contain these values
|
9
|
+
# not done, because it was easy to verify this by running on the command line grep 'LIMPTS' oddb_article.xml | sort | uniq
|
10
|
+
ARTICLE_ATTRIBUTE_TESTS = [
|
11
|
+
['ARTICLE', 'CREATION_DATETIME', Oddb2xml::DATE_REGEXP],
|
12
|
+
['ARTICLE', 'PROD_DATE', Oddb2xml::DATE_REGEXP],
|
13
|
+
['ARTICLE', 'VALID_DATE', Oddb2xml::DATE_REGEXP],
|
14
|
+
['ARTICLE/ART', 'SHA256', /[a-f0-9]{32}/],
|
15
|
+
['ARTICLE/ART', 'DT', /\d{4}-\d{2}-\d{2}/],
|
16
|
+
]
|
17
|
+
|
18
|
+
ARTICLE_MISSING_ELEMENTS = [
|
19
|
+
['ARTICLE/ART/LIMPTS', '10'],
|
20
|
+
['ARTICLE/ART/LIMPTS', '30'],
|
21
|
+
['ARTICLE/ART/LIMPTS', '40'],
|
22
|
+
['ARTICLE/ART/LIMPTS', '50'],
|
23
|
+
['ARTICLE/ART/LIMPTS', '60'],
|
24
|
+
['ARTICLE/ART/LIMPTS', '80'],
|
25
|
+
['ARTICLE/ART/LIMPTS', '100'],
|
26
|
+
['ARTICLE/ART/SLOPLUS', '1'],
|
27
|
+
]
|
28
|
+
|
29
|
+
ARTICLE_ZURROSE_ELEMENTS = [
|
30
|
+
['ARTICLE/ART/REF_DATA', '0'],
|
31
|
+
['ARTICLE/ART/ARTCOMP/COMPNO', '7601001000858'],
|
32
|
+
['ARTICLE/ART/ARTPRI/VDAT', Date.today.strftime('%d.%m.%Y')], # TODO:
|
33
|
+
['ARTICLE/ART/ARTPRI/PTYP', 'PEXF'],
|
34
|
+
['ARTICLE/ART/ARTPRI/PTYP', 'PPUB'],
|
35
|
+
['ARTICLE/ART/ARTPRI/PTYP', 'ZURROSE'],
|
36
|
+
['ARTICLE/ART/ARTPRI/PTYP', 'ZURROSEPUB'],
|
37
|
+
['ARTICLE/ART/ARTINS/NINCD', '13'],
|
38
|
+
['ARTICLE/ART/ARTINS/NINCD', '20'],
|
39
|
+
]
|
40
|
+
|
41
|
+
ARTICLE_COMMON_ELEMENTS = [
|
42
|
+
['ARTICLE/ART/REF_DATA', '1'],
|
43
|
+
['ARTICLE/ART/SMCAT', 'A'],
|
44
|
+
['ARTICLE/ART/SMCAT', 'B'],
|
45
|
+
['ARTICLE/ART/SMCAT', 'C'],
|
46
|
+
['ARTICLE/ART/SMCAT', 'D'],
|
47
|
+
['ARTICLE/ART/GEN_PRODUCTION', 'X'],
|
48
|
+
['ARTICLE/ART/DRUG_INDEX', 'd'],
|
49
|
+
['ARTICLE/ART/INSULIN_CATEGORY', 'Insulinanalog: schnell wirkend'],
|
50
|
+
['ARTICLE/ART/SMNO', '16105058'],
|
51
|
+
['ARTICLE/ART/PRODNO', '161051'],
|
52
|
+
['ARTICLE/ART/VAT', '2'],
|
53
|
+
['ARTICLE/ART/SALECD', 'A'],
|
54
|
+
['ARTICLE/ART/SALECD', 'I'],
|
55
|
+
['ARTICLE/ART/COOL', '1'],
|
56
|
+
['ARTICLE/ART/LIMPTS', '20'],
|
57
|
+
['ARTICLE/ART/CDBG', 'Y'],
|
58
|
+
['ARTICLE/ART/CDBG', 'N'],
|
59
|
+
['ARTICLE/ART/BG', 'Y'],
|
60
|
+
['ARTICLE/ART/BG', 'N'],
|
61
|
+
['ARTICLE/ART/ARTBAR/BC', Oddb2xml::ORPHAN_GTIN.to_s],
|
62
|
+
['ARTICLE/ART/ARTBAR/BC', Oddb2xml::FRIDGE_GTIN.to_s],
|
63
|
+
['ARTICLE/ART/DSCRD', 'NAROPIN Inj Lös 0.2 % 5 Polybag 100 ml'],
|
64
|
+
['ARTICLE/ART/DSCRF', 'NAROPIN sol inj 0.2 % 5 polybag 100 ml"'],
|
65
|
+
['ARTICLE/ART/SORTD', 'NAROPIN INJ LöS 0.2 % 5 POLYBAG 100 ML'],
|
66
|
+
['ARTICLE/ART/SORTF', 'NAROPIN SOL INJ 0.2 % 5 POLYBAG 100 ML'],
|
67
|
+
['ARTICLE/ART/SYN1D', 'Hirudoid'],
|
68
|
+
['ARTICLE/ART/SYN1F', 'Hirudoid'],
|
69
|
+
['ARTICLE/ART/SLOPLUS', '2'],
|
70
|
+
['ARTICLE/ART/ARTINS/NINCD', '10'],
|
71
|
+
]
|
72
|
+
|
73
|
+
CODE_ATTRIBUTE_TESTS = [
|
74
|
+
['CODE', 'CREATION_DATETIME', Oddb2xml::DATE_REGEXP],
|
75
|
+
['CODE', 'PROD_DATE', Oddb2xml::DATE_REGEXP],
|
76
|
+
['CODE', 'VALID_DATE', Oddb2xml::DATE_REGEXP],
|
77
|
+
['CODE/CD', 'DT', ''],
|
78
|
+
]
|
79
|
+
|
80
|
+
CODE_MISSING_ELEMENT_TESTS = [
|
81
|
+
]
|
82
|
+
|
83
|
+
CODE_ELEMENT_TESTS = [
|
84
|
+
['CODE/CD/CDTYP', '11'],
|
85
|
+
['CODE/CD/CDTYP', '12'],
|
86
|
+
['CODE/CD/CDTYP', '13'],
|
87
|
+
['CODE/CD/CDTYP', '14'],
|
88
|
+
['CODE/CD/CDTYP', '15'],
|
89
|
+
['CODE/CD/CDTYP', '16'],
|
90
|
+
['CODE/CD/CDVAL', 'A'],
|
91
|
+
['CODE/CD/CDVAL', 'B'],
|
92
|
+
['CODE/CD/CDVAL', 'C'],
|
93
|
+
['CODE/CD/CDVAL', 'D'],
|
94
|
+
['CODE/CD/CDVAL', 'E'],
|
95
|
+
['CODE/CD/CDVAL', 'X'],
|
96
|
+
['CODE/CD/DSCRSD', 'Kontraindiziert'],
|
97
|
+
['CODE/CD/DSCRSD', 'Kombination meiden'],
|
98
|
+
['CODE/CD/DSCRSD', 'Monitorisieren'],
|
99
|
+
['CODE/CD/DSCRSD', 'Vorsichtsmassnahmen'],
|
100
|
+
['CODE/CD/DSCRSD', 'keine Massnahmen'],
|
101
|
+
['CODE/CD/DEL', 'false'],
|
102
|
+
]
|
103
|
+
|
104
|
+
INTERACTION_ATTRIBUTE_TESTS = [
|
105
|
+
['INTERACTION', 'CREATION_DATETIME', Oddb2xml::DATE_REGEXP],
|
106
|
+
['INTERACTION', 'PROD_DATE', Oddb2xml::DATE_REGEXP],
|
107
|
+
['INTERACTION', 'VALID_DATE', Oddb2xml::DATE_REGEXP],
|
108
|
+
['INTERACTION/IX', 'SHA256', /[a-f0-9]{32}/],
|
109
|
+
['INTERACTION/IX', 'DT', ''],
|
110
|
+
]
|
111
|
+
|
112
|
+
INTERACTION_MISSING_ELEMENT_TESTS = [
|
113
|
+
['INTERACTION/IX/EFFD', 'Kombination meiden'],
|
114
|
+
['INTERACTION/IX/EFFD', 'Kontraindiziert'],
|
115
|
+
['INTERACTION/IX/EFFD', 'Monitorisieren'],
|
116
|
+
['INTERACTION/IX/EFFD', 'Vorsichtsmassnahmen'],
|
117
|
+
['INTERACTION/IX/DEL', 'true'], # Never found???
|
118
|
+
]
|
119
|
+
|
120
|
+
INTERACTION_ELEMENT_TESTS = [
|
121
|
+
['INTERACTION/IX/IXNO', '2'],
|
122
|
+
['INTERACTION/IX/TITD', 'Keine Interaktion'],
|
123
|
+
['INTERACTION/IX/GRP1D', 'N06AB06'],
|
124
|
+
['INTERACTION/IX/GRP2D', 'M03BX02'],
|
125
|
+
['INTERACTION/IX/EFFD', 'Keine Interaktion.'],
|
126
|
+
['INTERACTION/IX/MECHD', /Tizanidin wird über CYP1A2 metabolisiert/],
|
127
|
+
['INTERACTION/IX/MEASD', /Die Kombination aus Sertralin und Tizanidin/],
|
128
|
+
['INTERACTION/IX/DEL', 'false'],
|
129
|
+
]
|
130
|
+
|
131
|
+
LIMITATION_ATTRIBUTE_TESTS = [
|
132
|
+
['LIMITATION', 'CREATION_DATETIME', Oddb2xml::DATE_REGEXP],
|
133
|
+
['LIMITATION', 'PROD_DATE', Oddb2xml::DATE_REGEXP],
|
134
|
+
['LIMITATION', 'VALID_DATE', Oddb2xml::DATE_REGEXP],
|
135
|
+
['LIMITATION/LIM', 'SHA256', /[a-f0-9]{32}/],
|
136
|
+
['LIMITATION/LIM', 'DT', ''],
|
137
|
+
]
|
138
|
+
|
139
|
+
# Found by grep LIMTYP oddb_limitation.xml | sort | uniq
|
140
|
+
LIMITATION_MISSING_ELEMENT_TESTS = [
|
141
|
+
['LIMITATION/LIM/SwissmedicNo8', '62089002'],
|
142
|
+
['LIMITATION/LIM/Pharmacode', '0'],
|
143
|
+
['LIMITATION/LIM/LIMTYP', 'AUD'],
|
144
|
+
['LIMITATION/LIM/LIMTYP', 'KOM'],
|
145
|
+
['LIMITATION/LIM/LIMTYP', 'ZEI'],
|
146
|
+
]
|
147
|
+
|
148
|
+
LIMITATION_ELEMENT_TESTS = [
|
149
|
+
['LIMITATION/LIM/LIMVAL', '10'],
|
150
|
+
['LIMITATION/LIM/LIMVAL', '20'],
|
151
|
+
['LIMITATION/LIM/LIMVAL', '30'],
|
152
|
+
['LIMITATION/LIM/LIMVAL', '40'],
|
153
|
+
['LIMITATION/LIM/LIMVAL', '50'],
|
154
|
+
['LIMITATION/LIM/LIMVAL', '60'],
|
155
|
+
['LIMITATION/LIM/LIMVAL', '80'],
|
156
|
+
['LIMITATION/LIM/LIMVAL', '100'],
|
157
|
+
['LIMITATION/LIM/IT', '07.02.40.'],
|
158
|
+
['LIMITATION/LIM/LIMTYP', 'DIA'],
|
159
|
+
['LIMITATION/LIM/LIMTYP', 'PKT'],
|
160
|
+
['LIMITATION/LIM/LIMNAMEBAG', '070240'],
|
161
|
+
['LIMITATION/LIM/LIMNIV', 'IP'],
|
162
|
+
['LIMITATION/LIM/VDAT', /\d{2}\.\d{2}\.\d{4}/],
|
163
|
+
['LIMITATION/LIM/DSCRD', /Therapiedauer/],
|
164
|
+
['LIMITATION/LIM/DSCRF', /Traitement de la pneumonie/],
|
165
|
+
['LIMITATION/LIM/SwissmedicNo5', '28486'],
|
166
|
+
]
|
167
|
+
|
168
|
+
SUBSTANCE_ATTRIBUTE_TESTS = [
|
169
|
+
['SUBSTANCE', 'CREATION_DATETIME', Oddb2xml::DATE_REGEXP],
|
170
|
+
['SUBSTANCE', 'PROD_DATE', Oddb2xml::DATE_REGEXP],
|
171
|
+
['SUBSTANCE', 'VALID_DATE', Oddb2xml::DATE_REGEXP],
|
172
|
+
['SUBSTANCE/SB', 'SHA256', /[a-f0-9]{32}/],
|
173
|
+
['SUBSTANCE/SB', 'DT', ''],
|
174
|
+
]
|
175
|
+
|
176
|
+
SUBSTANCE_MISSING_ELEMENT_TESTS = [
|
177
|
+
]
|
178
|
+
|
179
|
+
SUBSTANCE_ELEMENT_TESTS = [
|
180
|
+
['SUBSTANCE/SB/SUBNO', '1'],
|
181
|
+
['SUBSTANCE/SB/NAML', 'Linezolidum'],
|
182
|
+
]
|
183
|
+
|
184
|
+
# Betriebe and Medizinalpersonen don't work at the moment
|
185
|
+
BETRIEB_ATTRIBUTE_TESTS = [
|
186
|
+
['Betriebe', 'CREATION_DATETIME', Oddb2xml::DATE_REGEXP],
|
187
|
+
['Betriebe', 'PROD_DATE', Oddb2xml::DATE_REGEXP],
|
188
|
+
['Betriebe', 'VALID_DATE', Oddb2xml::DATE_REGEXP],
|
189
|
+
['Betriebe/Betrieb', 'DT', ''],
|
190
|
+
]
|
191
|
+
|
192
|
+
BETRIEB_MISSING_ELEMENT_TESTS = [
|
193
|
+
]
|
194
|
+
|
195
|
+
BETRIEB_ELEMENT_TESTS = [
|
196
|
+
['Betriebe/Betrieb/GLN_Betrieb', '974633'],
|
197
|
+
['Betriebe/Betrieb/Betriebsname_1', 'Betriebsname_1'],
|
198
|
+
['Betriebe/Betrieb/Betriebsname_2', 'Betriebsname_2'],
|
199
|
+
['Betriebe/Betrieb/Strasse', 'Strasse'],
|
200
|
+
['Betriebe/Betrieb/Nummer', 'Nummer'],
|
201
|
+
['Betriebe/Betrieb/PLZ', 'PLZ'],
|
202
|
+
['Betriebe/Betrieb/Ort', 'Ort'],
|
203
|
+
['Betriebe/Betrieb/Bewilligungskanton', 'Bewilligungskanton'],
|
204
|
+
['Betriebe/Betrieb/Land', 'Land'],
|
205
|
+
['Betriebe/Betrieb/Betriebstyp', 'Betriebstyp'],
|
206
|
+
['Betriebe/Betrieb/BTM_Berechtigung', 'BTM_Berechtigung'],
|
207
|
+
]
|
208
|
+
|
209
|
+
MEDIZINALPERSON_ATTRIBUTE_TESTS = [
|
210
|
+
['Personen', 'CREATION_DATETIME', Oddb2xml::DATE_REGEXP],
|
211
|
+
['Personen', 'PROD_DATE', Oddb2xml::DATE_REGEXP],
|
212
|
+
['Personen', 'VALID_DATE', Oddb2xml::DATE_REGEXP],
|
213
|
+
['Personen/Person', 'DT', ''],
|
214
|
+
]
|
215
|
+
|
216
|
+
MEDIZINALPERSON_MISSING_ELEMENT_TESTS = [
|
217
|
+
]
|
218
|
+
|
219
|
+
MEDIZINALPERSON_ELEMENT_TESTS = [
|
220
|
+
['Personen/Person/GLN_Person', '56459'],
|
221
|
+
['Personen/Person/Name', 'Name'],
|
222
|
+
['Personen/Person/Vorname', 'Vorname'],
|
223
|
+
['Personen/Person/PLZ', 'PLZ'],
|
224
|
+
['Personen/Person/Ort', 'Ort'],
|
225
|
+
['Personen/Person/Bewilligungskanton', 'Bewilligungskanton'],
|
226
|
+
['Personen/Person/Land', 'Land'],
|
227
|
+
['Personen/Person/Bewilligung_Selbstdispensation', 'Bewilligung_Selbstdispensation'],
|
228
|
+
['Personen/Person/Diplom', 'Diplom'],
|
229
|
+
['Personen/Person/BTM_Berechtigung', 'BTM_Berechtigung'],
|
230
|
+
]
|
231
|
+
|
7
232
|
def checkItemForRefdata(doc, pharmacode, isRefdata)
|
8
233
|
article = XPath.match( doc, "//ART[PHAR=#{pharmacode.to_s}]").first
|
9
234
|
name = article.elements['DSCRD'].text
|
@@ -14,6 +239,14 @@ def checkItemForRefdata(doc, pharmacode, isRefdata)
|
|
14
239
|
article
|
15
240
|
end
|
16
241
|
|
242
|
+
['article', 'betrieb', 'code', 'interaction', 'limitation', 'medizinalperson', 'product', 'substance'].each do |cat|
|
243
|
+
eval "
|
244
|
+
def oddb_#{cat}_xml
|
245
|
+
File.expand_path(File.join(Oddb2xml::WorkDir, 'oddb_#{cat}.xml'))
|
246
|
+
end
|
247
|
+
"
|
248
|
+
end
|
249
|
+
|
17
250
|
def check_article_IGM_format(line, price_kendural=825, add_80_percents=false)
|
18
251
|
typ = line[0..1]
|
19
252
|
name = line[10..59]
|
@@ -154,7 +387,7 @@ def checkArticleXml(checkERYTHROCIN = true)
|
|
154
387
|
|
155
388
|
erythrocin_gtin = '7680202580475' # picked up from zur rose
|
156
389
|
erythrocin = checkAndGetArticleWithGTIN(doc, erythrocin_gtin)
|
157
|
-
expect(erythrocin.elements['DSCRD'].text).to eq("ERYTHROCIN i.v. Trockensub 1000 mg Amp") if checkERYTHROCIN
|
390
|
+
expect(erythrocin.elements['DSCRD'].text).to eq("ERYTHROCIN i.v. Trockensub 1000 mg Amp [!]") if checkERYTHROCIN
|
158
391
|
|
159
392
|
lansoyl = checkAndGetArticleWithGTIN(doc, Oddb2xml::LANSOYL_GTIN)
|
160
393
|
expect(lansoyl.elements['DSCRD'].text).to eq 'LANSOYL Gel 225 g'
|
@@ -210,8 +443,8 @@ def checkProductXml
|
|
210
443
|
end
|
211
444
|
|
212
445
|
describe Oddb2xml::Builder do
|
213
|
-
NrExtendedArticles =
|
214
|
-
NrSubstances =
|
446
|
+
NrExtendedArticles = 90
|
447
|
+
NrSubstances = 14
|
215
448
|
NrProdno = 23
|
216
449
|
NrPackages = 24
|
217
450
|
RegExpDesitin = /1125819012LEVETIRACETAM DESITIN Mini Filmtab 250 mg 30 Stk/
|
@@ -232,13 +465,12 @@ describe Oddb2xml::Builder do
|
|
232
465
|
options = Oddb2xml::Options.new
|
233
466
|
# @res = buildr_capture(:stdout){ Oddb2xml::Cli.new(options.opts).run }
|
234
467
|
Oddb2xml::Cli.new(options.opts).run # to debug
|
235
|
-
@
|
236
|
-
@
|
237
|
-
@rexml = REXML::Document.new File.read(@article_xml)
|
468
|
+
@doc = Nokogiri::XML(File.open(oddb_article_xml))
|
469
|
+
@rexml = REXML::Document.new File.read(oddb_article_xml)
|
238
470
|
end
|
239
471
|
|
240
472
|
it 'should return produce a oddb_article.xml' do
|
241
|
-
expect(File.exists?(
|
473
|
+
expect(File.exists?(oddb_article_xml)).to eq true
|
242
474
|
end
|
243
475
|
|
244
476
|
it 'oddb_article.xml should contain a SHA256' do
|
@@ -247,7 +479,7 @@ describe Oddb2xml::Builder do
|
|
247
479
|
end
|
248
480
|
|
249
481
|
it 'should be possible to verify the oddb_article.xml' do
|
250
|
-
result = Oddb2xml.verify_sha256(
|
482
|
+
result = Oddb2xml.verify_sha256(oddb_article_xml)
|
251
483
|
expect(result)
|
252
484
|
end
|
253
485
|
|
@@ -255,6 +487,23 @@ describe Oddb2xml::Builder do
|
|
255
487
|
check_validation_via_xsd
|
256
488
|
end
|
257
489
|
|
490
|
+
context 'XSD article' do
|
491
|
+
check_attributes(oddb_article_xml, ARTICLE_ATTRIBUTE_TESTS)
|
492
|
+
check_elements(oddb_article_xml, ARTICLE_COMMON_ELEMENTS)
|
493
|
+
end
|
494
|
+
|
495
|
+
context 'XSD betrieb' do
|
496
|
+
skip 'At the moment downloading and extractiong the medreg is broken!'
|
497
|
+
# check_attributes(oddb_betrieb_xml, BETRIEB_ATTRIBUTE_TESTS)
|
498
|
+
# check_elements(oddb_betrieb_xml, BETRIEB_COMMON_ELEMENTS)
|
499
|
+
end
|
500
|
+
|
501
|
+
context 'XSD medizinalperson' do
|
502
|
+
skip 'At the moment downloading and extractiong the medreg is broken!'
|
503
|
+
# check_attributes(oddb_medizinalperson_xml, MEDIZINAPERSON_ATTRIBUTE_TESTS)
|
504
|
+
# check_elements(oddb_medizinalperson_xml, MEDIZINAPERSON_COMMON_ELEMENTS)
|
505
|
+
end
|
506
|
+
|
258
507
|
it 'should have a correct insulin (gentechnik) for 7680532900196' do
|
259
508
|
expect(XPath.match( @rexml, "//ART/[BC='7680532900196']").size).to eq 1
|
260
509
|
expect(XPath.match( @rexml, "//ART//GEN_PRODUCTION").size).to eq 2
|
@@ -317,7 +566,7 @@ if RUN_ALL
|
|
317
566
|
end
|
318
567
|
|
319
568
|
it 'should generate a valid oddb_product.xml' do
|
320
|
-
expect(@res).to match(/products/)
|
569
|
+
expect(@res).to match(/products/) if @res
|
321
570
|
checkProductXml
|
322
571
|
end
|
323
572
|
end
|
@@ -384,6 +633,12 @@ if RUN_ALL
|
|
384
633
|
checkArticleXml
|
385
634
|
end
|
386
635
|
|
636
|
+
context 'XSD' do
|
637
|
+
check_attributes(oddb_article_xml, ARTICLE_ATTRIBUTE_TESTS)
|
638
|
+
check_elements(oddb_article_xml, ARTICLE_COMMON_ELEMENTS)
|
639
|
+
check_elements(oddb_article_xml, ARTICLE_ZURROSE_ELEMENTS)
|
640
|
+
end
|
641
|
+
|
387
642
|
it 'should emit a correct oddb_article.xml' do
|
388
643
|
checkArticleXml(false)
|
389
644
|
end
|
@@ -413,6 +668,26 @@ if RUN_ALL
|
|
413
668
|
end
|
414
669
|
end
|
415
670
|
|
671
|
+
context 'XSD limitation' do
|
672
|
+
check_attributes(oddb_limitation_xml, LIMITATION_ATTRIBUTE_TESTS)
|
673
|
+
check_elements(oddb_limitation_xml, LIMITATION_ELEMENT_TESTS)
|
674
|
+
end
|
675
|
+
|
676
|
+
context 'XSD code' do
|
677
|
+
check_attributes(oddb_code_xml, CODE_ATTRIBUTE_TESTS)
|
678
|
+
check_elements(oddb_code_xml, CODE_ELEMENT_TESTS)
|
679
|
+
end
|
680
|
+
|
681
|
+
context 'XSD interaction' do
|
682
|
+
check_attributes(oddb_interaction_xml, INTERACTION_ATTRIBUTE_TESTS)
|
683
|
+
check_elements(oddb_interaction_xml, INTERACTION_ELEMENT_TESTS)
|
684
|
+
end
|
685
|
+
|
686
|
+
context 'XSD substance' do
|
687
|
+
check_attributes(oddb_substance_xml, SUBSTANCE_ATTRIBUTE_TESTS)
|
688
|
+
check_elements(oddb_substance_xml, SUBSTANCE_ELEMENT_TESTS)
|
689
|
+
end
|
690
|
+
|
416
691
|
it 'should emit a correct oddb_article.xml' do
|
417
692
|
checkArticleXml
|
418
693
|
end
|
@@ -431,8 +706,8 @@ if RUN_ALL
|
|
431
706
|
end
|
432
707
|
|
433
708
|
it 'should generate the flag ORPH for orphan' do
|
434
|
-
doc = REXML::Document.new File.new(
|
435
|
-
orphan =
|
709
|
+
doc = REXML::Document.new File.new(oddb_product_xml)
|
710
|
+
orphan = checkAndGetProductWithGTIN(doc, Oddb2xml::ORPHAN_GTIN)
|
436
711
|
expect(orphan).not_to eq nil
|
437
712
|
expect(orphan.elements['ORPH'].text).to eq("true")
|
438
713
|
end
|
@@ -526,11 +801,10 @@ if RUN_ALL
|
|
526
801
|
end
|
527
802
|
|
528
803
|
it 'should generate the flag SALECD' do
|
529
|
-
|
530
|
-
|
531
|
-
|
532
|
-
|
533
|
-
doc = REXML::Document.new File.new(@article_xml)
|
804
|
+
expect(File.exists?(oddb_article_xml)).to eq true
|
805
|
+
FileUtils.cp(oddb_article_xml, File.join(Oddb2xml::WorkDir, 'tst-SALECD.xml'))
|
806
|
+
article_xml = IO.read(oddb_article_xml)
|
807
|
+
doc = REXML::Document.new File.new(oddb_article_xml)
|
534
808
|
expect(XPath.match( doc, "//REF_DATA" ).size).to be > 0
|
535
809
|
checkItemForSALECD(doc, Oddb2xml::FERRO_GRADUMET_GTIN, 'A') # FERRO-GRADUMET Depottabl 30 Stk
|
536
810
|
checkItemForSALECD(doc, Oddb2xml::SOFRADEX_GTIN, 'I') # SOFRADEX
|
@@ -546,9 +820,8 @@ if RUN_ALL
|
|
546
820
|
end
|
547
821
|
|
548
822
|
it 'should add 80 percent to zur_rose pubbprice' do
|
549
|
-
|
550
|
-
|
551
|
-
FileUtils.cp(@article_xml, File.join(Oddb2xml::WorkDir, 'tst-e80.xml'))
|
823
|
+
expect(File.exists?(oddb_article_xml)).to eq true
|
824
|
+
FileUtils.cp(oddb_article_xml, File.join(Oddb2xml::WorkDir, 'tst-e80.xml'))
|
552
825
|
checkProductXml
|
553
826
|
checkArticleXml
|
554
827
|
checkPrices(true)
|
@@ -558,9 +831,10 @@ if RUN_ALL
|
|
558
831
|
checkProductXml
|
559
832
|
end
|
560
833
|
|
561
|
-
it 'should generate
|
562
|
-
|
563
|
-
|
834
|
+
it 'should generate an article with the COOL (fridge) attribute' do
|
835
|
+
doc = REXML::Document.new File.new(oddb_article_xml)
|
836
|
+
fridge_product = checkAndGetArticleWithGTIN(doc, Oddb2xml::FRIDGE_GTIN)
|
837
|
+
fridge_product.elements['COOL'].text.should == '1'
|
564
838
|
end
|
565
839
|
|
566
840
|
it 'should generate a correct oddb_article.xml' do
|
data/spec/calc_spec.rb
CHANGED
@@ -611,6 +611,7 @@ Die HILFSSTOFFE sind Aqua ad iniectabilia und Natrii chloridum.
|
|
611
611
|
end
|
612
612
|
|
613
613
|
describe Oddb2xml::Calc do
|
614
|
+
@@oddb_calc_xml = File.join(Oddb2xml::WorkDir, 'oddb_calc.xml')
|
614
615
|
|
615
616
|
before(:all) do
|
616
617
|
@savedDir = Dir.pwd
|
@@ -621,22 +622,78 @@ describe Oddb2xml::Calc do
|
|
621
622
|
@run_time_options = '--calc --skip-download'
|
622
623
|
@options = Oddb2xml::Options.new
|
623
624
|
@options.parser.parse!(@run_time_options.split(' '))
|
624
|
-
@oddb_calc_xml = File.join(Oddb2xml::WorkDir, 'oddb_calc.xml')
|
625
625
|
@res = buildr_capture(:stdout){ Oddb2xml::Cli.new(@options.opts).run }
|
626
|
-
expect(File.exists?(
|
627
|
-
@doc = REXML::Document.new File.read(
|
626
|
+
expect(File.exists?(@@oddb_calc_xml)).to eq true
|
627
|
+
@doc = REXML::Document.new File.read(@@oddb_calc_xml)
|
628
|
+
@nokogiri = Nokogiri::XML(File.read(@@oddb_calc_xml))
|
628
629
|
end
|
629
630
|
|
630
631
|
after(:all) do
|
631
632
|
Dir.chdir @savedDir if @savedDir and File.directory?(@savedDir)
|
632
633
|
end
|
633
634
|
|
635
|
+
context "Verify elements from XSD" do
|
636
|
+
attribute_tests = [
|
637
|
+
['ARTICLES', 'CREATION_DATETIME', Oddb2xml::DATE_REGEXP],
|
638
|
+
['ARTICLES', 'PROD_DATE', Oddb2xml::DATE_REGEXP],
|
639
|
+
['ARTICLES', 'VALID_DATE', Oddb2xml::DATE_REGEXP],
|
640
|
+
['ARTICLES/ARTICLE', 'SHA256', /[a-f0-9]{32}/],
|
641
|
+
]
|
642
|
+
|
643
|
+
check_attributes(@@oddb_calc_xml, attribute_tests)
|
644
|
+
|
645
|
+
element_tests = [
|
646
|
+
['ARTICLES/ARTICLE/COMPOSITIONS/COMPOSITION/EXCIPIENS', /.*pro Vitro.*/],
|
647
|
+
['ARTICLES/ARTICLE/COMPOSITIONS/COMPOSITION/EXCIPIENS', /.Excipiens ad solutionem.*/],
|
648
|
+
['ARTICLES/ARTICLE/COMPOSITIONS/COMPOSITION/LABEL', 'I'],
|
649
|
+
['ARTICLES/ARTICLE/COMPOSITIONS/COMPOSITION/LABEL', 'Solvens'],
|
650
|
+
['ARTICLES/ARTICLE/COMPOSITIONS/COMPOSITION/LABEL_DESCRIPTION', 'Aminosäurenlösung'],
|
651
|
+
['ARTICLES/ARTICLE/COMPOSITIONS/COMPOSITION/LABEL_DESCRIPTION', 'Fettemulsion'],
|
652
|
+
# ['ARTICLES/ARTICLE/COMPOSITIONS/COMPOSITION/SUBSTANCES/SUBSTANCE/DOSE_TEXT', 'mg'],
|
653
|
+
['ARTICLES/ARTICLE/COMPOSITIONS/COMPOSITION/SUBSTANCES/SUBSTANCE/SALTS/SALT/SUBSTANCE_NAME', 'Ceftriaxonum Natricum'],
|
654
|
+
['ARTICLES/ARTICLE/COMPOSITIONS/COMPOSITION/CORRESP', /4240 kJ pro 1 l/],
|
655
|
+
['ARTICLES/ARTICLE/COMPOSITIONS/COMPOSITION/CORRESP', /I\) et II\) et III\) corresp.*/],
|
656
|
+
['ARTICLES/ARTICLE/COMPOSITIONS/COMPOSITION/SUBSTANCES/SUBSTANCE/CHEMICAL_SUBSTANCE/DOSE_TEXT', '10-50 mg'],
|
657
|
+
['ARTICLES/ARTICLE/COMPOSITIONS/COMPOSITION/SUBSTANCES/SUBSTANCE/CHEMICAL_SUBSTANCE/MORE_INFO', 'ratio: 1:2-2.8'],
|
658
|
+
['ARTICLES/ARTICLE/COMPOSITIONS/COMPOSITION/SUBSTANCES/SUBSTANCE/CHEMICAL_SUBSTANCE/SUBSTANCE_NAME', 'Levomenolum'],
|
659
|
+
['ARTICLES/ARTICLE/COMPOSITIONS/COMPOSITION/SUBSTANCES/SUBSTANCE/IS_ACTIVE_AGENT', 'false'],
|
660
|
+
['ARTICLES/ARTICLE/COMPOSITIONS/COMPOSITION/SUBSTANCES/SUBSTANCE/IS_ACTIVE_AGENT', 'true'],
|
661
|
+
['ARTICLES/ARTICLE/COMPOSITIONS/COMPOSITION/SUBSTANCES/SUBSTANCE/MORE_INFO', 'conserv.'],
|
662
|
+
['ARTICLES/ARTICLE/COMPOSITIONS/COMPOSITION/SUBSTANCES/SUBSTANCE/MORE_INFO', 'antiox.'],
|
663
|
+
['ARTICLES/ARTICLE/COMPOSITIONS/COMPOSITION/SUBSTANCES/SUBSTANCE/MORE_INFO', 'Praeparatio sicca'],
|
664
|
+
['ARTICLES/ARTICLE/COMPOSITIONS/COMPOSITION/SUBSTANCES/SUBSTANCE/QTY', '100'],
|
665
|
+
['ARTICLES/ARTICLE/COMPOSITIONS/COMPOSITION/SUBSTANCES/SUBSTANCE/QTY', /4\.08/],
|
666
|
+
['ARTICLES/ARTICLE/COMPOSITIONS/COMPOSITION/SUBSTANCES/SUBSTANCE/SUBSTANCE_NAME', 'E 124'],
|
667
|
+
['ARTICLES/ARTICLE/COMPOSITIONS/COMPOSITION/SUBSTANCES/SUBSTANCE/SUBSTANCE_NAME', 'Lamivudinum'],
|
668
|
+
['ARTICLES/ARTICLE/COMPOSITIONS/COMPOSITION/SUBSTANCES/SUBSTANCE/UNIT', 'mg'],
|
669
|
+
['ARTICLES/ARTICLE/COMPOSITIONS/COMPOSITION/SUBSTANCES/SUBSTANCE/UNIT', 'mg'],
|
670
|
+
['ARTICLES/ARTICLE/COMPOSITIONS/COMPOSITION/SUBSTANCES/SUBSTANCE/UNIT', 'µg'],
|
671
|
+
['ARTICLES/ARTICLE/COMPOSITIONS/COMPOSITION/SUBSTANCES/SUBSTANCE/UNIT', /U\.I\.\/ml/],
|
672
|
+
['ARTICLES/ARTICLE/GALENIC_FORM', 'Infusionsemulsion'],
|
673
|
+
['ARTICLES/ARTICLE/GALENIC_FORM', 'Tropfen'],
|
674
|
+
['ARTICLES/ARTICLE/GALENIC_GROUP', 'Lösungsmittel'],
|
675
|
+
['ARTICLES/ARTICLE/GALENIC_GROUP', 'Tabletten'],
|
676
|
+
['ARTICLES/ARTICLE/GTIN', Oddb2xml::FRIDGE_GTIN],
|
677
|
+
['ARTICLES/ARTICLE/GTIN', Oddb2xml::ORPHAN_GTIN],
|
678
|
+
['ARTICLES/ARTICLE/MEASURE', 'Suppositorien'],
|
679
|
+
['ARTICLES/ARTICLE/MEASURE', /Ampulle\(n\)/],
|
680
|
+
['ARTICLES/ARTICLE/NAME', 'Apligraf'],
|
681
|
+
['ARTICLES/ARTICLE/NAME', 'Lansoyl, gelée'],
|
682
|
+
['ARTICLES/ARTICLE/PKG_SIZE', '1'],
|
683
|
+
['ARTICLES/ARTICLE/PKG_SIZE', '5 x 2500 ml'],
|
684
|
+
['ARTICLES/ARTICLE/PKG_SIZE', '75 mm'],
|
685
|
+
['ARTICLES/ARTICLE/SELLING_UNITS', '1'],
|
686
|
+
['ARTICLES/ARTICLE/SELLING_UNITS', '60'],
|
687
|
+
['ARTICLES/ARTICLE/SELLING_UNITS', 'unbekannt'],
|
688
|
+
]
|
689
|
+
check_elements(@@oddb_calc_xml, element_tests)
|
690
|
+
end
|
634
691
|
context "when passing #{@run_time_options}" do
|
635
692
|
it 'should contain the new fields as per July 2015' do
|
636
693
|
# xml.GEN_PRODUCTION gen_production
|
637
694
|
# xml.INSULIN_CATEGORY insulin_category
|
638
695
|
# xml.DRUG_INDEX drug_index
|
639
|
-
expect(File.exists?(
|
696
|
+
expect(File.exists?(@@oddb_calc_xml)).to eq true
|
640
697
|
end
|
641
698
|
|
642
699
|
it 'should create a correct xml and a csv file' do
|
@@ -652,22 +709,7 @@ describe Oddb2xml::Calc do
|
|
652
709
|
oddb_calc_xsd = File.expand_path(File.join(File.dirname(__FILE__), '..', 'oddb_calc.xsd'))
|
653
710
|
expect(File.exists?(oddb_calc_xsd)).to eq true
|
654
711
|
xsd = Nokogiri::XML::Schema(File.read(oddb_calc_xsd))
|
655
|
-
|
656
|
-
xsd.validate(doc).each do |error| expect(error).to be_nil end
|
657
|
-
end
|
658
|
-
|
659
|
-
it 'should create correct entries for narotin' do
|
660
|
-
gtin = '7680540151009'
|
661
|
-
ean12 = '7680' + sprintf('%05d',Tst_naropin.iksnr_A) + sprintf('%03d',Tst_naropin.pack_K)
|
662
|
-
ean13 = (ean12 + Oddb2xml.calc_checksum(ean12))
|
663
|
-
expect(ean13).to eq gtin
|
664
|
-
|
665
|
-
Tst_naropin.values_to_compare.each{
|
666
|
-
| key, value |
|
667
|
-
result = XPath.match( @doc, "//ARTICLE[GTIN='#{gtin}']/#{key.to_s.upcase}").first.text
|
668
|
-
puts "Testing key #{key.inspect} #{value.inspect} against #{result} seems to fail" unless result == value.to_s
|
669
|
-
expect(result).to eq value.to_s
|
670
|
-
}
|
712
|
+
xsd.validate(@nokogiri).each do |error| expect(error).to be_nil end
|
671
713
|
end
|
672
714
|
|
673
715
|
it 'should create correct entries for narotin' do
|
Binary file
|
data/spec/downloader_spec.rb
CHANGED
data/spec/extractor_spec.rb
CHANGED
@@ -4,16 +4,27 @@ require 'spec_helper'
|
|
4
4
|
require "#{Dir.pwd}/lib/oddb2xml/downloader"
|
5
5
|
ENV['TZ'] = 'UTC' # needed for last_change
|
6
6
|
LAST_CHANGE = "2015-07-03 00:00:00 +0000"
|
7
|
-
NR_PACKS =
|
7
|
+
NR_PACKS = 24
|
8
|
+
|
9
|
+
def common_before
|
10
|
+
@savedDir = Dir.pwd
|
11
|
+
Dir.chdir(Oddb2xml::WorkDir)
|
12
|
+
VCR.eject_cassette; VCR.insert_cassette('oddb2xml')
|
13
|
+
end
|
14
|
+
|
15
|
+
def common_after
|
16
|
+
VCR.eject_cassette
|
17
|
+
Dir.chdir(@savedDir) if @savedDir and File.directory?(@savedDir)
|
18
|
+
end
|
8
19
|
|
9
20
|
describe Oddb2xml::LppvExtractor do
|
10
21
|
before(:all) {
|
11
|
-
|
22
|
+
common_before
|
12
23
|
@downloader = Oddb2xml::LppvDownloader.new
|
13
24
|
@content = @downloader.download
|
14
25
|
@lppvs = Oddb2xml::LppvExtractor.new(@content).to_hash
|
15
26
|
}
|
16
|
-
after(:all) {
|
27
|
+
after(:all) { common_after }
|
17
28
|
it "should have at least one item" do
|
18
29
|
expect(@lppvs.size).not_to eq 0
|
19
30
|
end
|
@@ -21,12 +32,12 @@ end
|
|
21
32
|
|
22
33
|
describe Oddb2xml::MigelExtractor do
|
23
34
|
before(:all) {
|
24
|
-
|
35
|
+
common_before
|
25
36
|
@downloader = Oddb2xml::MigelDownloader.new
|
26
37
|
xml = @downloader.download
|
27
38
|
@items = Oddb2xml::MigelExtractor.new(xml).to_hash
|
28
39
|
}
|
29
|
-
after(:all) {
|
40
|
+
after(:all) { common_after }
|
30
41
|
it "should have at some items" do
|
31
42
|
expect(@items.size).not_to eq 0
|
32
43
|
expect(@items.find{|k,v| 3248410 == v[:pharmacode] }).not_to be_nil
|
@@ -37,8 +48,8 @@ describe Oddb2xml::MigelExtractor do
|
|
37
48
|
end
|
38
49
|
|
39
50
|
describe Oddb2xml::RefdataExtractor do
|
40
|
-
before(:all) {
|
41
|
-
after(:all)
|
51
|
+
before(:all) { common_before }
|
52
|
+
after(:all) { common_after }
|
42
53
|
@@last_change = '2015-11-24 00:00:00 +0000'
|
43
54
|
|
44
55
|
context 'should handle pharma articles' do
|
@@ -96,8 +107,8 @@ describe Oddb2xml::RefdataExtractor do
|
|
96
107
|
end
|
97
108
|
|
98
109
|
describe Oddb2xml::BagXmlExtractor do
|
99
|
-
before(:all) {
|
100
|
-
after(:all) {
|
110
|
+
before(:all) { common_before }
|
111
|
+
after(:all) { common_after }
|
101
112
|
context 'should handle articles with and without pharmacode' do
|
102
113
|
subject do
|
103
114
|
dat = File.read(File.join(Oddb2xml::SpecData, 'Preparations.xml'))
|
@@ -129,8 +140,8 @@ describe Oddb2xml::BagXmlExtractor do
|
|
129
140
|
end
|
130
141
|
|
131
142
|
describe Oddb2xml::SwissmedicInfoExtractor do
|
132
|
-
before(:all) {
|
133
|
-
after(:all) {
|
143
|
+
before(:all) { common_before }
|
144
|
+
after(:all) { common_after }
|
134
145
|
include ServerMockHelper
|
135
146
|
before(:each) do
|
136
147
|
@downloader = Oddb2xml::SwissmedicInfoDownloader.new
|
@@ -153,8 +164,8 @@ describe Oddb2xml::SwissmedicInfoExtractor do
|
|
153
164
|
end
|
154
165
|
|
155
166
|
describe Oddb2xml::SwissmedicExtractor do
|
156
|
-
before(:all) {
|
157
|
-
after(:all) {
|
167
|
+
before(:all) { common_before; cleanup_directories_before_run }
|
168
|
+
after(:all) { common_after }
|
158
169
|
context 'when transfer.dat is empty' do
|
159
170
|
subject { Oddb2xml::SwissmedicInfoExtractor.new("") }
|
160
171
|
it { expect(subject.to_hash).to be_empty }
|
@@ -226,8 +237,8 @@ describe Oddb2xml::SwissmedicExtractor do
|
|
226
237
|
end
|
227
238
|
|
228
239
|
describe Oddb2xml::EphaExtractor do
|
229
|
-
before(:all) {
|
230
|
-
after(:all) {
|
240
|
+
before(:all) { common_before }
|
241
|
+
after(:all) { common_after }
|
231
242
|
context 'can parse epha_interactions.csv' do
|
232
243
|
it {
|
233
244
|
filename = File.join(Oddb2xml::SpecData, 'epha_interactions.csv')
|
@@ -239,14 +250,14 @@ describe Oddb2xml::EphaExtractor do
|
|
239
250
|
end
|
240
251
|
|
241
252
|
describe Oddb2xml::MedregbmExtractor do
|
242
|
-
# before(:all) {
|
243
|
-
# after(:all) {
|
253
|
+
# before(:all) { common_before }
|
254
|
+
# after(:all) { common_after }
|
244
255
|
it "pending"
|
245
256
|
end
|
246
257
|
|
247
258
|
describe Oddb2xml::ZurroseExtractor do
|
248
|
-
before(:all) {
|
249
|
-
after(:all) {
|
259
|
+
before(:all) { common_before }
|
260
|
+
after(:all) { common_after }
|
250
261
|
context 'when transfer.dat is empty' do
|
251
262
|
subject { Oddb2xml::ZurroseExtractor.new("") }
|
252
263
|
it { expect(subject.to_hash).to be_empty }
|
data/spec/spec_helper.rb
CHANGED
@@ -30,6 +30,7 @@ module Oddb2xml
|
|
30
30
|
WorkDir = File.join(File.dirname(__FILE__), 'run')
|
31
31
|
Downloads = File.join(WorkDir, 'downloads')
|
32
32
|
SpecCompressor = File.join(Oddb2xml::SpecData, 'compressor')
|
33
|
+
DATE_REGEXP = /\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}[-+]\d{4}/
|
33
34
|
|
34
35
|
GTINS_CALC = [
|
35
36
|
'7680458820202', # for calc_spec.rb
|
@@ -167,6 +168,41 @@ module ServerMockHelper
|
|
167
168
|
end
|
168
169
|
end
|
169
170
|
|
171
|
+
def check_elements(xml_name, tests)
|
172
|
+
tests.each do |test|
|
173
|
+
path = test[0]
|
174
|
+
value = test[1]
|
175
|
+
it "should have correct entries #{value} for path #{path}" do
|
176
|
+
found = false
|
177
|
+
Nokogiri::XML(File.read(xml_name)).search(path, nil, nil).each do |x|
|
178
|
+
if value.match(x.text)
|
179
|
+
found= true
|
180
|
+
break
|
181
|
+
end
|
182
|
+
end
|
183
|
+
expect(found).to be true
|
184
|
+
end
|
185
|
+
end
|
186
|
+
end
|
187
|
+
|
188
|
+
def check_attributes(xml_name, tests)
|
189
|
+
tests.each do |test|
|
190
|
+
path = test[0]
|
191
|
+
attribute = test[1]
|
192
|
+
value = test[2]
|
193
|
+
it "should have correct value #{value} for attribute #{attribute} in #{path}" do
|
194
|
+
found = false
|
195
|
+
Nokogiri::XML(File.read(xml_name)).search(path, nil, nil).each do |x|
|
196
|
+
if value.match(x["#{attribute}"])
|
197
|
+
found= true
|
198
|
+
break
|
199
|
+
end
|
200
|
+
end
|
201
|
+
expect(found).to be true
|
202
|
+
end
|
203
|
+
end
|
204
|
+
end
|
205
|
+
|
170
206
|
RSpec.configure do |config|
|
171
207
|
config.run_all_when_everything_filtered = true
|
172
208
|
config.filter_run :focus
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: oddb2xml
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.2.
|
4
|
+
version: 2.2.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yasuhiro Asaka, Zeno R.R. Davatz, Niklaus Giger
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-11-
|
11
|
+
date: 2015-11-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rubyzip
|