Unify API step and result elements controllers implementation and types [SCI-9907] (#6854)

* Unify api step and result elements controllers implementation and types [SCI-9907]

* Update wrong serializer types [SCI-9907]

* Rename result and step text types [SCI-9907]

* Combine result and step assets serializer [SCI-9907]
This commit is contained in:
wandji 2024-01-08 10:31:14 +01:00 committed by GitHub
parent ab98965947
commit 465c8d1f80
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
20 changed files with 348 additions and 315 deletions

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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,

View file

@ -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,

View file

@ -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,

View file

@ -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)

View file

@ -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)

View file

@ -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)

View file

@ -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)

View file

@ -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)