mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2025-09-11 23:54:43 +08:00
Add controller action for Archive&Restore
This commit is contained in:
parent
26db4f3515
commit
fabfd7ddaf
3 changed files with 170 additions and 1 deletions
|
@ -9,7 +9,7 @@ class RepositoryRowsController < ApplicationController
|
|||
before_action :check_read_permissions, except: %i(create update delete_records copy_records)
|
||||
before_action :check_snapshotting_status, only: %i(create update delete_records copy_records)
|
||||
before_action :check_create_permissions, only: :create
|
||||
before_action :check_delete_permissions, only: :delete_records
|
||||
before_action :check_delete_permissions, only: %i(delete_records archive_records restore_records)
|
||||
before_action :check_manage_permissions, only: %i(update copy_records)
|
||||
|
||||
def index
|
||||
|
@ -170,6 +170,32 @@ class RepositoryRowsController < ApplicationController
|
|||
}
|
||||
end
|
||||
|
||||
def archive_records
|
||||
service = RepositoryActions::ArchiveRowsService.call(repository: @repository,
|
||||
repository_rows: copy_records_params,
|
||||
user: current_user,
|
||||
team: current_team)
|
||||
|
||||
if service.succeed?
|
||||
render json: {}, status: :ok
|
||||
else
|
||||
render json: { status: service.errors }, status: :unprocessable_entity
|
||||
end
|
||||
end
|
||||
|
||||
def restore_records
|
||||
service = RepositoryActions::RestoreRowsService.call(repository: @repository,
|
||||
repository_rows: copy_records_params,
|
||||
user: current_user,
|
||||
team: current_team)
|
||||
|
||||
if service.succeed?
|
||||
render json: {}, status: :ok
|
||||
else
|
||||
render json: { status: service.errors }, status: :unprocessable_entity
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
include StringUtility
|
||||
|
|
|
@ -617,6 +617,12 @@ Rails.application.routes.draw do
|
|||
post 'copy_records',
|
||||
to: 'repository_rows#copy_records',
|
||||
defaults: { format: 'json' }
|
||||
post 'archive_records',
|
||||
to: 'repository_rows#archive_records',
|
||||
defaults: { format: 'json' }
|
||||
post 'restore_records',
|
||||
to: 'repository_rows#restore_records',
|
||||
defaults: { format: 'json' }
|
||||
get 'repository_columns/:id/destroy_html',
|
||||
to: 'repository_columns#destroy_html',
|
||||
as: 'columns_destroy_html'
|
||||
|
|
|
@ -189,4 +189,141 @@ describe RepositoryRowsController, type: :controller do
|
|||
.to(change { Activity.count })
|
||||
end
|
||||
end
|
||||
|
||||
describe 'POST archive_rows' do
|
||||
let(:action) { post :archive_records, params: params, format: :json }
|
||||
let(:params) do
|
||||
{ repository_id: repository.id, selected_rows: [repository_row.id] }
|
||||
end
|
||||
|
||||
context 'when has permission' do
|
||||
context 'when archiving passes' do
|
||||
it 'change archived boolean to true' do
|
||||
action
|
||||
|
||||
expect(repository_row.reload.archived).to be_truthy
|
||||
end
|
||||
|
||||
it 'renders 200' do
|
||||
action
|
||||
|
||||
expect(response).to have_http_status(:ok)
|
||||
end
|
||||
end
|
||||
|
||||
context 'when archiving fails' do
|
||||
before do
|
||||
# Make invalid row record
|
||||
repository_row.name = ''
|
||||
repository_row.save(validate: false)
|
||||
end
|
||||
|
||||
it 'does not change archived boolean to true' do
|
||||
action
|
||||
|
||||
expect(repository_row.reload.archived).to be_falsey
|
||||
end
|
||||
|
||||
it 'renders 422' do
|
||||
action
|
||||
|
||||
expect(response).to have_http_status(:unprocessable_entity)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context 'when does not have permission' do
|
||||
let!(:user_team) { create :user_team, :guest, team: second_team, user: user }
|
||||
let(:second_team) { create :team, created_by: second_user }
|
||||
let(:second_user) { create :user }
|
||||
let(:repository) { create :repository, team: second_team, created_by: second_user }
|
||||
|
||||
context 'when guest' do
|
||||
it 'renders 403' do
|
||||
action
|
||||
|
||||
expect(response).to have_http_status(:forbidden)
|
||||
end
|
||||
end
|
||||
|
||||
context 'when does not see repository' do
|
||||
let(:repository) { create :repository, team: (create :team), created_by: second_user }
|
||||
|
||||
it 'renders 404' do
|
||||
action
|
||||
|
||||
expect(response).to have_http_status(:not_found)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe 'POST restore_rows' do
|
||||
let(:repository_row) { create :repository_row, :archived, repository: repository, created_by: user }
|
||||
let(:action) { post :restore_records, params: params, format: :json }
|
||||
let(:params) do
|
||||
{ repository_id: repository.id, selected_rows: [repository_row.id] }
|
||||
end
|
||||
|
||||
context 'when has permission' do
|
||||
context 'when restoring passes' do
|
||||
it 'change archived boolean to false' do
|
||||
action
|
||||
|
||||
expect(repository_row.reload.archived).to be_falsey
|
||||
end
|
||||
|
||||
it 'renders 200' do
|
||||
action
|
||||
|
||||
expect(response).to have_http_status(:ok)
|
||||
end
|
||||
end
|
||||
|
||||
context 'when restoring fails' do
|
||||
before do
|
||||
# Make invalid row record
|
||||
repository_row.name = ''
|
||||
repository_row.save(validate: false)
|
||||
end
|
||||
|
||||
it 'does not change archived boolean to false' do
|
||||
action
|
||||
|
||||
expect(repository_row.reload.archived).to be_truthy
|
||||
end
|
||||
|
||||
it 'renders 422' do
|
||||
action
|
||||
|
||||
expect(response).to have_http_status(:unprocessable_entity)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context 'when does not have permission' do
|
||||
let!(:user_team) { create :user_team, :guest, team: second_team, user: user }
|
||||
let(:second_team) { create :team, created_by: second_user }
|
||||
let(:second_user) { create :user }
|
||||
let(:repository) { create :repository, team: second_team, created_by: second_user }
|
||||
|
||||
context 'when guest' do
|
||||
it 'renders 403' do
|
||||
action
|
||||
|
||||
expect(response).to have_http_status(:forbidden)
|
||||
end
|
||||
end
|
||||
|
||||
context 'when does not see repository' do
|
||||
let(:repository) { create :repository, team: (create :team), created_by: second_user }
|
||||
|
||||
it 'renders 404' do
|
||||
action
|
||||
|
||||
expect(response).to have_http_status(:not_found)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Add table
Reference in a new issue