oddb2xml 2.2.7 → 2.2.8
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.
- 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
|