@@ -18,9 +18,30 @@ def json_feed_error_tuple
1818 ]
1919 end
2020
21- def stub_legacy_feed ( body )
22- allow ( Html2rss ::Web ::Feeds ) . to receive ( :generate_feed ) . and_return ( body )
23- allow ( Html2rss ::Web ::LocalConfig ) . to receive ( :find ) . and_return ( { channel : { ttl : 180 } } )
21+ def static_feed_json
22+ '{"version":"https://jsonfeed.org/version/1.1"}'
23+ end
24+
25+ def stub_static_feed ( rss_body : '<rss/>' , json_body : static_feed_json , ttl : 180 )
26+ allow ( Html2rss ::Web ::LocalConfig ) . to receive ( :find ) . and_return ( { channel : { ttl : ttl } } )
27+
28+ stub_static_renderers ( static_feed_result ( ttl :) , rss_body :, json_body :)
29+ end
30+
31+ def static_feed_result ( ttl :)
32+ Html2rss ::Web ::Feeds ::Result . new (
33+ status : :ok ,
34+ payload : nil ,
35+ message : nil ,
36+ ttl_seconds : Html2rss ::Web ::CacheTtl . seconds_from_minutes ( ttl ) ,
37+ cache_key : 'feed_result:spec'
38+ )
39+ end
40+
41+ def stub_static_renderers ( result , rss_body :, json_body :)
42+ allow ( Html2rss ::Web ::Feeds ::Service ) . to receive ( :call ) . and_return ( result )
43+ allow ( Html2rss ::Web ::Feeds ::RssRenderer ) . to receive ( :call ) . with ( result ) . and_return ( rss_body )
44+ allow ( Html2rss ::Web ::Feeds ::JsonRenderer ) . to receive ( :call ) . with ( result ) . and_return ( json_body )
2445 end
2546
2647 it { expect ( described_class ) . to be < Roda }
@@ -38,9 +59,8 @@ def app = described_class
3859 expect ( last_response . headers [ 'Strict-Transport-Security' ] ) . to include ( 'max-age=31536000' )
3960 end
4061
41- it 'serves legacy feed routes with caching headers' , :aggregate_failures do # rubocop:disable RSpec/ExampleLength
42- allow ( Html2rss ::Web ::Feeds ) . to receive ( :generate_feed ) . and_return ( '<rss/>' )
43- allow ( Html2rss ::Web ::LocalConfig ) . to receive ( :find ) . and_return ( { channel : { ttl : 180 } } )
62+ it 'serves static feed routes with caching headers' , :aggregate_failures do # rubocop:disable RSpec/ExampleLength
63+ stub_static_feed
4464
4565 get '/legacy'
4666
@@ -52,17 +72,17 @@ def app = described_class
5272 expect ( last_response . body ) . to eq ( '<rss/>' )
5373 end
5474
55- it 'serves legacy json feed routes when json is requested by extension' , :aggregate_failures do
56- stub_legacy_feed ( '{"version":"https://jsonfeed.org/version/1.1"}' )
75+ it 'serves static json feed routes when json is requested by extension' , :aggregate_failures do
76+ stub_static_feed
5777 get '/legacy.json'
5878
5979 expect ( json_feed_response_tuple ) . to eq (
6080 [ 200 , 'application/feed+json' , { 'version' => 'https://jsonfeed.org/version/1.1' } ]
6181 )
6282 end
6383
64- it 'serves HEAD requests for legacy feed routes with negotiated headers only' , :aggregate_failures do # rubocop:disable RSpec/ExampleLength
65- stub_legacy_feed ( '<rss/>' )
84+ it 'serves HEAD requests for static feed routes with negotiated headers only' , :aggregate_failures do # rubocop:disable RSpec/ExampleLength
85+ stub_static_feed
6686 head '/legacy'
6787
6888 expect ( last_response . status ) . to eq ( 200 )
@@ -72,16 +92,15 @@ def app = described_class
7292 end
7393
7494 it 'coerces string ttl values before cache expiry math' , :aggregate_failures do
75- allow ( Html2rss ::Web ::Feeds ) . to receive ( :generate_feed ) . and_return ( '<rss/>' )
76- allow ( Html2rss ::Web ::LocalConfig ) . to receive ( :find ) . and_return ( { channel : { ttl : '180' } } )
95+ stub_static_feed ( ttl : '180' )
7796
7897 get '/legacy'
7998
8099 expect ( last_response . status ) . to eq ( 200 )
81100 expect ( last_response . headers [ 'Cache-Control' ] ) . to include ( 'max-age=10800' )
82101 end
83102
84- it 'renders XML error when legacy feed generation fails' , :aggregate_failures do
103+ it 'renders XML error when static feed generation fails' , :aggregate_failures do
85104 allow ( Html2rss ::Web ::XmlBuilder ) . to receive ( :build_error_feed ) . and_return ( '<error/>' )
86105
87106 get '/missing-feed'
@@ -91,7 +110,7 @@ def app = described_class
91110 expect ( last_response . body ) . to eq ( '<error/>' )
92111 end
93112
94- it 'renders JSON Feed-shaped errors when legacy json feed generation fails' , :aggregate_failures do
113+ it 'renders JSON Feed-shaped errors when static json feed generation fails' , :aggregate_failures do
95114 get '/missing-feed.json'
96115
97116 expect ( json_feed_error_tuple ) . to eq (
0 commit comments