diff --git a/app/controllers/api/v2/result_assets_controller.rb b/app/controllers/api/v2/result_assets_controller.rb deleted file mode 100644 index fe5aa256b..000000000 --- a/app/controllers/api/v2/result_assets_controller.rb +++ /dev/null @@ -1,74 +0,0 @@ -# frozen_string_literal: true - -module Api - module V2 - class ResultAssetsController < BaseController - before_action :load_team, :load_project, :load_experiment, :load_task, :load_result - before_action :check_manage_permission, only: %i(create destroy) - before_action :load_asset, only: %i(show destroy) - before_action :check_upload_type, only: :create - - def index - result_assets = - timestamps_filter(@result.result_assets).page(params.dig(:page, :number)) - .per(params.dig(:page, :size)) - - render jsonapi: result_assets, each_serializer: ResultAssetSerializer - end - - def show - render jsonapi: @asset.result_asset, serializer: ResultAssetSerializer - end - - def create - asset = if @form_multipart_upload - @result.assets.new(asset_params.merge({ team_id: @team.id })) - else - blob = ActiveStorage::Blob.create_and_upload!( - io: StringIO.new(Base64.decode64(asset_params[:file_data])), - filename: asset_params[:file_name], - content_type: asset_params[:file_type] - ) - @result.assets.new(file: blob, team: @team) - end - - asset.save!(context: :on_api_upload) - asset.post_process_file - - render jsonapi: asset.result_asset, - serializer: ResultAssetSerializer, - status: :created - end - - def destroy - @asset.destroy! - render body: nil - end - - private - - def asset_params - raise TypeError unless params.require(:data).require(:type) == 'attachments' - - return params.require(:data).require(:attributes).permit(:file) if @form_multipart_upload - - attr_list = %i(file_data file_type file_name) - params.require(:data).require(:attributes).require(attr_list) - params.require(:data).require(:attributes).permit(attr_list) - end - - def load_asset - @asset = @result.assets.find(params.require(:id)) - raise PermissionError.new(Result, :read) unless can_read_result?(@result) - end - - def check_upload_type - @form_multipart_upload = true if params.dig(:data, :attributes, :file) - end - - def check_manage_permission - raise PermissionError.new(Result, :manage) unless can_manage_result?(@result) - end - end - end -end diff --git a/app/controllers/api/v2/result_elements/assets_controller.rb b/app/controllers/api/v2/result_elements/assets_controller.rb new file mode 100644 index 000000000..eb28848bc --- /dev/null +++ b/app/controllers/api/v2/result_elements/assets_controller.rb @@ -0,0 +1,76 @@ +# frozen_string_literal: true + +module Api + module V2 + module ResultElements + class AssetsController < ::Api::V2::BaseController + before_action :load_team, :load_project, :load_experiment, :load_task, :load_result + before_action :check_manage_permission, only: %i(create destroy) + before_action :load_asset, only: %i(show destroy) + before_action :check_upload_type, only: :create + + def index + result_assets = + timestamps_filter(@result.assets).page(params.dig(:page, :number)) + .per(params.dig(:page, :size)) + + render jsonapi: result_assets, each_serializer: Api::V2::AssetSerializer + end + + def show + render jsonapi: @asset, serializer: Api::V2::AssetSerializer + end + + def create + asset = if @form_multipart_upload + @result.assets.new(asset_params.merge({ team_id: @team.id })) + else + blob = ActiveStorage::Blob.create_and_upload!( + io: StringIO.new(Base64.decode64(asset_params[:file_data])), + filename: asset_params[:file_name], + content_type: asset_params[:file_type] + ) + @result.assets.new(file: blob, team: @team) + end + + asset.save!(context: :on_api_upload) + asset.post_process_file + + render jsonapi: asset, + serializer: Api::V2::AssetSerializer, + status: :created + end + + def destroy + @asset.destroy! + render body: nil + end + + private + + def asset_params + raise TypeError unless params.require(:data).require(:type) == 'attachments' + + return params.require(:data).require(:attributes).permit(:file) if @form_multipart_upload + + attr_list = %i(file_data file_type file_name) + params.require(:data).require(:attributes).require(attr_list) + params.require(:data).require(:attributes).permit(attr_list) + end + + def load_asset + @asset = @result.assets.find(params.require(:id)) + raise PermissionError.new(Result, :read) unless can_read_result?(@result) + end + + def check_upload_type + @form_multipart_upload = true if params.dig(:data, :attributes, :file) + end + + def check_manage_permission + raise PermissionError.new(Result, :manage) unless can_manage_result?(@result) + end + end + end + end +end diff --git a/app/controllers/api/v2/result_elements/tables_controller.rb b/app/controllers/api/v2/result_elements/tables_controller.rb new file mode 100644 index 000000000..43654c13b --- /dev/null +++ b/app/controllers/api/v2/result_elements/tables_controller.rb @@ -0,0 +1,104 @@ +# frozen_string_literal: true + +module Api + module V2 + module ResultElements + class TablesController < BaseController + before_action :load_team, :load_project, :load_experiment, :load_task, :load_result + before_action only: %i(show update destroy) do + load_result_table(:id) + end + before_action :check_manage_permission, only: %i(create update destroy) + + def index + result_tables = timestamps_filter(@result.result_tables).page(params.dig(:page, :number)) + .per(params.dig(:page, :size)) + + render jsonapi: result_tables, each_serializer: ResultTableSerializer + end + + def show + render jsonapi: @table.result_table, serializer: ResultTableSerializer + end + + def create + table = @result.tables.new(table_params.merge!(team: @team, created_by: current_user)) + + @result.with_lock do + @result.result_orderable_elements.create!( + position: @result.result_orderable_elements.size, + orderable: table.result_table + ) + + table.save! + end + + render jsonapi: table.result_table, serializer: ResultTableSerializer, status: :created + end + + def update + @table.assign_attributes(table_params) + + if @table.changed? && @table.save! + render jsonapi: @table.result_table, serializer: ResultTableSerializer + else + render body: nil, status: :no_content + end + end + + def destroy + @table.destroy! + render body: nil + end + + private + + def check_manage_permission + raise PermissionError.new(Result, :manage) unless can_manage_result?(@result) + end + + def convert_plate_template(metadata_params) + if metadata_params.present? && metadata_params['plateTemplate'] + metadata_params['plateTemplate'] = ActiveRecord::Type::Boolean.new.cast(metadata_params['plateTemplate']) + end + end + + def table_params + raise TypeError unless params.require(:data).require(:type) == 'tables' + + attributes_params = params.require(:data).require(:attributes).permit( + :name, + :contents, + metadata: [ + :plateTemplate, + { cells: %i(col row className) } + ] + ) + + convert_plate_template(attributes_params[:metadata]) + validate_metadata_params(attributes_params) + attributes_params + end + + def validate_metadata_params(attributes_params) + metadata = attributes_params[:metadata] + contents = JSON.parse(attributes_params[:contents] || '{}') + + if metadata.present? && metadata[:cells].present? && contents.present? + metadata_cells = metadata[:cells] + data = contents['data'] + + if data.present? && data[0].present? + data_size = (data[0].is_a?(Array) ? data.size * data[0].size : data.size) + + if data_size < metadata_cells.size + error_message = I18n.t('api.core.errors.table.metadata.detail_too_many_cells') + raise ActionController::BadRequest, error_message + end + end + end + end + end + end + end +end diff --git a/app/controllers/api/v2/result_elements/texts_controller.rb b/app/controllers/api/v2/result_elements/texts_controller.rb new file mode 100644 index 000000000..5c0d25f1e --- /dev/null +++ b/app/controllers/api/v2/result_elements/texts_controller.rb @@ -0,0 +1,68 @@ +# frozen_string_literal: true + +module Api + module V2 + module ResultElements + class TextsController < BaseController + before_action :load_team, :load_project, :load_experiment, :load_task, :load_result + before_action only: %i(show update destroy) do + load_result_text(:id) + end + before_action :check_manage_permission, only: %i(create update destroy) + + def index + result_texts = timestamps_filter(@result.result_texts).page(params.dig(:page, :number)) + .per(params.dig(:page, :size)) + + render jsonapi: result_texts, each_serializer: ResultTextSerializer + end + + def show + render jsonapi: @result_text, serializer: ResultTextSerializer + end + + def create + result_text = @result.result_texts.new(result_text_params) + + @result.with_lock do + @result.result_orderable_elements.create!( + position: @result.result_orderable_elements.size, + orderable: result_text + ) + + result_text.save! + end + + render jsonapi: result_text, serializer: ResultTextSerializer, status: :created + end + + def update + @result_text.assign_attributes(result_text_params) + + if @result_text.changed? && @result_text.save! + render jsonapi: @result_text, serializer: ResultTextSerializer, status: :ok + else + render body: nil, status: :no_content + end + end + + def destroy + @result_text.destroy! + render body: nil + end + + private + + def check_manage_permission + raise PermissionError.new(Result, :manage) unless can_manage_result?(@result) + end + + def result_text_params + raise TypeError unless params.require(:data).require(:type) == 'result_texts' + + params.require(:data).require(:attributes).permit(:text, :name) + end + end + end + end +end diff --git a/app/controllers/api/v2/result_tables_controller.rb b/app/controllers/api/v2/result_tables_controller.rb deleted file mode 100644 index 139861f4e..000000000 --- a/app/controllers/api/v2/result_tables_controller.rb +++ /dev/null @@ -1,102 +0,0 @@ -# frozen_string_literal: true - -module Api - module V2 - class ResultTablesController < BaseController - before_action :load_team, :load_project, :load_experiment, :load_task, :load_result - before_action only: %i(show update destroy) do - load_result_table(:id) - end - before_action :check_manage_permission, only: %i(create update destroy) - - def index - result_tables = timestamps_filter(@result.result_tables).page(params.dig(:page, :number)) - .per(params.dig(:page, :size)) - - render jsonapi: result_tables, each_serializer: ResultTableSerializer - end - - def show - render jsonapi: @table.result_table, serializer: ResultTableSerializer - end - - def create - table = @result.tables.new(table_params.merge!(team: @team, created_by: current_user)) - - @result.with_lock do - @result.result_orderable_elements.create!( - position: @result.result_orderable_elements.size, - orderable: table.result_table - ) - - table.save! - end - - render jsonapi: table.result_table, serializer: ResultTableSerializer, status: :created - end - - def update - @table.assign_attributes(table_params) - - if @table.changed? && @table.save! - render jsonapi: @table.result_table, serializer: ResultTableSerializer - else - render body: nil, status: :no_content - end - end - - def destroy - @table.destroy! - render body: nil - end - - private - - def check_manage_permission - raise PermissionError.new(Result, :manage) unless can_manage_result?(@result) - end - - def convert_plate_template(metadata_params) - if metadata_params.present? && metadata_params['plateTemplate'] - metadata_params['plateTemplate'] = ActiveRecord::Type::Boolean.new.cast(metadata_params['plateTemplate']) - end - end - - def table_params - raise TypeError unless params.require(:data).require(:type) == 'tables' - - attributes_params = params.require(:data).require(:attributes).permit( - :name, - :contents, - metadata: [ - :plateTemplate, - { cells: %i(col row className) } - ] - ) - - convert_plate_template(attributes_params[:metadata]) - validate_metadata_params(attributes_params) - attributes_params - end - - def validate_metadata_params(attributes_params) - metadata = attributes_params[:metadata] - contents = JSON.parse(attributes_params[:contents] || '{}') - - if metadata.present? && metadata[:cells].present? && contents.present? - metadata_cells = metadata[:cells] - data = contents['data'] - - if data.present? && data[0].present? - data_size = (data[0].is_a?(Array) ? data.size * data[0].size : data.size) - - if data_size < metadata_cells.size - error_message = I18n.t('api.core.errors.table.metadata.detail_too_many_cells') - raise ActionController::BadRequest, error_message - end - end - end - end - end - end -end diff --git a/app/controllers/api/v2/result_texts_controller.rb b/app/controllers/api/v2/result_texts_controller.rb deleted file mode 100644 index 4b14c6232..000000000 --- a/app/controllers/api/v2/result_texts_controller.rb +++ /dev/null @@ -1,66 +0,0 @@ -# frozen_string_literal: true - -module Api - module V2 - class ResultTextsController < BaseController - before_action :load_team, :load_project, :load_experiment, :load_task, :load_result - before_action only: %i(show update destroy) do - load_result_text(:id) - end - before_action :check_manage_permission, only: %i(create update destroy) - - def index - result_texts = timestamps_filter(@result.result_texts).page(params.dig(:page, :number)) - .per(params.dig(:page, :size)) - - render jsonapi: result_texts, each_serializer: ResultTextSerializer - end - - def show - render jsonapi: @result_text, serializer: ResultTextSerializer - end - - def create - result_text = @result.result_texts.new(result_text_params) - - @result.with_lock do - @result.result_orderable_elements.create!( - position: @result.result_orderable_elements.size, - orderable: result_text - ) - - result_text.save! - end - - render jsonapi: result_text, serializer: ResultTextSerializer, status: :created - end - - def update - @result_text.assign_attributes(result_text_params) - - if @result_text.changed? && @result_text.save! - render jsonapi: @result_text, serializer: ResultTextSerializer, status: :ok - else - render body: nil, status: :no_content - end - end - - def destroy - @result_text.destroy! - render body: nil - end - - private - - def check_manage_permission - raise PermissionError.new(Result, :manage) unless can_manage_result?(@result) - end - - def result_text_params - raise TypeError unless params.require(:data).require(:type) == 'result_texts' - - params.require(:data).require(:attributes).permit(:text, :name) - end - end - end -end diff --git a/app/controllers/api/v2/step_elements/assets_controller.rb b/app/controllers/api/v2/step_elements/assets_controller.rb index e13f5aee0..856bfd47e 100644 --- a/app/controllers/api/v2/step_elements/assets_controller.rb +++ b/app/controllers/api/v2/step_elements/assets_controller.rb @@ -3,7 +3,41 @@ module Api module V2 module StepElements - class AssetsController < ::Api::V1::AssetsController; end + class AssetsController < ::Api::V1::AssetsController + def index + attachments = + timestamps_filter(@step.assets).page(params.dig(:page, :number)) + .per(params.dig(:page, :size)) + + render jsonapi: attachments, each_serializer: Api::V2::AssetSerializer + end + + def show + render jsonapi: @asset, serializer: Api::V2::AssetSerializer + end + + def create + raise PermissionError.new(Asset, :create) unless can_manage_protocol_in_module?(@protocol) + + if @form_multipart_upload + asset = @step.assets.new(asset_params.merge({ team_id: @team.id })) + else + blob = ActiveStorage::Blob.create_and_upload!( + io: StringIO.new(Base64.decode64(asset_params[:file_data])), + filename: asset_params[:file_name], + content_type: asset_params[:file_type] + ) + asset = @step.assets.new(file: blob, team: @team) + end + + asset.save!(context: :on_api_upload) + asset.post_process_file + + render jsonapi: asset, + serializer: Api::V2::AssetSerializer, + status: :created + end + end end end end diff --git a/app/serializers/api/v2/asset_serializer.rb b/app/serializers/api/v2/asset_serializer.rb new file mode 100644 index 000000000..94a4cd46f --- /dev/null +++ b/app/serializers/api/v2/asset_serializer.rb @@ -0,0 +1,23 @@ +# frozen_string_literal: true + +module Api + module V2 + class AssetSerializer < ActiveModel::Serializer + type :attachments + + attributes :id, :file_name, :file_size, :file_type, :file_url + + include TimestampableModel + + def file_type + object.content_type + end + + def file_url + if object.file&.attached? + Rails.application.routes.url_helpers.rails_blob_path(object.file, disposition: 'attachment') + end + end + end + end +end diff --git a/app/serializers/api/v2/result_asset_serializer.rb b/app/serializers/api/v2/result_asset_serializer.rb deleted file mode 100644 index 728a2a979..000000000 --- a/app/serializers/api/v2/result_asset_serializer.rb +++ /dev/null @@ -1,32 +0,0 @@ -# frozen_string_literal: true - -module Api - module V2 - class ResultAssetSerializer < ActiveModel::Serializer - type :assets - attributes :file_id, :file_name, :file_size, :file_type, :file_url - - def file_id - object.asset&.id - end - - def file_name - object.asset&.file_name - end - - def file_size - object.asset&.file_size - end - - def file_type - object.asset&.content_type - end - - def file_url - if object.asset&.file&.attached? - Rails.application.routes.url_helpers.rails_blob_path(object.asset.file, disposition: 'attachment') - end - end - end - end -end diff --git a/app/serializers/api/v2/result_serializer.rb b/app/serializers/api/v2/result_serializer.rb index c88807d48..90c86d878 100644 --- a/app/serializers/api/v2/result_serializer.rb +++ b/app/serializers/api/v2/result_serializer.rb @@ -10,7 +10,7 @@ module Api has_many :result_comments, key: :comments, serializer: Api::V1::CommentSerializer has_many :result_texts, key: :result_texts, serializer: ResultTextSerializer has_many :result_tables, key: :tables, serializer: ResultTableSerializer - has_many :result_assets, key: :assets, serializer: ResultAssetSerializer + has_many :assets, serializer: AssetSerializer has_many :result_orderable_elements, key: :result_elements, serializer: ResultOrderableElementSerializer include TimestampableModel diff --git a/app/serializers/api/v2/step_serializer.rb b/app/serializers/api/v2/step_serializer.rb index 7b8ac4d89..17eb15615 100644 --- a/app/serializers/api/v2/step_serializer.rb +++ b/app/serializers/api/v2/step_serializer.rb @@ -12,7 +12,7 @@ module Api attribute :completed_on, if: -> { object.completed? } belongs_to :user, serializer: Api::V1::UserSerializer belongs_to :protocol, serializer: Api::V1::ProtocolSerializer - has_many :assets, serializer: Api::V1::AssetSerializer + has_many :assets, serializer: AssetSerializer has_many :checklists, serializer: Api::V1::ChecklistSerializer has_many :tables, serializer: Api::V1::TableSerializer has_many :step_texts, serializer: Api::V1::StepTextSerializer diff --git a/config/routes/api_v2.rb b/config/routes/api_v2.rb index 95da6e232..157b4045e 100644 --- a/config/routes/api_v2.rb +++ b/config/routes/api_v2.rb @@ -95,15 +95,17 @@ namespace :v2 do resources :experiments do resources :tasks do resources :results, only: %i(index create show update destroy) do - resources :result_assets, only: %i(index show create update destroy), path: 'assets' - resources :result_tables, only: %i(index show create update destroy), path: 'tables' - resources :result_texts, only: %i(index show create update destroy) + scope module: 'result_elements' do + resources :assets, except: %i(new edit), path: 'attachments' + resources :tables, except: %i(new edit), path: 'tables' + resources :texts, except: %i(new edit) + end end resources :protocols, only: :show do resources :steps, except: %i(new edit) do scope module: 'step_elements' do - resources :assets, except: %i(new edit) + resources :assets, except: %i(new edit), path: 'attachments' resources :checklists, except: %i(new edit) do resources :checklist_items, except: %i(new edit), as: :items end diff --git a/spec/requests/api/v2/result_assets_controller_spec.rb b/spec/requests/api/v2/result_elements/assets_controller_spec.rb similarity index 89% rename from spec/requests/api/v2/result_assets_controller_spec.rb rename to spec/requests/api/v2/result_elements/assets_controller_spec.rb index 81a529af1..53ea30091 100644 --- a/spec/requests/api/v2/result_assets_controller_spec.rb +++ b/spec/requests/api/v2/result_elements/assets_controller_spec.rb @@ -4,7 +4,7 @@ require 'rails_helper' -RSpec.describe 'Api::V2::ResultAssetsController', type: :request do +RSpec.describe 'Api::V2::ResultElements::AssetsController', type: :request do let(:user) { create(:user) } let(:team) { create(:team, created_by: user) } let(:project) { create(:project, team: team, created_by: user) } @@ -15,7 +15,7 @@ RSpec.describe 'Api::V2::ResultAssetsController', type: :request do let(:valid_headers) { { Authorization: "Bearer #{generate_token(user.id)}", 'Content-Type': 'application/json' } } let(:api_path) do - api_v2_team_project_experiment_task_result_result_assets_path( + api_v2_team_project_experiment_task_result_assets_path( team_id: team.id, project_id: project.id, experiment_id: experiment.id, @@ -24,7 +24,7 @@ RSpec.describe 'Api::V2::ResultAssetsController', type: :request do ) end - describe 'GET result_assets, #index' do + describe 'GET result assets, #index' do let(:result_asset) { create(:result_asset, result: result) } context 'when has valid params' do @@ -37,7 +37,7 @@ RSpec.describe 'Api::V2::ResultAssetsController', type: :request do expect(hash_body[:data]).to match_array( JSON.parse( ActiveModelSerializers::SerializableResource - .new(result.result_assets, each_serializer: Api::V2::ResultAssetSerializer) + .new(result.result_assets, each_serializer: Api::V2::AssetSerializer) .to_json )['data'] ) @@ -46,7 +46,7 @@ RSpec.describe 'Api::V2::ResultAssetsController', type: :request do context 'when result is not found' do it 'renders 404' do - get api_v2_team_project_experiment_task_result_result_assets_path( + get api_v2_team_project_experiment_task_result_assets_path( team_id: team.id, project_id: project.id, experiment_id: experiment.id, @@ -65,7 +65,7 @@ RSpec.describe 'Api::V2::ResultAssetsController', type: :request do context 'when has valid params' do it 'renders 200' do hash_body = nil - get api_v2_team_project_experiment_task_result_result_asset_path( + get api_v2_team_project_experiment_task_result_asset_path( team_id: team.id, project_id: project.id, experiment_id: experiment.id, @@ -79,7 +79,7 @@ RSpec.describe 'Api::V2::ResultAssetsController', type: :request do expect(hash_body[:data]).to match( JSON.parse( ActiveModelSerializers::SerializableResource - .new(result_asset, serializer: Api::V2::ResultAssetSerializer) + .new(result_asset.asset, serializer: Api::V2::AssetSerializer) .to_json )['data'] ) @@ -125,7 +125,7 @@ RSpec.describe 'Api::V2::ResultAssetsController', type: :request do expect(hash_body[:data]).to match( JSON.parse( ActiveModelSerializers::SerializableResource - .new(ResultAsset.last, serializer: Api::V2::ResultAssetSerializer) + .new(ResultAsset.last.asset, serializer: Api::V2::AssetSerializer) .to_json )['data'] ) @@ -155,7 +155,7 @@ RSpec.describe 'Api::V2::ResultAssetsController', type: :request do let(:result_asset_archived) { create(:result_asset, result: result_archived) } let(:action) do - delete(api_v2_team_project_experiment_task_result_result_asset_path( + delete(api_v2_team_project_experiment_task_result_asset_path( team_id: team.id, project_id: project.id, experiment_id: experiment.id, @@ -166,7 +166,7 @@ RSpec.describe 'Api::V2::ResultAssetsController', type: :request do end let(:action_archived) do - delete(api_v2_team_project_experiment_task_result_result_asset_path( + delete(api_v2_team_project_experiment_task_result_asset_path( team_id: team.id, project_id: project.id, experiment_id: experiment.id, diff --git a/spec/requests/api/v2/result_tables_controller_spec.rb b/spec/requests/api/v2/result_elements/tables_controller_spec.rb similarity index 91% rename from spec/requests/api/v2/result_tables_controller_spec.rb rename to spec/requests/api/v2/result_elements/tables_controller_spec.rb index 2402a7fc7..da69e9d26 100644 --- a/spec/requests/api/v2/result_tables_controller_spec.rb +++ b/spec/requests/api/v2/result_elements/tables_controller_spec.rb @@ -4,7 +4,7 @@ require 'rails_helper' -RSpec.describe 'Api::V2::ResultTablesController', type: :request do +RSpec.describe 'Api::V2::ResultElements::TablesController', type: :request do let(:user) { create(:user) } let(:team) { create(:team, created_by: user) } let(:project) { create(:project, team: team, created_by: user) } @@ -15,7 +15,7 @@ RSpec.describe 'Api::V2::ResultTablesController', type: :request do let(:valid_headers) { { Authorization: "Bearer #{generate_token(user.id)}", 'Content-Type': 'application/json' } } let(:api_path) do - api_v2_team_project_experiment_task_result_result_tables_path( + api_v2_team_project_experiment_task_result_tables_path( team_id: team.id, project_id: project.id, experiment_id: experiment.id, @@ -46,7 +46,7 @@ RSpec.describe 'Api::V2::ResultTablesController', type: :request do context 'when result is not found' do it 'renders 404' do - get api_v2_team_project_experiment_task_result_result_tables_path( + get api_v2_team_project_experiment_task_result_tables_path( team_id: team.id, project_id: project.id, experiment_id: experiment.id, @@ -65,7 +65,7 @@ RSpec.describe 'Api::V2::ResultTablesController', type: :request do context 'when has valid params' do it 'renders 200' do hash_body = nil - get api_v2_team_project_experiment_task_result_result_table_path( + get api_v2_team_project_experiment_task_result_table_path( team_id: team.id, project_id: project.id, experiment_id: experiment.id, @@ -134,7 +134,7 @@ RSpec.describe 'Api::V2::ResultTablesController', type: :request do let(:request_body) do { data: { - type: 'result_tables', + type: 'tables', attributes: {} } } @@ -152,7 +152,7 @@ RSpec.describe 'Api::V2::ResultTablesController', type: :request do let(:result_table) { create(:result_table, result: result) } let(:result_table_archived) { create(:result_table, result: result_archived) } let(:action) do - patch(api_v2_team_project_experiment_task_result_result_table_path( + patch(api_v2_team_project_experiment_task_result_table_path( team_id: team.id, project_id: project.id, experiment_id: experiment.id, @@ -163,7 +163,7 @@ RSpec.describe 'Api::V2::ResultTablesController', type: :request do end let(:action_archived) do - patch(api_v2_team_project_experiment_task_result_result_table_path( + patch(api_v2_team_project_experiment_task_result_table_path( team_id: team.id, project_id: project.id, experiment_id: experiment.id, @@ -211,7 +211,7 @@ RSpec.describe 'Api::V2::ResultTablesController', type: :request do let(:request_body) do { data: { - type: 'result_tables', + type: 'tables', attributes: {} } } @@ -228,7 +228,7 @@ RSpec.describe 'Api::V2::ResultTablesController', type: :request do let(:request_body) do { data: { - type: 'result_tables', + type: 'tables', attributes: { name: 'Result table', contents: '{"data": [["group/time", "1 dpi", "6 dpi", "", ""], ["PVYNTN", "1", "1", "", ""]]}' @@ -249,7 +249,7 @@ RSpec.describe 'Api::V2::ResultTablesController', type: :request do let(:result_table) { create(:result_table, result: result) } let(:result_table_archived) { create(:result_table, result: result_archived) } let(:delete_action) do - delete(api_v2_team_project_experiment_task_result_result_table_path( + delete(api_v2_team_project_experiment_task_result_table_path( team_id: team.id, project_id: project.id, experiment_id: experiment.id, @@ -260,7 +260,7 @@ RSpec.describe 'Api::V2::ResultTablesController', type: :request do end let(:delete_action_archived) do - delete(api_v2_team_project_experiment_task_result_result_table_path( + delete(api_v2_team_project_experiment_task_result_table_path( team_id: team.id, project_id: project.id, experiment_id: experiment.id, diff --git a/spec/requests/api/v2/result_texts_controller_spec.rb b/spec/requests/api/v2/result_elements/texts_controller_spec.rb similarity index 94% rename from spec/requests/api/v2/result_texts_controller_spec.rb rename to spec/requests/api/v2/result_elements/texts_controller_spec.rb index 87a2f27f0..eb0128895 100644 --- a/spec/requests/api/v2/result_texts_controller_spec.rb +++ b/spec/requests/api/v2/result_elements/texts_controller_spec.rb @@ -3,7 +3,7 @@ require 'rails_helper' -RSpec.describe 'Api::V2::ResultTextsController', type: :request do +RSpec.describe 'Api::V2::ResultElements::TextsController', type: :request do let(:user) { create(:user) } let(:team) { create(:team, created_by: user) } let(:project) { create(:project, team: team, created_by: user) } @@ -14,7 +14,7 @@ RSpec.describe 'Api::V2::ResultTextsController', type: :request do let(:valid_headers) { { Authorization: "Bearer #{generate_token(user.id)}", 'Content-Type': 'application/json' } } let(:api_path) do - api_v2_team_project_experiment_task_result_result_texts_path( + api_v2_team_project_experiment_task_result_texts_path( team_id: team.id, project_id: project.id, experiment_id: experiment.id, @@ -45,7 +45,7 @@ RSpec.describe 'Api::V2::ResultTextsController', type: :request do context 'when result is not found' do it 'renders 404' do - get api_v2_team_project_experiment_task_result_result_texts_path( + get api_v2_team_project_experiment_task_result_texts_path( team_id: team.id, project_id: project.id, experiment_id: experiment.id, @@ -64,7 +64,7 @@ RSpec.describe 'Api::V2::ResultTextsController', type: :request do context 'when has valid params' do it 'renders 200' do hash_body = nil - get api_v2_team_project_experiment_task_result_result_text_path( + get api_v2_team_project_experiment_task_result_text_path( team_id: team.id, project_id: project.id, experiment_id: experiment.id, @@ -195,7 +195,7 @@ RSpec.describe 'Api::V2::ResultTextsController', type: :request do let(:result_text) { create(:result_text, result: result) } let(:result_text_archived) { create(:result_text, result: result_archived) } let(:action) do - patch(api_v2_team_project_experiment_task_result_result_text_path( + patch(api_v2_team_project_experiment_task_result_text_path( team_id: team.id, project_id: project.id, experiment_id: experiment.id, @@ -205,7 +205,7 @@ RSpec.describe 'Api::V2::ResultTextsController', type: :request do ), params: request_body.to_json, headers: valid_headers) end let(:action_archived) do - patch(api_v2_team_project_experiment_task_result_result_text_path( + patch(api_v2_team_project_experiment_task_result_text_path( team_id: team.id, project_id: project.id, experiment_id: experiment.id, @@ -335,7 +335,7 @@ RSpec.describe 'Api::V2::ResultTextsController', type: :request do let(:result_text) { create(:result_text, result: result) } let(:result_text_archived) { create(:result_text, result: result_archived) } let(:action) do - delete(api_v2_team_project_experiment_task_result_result_text_path( + delete(api_v2_team_project_experiment_task_result_text_path( team_id: team.id, project_id: project.id, experiment_id: experiment.id, @@ -346,7 +346,7 @@ RSpec.describe 'Api::V2::ResultTextsController', type: :request do end let(:action_archived) do - delete(api_v2_team_project_experiment_task_result_result_text_path( + delete(api_v2_team_project_experiment_task_result_text_path( team_id: team.id, project_id: project.id, experiment_id: experiment.id, diff --git a/spec/requests/api/v2/step_elements/assets_controller_spec.rb b/spec/requests/api/v2/step_elements/assets_controller_spec.rb index ef95a5d5a..1184df291 100644 --- a/spec/requests/api/v2/step_elements/assets_controller_spec.rb +++ b/spec/requests/api/v2/step_elements/assets_controller_spec.rb @@ -2,7 +2,7 @@ require 'rails_helper' -RSpec.describe 'Api::V2::AssetsController', type: :request do +RSpec.describe 'Api::V2::StepElements::AssetsController', type: :request do before :all do @user = create(:user) @team = create(:team, created_by: @user) diff --git a/spec/requests/api/v2/step_elements/checklist_items_controller_spec.rb b/spec/requests/api/v2/step_elements/checklist_items_controller_spec.rb index d3da03685..de20da745 100644 --- a/spec/requests/api/v2/step_elements/checklist_items_controller_spec.rb +++ b/spec/requests/api/v2/step_elements/checklist_items_controller_spec.rb @@ -2,7 +2,7 @@ require 'rails_helper' -RSpec.describe 'Api::V2::ChecklistsController', type: :request do +RSpec.describe 'Api::V2::StepElements::ChecklistItemsController', type: :request do before :all do @user = create(:user) @team = create(:team, created_by: @user) diff --git a/spec/requests/api/v2/step_elements/checklists_controller_spec.rb b/spec/requests/api/v2/step_elements/checklists_controller_spec.rb index 0bf68b345..79394dca6 100644 --- a/spec/requests/api/v2/step_elements/checklists_controller_spec.rb +++ b/spec/requests/api/v2/step_elements/checklists_controller_spec.rb @@ -2,7 +2,7 @@ require 'rails_helper' -RSpec.describe 'Api::V2::ChecklistsController', type: :request do +RSpec.describe 'Api::V2::StepElements::ChecklistsController', type: :request do before :all do @user = create(:user) @team = create(:team, created_by: @user) diff --git a/spec/requests/api/v2/step_elements/tables_controller_spec.rb b/spec/requests/api/v2/step_elements/tables_controller_spec.rb index 8cc2024a0..372601db8 100644 --- a/spec/requests/api/v2/step_elements/tables_controller_spec.rb +++ b/spec/requests/api/v2/step_elements/tables_controller_spec.rb @@ -2,7 +2,7 @@ require 'rails_helper' -RSpec.describe 'Api::V2::StepElements::TablesController', type: :request do +RSpec.describe 'Api::V2::StepElements::StepElements::TablesController', type: :request do before :all do @user = create(:user) @team = create(:team, created_by: @user) diff --git a/spec/requests/api/v2/step_elements/texts_controller_spec.rb b/spec/requests/api/v2/step_elements/texts_controller_spec.rb index f04db5928..0beb6ea58 100644 --- a/spec/requests/api/v2/step_elements/texts_controller_spec.rb +++ b/spec/requests/api/v2/step_elements/texts_controller_spec.rb @@ -2,7 +2,7 @@ require 'rails_helper' -RSpec.describe 'Api::V2::StepElements::TextsController', type: :request do +RSpec.describe 'Api::V2::StepElements::StepElements::TextsController', type: :request do before :all do @user = create(:user) @team = create(:team, created_by: @user)