mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2025-12-09 13:46:21 +08:00
Add UpdateStatusColumnService service
This commit is contained in:
parent
de2ee66dd4
commit
14b43d516e
6 changed files with 102 additions and 7 deletions
|
|
@ -51,7 +51,7 @@ module RepositoryColumns
|
|||
.call(user: current_user,
|
||||
team: current_team,
|
||||
column: @repository_column,
|
||||
params: repository_column_params)
|
||||
params: update_repository_column_params)
|
||||
|
||||
if service.succeed?
|
||||
render json: service.column, status: :ok
|
||||
|
|
@ -85,6 +85,14 @@ module RepositoryColumns
|
|||
|
||||
private
|
||||
|
||||
def repository_column_params
|
||||
params.require(:repository_column).permit(:name, repository_status_items_attributes: %i(status icon))
|
||||
end
|
||||
|
||||
def update_repository_column_params
|
||||
params.require(:repository_column).permit(repository_status_items_attributes: %i(id status icon _destroy))
|
||||
end
|
||||
|
||||
def load_repository
|
||||
@repository = Repository.accessible_by_teams(current_team).find_by(id: params[:repository_id])
|
||||
render_404 unless @repository
|
||||
|
|
@ -95,10 +103,6 @@ module RepositoryColumns
|
|||
render_404 unless @repository_column
|
||||
end
|
||||
|
||||
def repository_column_params
|
||||
params.require(:repository_column).permit(:name, repository_status_items_attributes: %i(status icon))
|
||||
end
|
||||
|
||||
def check_create_permissions
|
||||
render_403 unless can_create_repository_columns?(@repository)
|
||||
end
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ class RepositoryColumn < ApplicationRecord
|
|||
has_many :repository_list_items, dependent: :destroy
|
||||
has_many :repository_status_items, dependent: :destroy, index_errors: true
|
||||
|
||||
accepts_nested_attributes_for :repository_status_items
|
||||
accepts_nested_attributes_for :repository_status_items, allow_destroy: true
|
||||
|
||||
enum data_type: Extends::REPOSITORY_DATA_TYPES
|
||||
|
||||
|
|
|
|||
|
|
@ -4,9 +4,20 @@ module RepositoryColumns
|
|||
class UpdateStatusColumnService < RepositoryColumns::CreateColumnService
|
||||
def initialize(user:, team:, column:, params:)
|
||||
super(user: user, repository: column.repository, team: team, column_name: nil)
|
||||
@column = column
|
||||
@params = params
|
||||
end
|
||||
|
||||
def call; end
|
||||
def call
|
||||
return self unless valid?
|
||||
|
||||
if @column.update(@params)
|
||||
log_activity(:edit_column_inventory)
|
||||
else
|
||||
errors[:repository_column] = @column.errors.messages
|
||||
end
|
||||
|
||||
self
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -0,0 +1,80 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
require 'rails_helper'
|
||||
|
||||
describe RepositoryColumns::UpdateStatusColumnService do
|
||||
let(:user) { create :user }
|
||||
let!(:user_team) { create :user_team, :admin, user: user, team: team }
|
||||
let(:team) { create :team }
|
||||
let(:repository) { create :repository, team: team }
|
||||
let(:column) { create :repository_column, :status_type }
|
||||
let(:status_item) { create(:repository_status_item, repository: repository, repository_column: column) }
|
||||
let(:service_call) do
|
||||
RepositoryColumns::UpdateStatusColumnService.call(column: column,
|
||||
user: user,
|
||||
team: team,
|
||||
params: params)
|
||||
end
|
||||
|
||||
context 'when updates column' do
|
||||
let(:params) { { name: 'my new column' } }
|
||||
|
||||
it 'updates RepositoryColumn record' do
|
||||
column
|
||||
|
||||
expect { service_call }.to change(column, :name)
|
||||
end
|
||||
|
||||
it 'adds Activity record' do
|
||||
expect { service_call }.to(change { Activity.count }.by(1))
|
||||
end
|
||||
end
|
||||
|
||||
context 'when updates column\'s status items ' do
|
||||
let(:params) do
|
||||
{
|
||||
repository_status_items_attributes: [
|
||||
{ id: status_item.id, status: 'my new status' }
|
||||
]
|
||||
}
|
||||
end
|
||||
|
||||
it 'updates status' do
|
||||
expect { service_call }.to(change { status_item.reload.status })
|
||||
end
|
||||
|
||||
context 'when deletes status items' do
|
||||
let(:params) do
|
||||
{
|
||||
repository_status_items_attributes: [
|
||||
{ id: status_item.id, _destroy: true }
|
||||
]
|
||||
}
|
||||
end
|
||||
|
||||
it 'removes RepositoryStatusItem record' do
|
||||
status_item
|
||||
|
||||
expect { service_call }.to(change { RepositoryStatusItem.count }.by(-1))
|
||||
end
|
||||
end
|
||||
|
||||
context 'when valdiations not passed' do
|
||||
let(:params) do
|
||||
{
|
||||
repository_status_items_attributes: [
|
||||
{ id: status_item.id, status: '' }
|
||||
]
|
||||
}
|
||||
end
|
||||
|
||||
it 'returns AR errors' do
|
||||
expect(service_call.errors).to have_key(:repository_column)
|
||||
end
|
||||
|
||||
it 'returns succeed false' do
|
||||
expect(service_call.succeed?).to be_falsey
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
Loading…
Add table
Reference in a new issue