Skip to content

Commit ed25486

Browse files
committed
Finish issue-347-accept
2 parents c9d4e7f + f066f05 commit ed25486

2 files changed

Lines changed: 118 additions & 76 deletions

File tree

lib/rdf/spec/reader.rb

Lines changed: 89 additions & 40 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
@@ -11,6 +12,7 @@
1112
end
1213

1314
let(:reader_class) { reader.class }
15+
let(:format_class) { reader_class.format }
1416

1517
describe ".each" do
1618
it "yields each reader" do
@@ -21,70 +23,117 @@
2123
end
2224

2325
describe ".open" do
24-
before(:each) do
25-
allow(RDF::Util::File).to receive(:open_file).and_yield(StringIO.new(reader_input))
26-
end
27-
2826
it "yields reader given file_name" do
29-
reader_class.format.each do |f|
30-
f.file_extensions.each_pair do |sym, content_type|
31-
reader_mock = double("reader")
32-
expect(reader_mock).to receive(:got_here)
33-
expect(reader_class).to receive(:for).with(file_name: "foo.#{sym}").and_return(reader_class)
34-
reader_class.open("foo.#{sym}") do |r|
35-
expect(r).to be_a(RDF::Reader)
36-
reader_mock.got_here
37-
end
27+
allow(RDF::Util::File).to receive(:open_file).and_yield(StringIO.new(reader_input))
28+
format_class.file_extensions.each_pair do |sym, content_type|
29+
reader_mock = double("reader")
30+
expect(reader_mock).to receive(:got_here)
31+
expect(RDF::Reader).to receive(:for).with(file_name: "foo.#{sym}").and_return(reader_class)
32+
RDF::Reader.open("foo.#{sym}") do |r|
33+
expect(r).to be_a(reader_class)
34+
reader_mock.got_here
3835
end
3936
end
4037
end
4138

4239
it "yields reader given symbol" do
43-
reader_class.format.each do |f|
44-
sym = f.to_sym # Like RDF::NTriples::Format => :ntriples
40+
allow(RDF::Util::File).to receive(:open_file).and_yield(StringIO.new(reader_input))
41+
sym = format_class.to_sym # Like RDF::NTriples::Format => :ntriples
42+
reader_mock = double("reader")
43+
expect(reader_mock).to receive(:got_here)
44+
expect(RDF::Reader).to receive(:for).with(sym).and_return(reader_class)
45+
RDF::Reader.open("foo.#{sym}", format: sym) do |r|
46+
expect(r).to be_a(reader_class)
47+
reader_mock.got_here
48+
end
49+
end
50+
51+
it "yields reader given {file_name: file_name}" do
52+
allow(RDF::Util::File).to receive(:open_file).and_yield(StringIO.new(reader_input))
53+
format_class.file_extensions.each_pair do |sym, content_type|
4554
reader_mock = double("reader")
4655
expect(reader_mock).to receive(:got_here)
47-
expect(reader_class).to receive(:for).with(sym).and_return(reader_class)
48-
reader_class.open("foo.#{sym}", format: sym) do |r|
49-
expect(r).to be_a(RDF::Reader)
56+
expect(RDF::Reader).to receive(:for).with(file_name: "foo.#{sym}").and_return(reader_class)
57+
RDF::Reader.open("foo.#{sym}", file_name: "foo.#{sym}") do |r|
58+
expect(r).to be_a(reader_class)
5059
reader_mock.got_here
5160
end
5261
end
5362
end
5463

55-
it "yields reader given {file_name: file_name}" do
56-
reader_class.format.each do |f|
57-
f.file_extensions.each_pair do |sym, content_type|
58-
reader_mock = double("reader")
59-
expect(reader_mock).to receive(:got_here)
60-
expect(reader_class).to receive(:for).with(file_name: "foo.#{sym}").and_return(reader_class)
61-
reader_class.open("foo.#{sym}", file_name: "foo.#{sym}") do |r|
62-
expect(r).to be_a(RDF::Reader)
63-
reader_mock.got_here
64-
end
64+
it "yields reader given {content_type: 'a/b'}" do
65+
allow(RDF::Util::File).to receive(:open_file).and_yield(StringIO.new(reader_input))
66+
format_class.content_types.each_pair do |content_type, formats|
67+
reader_mock = double("reader")
68+
expect(reader_mock).to receive(:got_here)
69+
expect(RDF::Reader).to receive(:for).with(content_type: content_type, file_name: "foo").and_return(reader_class)
70+
RDF::Reader.open("foo", content_type: content_type) do |r|
71+
expect(r).to be_a(reader_class)
72+
reader_mock.got_here
6573
end
6674
end
6775
end
6876

69-
it "yields reader given {content_type: 'a/b'}" do
70-
reader_class.format.each do |f|
71-
f.content_types.each_pair do |content_type, formats|
72-
reader_mock = double("reader")
73-
expect(reader_mock).to receive(:got_here)
74-
expect(reader_class).to receive(:for).with(content_type: content_type, file_name: "foo").and_return(reader_class)
75-
reader_class.open("foo", content_type: content_type) do |r|
76-
expect(r).to be_a(RDF::Reader)
77-
reader_mock.got_here
78-
end
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
7992
end
8093
end
8194
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
82127
end
83128

84129
describe ".format" do
85-
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
86135
other_format = reader_class == RDF::NTriples::Reader ? :nquads : :ntriples
87-
expect(reader_class.for(other_format)).to eq reader_class
136+
expect(reader_class.format(other_format)).to be_nil
88137
end
89138
end
90139

lib/rdf/spec/writer.rb

Lines changed: 29 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
end
1212
let(:writer_class) { writer.class }
1313
let(:reader_class) { writer_class.format.reader}
14+
let(:format_class) { writer_class.format }
1415

1516
describe ".each" do
1617
it "yields each writer" do
@@ -63,56 +64,48 @@
6364
end
6465

6566
it "yields writer given file_name" do
66-
writer_class.format.each do |f|
67-
f.file_extensions.each_pair do |sym, content_type|
68-
writer_mock = double("writer")
69-
expect(writer_mock).to receive(:got_here)
70-
expect(writer_class).to receive(:for).with(file_name: "#{@basename}.#{sym}").and_return(writer_class)
71-
writer_class.open("#{@basename}.#{sym}") do |r|
72-
expect(r).to be_a(RDF::Writer)
73-
writer_mock.got_here
74-
end
75-
end
76-
end
77-
end
78-
79-
it "yields writer given symbol" do
80-
writer_class.format.each do |f|
81-
sym = f.to_sym # Like RDF::NTriples::Format => :ntriples
67+
format_class.file_extensions.each_pair do |sym, content_type|
8268
writer_mock = double("writer")
8369
expect(writer_mock).to receive(:got_here)
84-
expect(writer_class).to receive(:for).with(sym).and_return(writer_class)
85-
writer_class.open("#{@basename}.#{sym}", format: sym) do |r|
70+
expect(writer_class).to receive(:for).with(file_name: "#{@basename}.#{sym}").and_return(writer_class)
71+
writer_class.open("#{@basename}.#{sym}") do |r|
8672
expect(r).to be_a(RDF::Writer)
8773
writer_mock.got_here
8874
end
8975
end
9076
end
9177

78+
it "yields writer given symbol" do
79+
sym = format_class.to_sym # Like RDF::NTriples::Format => :ntriples
80+
writer_mock = double("writer")
81+
expect(writer_mock).to receive(:got_here)
82+
expect(writer_class).to receive(:for).with(sym).and_return(writer_class)
83+
writer_class.open("#{@basename}.#{sym}", format: sym) do |r|
84+
expect(r).to be_a(RDF::Writer)
85+
writer_mock.got_here
86+
end
87+
end
88+
9289
it "yields writer given {file_name: file_name}" do
93-
writer_class.format.each do |f|
94-
f.file_extensions.each_pair do |sym, content_type|
95-
writer_mock = double("writer")
96-
expect(writer_mock).to receive(:got_here)
97-
expect(writer_class).to receive(:for).with(file_name: "#{@basename}.#{sym}").and_return(writer_class)
98-
writer_class.open("#{@basename}.#{sym}", file_name: "#{@basename}.#{sym}") do |r|
99-
expect(r).to be_a(RDF::Writer)
100-
writer_mock.got_here
101-
end
90+
format_class.file_extensions.each_pair do |sym, content_type|
91+
writer_mock = double("writer")
92+
expect(writer_mock).to receive(:got_here)
93+
expect(writer_class).to receive(:for).with(file_name: "#{@basename}.#{sym}").and_return(writer_class)
94+
writer_class.open("#{@basename}.#{sym}", file_name: "#{@basename}.#{sym}") do |r|
95+
expect(r).to be_a(RDF::Writer)
96+
writer_mock.got_here
10297
end
10398
end
10499
end
105100

106101
it "yields writer given {content_type: 'a/b'}" do
107-
writer_class.format.each do |f|
108-
f.content_types.each_pair do |content_type, formats|
109-
writer_mock = double("writer")
110-
expect(writer_mock).to receive(:got_here)
111-
expect(writer_class).to receive(:for).with(content_type: content_type, file_name: @basename).and_return(writer_class)
112-
writer_class.open(@basename, content_type: content_type) do |r|
113-
expect(r).to be_a(RDF::Writer)
114-
writer_mock.got_here
115-
end
102+
format_class.content_types.each_pair do |content_type, formats|
103+
writer_mock = double("writer")
104+
expect(writer_mock).to receive(:got_here)
105+
expect(writer_class).to receive(:for).with(content_type: content_type, file_name: @basename).and_return(writer_class)
106+
writer_class.open(@basename, content_type: content_type) do |r|
107+
expect(r).to be_a(RDF::Writer)
108+
writer_mock.got_here
116109
end
117110
end
118111
end

0 commit comments

Comments
 (0)