oddb2xml 2.2.6 → 2.2.7
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/.gitignore +18 -0
- data/Gemfile.lock +28 -28
- data/History.txt +6 -0
- data/lib/oddb2xml/builder.rb +8 -8
- data/lib/oddb2xml/cli.rb +5 -6
- data/lib/oddb2xml/extractor.rb +12 -4
- data/lib/oddb2xml/version.rb +1 -1
- data/oddb2xml.xsd +2 -1
- data/spec/builder_spec.rb +159 -137
- data/spec/calc_spec.rb +40 -40
- data/spec/cli_spec.rb +57 -55
- data/spec/compressor_spec.rb +16 -16
- data/spec/data/swissmedic_fridge.xlsx +0 -0
- data/spec/data/swissmedic_orphan.xlsx +0 -0
- data/spec/data/swissmedic_package.xlsx +0 -0
- data/spec/downloader_spec.rb +50 -45
- data/spec/extractor_spec.rb +8 -8
- data/spec/fixtures/vcr_cassettes/oddb2xml.json +660 -1599
- data/spec/spec_helper.rb +5 -1
- metadata +2 -2
    
        data/spec/builder_spec.rb
    CHANGED
    
    | @@ -10,7 +10,7 @@ def checkItemForRefdata(doc, pharmacode, isRefdata) | |
| 10 10 | 
             
              refdata =  article.elements['REF_DATA'].text
         | 
| 11 11 | 
             
              smno    =  article.elements['SMNO'] ? article.elements['SMNO'].text : 'nil'
         | 
| 12 12 | 
             
              puts "checking doc for gtin #{gtin} isRefdata #{isRefdata} == #{refdata}. SMNO: #{smno} #{name}" if $VERBOSE
         | 
| 13 | 
            -
              article.elements['REF_DATA'].text. | 
| 13 | 
            +
              expect(article.elements['REF_DATA'].text).to eq(isRefdata.to_s)
         | 
| 14 14 | 
             
              article
         | 
| 15 15 | 
             
            end
         | 
| 16 16 |  | 
| @@ -22,7 +22,7 @@ def check_article_IGM_format(line, price_kendural=825, add_80_percents=false) | |
| 22 22 | 
             
              price_exf      = line[60..65].to_i
         | 
| 23 23 | 
             
              price_reseller = line[66..71].to_i
         | 
| 24 24 | 
             
              price_public   = line[66..71].to_i
         | 
| 25 | 
            -
              typ. | 
| 25 | 
            +
              expect(typ).to    eq '11'
         | 
| 26 26 | 
             
              puts "check_article_IGM_format: #{price_exf} #{price_public} CKZL is #{ckzl} CIKS is #{ciks} name  #{name} " if $VERBOSE
         | 
| 27 27 | 
             
              found_SL = false
         | 
| 28 28 | 
             
              found_non_SL = false
         | 
| @@ -30,26 +30,26 @@ def check_article_IGM_format(line, price_kendural=825, add_80_percents=false) | |
| 30 30 | 
             
              if /7680353660163\d$/.match(line) # KENDURAL Depottabl 30 Stk
         | 
| 31 31 | 
             
                puts "found_SL for #{line}" if $VERBOSE
         | 
| 32 32 | 
             
                found_SL = true
         | 
| 33 | 
            -
                line[60..65]. | 
| 34 | 
            -
                price_exf. | 
| 35 | 
            -
                ckzl. | 
| 36 | 
            -
                price_public. | 
| 37 | 
            -
                line[66..71]. | 
| 33 | 
            +
                expect(line[60..65]).to eq '000491'
         | 
| 34 | 
            +
                expect(price_exf).to eq 491
         | 
| 35 | 
            +
                expect(ckzl).to eq '1'
         | 
| 36 | 
            +
                expect(price_public).to eq price_kendural     # this is a SL-product. Therefore we may not have a price increase
         | 
| 37 | 
            +
                expect(line[66..71]).to eq '000'+price_kendural.to_s  # the dat format requires leading zeroes and not point
         | 
| 38 38 | 
             
              end
         | 
| 39 39 |  | 
| 40 40 | 
             
              if /7680403330459\d$/.match(line) # CARBADERM
         | 
| 41 41 | 
             
                found_non_SL = true
         | 
| 42 42 | 
             
                puts "found_non_SL for #{line}" if $VERBOSE
         | 
| 43 | 
            -
                ckzl. | 
| 43 | 
            +
                expect(ckzl).to eq '3'
         | 
| 44 44 | 
             
                if add_80_percents
         | 
| 45 | 
            -
                  price_reseller. | 
| 46 | 
            -
                  line[66..71]. | 
| 45 | 
            +
                  expect(price_reseller).to eq    2919  # = 1545*1.8 this is a non  SL-product. Therefore we must increase its price as requsted
         | 
| 46 | 
            +
                  expect(line[66..71]).to eq '002919' # dat format requires leading zeroes and not poin
         | 
| 47 47 | 
             
                else
         | 
| 48 | 
            -
                  price_reseller. | 
| 49 | 
            -
                  line[66..71]. | 
| 48 | 
            +
                  expect(price_reseller).to eq     2770  # this is a non  SL-product, but no price increase was requested
         | 
| 49 | 
            +
                  expect(line[66..71]).to eq '002770' # the dat format requires leading zeroes and not point
         | 
| 50 50 | 
             
                end
         | 
| 51 | 
            -
                line[60..65]. | 
| 52 | 
            -
                price_exf. | 
| 51 | 
            +
                expect(line[60..65]).to eq '001622' # the dat format requires leading zeroes and not point
         | 
| 52 | 
            +
                expect(price_exf).to eq    1622      # this is a non  SL-product, but no price increase was requested
         | 
| 53 53 | 
             
              end
         | 
| 54 54 | 
             
              return [found_SL, found_non_SL]
         | 
| 55 55 | 
             
            end
         | 
| @@ -57,8 +57,8 @@ end | |
| 57 57 | 
             
            def check_validation_via_xsd
         | 
| 58 58 | 
             
              @oddb2xml_xsd = File.expand_path(File.join(File.dirname(__FILE__), '..', 'oddb2xml.xsd'))
         | 
| 59 59 | 
             
              @oddb_calc_xsd = File.expand_path(File.join(File.dirname(__FILE__), '..', 'oddb_calc.xsd'))
         | 
| 60 | 
            -
              File.exists?(@oddb2xml_xsd). | 
| 61 | 
            -
              File.exists?(@oddb_calc_xsd). | 
| 60 | 
            +
              expect(File.exists?(@oddb2xml_xsd)).to eq true
         | 
| 61 | 
            +
              expect(File.exists?(@oddb_calc_xsd)).to eq true
         | 
| 62 62 | 
             
              files = Dir.glob('*.xml')
         | 
| 63 63 | 
             
              xsd_oddb2xml = Nokogiri::XML::Schema(File.read(@oddb2xml_xsd))
         | 
| 64 64 | 
             
              xsd_oddb_calc = Nokogiri::XML::Schema(File.read(@oddb_calc_xsd))
         | 
| @@ -72,7 +72,7 @@ def check_validation_via_xsd | |
| 72 72 | 
             
                    if error.message
         | 
| 73 73 | 
             
                      puts "Failed validating #{file} with #{File.size(file)} bytes using XSD from #{@oddb2xml_xsd}"
         | 
| 74 74 | 
             
                    end
         | 
| 75 | 
            -
                    error.message. | 
| 75 | 
            +
                    expect(error.message).to be_nil
         | 
| 76 76 | 
             
                end
         | 
| 77 77 | 
             
              }
         | 
| 78 78 | 
             
            end
         | 
| @@ -81,31 +81,31 @@ def checkPrices(increased = false) | |
| 81 81 | 
             
              doc = REXML::Document.new File.new(checkAndGetArticleXmlName)
         | 
| 82 82 |  | 
| 83 83 | 
             
              sofradex = checkAndGetArticleWithGTIN(doc, Oddb2xml::SOFRADEX_GTIN)
         | 
| 84 | 
            -
              sofradex.elements["ARTPRI[PTYP='ZURROSE']/PRICE"].text. | 
| 85 | 
            -
              sofradex.elements["ARTPRI[PTYP='ZURROSEPUB']/PRICE"].text. | 
| 84 | 
            +
              expect(sofradex.elements["ARTPRI[PTYP='ZURROSE']/PRICE"].text).to eq Oddb2xml::SOFRADEX_PRICE_ZURROSE.to_s
         | 
| 85 | 
            +
              expect(sofradex.elements["ARTPRI[PTYP='ZURROSEPUB']/PRICE"].text).to eq Oddb2xml::SOFRADEX_PRICE_ZURROSEPUB.to_s
         | 
| 86 86 |  | 
| 87 87 | 
             
              lansoyl = checkAndGetArticleWithGTIN(doc, Oddb2xml::LANSOYL_GTIN)
         | 
| 88 | 
            -
              lansoyl.elements["ARTPRI[PTYP='ZURROSE']/PRICE"].text. | 
| 89 | 
            -
              lansoyl.elements["ARTPRI[PTYP='ZURROSEPUB']/PRICE"].text. | 
| 88 | 
            +
              expect(lansoyl.elements["ARTPRI[PTYP='ZURROSE']/PRICE"].text).to eq Oddb2xml::LANSOYL_PRICE_ZURROSE.to_s
         | 
| 89 | 
            +
              expect(lansoyl.elements["ARTPRI[PTYP='ZURROSEPUB']/PRICE"].text).to eq Oddb2xml::LANSOYL_PRICE_ZURROSEPUB.to_s
         | 
| 90 90 |  | 
| 91 91 | 
             
              desitin = checkAndGetArticleWithGTIN(doc, Oddb2xml::LEVETIRACETAM_GTIN)
         | 
| 92 | 
            -
              desitin.elements["ARTPRI[PTYP='PPUB']/PRICE"].text. | 
| 93 | 
            -
              desitin.elements["ARTPRI[PTYP='ZURROSE']/PRICE"].text. | 
| 94 | 
            -
              desitin.elements["ARTPRI[PTYP='ZURROSEPUB']/PRICE"].text.to_f. | 
| 92 | 
            +
              expect(desitin.elements["ARTPRI[PTYP='PPUB']/PRICE"].text).to eq Oddb2xml::LEVETIRACETAM_PRICE_PPUB.to_s
         | 
| 93 | 
            +
              expect(desitin.elements["ARTPRI[PTYP='ZURROSE']/PRICE"].text).to eq Oddb2xml::LEVETIRACETAM_PRICE_ZURROSE.to_s
         | 
| 94 | 
            +
              expect(desitin.elements["ARTPRI[PTYP='ZURROSEPUB']/PRICE"].text.to_f).to eq Oddb2xml::LEVETIRACETAM_PRICE_PPUB.to_f
         | 
| 95 95 | 
             
              if increased
         | 
| 96 | 
            -
                lansoyl.elements["ARTPRI[PTYP='RESELLERPUB']/PRICE"].text. | 
| 97 | 
            -
                sofradex.elements["ARTPRI[PTYP='RESELLERPUB']/PRICE"].text. | 
| 98 | 
            -
                desitin.elements["ARTPRI[PTYP='RESELLERPUB']/PRICE"].text. | 
| 96 | 
            +
                expect(lansoyl.elements["ARTPRI[PTYP='RESELLERPUB']/PRICE"].text).to eq Oddb2xml::LANSOYL_PRICE_RESELLER_PUB.to_s
         | 
| 97 | 
            +
                expect(sofradex.elements["ARTPRI[PTYP='RESELLERPUB']/PRICE"].text).to eq Oddb2xml::SOFRADEX_PRICE_RESELLER_PUB.to_s
         | 
| 98 | 
            +
                expect(desitin.elements["ARTPRI[PTYP='RESELLERPUB']/PRICE"].text).to eq Oddb2xml::LEVETIRACETAM_PRICE_RESELLER_PUB.to_s
         | 
| 99 99 | 
             
              else
         | 
| 100 | 
            -
                lansoyl.elements["ARTPRI[PTYP='RESELLERPUB']"]. | 
| 101 | 
            -
                sofradex.elements["ARTPRI[PTYP='RESELLERPUB']"]. | 
| 102 | 
            -
                desitin.elements["ARTPRI[PTYP='RESELLERPUB']"]. | 
| 100 | 
            +
                expect(lansoyl.elements["ARTPRI[PTYP='RESELLERPUB']"]).to eq nil
         | 
| 101 | 
            +
                expect(sofradex.elements["ARTPRI[PTYP='RESELLERPUB']"]).to eq nil
         | 
| 102 | 
            +
                expect(desitin.elements["ARTPRI[PTYP='RESELLERPUB']"]).to eq nil
         | 
| 103 103 | 
             
              end
         | 
| 104 104 | 
             
            end
         | 
| 105 105 |  | 
| 106 106 | 
             
            def checkAndGetArticleXmlName(tst=nil)
         | 
| 107 107 | 
             
              article_xml = File.expand_path(File.join(Oddb2xml::WorkDir, 'oddb_article.xml'))
         | 
| 108 | 
            -
              File.exists?(article_xml). | 
| 108 | 
            +
              expect(File.exists?(article_xml)).to eq true
         | 
| 109 109 | 
             
              FileUtils.cp(article_xml, File.join(Oddb2xml::WorkDir, "tst-#{tst}.xml")) if tst
         | 
| 110 110 | 
             
              article_xml
         | 
| 111 111 | 
             
            end
         | 
| @@ -114,8 +114,8 @@ def checkAndGetProductWithGTIN(doc, gtin) | |
| 114 114 | 
             
              products = XPath.match( doc, "//PRD[GTIN=#{gtin.to_s}]")
         | 
| 115 115 | 
             
              gtins    = XPath.match( doc, "//PRD[GTIN=#{gtin.to_s}]/GTIN")
         | 
| 116 116 | 
             
              binding.pry unless gtins.size == 1
         | 
| 117 | 
            -
              gtins.size. | 
| 118 | 
            -
              gtins.first.text. | 
| 117 | 
            +
              expect(gtins.size).to eq 1
         | 
| 118 | 
            +
              expect(gtins.first.text).to eq gtin.to_s
         | 
| 119 119 | 
             
              # return product
         | 
| 120 120 | 
             
              return products.size == 1 ? products.first : nil
         | 
| 121 121 | 
             
            end
         | 
| @@ -123,8 +123,8 @@ end | |
| 123 123 | 
             
            def checkAndGetArticleWithGTIN(doc, gtin)
         | 
| 124 124 | 
             
              articles = XPath.match( doc, "//ART[ARTBAR/BC=#{gtin}]")
         | 
| 125 125 | 
             
              gtins    = XPath.match( doc, "//ART[ARTBAR/BC=#{gtin}]/ARTBAR/BC")
         | 
| 126 | 
            -
              gtins.size. | 
| 127 | 
            -
              gtins.first.text. | 
| 126 | 
            +
              expect(gtins.size).to eq 1
         | 
| 127 | 
            +
              expect(gtins.first.text).to eq gtin.to_s
         | 
| 128 128 | 
             
              gtins.first
         | 
| 129 129 | 
             
              # return article
         | 
| 130 130 | 
             
              return articles.size == 1 ? articles.first : nil
         | 
| @@ -136,60 +136,62 @@ def checkArticleXml(checkERYTHROCIN = true) | |
| 136 136 | 
             
              # check articles
         | 
| 137 137 | 
             
              doc = REXML::Document.new IO.read(article_filename)
         | 
| 138 138 | 
             
              checkAndGetArticleWithGTIN(doc, Oddb2xml::THREE_TC_GTIN)
         | 
| 139 | 
            +
             | 
| 139 140 | 
             
              desitin = checkAndGetArticleWithGTIN(doc, Oddb2xml::LEVETIRACETAM_GTIN)
         | 
| 140 | 
            -
              desitin. | 
| 141 | 
            +
              expect(desitin).not_to eq nil
         | 
| 141 142 | 
             
              # TODO: why is this now nil? desitin.elements['ATC'].text.should == 'N03AX14'
         | 
| 142 | 
            -
              desitin.elements['DSCRD'].text. | 
| 143 | 
            -
              desitin.elements['DSCRF'].text. | 
| 144 | 
            -
              desitin.elements['REF_DATA'].text. | 
| 145 | 
            -
              desitin.elements['PHAR'].text. | 
| 146 | 
            -
              desitin.elements['SMCAT'].text. | 
| 147 | 
            -
              desitin.elements['SMNO'].text. | 
| 148 | 
            -
              desitin.elements['VAT'].text. | 
| 149 | 
            -
              desitin.elements['PRODNO'].text. | 
| 150 | 
            -
              desitin.elements['SALECD'].text. | 
| 151 | 
            -
              desitin.elements['CDBG'].text. | 
| 152 | 
            -
              desitin.elements['BG'].text. | 
| 143 | 
            +
              expect(desitin.elements['DSCRD'].text).to eq("LEVETIRACETAM DESITIN Mini Filmtab 250 mg 30 Stk")
         | 
| 144 | 
            +
              expect(desitin.elements['DSCRF'].text).to eq('LEVETIRACETAM DESITIN mini cpr pel 250 mg 30 pce')
         | 
| 145 | 
            +
              expect(desitin.elements['REF_DATA'].text).to eq('1')
         | 
| 146 | 
            +
              expect(desitin.elements['PHAR'].text).to eq('5819012')
         | 
| 147 | 
            +
              expect(desitin.elements['SMCAT'].text).to eq('B')
         | 
| 148 | 
            +
              expect(desitin.elements['SMNO'].text).to eq('62069008')
         | 
| 149 | 
            +
              expect(desitin.elements['VAT'].text).to eq('2')
         | 
| 150 | 
            +
              expect(desitin.elements['PRODNO'].text).to eq('620691')
         | 
| 151 | 
            +
              expect(desitin.elements['SALECD'].text).to eq('A')
         | 
| 152 | 
            +
              expect(desitin.elements['CDBG'].text).to eq('N')
         | 
| 153 | 
            +
              expect(desitin.elements['BG'].text).to eq('N')
         | 
| 153 154 |  | 
| 154 155 | 
             
              erythrocin_gtin = '7680202580475' # picked up from zur rose
         | 
| 155 156 | 
             
              erythrocin = checkAndGetArticleWithGTIN(doc, erythrocin_gtin)
         | 
| 156 | 
            -
              erythrocin.elements['DSCRD'].text. | 
| 157 | 
            +
              expect(erythrocin.elements['DSCRD'].text).to eq("ERYTHROCIN i.v. Trockensub 1000 mg Amp") if checkERYTHROCIN
         | 
| 157 158 |  | 
| 158 159 | 
             
              lansoyl = checkAndGetArticleWithGTIN(doc, Oddb2xml::LANSOYL_GTIN)
         | 
| 159 | 
            -
              lansoyl.elements['DSCRD'].text. | 
| 160 | 
            -
              lansoyl.elements['REF_DATA'].text. | 
| 161 | 
            -
              lansoyl.elements['SMNO'].text. | 
| 162 | 
            -
              lansoyl.elements['PHAR'].text. | 
| 163 | 
            -
              lansoyl.elements['ARTCOMP/COMPNO'].text. | 
| 160 | 
            +
              expect(lansoyl.elements['DSCRD'].text).to eq 'LANSOYL Gel 225 g'
         | 
| 161 | 
            +
              expect(lansoyl.elements['REF_DATA'].text).to eq '1'
         | 
| 162 | 
            +
              expect(lansoyl.elements['SMNO'].text).to eq '32475019'
         | 
| 163 | 
            +
              expect(lansoyl.elements['PHAR'].text).to eq '0023722'
         | 
| 164 | 
            +
              expect(lansoyl.elements['ARTCOMP/COMPNO'].text).to eq('7601001002012')
         | 
| 164 165 |  | 
| 165 166 | 
             
              zyvoxid = checkAndGetArticleWithGTIN(doc, Oddb2xml::ZYVOXID_GTIN)
         | 
| 166 | 
            -
              zyvoxid.elements['DSCRD'].text. | 
| 167 | 
            +
              expect(zyvoxid.elements['DSCRD'].text).to eq 'ZYVOXID Filmtabl 600 mg 10 Stk'
         | 
| 167 168 |  | 
| 168 | 
            -
              XPath.match( doc, "//LIMPTS" ).size. | 
| 169 | 
            +
              expect(XPath.match( doc, "//LIMPTS" ).size).to be >= 1
         | 
| 169 170 | 
             
              # TODO: desitin.elements['QTY'].text.should eq '250 mg'
         | 
| 170 171 | 
             
            end
         | 
| 171 172 |  | 
| 172 173 | 
             
            def checkProductXml
         | 
| 173 174 | 
             
              product_filename = File.expand_path(File.join(Oddb2xml::WorkDir, 'oddb_product.xml'))
         | 
| 174 | 
            -
              File.exists?(product_filename). | 
| 175 | 
            +
              expect(File.exists?(product_filename)).to eq true
         | 
| 175 176 |  | 
| 176 177 | 
             
              # check products
         | 
| 177 178 | 
             
              doc = REXML::Document.new IO.read(product_filename)
         | 
| 179 | 
            +
             | 
| 178 180 | 
             
              desitin = checkAndGetProductWithGTIN(doc, Oddb2xml::LEVETIRACETAM_GTIN)
         | 
| 179 | 
            -
              desitin.elements['ATC'].text. | 
| 180 | 
            -
              desitin.elements['DSCRD'].text. | 
| 181 | 
            -
              desitin.elements['DSCRF'].text. | 
| 182 | 
            -
              desitin.elements['PRODNO'].text. | 
| 183 | 
            -
              desitin.elements['IT'].text. | 
| 184 | 
            -
              desitin.elements['PackGrSwissmedic'].text. | 
| 185 | 
            -
              desitin.elements['EinheitSwissmedic'].text. | 
| 186 | 
            -
              desitin.elements['SubstanceSwissmedic'].text. | 
| 187 | 
            -
              desitin.elements['CompositionSwissmedic'].text. | 
| 188 | 
            -
             | 
| 189 | 
            -
              desitin.elements['CPT/CPTCMP/LINE'].text. | 
| 190 | 
            -
              desitin.elements['CPT/CPTCMP/SUBNO'].text. | 
| 191 | 
            -
              desitin.elements['CPT/CPTCMP/QTY'].text. | 
| 192 | 
            -
              desitin.elements['CPT/CPTCMP/QTYU'].text. | 
| 181 | 
            +
              expect(desitin.elements['ATC'].text).to eq('N03AX14')
         | 
| 182 | 
            +
              expect(desitin.elements['DSCRD'].text).to eq("LEVETIRACETAM DESITIN Mini Filmtab 250 mg 30 Stk")
         | 
| 183 | 
            +
              expect(desitin.elements['DSCRF'].text).to eq('LEVETIRACETAM DESITIN mini cpr pel 250 mg 30 pce')
         | 
| 184 | 
            +
              expect(desitin.elements['PRODNO'].text).to eq '620691'
         | 
| 185 | 
            +
              expect(desitin.elements['IT'].text).to eq '01.07.1.'
         | 
| 186 | 
            +
              expect(desitin.elements['PackGrSwissmedic'].text).to eq '30'
         | 
| 187 | 
            +
              expect(desitin.elements['EinheitSwissmedic'].text).to eq 'Tablette(n)'
         | 
| 188 | 
            +
              expect(desitin.elements['SubstanceSwissmedic'].text).to eq 'levetiracetamum'
         | 
| 189 | 
            +
              expect(desitin.elements['CompositionSwissmedic'].text).to eq 'levetiracetamum 250 mg, excipiens pro compressi obducti pro charta.'
         | 
| 190 | 
            +
             | 
| 191 | 
            +
              expect(desitin.elements['CPT/CPTCMP/LINE'].text).to eq '0'
         | 
| 192 | 
            +
              expect(desitin.elements['CPT/CPTCMP/SUBNO'].text).to eq '10'
         | 
| 193 | 
            +
              expect(desitin.elements['CPT/CPTCMP/QTY'].text).to eq '250'
         | 
| 194 | 
            +
              expect(desitin.elements['CPT/CPTCMP/QTYU'].text).to eq 'mg'
         | 
| 193 195 |  | 
| 194 196 | 
             
              checkAndGetProductWithGTIN(doc, Oddb2xml::THREE_TC_GTIN)
         | 
| 195 197 | 
             
              checkAndGetProductWithGTIN(doc, Oddb2xml::ZYVOXID_GTIN)
         | 
| @@ -199,19 +201,19 @@ def checkProductXml | |
| 199 201 | 
             
                puts "checkProductXml has #{XPath.match( doc, "//GTIN" ).find_all{|x| true}.size} GTIN"
         | 
| 200 202 | 
             
                puts "checkProductXml has #{XPath.match( doc, "//PRODNO" ).find_all{|x| true}.size} PRODNO"
         | 
| 201 203 | 
             
              end
         | 
| 202 | 
            -
              XPath.match( doc, "//PRD" ).find_all{|x| true}.size. | 
| 203 | 
            -
              XPath.match( doc, "//GTIN" ).find_all{|x| true}.size. | 
| 204 | 
            -
              XPath.match( doc, "//PRODNO" ).find_all{|x| true}.size. | 
| 204 | 
            +
              expect(XPath.match( doc, "//PRD" ).find_all{|x| true}.size).to eq(NrPackages)
         | 
| 205 | 
            +
              expect(XPath.match( doc, "//GTIN" ).find_all{|x| true}.size).to eq(NrPackages)
         | 
| 206 | 
            +
              expect(XPath.match( doc, "//PRODNO" ).find_all{|x| true}.size).to eq(NrProdno)
         | 
| 205 207 |  | 
| 206 208 | 
             
              hirudoid = checkAndGetProductWithGTIN(doc, Oddb2xml::HIRUDOID_GTIN)
         | 
| 207 | 
            -
              hirudoid.elements['ATC'].text. | 
| 209 | 
            +
              expect(hirudoid.elements['ATC'].text).to eq('C05BA01') # modified by atc.csv!
         | 
| 208 210 | 
             
            end
         | 
| 209 211 |  | 
| 210 212 | 
             
            describe Oddb2xml::Builder do
         | 
| 211 213 | 
             
              NrExtendedArticles = 86
         | 
| 212 214 | 
             
              NrSubstances = 12
         | 
| 213 | 
            -
              NrProdno =  | 
| 214 | 
            -
              NrPackages =  | 
| 215 | 
            +
              NrProdno = 23
         | 
| 216 | 
            +
              NrPackages = 24
         | 
| 215 217 | 
             
              RegExpDesitin = /1125819012LEVETIRACETAM DESITIN Mini Filmtab 250 mg 30 Stk/
         | 
| 216 218 | 
             
              include ServerMockHelper
         | 
| 217 219 | 
             
              def common_run_init
         | 
| @@ -228,15 +230,15 @@ describe Oddb2xml::Builder do | |
| 228 230 | 
             
                before(:all) do
         | 
| 229 231 | 
             
                  common_run_init
         | 
| 230 232 | 
             
                  options = Oddb2xml::Options.new
         | 
| 231 | 
            -
                  @res = buildr_capture(:stdout){ Oddb2xml::Cli.new(options.opts).run }
         | 
| 232 | 
            -
                   | 
| 233 | 
            +
                  # @res = buildr_capture(:stdout){ Oddb2xml::Cli.new(options.opts).run }
         | 
| 234 | 
            +
                  Oddb2xml::Cli.new(options.opts).run # to debug
         | 
| 233 235 | 
             
                  @article_xml = File.expand_path(File.join(Oddb2xml::WorkDir, 'oddb_article.xml'))
         | 
| 234 236 | 
             
                  @doc = Nokogiri::XML(File.open(@article_xml))
         | 
| 235 237 | 
             
                  @rexml = REXML::Document.new File.read(@article_xml)
         | 
| 236 238 | 
             
                end
         | 
| 237 239 |  | 
| 238 240 | 
             
                it 'should return produce a oddb_article.xml' do
         | 
| 239 | 
            -
                  File.exists?(@article_xml). | 
| 241 | 
            +
                  expect(File.exists?(@article_xml)).to eq true
         | 
| 240 242 | 
             
                end
         | 
| 241 243 |  | 
| 242 244 | 
             
                it 'oddb_article.xml should contain a SHA256' do
         | 
| @@ -255,12 +257,18 @@ describe Oddb2xml::Builder do | |
| 255 257 |  | 
| 256 258 | 
             
                it 'should have a correct insulin (gentechnik) for 7680532900196' do
         | 
| 257 259 | 
             
                  expect(XPath.match( @rexml, "//ART/[BC='7680532900196']").size).to eq 1
         | 
| 258 | 
            -
                  expect(XPath.match( @rexml, "//ART//GEN_PRODUCTION").size).to eq  | 
| 260 | 
            +
                  expect(XPath.match( @rexml, "//ART//GEN_PRODUCTION").size).to eq 2
         | 
| 259 261 | 
             
                  expect(XPath.match( @rexml, "//ART//GEN_PRODUCTION").first.text).to eq 'X'
         | 
| 260 262 | 
             
                  expect(XPath.match( @rexml, "//ART//INSULIN_CATEGORY").size).to eq 1
         | 
| 261 263 | 
             
                  expect(XPath.match( @rexml, "//ART//INSULIN_CATEGORY").first.text).to eq 'Insulinanalog: schnell wirkend'
         | 
| 262 264 | 
             
                end
         | 
| 263 265 |  | 
| 266 | 
            +
                it 'should flag fridge drugs correctly' do
         | 
| 267 | 
            +
                  doc = REXML::Document.new IO.read(checkAndGetArticleXmlName)
         | 
| 268 | 
            +
                  checkAndGetArticleWithGTIN(doc, Oddb2xml::FRIDGE_GTIN)
         | 
| 269 | 
            +
                  expect(XPath.match( doc, "//COOL='1']").size).to eq 1
         | 
| 270 | 
            +
                end
         | 
| 271 | 
            +
             | 
| 264 272 | 
             
                it 'should have a correct drug information for 7680555610041' do
         | 
| 265 273 | 
             
                  expect(XPath.match( @rexml, "//ART/[BC='7680555610041']").size).to eq 1
         | 
| 266 274 | 
             
                  expect(XPath.match( @rexml, "//ART//DRUG_INDEX").size).to eq 1
         | 
| @@ -285,19 +293,20 @@ describe Oddb2xml::Builder do | |
| 285 293 | 
             
                  @oddb_fi_product_xml  = File.expand_path(File.join(Oddb2xml::WorkDir, 'oddb_fi_product.xml'))
         | 
| 286 294 | 
             
                  options = Oddb2xml::Options.new
         | 
| 287 295 | 
             
                  options.parser.parse!(['-o'])
         | 
| 288 | 
            -
                  @res = buildr_capture(:stdout){ Oddb2xml::Cli.new(options.opts).run }
         | 
| 296 | 
            +
                  # @res = buildr_capture(:stdout){ Oddb2xml::Cli.new(options.opts).run }
         | 
| 297 | 
            +
                  Oddb2xml::Cli.new(options.opts).run
         | 
| 289 298 | 
             
                end
         | 
| 290 299 |  | 
| 291 300 | 
             
                it 'should return produce a correct oddb_fi.xml' do
         | 
| 292 | 
            -
                  File.exists?(@oddb_fi_xml). | 
| 301 | 
            +
                  expect(File.exists?(@oddb_fi_xml)).to eq true
         | 
| 293 302 | 
             
                  inhalt = IO.read(@oddb_fi_xml)
         | 
| 294 | 
            -
                  /<KMP/.match(inhalt.to_s).to_s. | 
| 295 | 
            -
                  /<style><!\[CDATA\[p{margin-top/.match(inhalt.to_s).to_s. | 
| 303 | 
            +
                  expect(/<KMP/.match(inhalt.to_s).to_s).to eq '<KMP'
         | 
| 304 | 
            +
                  expect(/<style><!\[CDATA\[p{margin-top/.match(inhalt.to_s).to_s).to eq '<style><![CDATA[p{margin-top'
         | 
| 296 305 | 
             
                  m = /<paragraph><!\[CDATA\[(.+)\n(.*)/.match(inhalt.to_s)
         | 
| 297 | 
            -
                  m[1]. | 
| 306 | 
            +
                  expect(m[1]).to eq '<?xml version="1.0" encoding="utf-8"?><div xmlns="http://www.w3.org/1999/xhtml">'
         | 
| 298 307 | 
             
                  expected = '<p class="s2"> </p>'
         | 
| 299 308 | 
             
                  skip { m[2].should eq '<p class="s4" id="section1"><span class="s2"><span>Zyvoxid</span></span><sup class="s3"><span>®</span></sup></p>'  }
         | 
| 300 | 
            -
                  File.exists?(@oddb_fi_product_xml). | 
| 309 | 
            +
                  expect(File.exists?(@oddb_fi_product_xml)).to eq true
         | 
| 301 310 | 
             
                  inhalt = IO.read(@oddb_fi_product_xml)
         | 
| 302 311 | 
             
                end
         | 
| 303 312 |  | 
| @@ -308,7 +317,7 @@ if RUN_ALL | |
| 308 317 | 
             
                end
         | 
| 309 318 |  | 
| 310 319 | 
             
                it 'should generate a valid oddb_product.xml' do
         | 
| 311 | 
            -
                  @res. | 
| 320 | 
            +
                  expect(@res).to match(/products/)
         | 
| 312 321 | 
             
                  checkProductXml
         | 
| 313 322 | 
             
                end
         | 
| 314 323 | 
             
              end
         | 
| @@ -323,13 +332,13 @@ if RUN_ALL | |
| 323 332 | 
             
                end
         | 
| 324 333 |  | 
| 325 334 | 
             
                it 'should contain the correct values fo CMUT from zurrose_transfer.dat' do
         | 
| 326 | 
            -
                  @res. | 
| 335 | 
            +
                  expect(@res).to match(/products/)
         | 
| 327 336 | 
             
                  dat_filename = File.join(Oddb2xml::WorkDir, 'oddb.dat')
         | 
| 328 | 
            -
                  File.exists?(dat_filename). | 
| 337 | 
            +
                  expect(File.exists?(dat_filename)).to eq true
         | 
| 329 338 | 
             
                  oddb_dat = IO.read(dat_filename)
         | 
| 330 | 
            -
                  oddb_dat. | 
| 331 | 
            -
                  oddb_dat. | 
| 332 | 
            -
                  oddb_dat. | 
| 339 | 
            +
                  expect(oddb_dat).to match(/^..2/), "should have a record with '2' in CMUT field"
         | 
| 340 | 
            +
                  expect(oddb_dat).to match(/^..3/), "should have a record with '3' in CMUT field"
         | 
| 341 | 
            +
                  expect(oddb_dat).to match(RegExpDesitin), "should have Desitin"
         | 
| 333 342 | 
             
                  IO.readlines(dat_filename).each{ |line| check_article_IGM_format(line) }
         | 
| 334 343 | 
             
                  m = /.+DIAPHIN Trocke.*7680555610041.+/.match(oddb_dat)
         | 
| 335 344 | 
             
                  expect(m[0].size).to eq 97 # size of IGM 1 record
         | 
| @@ -348,17 +357,17 @@ if RUN_ALL | |
| 348 357 |  | 
| 349 358 | 
             
                it 'should generate a valid oddb_with_migel.dat' do
         | 
| 350 359 | 
             
                  dat_filename = File.join(Oddb2xml::WorkDir, 'oddb_with_migel.dat')
         | 
| 351 | 
            -
                  File.exists?(dat_filename). | 
| 360 | 
            +
                  expect(File.exists?(dat_filename)).to eq true
         | 
| 352 361 | 
             
                  oddb_dat = IO.read(dat_filename)
         | 
| 353 | 
            -
                  oddb_dat. | 
| 354 | 
            -
                  @res. | 
| 362 | 
            +
                  expect(oddb_dat).to match(RegExpDesitin), "should have Desitin"
         | 
| 363 | 
            +
                  expect(@res).to match(/products/)
         | 
| 355 364 | 
             
                end
         | 
| 356 365 |  | 
| 357 366 | 
             
                it "should match EAN 76806206900842 of Desitin" do
         | 
| 358 367 | 
             
                  dat_filename = File.join(Oddb2xml::WorkDir, 'oddb_with_migel.dat')
         | 
| 359 | 
            -
                  File.exists?(dat_filename). | 
| 368 | 
            +
                  expect(File.exists?(dat_filename)).to eq true
         | 
| 360 369 | 
             
                  oddb_dat = IO.read(dat_filename)
         | 
| 361 | 
            -
                  oddb_dat. | 
| 370 | 
            +
                  expect(oddb_dat).to match(/76806206900842/), "should match EAN of Desitin"
         | 
| 362 371 | 
             
                end
         | 
| 363 372 | 
             
              end
         | 
| 364 373 |  | 
| @@ -380,7 +389,7 @@ if RUN_ALL | |
| 380 389 | 
             
                end
         | 
| 381 390 |  | 
| 382 391 | 
             
                it 'should generate a valid oddb_product.xml' do
         | 
| 383 | 
            -
                  @res. | 
| 392 | 
            +
                  expect(@res).to match(/products/) if @res != nil
         | 
| 384 393 | 
             
                  checkProductXml
         | 
| 385 394 | 
             
                end
         | 
| 386 395 |  | 
| @@ -413,17 +422,24 @@ if RUN_ALL | |
| 413 422 | 
             
                end
         | 
| 414 423 |  | 
| 415 424 | 
             
                it 'should report correct output on stdout' do
         | 
| 416 | 
            -
                  @res. | 
| 417 | 
            -
                  @res. | 
| 425 | 
            +
                  expect(@res).to match(/\sPharma products: \d+/)
         | 
| 426 | 
            +
                  expect(@res).to match(/\sNonPharma products: \d+/)
         | 
| 418 427 | 
             
                end if RUN_ALL
         | 
| 419 428 |  | 
| 420 429 | 
             
                it 'should contain the correct (normal) prices' do
         | 
| 421 430 | 
             
                  checkPrices(false)
         | 
| 422 431 | 
             
                end
         | 
| 423 432 |  | 
| 433 | 
            +
                it 'should generate the flag ORPH for orphan' do
         | 
| 434 | 
            +
                  doc = REXML::Document.new File.new(checkAndGetArticleXmlName('non-refdata'))
         | 
| 435 | 
            +
                  orphan = checkAndGetArticleWithGTIN(doc, Oddb2xml::ORPHAN_GTIN)
         | 
| 436 | 
            +
                  expect(orphan).not_to eq nil
         | 
| 437 | 
            +
                  expect(orphan.elements['ORPH'].text).to eq("true")
         | 
| 438 | 
            +
                end
         | 
| 439 | 
            +
             | 
| 424 440 | 
             
                it 'should generate the flag non-refdata' do
         | 
| 425 441 | 
             
                  doc = REXML::Document.new File.new(checkAndGetArticleXmlName('non-refdata'))
         | 
| 426 | 
            -
                  XPath.match( doc, "//REF_DATA" ).size. | 
| 442 | 
            +
                  expect(XPath.match( doc, "//REF_DATA" ).size).to be > 0
         | 
| 427 443 | 
             
                  checkItemForRefdata(doc, "1699947", 1) # 3TC Filmtabl 150 mg SMNO 53662013 IKSNR 53‘662, 53‘663
         | 
| 428 444 | 
             
                  checkItemForRefdata(doc, "0598003", 0) # SOFRADEX Gtt Auric 8 ml
         | 
| 429 445 | 
             
                  checkItemForRefdata(doc, "5366964", 1) # 1-DAY ACUVUE moist jour
         | 
| @@ -435,8 +451,8 @@ if RUN_ALL | |
| 435 451 | 
             
                  doc = REXML::Document.new File.new(checkAndGetArticleXmlName)
         | 
| 436 452 | 
             
                  article = XPath.match( doc, "//ART[ARTINS/NINCD=13]").first
         | 
| 437 453 | 
             
                  article = XPath.match( doc, "//ART[PHAR=5366964]").first
         | 
| 438 | 
            -
                  article.elements['SALECD'].text. | 
| 439 | 
            -
                  article.elements['ARTINS/NINCD'].text. | 
| 454 | 
            +
                  expect(article.elements['SALECD'].text).to eq('A')
         | 
| 455 | 
            +
                  expect(article.elements['ARTINS/NINCD'].text).to eq('13')
         | 
| 440 456 | 
             
                end
         | 
| 441 457 |  | 
| 442 458 | 
             
                it 'should pass validating via oddb2xml.xsd' do
         | 
| @@ -446,56 +462,56 @@ if RUN_ALL | |
| 446 462 | 
             
                it 'should not contain veterinary iksnr 47066 CANIPHEDRIN'  do
         | 
| 447 463 | 
             
                  doc = REXML::Document.new File.new(checkAndGetArticleXmlName)
         | 
| 448 464 | 
             
                  dscrds = XPath.match( doc, "//ART" )
         | 
| 449 | 
            -
                  XPath.match( doc, "//BC" ).find_all{|x| x.text.match('47066') }.size. | 
| 450 | 
            -
                  XPath.match( doc, "//DSCRD" ).find_all{|x| x.text.match(/CANIPHEDRIN/) }.size. | 
| 465 | 
            +
                  expect(XPath.match( doc, "//BC" ).find_all{|x| x.text.match('47066') }.size).to eq(0)
         | 
| 466 | 
            +
                  expect(XPath.match( doc, "//DSCRD" ).find_all{|x| x.text.match(/CANIPHEDRIN/) }.size).to eq(0)
         | 
| 451 467 | 
             
                end
         | 
| 452 468 |  | 
| 453 469 | 
             
                it 'should handle not duplicate pharmacode 5366964'  do
         | 
| 454 470 | 
             
                  doc = REXML::Document.new File.new(checkAndGetArticleXmlName)
         | 
| 455 471 | 
             
                  dscrds = XPath.match( doc, "//ART" )
         | 
| 456 | 
            -
                  XPath.match( doc, "//PHAR" ).find_all{|x| x.text.match('5366964') }.size. | 
| 457 | 
            -
                  dscrds.size. | 
| 458 | 
            -
                  XPath.match( doc, "//PRODNO" ).find_all{|x| true}.size. | 
| 459 | 
            -
                  XPath.match( doc, "//PRODNO" ).find_all{|x| x.text.match('002771') }.size. | 
| 460 | 
            -
                  XPath.match( doc, "//PRODNO" ).find_all{|x| x.text.match('620691') }.size. | 
| 472 | 
            +
                  expect(XPath.match( doc, "//PHAR" ).find_all{|x| x.text.match('5366964') }.size).to eq(1)
         | 
| 473 | 
            +
                  expect(dscrds.size).to eq(NrExtendedArticles)
         | 
| 474 | 
            +
                  expect(XPath.match( doc, "//PRODNO" ).find_all{|x| true}.size).to be >= 1
         | 
| 475 | 
            +
                  expect(XPath.match( doc, "//PRODNO" ).find_all{|x| x.text.match('002771') }.size).to eq(0)
         | 
| 476 | 
            +
                  expect(XPath.match( doc, "//PRODNO" ).find_all{|x| x.text.match('620691') }.size).to eq(1)
         | 
| 461 477 | 
             
                end
         | 
| 462 478 |  | 
| 463 479 | 
             
                it 'should load correct number of nonpharma' do
         | 
| 464 480 | 
             
                  doc = REXML::Document.new File.new(checkAndGetArticleXmlName)
         | 
| 465 481 | 
             
                  dscrds = XPath.match( doc, "//ART" )
         | 
| 466 | 
            -
                  dscrds.size. | 
| 467 | 
            -
                  XPath.match( doc, "//PHAR" ).find_all{|x| x.text.match('1699947') }.size. | 
| 468 | 
            -
                  XPath.match( doc, "//PHAR" ).find_all{|x| x.text.match('2465312') }.size. | 
| 469 | 
            -
                  XPath.match( doc, "//PHAR" ).find_all{|x| x.text.match('0000000') }.size. | 
| 482 | 
            +
                  expect(dscrds.size).to eq(NrExtendedArticles)
         | 
| 483 | 
            +
                  expect(XPath.match( doc, "//PHAR" ).find_all{|x| x.text.match('1699947') }.size).to eq(1) # swissmedic_packages Cardio-Pulmo-Rénal Sérocytol, suppositoire
         | 
| 484 | 
            +
                  expect(XPath.match( doc, "//PHAR" ).find_all{|x| x.text.match('2465312') }.size).to eq(1) # from refdata_pharma.xml"
         | 
| 485 | 
            +
                  expect(XPath.match( doc, "//PHAR" ).find_all{|x| x.text.match('0000000') }.size).to eq(1) # from refdata_pharma.xml
         | 
| 470 486 | 
             
                end
         | 
| 471 487 |  | 
| 472 488 | 
             
                it 'should emit a correct oddb_limitation.xml' do
         | 
| 473 489 | 
             
                  # check limitations
         | 
| 474 490 | 
             
                  limitation_filename = File.expand_path(File.join(Oddb2xml::WorkDir, 'oddb_limitation.xml'))
         | 
| 475 | 
            -
                  File.exists?(limitation_filename). | 
| 491 | 
            +
                  expect(File.exists?(limitation_filename)).to eq true
         | 
| 476 492 | 
             
                  doc = REXML::Document.new File.new(limitation_filename)
         | 
| 477 493 | 
             
                  limitations = XPath.match( doc, "//LIM" )
         | 
| 478 | 
            -
                  limitations.size. | 
| 479 | 
            -
                  XPath.match( doc, "//SwissmedicNo5" ).find_all{|x| x.text.match('28486') }.size. | 
| 480 | 
            -
                  XPath.match( doc, "//LIMNAMEBAG" ).find_all{|x| x.text.match('ZYVOXID') }.size. | 
| 481 | 
            -
                  XPath.match( doc, "//LIMNAMEBAG" ).find_all{|x| x.text.match('070240') }.size. | 
| 482 | 
            -
                  XPath.match( doc, "//DSCRD" ).find_all{|x| x.text.match(/^Gesamthaft zugelassen/) }.size. | 
| 483 | 
            -
                  XPath.match( doc, "//DSCRD" ).find_all{|x| x.text.match(/^Behandlung nosokomialer Pneumonien/) }.size. | 
| 494 | 
            +
                  expect(limitations.size).to be >= 4
         | 
| 495 | 
            +
                  expect(XPath.match( doc, "//SwissmedicNo5" ).find_all{|x| x.text.match('28486') }.size).to eq(1)
         | 
| 496 | 
            +
                  expect(XPath.match( doc, "//LIMNAMEBAG" ).find_all{|x| x.text.match('ZYVOXID') }.size).to eq(1)
         | 
| 497 | 
            +
                  expect(XPath.match( doc, "//LIMNAMEBAG" ).find_all{|x| x.text.match('070240') }.size).to eq(1)
         | 
| 498 | 
            +
                  expect(XPath.match( doc, "//DSCRD" ).find_all{|x| x.text.match(/^Gesamthaft zugelassen/) }.size).to eq(1)
         | 
| 499 | 
            +
                  expect(XPath.match( doc, "//DSCRD" ).find_all{|x| x.text.match(/^Behandlung nosokomialer Pneumonien/) }.size).to eq(1)
         | 
| 484 500 | 
             
                end
         | 
| 485 501 |  | 
| 486 502 | 
             
                it 'should emit a correct oddb_substance.xml' do
         | 
| 487 503 | 
             
                  doc = REXML::Document.new File.new(File.join(Oddb2xml::WorkDir, 'oddb_substance.xml'))
         | 
| 488 504 | 
             
                  names = XPath.match( doc, "//NAML" )
         | 
| 489 | 
            -
                  names.size. | 
| 490 | 
            -
                  names.find_all{|x| x.text.match('Lamivudinum') }.size. | 
| 505 | 
            +
                  expect(names.size).to eq(NrSubstances)
         | 
| 506 | 
            +
                  expect(names.find_all{|x| x.text.match('Lamivudinum') }.size).to eq(1)
         | 
| 491 507 | 
             
                end
         | 
| 492 508 |  | 
| 493 509 | 
             
                it 'should emit a correct oddb_interaction.xml' do
         | 
| 494 510 | 
             
                  doc = REXML::Document.new File.new(File.join(Oddb2xml::WorkDir, 'oddb_interaction.xml'))
         | 
| 495 511 | 
             
                  titles = XPath.match( doc, "//TITD" )
         | 
| 496 | 
            -
                  titles.size. | 
| 497 | 
            -
                  titles.find_all{|x| x.text.match('Keine Interaktion') }.size. | 
| 498 | 
            -
                  titles.find_all{|x| x.text.match('Erhöhtes Risiko für Myopathie und Rhabdomyolyse') }.size. | 
| 512 | 
            +
                  expect(titles.size).to eq 5
         | 
| 513 | 
            +
                  expect(titles.find_all{|x| x.text.match('Keine Interaktion') }.size).to be >= 1
         | 
| 514 | 
            +
                  expect(titles.find_all{|x| x.text.match('Erhöhtes Risiko für Myopathie und Rhabdomyolyse') }.size).to eq(1)
         | 
| 499 515 | 
             
                end
         | 
| 500 516 |  | 
| 501 517 | 
             
                def checkItemForSALECD(doc, ean13, expected)
         | 
| @@ -506,16 +522,16 @@ if RUN_ALL | |
| 506 522 | 
             
                    puts "checking doc for ean13 #{ean13} expected #{expected} == #{salecd}. #{name}"
         | 
| 507 523 | 
             
                    puts article.text
         | 
| 508 524 | 
             
                  end
         | 
| 509 | 
            -
                  article.elements['SALECD'].text. | 
| 525 | 
            +
                  expect(article.elements['SALECD'].text).to eq(expected.to_s)
         | 
| 510 526 | 
             
                end
         | 
| 511 527 |  | 
| 512 528 | 
             
                it 'should generate the flag SALECD' do
         | 
| 513 529 | 
             
                  @article_xml = File.expand_path(File.join(Oddb2xml::WorkDir, 'oddb_article.xml'))
         | 
| 514 | 
            -
                  File.exists?(@article_xml). | 
| 530 | 
            +
                  expect(File.exists?(@article_xml)).to eq true
         | 
| 515 531 | 
             
                  FileUtils.cp(@article_xml, File.join(Oddb2xml::WorkDir, 'tst-SALECD.xml'))
         | 
| 516 532 | 
             
                  article_xml = IO.read(@article_xml)
         | 
| 517 533 | 
             
                  doc = REXML::Document.new File.new(@article_xml)
         | 
| 518 | 
            -
                  XPath.match( doc, "//REF_DATA" ).size. | 
| 534 | 
            +
                  expect(XPath.match( doc, "//REF_DATA" ).size).to be > 0
         | 
| 519 535 | 
             
                  checkItemForSALECD(doc, Oddb2xml::FERRO_GRADUMET_GTIN, 'A') # FERRO-GRADUMET Depottabl 30 Stk
         | 
| 520 536 | 
             
                  checkItemForSALECD(doc, Oddb2xml::SOFRADEX_GTIN, 'I') # SOFRADEX
         | 
| 521 537 | 
             
                end
         | 
| @@ -531,7 +547,7 @@ if RUN_ALL | |
| 531 547 |  | 
| 532 548 | 
             
                it 'should add 80 percent to zur_rose pubbprice' do
         | 
| 533 549 | 
             
                  @article_xml = File.expand_path(File.join(Oddb2xml::WorkDir, 'oddb_article.xml'))
         | 
| 534 | 
            -
                  File.exists?(@article_xml). | 
| 550 | 
            +
                  expect(File.exists?(@article_xml)).to eq true
         | 
| 535 551 | 
             
                  FileUtils.cp(@article_xml, File.join(Oddb2xml::WorkDir, 'tst-e80.xml'))
         | 
| 536 552 | 
             
                  checkProductXml
         | 
| 537 553 | 
             
                  checkArticleXml
         | 
| @@ -541,6 +557,12 @@ if RUN_ALL | |
| 541 557 | 
             
                it 'should generate a correct oddb_product.xml' do
         | 
| 542 558 | 
             
                  checkProductXml
         | 
| 543 559 | 
             
                end
         | 
| 560 | 
            +
             | 
| 561 | 
            +
                it 'should generate a product with the COOL (fridge) attribute' do
         | 
| 562 | 
            +
                    fridge_product = checkAndGetProductWithGTIN(doc, Oddb2xml::FRIDGE_GTIN)
         | 
| 563 | 
            +
                    fridge_product.elements['COOL'].text.should == '1'
         | 
| 564 | 
            +
                end
         | 
| 565 | 
            +
             | 
| 544 566 | 
             
                it 'should generate a correct oddb_article.xml' do
         | 
| 545 567 | 
             
                  checkArticleXml
         | 
| 546 568 | 
             
                end
         | 
| @@ -555,16 +577,16 @@ if RUN_ALL | |
| 555 577 | 
             
                end
         | 
| 556 578 |  | 
| 557 579 | 
             
                it 'should report correct number of items' do
         | 
| 558 | 
            -
                  @res. | 
| 580 | 
            +
                  expect(@res).to match(/products/)
         | 
| 559 581 | 
             
                end
         | 
| 560 582 |  | 
| 561 583 | 
             
                it 'should contain the correct values fo CMUT from zurrose_transfer.dat' do
         | 
| 562 584 | 
             
                  dat_filename = File.join(Oddb2xml::WorkDir, 'oddb.dat')
         | 
| 563 | 
            -
                  File.exists?(dat_filename). | 
| 585 | 
            +
                  expect(File.exists?(dat_filename)).to eq true
         | 
| 564 586 | 
             
                  oddb_dat = IO.read(dat_filename)
         | 
| 565 | 
            -
                  oddb_dat. | 
| 566 | 
            -
                  oddb_dat. | 
| 567 | 
            -
                  oddb_dat. | 
| 587 | 
            +
                  expect(oddb_dat).to match(/^..2/), "should have a record with '2' in CMUT field"
         | 
| 588 | 
            +
                  expect(oddb_dat).to match(/^..3/), "should have a record with '3' in CMUT field"
         | 
| 589 | 
            +
                  expect(oddb_dat).to match(RegExpDesitin), "should have Desitin"
         | 
| 568 590 | 
             
                  IO.readlines(dat_filename).each{ |line| check_article_IGM_format(line) }
         | 
| 569 591 | 
             
                  # oddb_dat.should match(/^..1/), "should have a record with '1' in CMUT field" # we have no
         | 
| 570 592 | 
             
                end
         | 
| @@ -579,12 +601,12 @@ if RUN_ALL | |
| 579 601 | 
             
                end
         | 
| 580 602 |  | 
| 581 603 | 
             
                it 'should report correct number of items' do
         | 
| 582 | 
            -
                  @res. | 
| 604 | 
            +
                  expect(@res).to match(/products/)
         | 
| 583 605 | 
             
                end
         | 
| 584 606 |  | 
| 585 607 | 
             
                it 'should contain the corect prices' do
         | 
| 586 608 | 
             
                  dat_filename = File.join(Oddb2xml::WorkDir, 'oddb.dat')
         | 
| 587 | 
            -
                  File.exists?(dat_filename). | 
| 609 | 
            +
                  expect(File.exists?(dat_filename)).to eq true
         | 
| 588 610 | 
             
                  oddb_dat = IO.read(dat_filename)
         | 
| 589 611 | 
             
                  oddb_dat_lines = IO.readlines(dat_filename)
         | 
| 590 612 | 
             
                  IO.readlines(dat_filename).each{ |line| check_article_IGM_format(line, 883, true) }
         |