From 3da04c0f7cda73b33cb8ace9d6104800d79370c2 Mon Sep 17 00:00:00 2001 From: Nishanth Vijayan Date: Tue, 15 Mar 2016 12:29:10 +0530 Subject: [PATCH] Update active_model_serializers.Fix conference serializer and api tests The controllers are not using the serializers, because of a bug in active_model_serializer. Hence the update.API tests are fixed to work with the new API response structure. Fixes bugs in conference serializer. --- Gemfile.lock | 4 +- app/serializers/conference_serializer.rb | 58 ++++++++++--------- .../api/v1/rooms_controller_spec.rb | 6 +- .../api/v1/tracks_controller_spec.rb | 6 +- 4 files changed, 39 insertions(+), 35 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index dec9eb47..5af62e75 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -21,8 +21,8 @@ GEM erubis (~> 2.7.0) rails-dom-testing (~> 1.0, >= 1.0.5) rails-html-sanitizer (~> 1.0, >= 1.0.2) - active_model_serializers (0.8.1) - activemodel (>= 3.0) + active_model_serializers (0.9.4) + activemodel (>= 3.2) activejob (4.2.5.2) activesupport (= 4.2.5.2) globalid (>= 0.3.0) diff --git a/app/serializers/conference_serializer.rb b/app/serializers/conference_serializer.rb index 1bed92d9..9ab51c3f 100644 --- a/app/serializers/conference_serializer.rb +++ b/app/serializers/conference_serializer.rb @@ -4,47 +4,51 @@ class ConferenceSerializer < ActiveModel::Serializer :date_range, :revision def difficulty_levels - object.difficulty_levels.map do |difficulty_level| { id: difficulty_level.id, - title: difficulty_level.title, - description: difficulty_level.description + object.program.difficulty_levels.map do |difficulty_level| { id: difficulty_level.id, + title: difficulty_level.title, + description: difficulty_level.description } end end def event_types - object.event_types.map do |event_type| { id: event_type.id, - title: event_type.title, - length: event_type.length, - description: event_type.description + object.program.event_types.map do |event_type| { id: event_type.id, + title: event_type.title, + length: event_type.length, + description: event_type.description } end end def rooms - object.rooms.includes(:events).map do |room| { id: room.id, - size: room.size, - events: room.events.map do |event| { guid: event.title, - title: event.title, - subtitle: event.subtitle, - abstract: event.abstract, - description: event.description, - is_highlight: event.is_highlight, - require_registration: event.require_registration, - start_time: event.start_time, - event_type_id: event.event_type.id, - difficulty_level_id: event.difficulty_level_id, - track_id: event.track_id, - speaker_names: event.speaker_names - } - end - } + if object.venue + object.venue.rooms.includes(:events).map do |room| { id: room.id, + size: room.size, + events: room.events.map do |event| { guid: event.title, + title: event.title, + subtitle: event.subtitle, + abstract: event.abstract, + description: event.description, + is_highlight: event.is_highlight, + require_registration: event.require_registration, + start_time: event.start_time, + event_type_id: event.event_type.id, + difficulty_level_id: event.difficulty_level_id, + track_id: event.track_id, + speaker_names: event.speaker_names + } + end + } + end + else + [] end end def tracks - object.tracks.map do |track| { 'id' => track.id, - 'name' => track.name, - 'description' => track.description + object.program.tracks.map do |track| { 'id' => track.id, + 'name' => track.name, + 'description' => track.description } end end diff --git a/spec/controllers/api/v1/rooms_controller_spec.rb b/spec/controllers/api/v1/rooms_controller_spec.rb index 8976b628..48a8db98 100644 --- a/spec/controllers/api/v1/rooms_controller_spec.rb +++ b/spec/controllers/api/v1/rooms_controller_spec.rb @@ -6,12 +6,12 @@ describe Api::V1::RoomsController do let!(:conference_room) { create(:room, name: 'Conference Room', venue: venue) } let!(:room) { create(:room, name: 'Test Room') } - context 'GET #index' do + describe 'GET #index' do context 'without conference scope' do it 'returns all rooms' do get :index, format: :json - json = JSON.parse(response.body) + json = JSON.parse(response.body)['rooms'] expect(response).to be_success @@ -25,7 +25,7 @@ describe Api::V1::RoomsController do it 'returns all rooms of conference' do get :index, conference_id: conference.short_title, format: :json - json = JSON.parse(response.body) + json = JSON.parse(response.body)['rooms'] expect(response).to be_success diff --git a/spec/controllers/api/v1/tracks_controller_spec.rb b/spec/controllers/api/v1/tracks_controller_spec.rb index c9cdc09e..a1424ce3 100644 --- a/spec/controllers/api/v1/tracks_controller_spec.rb +++ b/spec/controllers/api/v1/tracks_controller_spec.rb @@ -5,12 +5,12 @@ describe Api::V1::TracksController do let!(:conference_track) { create(:track, name: 'Conference Track', program_id: conference.program.id) } let!(:track) { create(:track, name: 'Test Track') } - context 'GET #index' do + describe 'GET #index' do context 'without conference scope' do it 'returns all tracks' do get :index, format: :json - json = JSON.parse(response.body) + json = JSON.parse(response.body)['tracks'] expect(response).to be_success @@ -24,7 +24,7 @@ describe Api::V1::TracksController do it 'returns all rooms of conference' do get :index, conference_id: conference.short_title, format: :json - json = JSON.parse(response.body) + json = JSON.parse(response.body)['tracks'] expect(response).to be_success