spec/service/includes_spec.rb in lhs-0.3.0 vs spec/service/includes_spec.rb in lhs-0.4.0
- old
+ new
@@ -3,59 +3,93 @@
describe LHS::Service do
let(:datastore) { 'http://datastore-stg.lb-service.sunrise.intra.local.ch/v2' }
before(:each) { LHC.config.placeholder('datastore', datastore) }
+ let(:stub_campaign_request) do
+ stub_request(:get, "#{datastore}/content-ads/51dfc5690cf271c375c5a12d")
+ .to_return(body: {
+ 'href' => "#{datastore}/content-ads/51dfc5690cf271c375c5a12d",
+ 'entry' => { 'href' => "#{datastore}/local-entries/lakj35asdflkj1203va" }
+ }.to_json)
+ end
+
+ let(:stub_entry_request) do
+ stub_request(:get, "#{datastore}/local-entries/lakj35asdflkj1203va")
+ .to_return(body: { 'name' => 'Casa Ferlin' }.to_json)
+ end
+
context 'includes' do
before(:each) do
class Feedback < LHS::Service
endpoint ':datastore/feedbacks'
end
-
- stub_request(:get, "#{datastore}/content-ads/51dfc5690cf271c375c5a12d")
- .to_return(status: 200, body: {
- "href" => "#{datastore}/content-ads/51dfc5690cf271c375c5a12d",
- "entry" => {
- "href" => "#{datastore}/local-entries/lakj35asdflkj1203va"
- }
- }.to_json)
-
- stub_request(:get, "#{datastore}/local-entries/lakj35asdflkj1203va")
- .to_return(status: 200, body: {
- "name" => 'Casa Ferlin'
- }.to_json)
+ stub_campaign_request
+ stub_entry_request
end
it 'includes linked resources while fetching multiple resources from one service' do
stub_request(:get, "#{datastore}/feedbacks?has_reviews=true")
- .to_return(status: 200, body: {
- items:[
+ .to_return(status: 200, body: {
+ items: [
{
- "href" => "#{datastore}/feedbacks/-Sc4_pYNpqfsudzhtivfkA",
- "campaign" => {
- "href" => "#{datastore}/content-ads/51dfc5690cf271c375c5a12d"
- }
+ 'href' => "#{datastore}/feedbacks/-Sc4_pYNpqfsudzhtivfkA",
+ 'campaign' => { 'href' => "#{datastore}/content-ads/51dfc5690cf271c375c5a12d" }
}
]
- }.to_json)
+ }.to_json)
feedbacks = Feedback.includes(campaign: :entry).where(has_reviews: true)
expect(feedbacks.first.campaign.entry.name).to eq 'Casa Ferlin'
end
it 'includes linked resources while fetching a single resource from one service' do
stub_request(:get, "#{datastore}/feedbacks/123")
- .to_return(status: 200, body: {
- "href" => "#{datastore}/feedbacks/-Sc4_pYNpqfsudzhtivfkA",
- "campaign" => {
- "href" => "#{datastore}/content-ads/51dfc5690cf271c375c5a12d"
- }
- }.to_json)
+ .to_return(status: 200, body: {
+ 'href' => "#{datastore}/feedbacks/-Sc4_pYNpqfsudzhtivfkA",
+ 'campaign' => { 'href' => "#{datastore}/content-ads/51dfc5690cf271c375c5a12d" }
+ }.to_json)
feedbacks = Feedback.includes(campaign: :entry).find(123)
expect(feedbacks.campaign.entry.name).to eq 'Casa Ferlin'
+ end
+
+ context 'include objects from known services' do
+
+ let(:stub_feedback_request) do
+ stub_request(:get, "#{datastore}/feedbacks")
+ .to_return(status: 200, body: {
+ items: [
+ {
+ 'href' => "#{datastore}/feedbacks/-Sc4_pYNpqfsudzhtivfkA",
+ 'entry' => {
+ 'href' => "#{datastore}/local-entries/lakj35asdflkj1203va"
+ }
+ }
+ ]
+ }.to_json)
+ end
+
+ before(:each) do
+ class Entry < LHS::Service
+ endpoint ':datastore/local-entries/:id'
+ end
+ class SomeInterceptor < LHC::Interceptor; end
+ LHC.config.interceptors = [SomeInterceptor]
+ end
+
+ it 'uses interceptors for included links from known services' do
+ stub_feedback_request
+ stub_entry_request
+
+ @called = 0
+ allow_any_instance_of(SomeInterceptor).to receive(:before_request) { @called += 1 }
+
+ expect(Feedback.includes(:entry).where.first.entry.name).to eq 'Casa Ferlin'
+ expect(@called).to eq 2
+ end
end
end
end