require_relative 'spec_helper' describe 'Yasuri' do include_context 'httpserver' describe '::TextNode' do it 'scrape text text <p>Hello,Yasuri</p>' do node = Yasuri::TextNode.new('/html/body/p[1]', "title") actual = node.scrape(uri) expect(actual).to eq "Hello,Yasuri" end it 'return empty text if no match node' do no_match_node = Yasuri::TextNode.new('/html/body/no_match_node', "title") actual = no_match_node.scrape(uri) expect(actual).to be_empty end it 'fail with invalid xpath' do invalid_xpath = '/html/body/no_match_node[' node = Yasuri::TextNode.new(invalid_xpath, "title") expect { node.scrape(uri) }.to raise_error(Nokogiri::XML::XPath::SyntaxError) end it "can be defined by DSL, return single TextNode title" do generated = Yasuri.text_title '/html/body/p[1]' original = Yasuri::TextNode.new('/html/body/p[1]', "title") compare_generated_vs_original(generated, original, uri) end it "can truncate head by regexp" do node = Yasuri.text_title '/html/body/p[1]', truncate: /^[^,]+/ actual = node.scrape(uri) expect(actual).to eq "Hello" end it "can truncate tail by regexp" do node = Yasuri.text_title '/html/body/p[1]', truncate: /[^,]+$/ actual = node.scrape(uri) expect(actual).to eq "Yasuri" end it "return first captured if matched given capture pattern" do node = Yasuri.text_title '/html/body/p[1]', truncate: /H(.+)i/ actual = node.scrape(uri) expect(actual).to eq "ello,Yasur" end it "return empty string if truncated with no match to regexp" do node = Yasuri.text_title '/html/body/p[1]', truncate: /^hoge/ actual = node.scrape(uri) expect(actual).to be_empty end it "return symbol method applied string" do node = Yasuri.text_title '/html/body/p[1]', proc: :upcase actual = node.scrape(uri) expect(actual).to eq "HELLO,YASURI" end it "return apply multi arguments" do node = Yasuri.text_title '/html/body/p[1]', proc: :upcase, truncate: /H(.+)i/ actual = node.scrape(uri) expect(actual).to eq "ELLO,YASUR" end end end