From 6e8788f9ea84fe506ef8d7f3a643f9603e296854 Mon Sep 17 00:00:00 2001 From: Bilal Date: Wed, 8 Jul 2020 14:49:01 +0200 Subject: [PATCH 1/2] 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 -- 2.47.3 From 684883036a8e95403d5dfdb162a54ed93bf120a2 Mon Sep 17 00:00:00 2001 From: Bilal Date: Wed, 8 Jul 2020 16:47:52 +0200 Subject: [PATCH 2/2] add medical releases support in API --- .../api/medical_releases_controller.rb | 11 +++++ app/controllers/api/sync_controller.rb | 4 +- config/routes.rb | 8 ++-- .../api/medical_releases_controller_spec.rb | 42 +++++++++++++++++++ spec/controllers/api/notes_controller_spec.rb | 4 ++ spec/controllers/api/sync_controller_spec.rb | 11 +++++ 6 files changed, 75 insertions(+), 5 deletions(-) create mode 100644 app/controllers/api/medical_releases_controller.rb create mode 100644 spec/controllers/api/medical_releases_controller_spec.rb diff --git a/app/controllers/api/medical_releases_controller.rb b/app/controllers/api/medical_releases_controller.rb new file mode 100644 index 0000000..c62b242 --- /dev/null +++ b/app/controllers/api/medical_releases_controller.rb @@ -0,0 +1,11 @@ +class Api::MedicalReleasesController < Api::ReleasesController + deserializable_resource :medical_release, only: [:create, :update] + + def model_name + "medical_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 dbe9402..ea7536c 100644 --- a/app/controllers/api/sync_controller.rb +++ b/app/controllers/api/sync_controller.rb @@ -10,9 +10,10 @@ 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)) + @medical_releases = MedicalRelease.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 )) + @notes = notes_query(Note.where(notable: @appearance_releases + @location_releases + @material_releases + @medical_releases + @misc_releases + @talent_releases + @acquired_media_releases )) render json: { data: { @@ -23,6 +24,7 @@ class Api::SyncController < Api::ApiController appearance_releases: releases_query(@appearance_releases), location_releases: releases_query(@location_releases), material_releases: releases_query(@material_releases), + medical_releases: releases_query(@medical_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 20cac23..bdd605b 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -2,7 +2,7 @@ require 'oath/constraints/signed_in' require 'sidekiq/web' Rails.application.routes.draw do - AVAILABLE_LOCALES_REGEX = /#{I18n.available_locales.join("|")}/ + AVAILABLE_LOCALES_REGEX = /#{I18n.available_locales.join("|")}/.freeze concern :confirmable do resources :video_release_confirmations, only: [:new, :create, :destroy] @@ -136,8 +136,8 @@ Rails.application.routes.draw do end end - RELEASES = [:acquired_media_releases, :appearance_releases, :talent_releases, :material_releases, :misc_releases, :location_releases] - ALL_RELEASES = RELEASES + [:music_releases, :medical_releases, :misc_releases] + RELEASES = [:acquired_media_releases, :appearance_releases, :talent_releases, :material_releases, :medical_releases, :misc_releases, :location_releases].freeze + ALL_RELEASES = RELEASES + [:music_releases] ALL_RELEASES.each do |release| resources release, only: [], concerns: :taggable @@ -158,7 +158,7 @@ Rails.application.routes.draw do resources :contract_templates, only: [:index] end resources :contract_templates, only: [:show] do - (RELEASES - [:misc_releases]).each do |release| + (RELEASES - [:misc_releases, :medical_releases]).each do |release| resources release, controller: release, only: [:create] end end diff --git a/spec/controllers/api/medical_releases_controller_spec.rb b/spec/controllers/api/medical_releases_controller_spec.rb new file mode 100644 index 0000000..d6e92ca --- /dev/null +++ b/spec/controllers/api/medical_releases_controller_spec.rb @@ -0,0 +1,42 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe Api::MedicalReleasesController, 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(:medical_release, person_first_name: 'John', person_last_name: 'Lee', project_id: project.id) + create(:medical_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(:medical_release, person_first_name: 'John', person_last_name: 'Lee', project_id: project.id) + release2 = create(:medical_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 fe0c330..e27d6fe 100644 --- a/spec/controllers/api/notes_controller_spec.rb +++ b/spec/controllers/api/notes_controller_spec.rb @@ -19,6 +19,10 @@ releases = [ type: :material_release, obligatory_attribute: :name }, + { + type: :medical_release, + obligatory_attribute: :person_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 fff007a..14b8de3 100644 --- a/spec/controllers/api/sync_controller_spec.rb +++ b/spec/controllers/api/sync_controller_spec.rb @@ -120,6 +120,16 @@ RSpec.describe Api::SyncController, type: :controller do expect(misc_releases.first).to include('id') end + + it 'contains misc releases' do + create_default_data + + get :index + + medical_releases = attributes_for_type('medical_releases') + + expect(medical_releases.first).to include('id') + end end private @@ -130,6 +140,7 @@ RSpec.describe Api::SyncController, type: :controller do create(:talent_release, project: project) create(:location_release, project: project) create(:material_release, project: project) + create(:medical_release, project: project) create(:misc_release, project: project) end -- 2.47.3