Skip to content

Commit f066f05

Browse files
committed
Verify that property Accept header is sent when a specific reader is determined in Reader.open.
1 parent 9a7ace3 commit f066f05

1 file changed

Lines changed: 58 additions & 7 deletions

File tree

lib/rdf/spec/reader.rb

Lines changed: 58 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
require 'rdf/spec'
2+
require 'webmock/rspec'
23

34
RSpec.shared_examples 'an RDF::Reader' do
45
include RDF::Spec::Matchers
@@ -24,18 +25,13 @@
2425
describe ".open" do
2526
it "yields reader given file_name" do
2627
allow(RDF::Util::File).to receive(:open_file).and_yield(StringIO.new(reader_input))
27-
end
28-
29-
it "yields reader given file_name" do
30-
reader_class.format.each do |f|
3128
format_class.file_extensions.each_pair do |sym, content_type|
3229
reader_mock = double("reader")
3330
expect(reader_mock).to receive(:got_here)
3431
expect(RDF::Reader).to receive(:for).with(file_name: "foo.#{sym}").and_return(reader_class)
3532
RDF::Reader.open("foo.#{sym}") do |r|
3633
expect(r).to be_a(reader_class)
3734
reader_mock.got_here
38-
end
3935
end
4036
end
4137
end
@@ -77,12 +73,67 @@
7773
end
7874
end
7975
end
76+
77+
it "yields reader when returned content_type matches" do
78+
format_class.content_types.each_pair do |content_type, formats|
79+
uri = "http://example/foo"
80+
reader_mock = double("reader")
81+
expect(reader_mock).to receive(:got_here)
82+
expect(RDF::Reader).to receive(:for).and_return(reader_class)
83+
84+
WebMock.stub_request(:get, uri).
85+
to_return(body: "BODY",
86+
status: 200,
87+
headers: { 'Content-Type' => content_type})
88+
89+
RDF::Reader.open(uri) do |r|
90+
expect(r).to be_a(reader_class)
91+
reader_mock.got_here
92+
end
93+
end
94+
end
95+
96+
it "sets Accept header from reader" do
97+
uri = "http://example/foo"
98+
accept = (format_class.accept_type + %w(*/*;q=0.1)).join(", ")
99+
reader_mock = double("reader")
100+
expect(reader_mock).to receive(:got_here)
101+
WebMock.stub_request(:get, uri).with do |request|
102+
expect(request.headers['Accept']).to eql accept
103+
end.to_return(body: "foo")
104+
105+
reader_class.open(uri) do |r|
106+
expect(r).to be_a(reader_class)
107+
reader_mock.got_here
108+
end
109+
end
110+
111+
it "sets Accept header from symbol" do
112+
uri = "http://example/foo"
113+
sym = format_class.to_sym # Like RDF::NTriples::Format => :ntriples
114+
accept = (format_class.accept_type + %w(*/*;q=0.1)).join(", ")
115+
reader_mock = double("reader")
116+
expect(reader_mock).to receive(:got_here)
117+
WebMock.stub_request(:get, uri).with do |request|
118+
expect(request.headers['Accept']).to eql accept
119+
end.to_return(body: "foo")
120+
expect(RDF::Reader).to receive(:for).with(sym).and_return(reader_class)
121+
122+
RDF::Reader.open(uri, format: sym) do |r|
123+
expect(r).to be_a(reader_class)
124+
reader_mock.got_here
125+
end
126+
end
80127
end
81128

82129
describe ".format" do
83-
it "returns itself even if given explicit format" do
130+
it "returns a format class if given no format" do
131+
expect(reader_class.format).not_to be_nil
132+
end
133+
134+
it "returns nil if given a format" do
84135
other_format = reader_class == RDF::NTriples::Reader ? :nquads : :ntriples
85-
expect(reader_class.for(other_format)).to eq reader_class
136+
expect(reader_class.format(other_format)).to be_nil
86137
end
87138
end
88139

0 commit comments

Comments
 (0)