From 6e8788f9ea84fe506ef8d7f3a643f9603e296854 Mon Sep 17 00:00:00 2001 From: Bilal Date: Wed, 8 Jul 2020 14:49:01 +0200 Subject: [PATCH] add misc releases support in API --- .../api/misc_releases_controller.rb | 11 +++++ app/controllers/api/sync_controller.rb | 2 + config/routes.rb | 4 +- .../api/misc_releases_controller_spec.rb | 42 +++++++++++++++++++ spec/controllers/api/notes_controller_spec.rb | 4 ++ spec/controllers/api/sync_controller_spec.rb | 11 +++++ 6 files changed, 72 insertions(+), 2 deletions(-) create mode 100644 app/controllers/api/misc_releases_controller.rb create mode 100644 spec/controllers/api/misc_releases_controller_spec.rb diff --git a/app/controllers/api/misc_releases_controller.rb b/app/controllers/api/misc_releases_controller.rb new file mode 100644 index 0000000..dea720f --- /dev/null +++ b/app/controllers/api/misc_releases_controller.rb @@ -0,0 +1,11 @@ +class Api::MiscReleasesController < Api::ReleasesController + deserializable_resource :misc_release, only: [:create, :update] + + def model_name + "misc_release" + end + + def attributes_for_index + [:name] + end +end diff --git a/app/controllers/api/sync_controller.rb b/app/controllers/api/sync_controller.rb index 8f51615..dbe9402 100644 --- a/app/controllers/api/sync_controller.rb +++ b/app/controllers/api/sync_controller.rb @@ -10,6 +10,7 @@ class Api::SyncController < Api::ApiController @appearance_releases = (AppearanceRelease.where(project: accessible_projects)) @location_releases = (LocationRelease.where(project: accessible_projects)) @material_releases = (MaterialRelease.where(project: accessible_projects)) + @misc_releases = MiscRelease.where(project: accessible_projects) @talent_releases = (TalentRelease.where(project: accessible_projects)) @notes = notes_query(Note.where(notable: @appearance_releases + @location_releases + @material_releases + @talent_releases + @acquired_media_releases )) @@ -22,6 +23,7 @@ class Api::SyncController < Api::ApiController appearance_releases: releases_query(@appearance_releases), location_releases: releases_query(@location_releases), material_releases: releases_query(@material_releases), + misc_releases: releases_query(@misc_releases), talent_releases: releases_query(@talent_releases), notes: @notes } diff --git a/config/routes.rb b/config/routes.rb index d43bfb9..20cac23 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -136,7 +136,7 @@ Rails.application.routes.draw do end end - RELEASES = [:acquired_media_releases, :appearance_releases, :talent_releases, :material_releases, :location_releases] + RELEASES = [:acquired_media_releases, :appearance_releases, :talent_releases, :material_releases, :misc_releases, :location_releases] ALL_RELEASES = RELEASES + [:music_releases, :medical_releases, :misc_releases] ALL_RELEASES.each do |release| @@ -158,7 +158,7 @@ Rails.application.routes.draw do resources :contract_templates, only: [:index] end resources :contract_templates, only: [:show] do - RELEASES.each do |release| + (RELEASES - [:misc_releases]).each do |release| resources release, controller: release, only: [:create] end end diff --git a/spec/controllers/api/misc_releases_controller_spec.rb b/spec/controllers/api/misc_releases_controller_spec.rb new file mode 100644 index 0000000..45cdcf4 --- /dev/null +++ b/spec/controllers/api/misc_releases_controller_spec.rb @@ -0,0 +1,42 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe Api::MiscReleasesController, type: :controller do + let(:current_user) { create(:user) } + let(:project) { create(:project, name: 'first', account: current_user.primary_account) } + + describe '#index' do + it 'returns a succesful response' do + create(:misc_release, person_first_name: 'John', person_last_name: 'Lee', project_id: project.id) + create(:misc_release, person_first_name: 'Jane', person_last_name: 'Lee', project_id: project.id) + + sign_in_to_api(current_user) + get :index, params: { project_id: project.id } + + expect(response).to be_successful + expect(response.body).to include 'John' + expect(response.body).to include 'Jane' + end + end + + describe '#show' do + it 'returns a succesful response' do + release1 = create(:misc_release, person_first_name: 'John', person_last_name: 'Lee', project_id: project.id) + release2 = create(:misc_release, person_first_name: 'Jane', person_last_name: 'Lee', project_id: project.id) + + sign_in_to_api(current_user) + get :show, params: { id: release1 } + + expect(response).to be_successful + expect(response.body).to include 'John' + expect(response.body).not_to include 'Jane' + + get :show, params: { id: release2 } + + expect(response).to be_successful + expect(response.body).not_to include 'John' + expect(response.body).to include 'Jane' + end + end +end diff --git a/spec/controllers/api/notes_controller_spec.rb b/spec/controllers/api/notes_controller_spec.rb index 72a999e..fe0c330 100644 --- a/spec/controllers/api/notes_controller_spec.rb +++ b/spec/controllers/api/notes_controller_spec.rb @@ -18,6 +18,10 @@ releases = [ { type: :material_release, obligatory_attribute: :name + }, + { + type: :misc_release, + obligatory_attribute: :person_name } ] diff --git a/spec/controllers/api/sync_controller_spec.rb b/spec/controllers/api/sync_controller_spec.rb index 2955a64..fff007a 100644 --- a/spec/controllers/api/sync_controller_spec.rb +++ b/spec/controllers/api/sync_controller_spec.rb @@ -110,6 +110,16 @@ RSpec.describe Api::SyncController, type: :controller do expect(guardian_photo).to include('id', 'type', 'attributes') expect(photo_attributes).to include('filename', 'content_type', 'url', 'thumbnail_url') end + + it 'contains misc releases' do + create_default_data + + get :index + + misc_releases = attributes_for_type('misc_releases') + + expect(misc_releases.first).to include('id') + end end private @@ -120,6 +130,7 @@ RSpec.describe Api::SyncController, type: :controller do create(:talent_release, project: project) create(:location_release, project: project) create(:material_release, project: project) + create(:misc_release, project: project) end def create_default_data_with_guardian_info