Add DateTime columns CRUD endpoints

This commit is contained in:
Urban Rotnik 2019-11-18 15:56:22 +01:00
parent b591346a3f
commit fe4aa12ced
3 changed files with 290 additions and 0 deletions

View file

@ -0,0 +1,54 @@
# frozen_string_literal: true
module RepositoryColumns
class DateTimeColumnsController < BaseColumnsController
include InputSanitizeHelper
before_action :load_column, only: %i(update destroy)
before_action :check_create_permissions, only: :create
before_action :check_manage_permissions, only: %i(update destroy)
def create
service = RepositoryColumns::CreateColumnService
.call(user: current_user, repository: @repository, team: current_team,
column_type: Extends::REPOSITORY_DATA_TYPES[:RepositoryDateTimeValue],
params: repository_column_params)
if service.succeed?
render json: service.column, status: :created
else
render json: service.errors, status: :unprocessable_entity
end
end
def update
service = RepositoryColumns::UpdateColumnService
.call(user: current_user,
team: current_team,
column: @repository_column,
params: repository_column_params)
if service.succeed?
render json: service.column, status: :ok
else
render json: service.errors, status: :unprocessable_entity
end
end
def destroy
service = RepositoryColumns::DeleteColumnService
.call(user: current_user, team: current_team, column: @repository_column)
if service.succeed?
render json: {}, status: :ok
else
render json: service.errors, status: :unprocessable_entity
end
end
private
def repository_column_params
params.require(:repository_column).permit(:name, :range)
end
end
end

View file

@ -586,6 +586,7 @@ Rails.application.routes.draw do
resources :status_columns, only: %i(create update destroy)
resources :list_columns, only: %i(create update destroy)
resources :asset_columns, only: %i(create update destroy)
resources :date_time_columns, only: %i(create update destroy)
end
end

View file

@ -0,0 +1,235 @@
# frozen_string_literal: true
require 'rails_helper'
RSpec.describe RepositoryColumns::DateTimeColumnsController, type: :controller do
login_user
let(:user) { subject.current_user }
let(:team) { create :team, created_by: user }
let!(:user_team) { create :user_team, :admin, user: user, team: team }
let(:repository) { create :repository, created_by: user, team: team }
let(:repository_column) { create(:repository_column, :date_time_type, repository: repository) }
describe 'POST repository_date_time_columns, #create' do
let(:action) { post :create, params: params }
let(:params) do
{
repository_id: repository.id,
repository_column: {
name: 'name',
range: true
}
}
end
before do
service = double('success_service')
allow(service).to(receive(:succeed?)).and_return(true)
allow(service).to(receive(:column)).and_return(repository_column)
allow_any_instance_of(RepositoryColumns::CreateColumnService).to(receive(:call)).and_return(service)
end
context 'when columnd is created' do
it 'respons with status 201' do
action
expect(response).to(have_http_status(201))
end
end
context 'when repository is not found' do
let(:params) do
{
repository_id: -1,
repository_column: {
name: 'name'
}
}
end
it 'respons with status 404' do
action
expect(response).to(have_http_status(404))
end
end
context 'when user does not have permissions' do
before do
user_team.role = :guest
user_team.save
end
it 'respons with status 403' do
action
expect(response).to(have_http_status(403))
end
end
context 'when column cannot be created' do
before do
service = double('failure_service')
allow(service).to(receive(:succeed?)).and_return(false)
allow(service).to(receive(:errors)).and_return({})
allow_any_instance_of(RepositoryColumns::CreateColumnService).to(receive(:call)).and_return(service)
end
it 'respons with status 422' do
action
expect(response).to(have_http_status(422))
end
end
end
describe 'PUT repository_date_time_column, #update' do
let(:action) { patch :update, params: params }
let(:params) do
{
repository_id: repository.id,
id: repository_column.id,
repository_column: {
name: 'name'
}
}
end
before do
service = double('success_service')
allow(service).to(receive(:succeed?)).and_return(true)
allow(service).to(receive(:column)).and_return(repository_column)
allow_any_instance_of(RepositoryColumns::UpdateColumnService).to(receive(:call)).and_return(service)
end
context 'when columnd is updated' do
it 'respons with status 200' do
action
expect(response).to(have_http_status(200))
end
end
context 'when column is not found' do
let(:params) do
{
repository_id: repository.id,
id: -1,
repository_column: {
name: 'name'
}
}
end
it 'respons with status 404' do
action
expect(response).to(have_http_status(404))
end
end
context 'when user does not have permissions' do
before do
user_team.role = :guest
user_team.save
end
it 'respons with status 403' do
action
expect(response).to(have_http_status(403))
end
end
context 'when column cannot be updated' do
before do
service = double('failure_service')
allow(service).to(receive(:succeed?)).and_return(false)
allow(service).to(receive(:errors)).and_return({})
allow_any_instance_of(RepositoryColumns::UpdateColumnService).to(receive(:call)).and_return(service)
end
it 'respons with status 422' do
action
expect(response).to(have_http_status(422))
end
end
end
describe 'DELETE repository_date_time_column, #delete' do
let(:action) { delete :destroy, params: params }
let(:params) do
{
repository_id: repository.id,
id: repository_column.id
}
end
before do
service = double('success_service')
allow(service).to(receive(:succeed?)).and_return(true)
allow_any_instance_of(RepositoryColumns::DeleteColumnService).to(receive(:call)).and_return(service)
end
context 'when column deleted' do
it 'respons with status 200' do
action
expect(response).to(have_http_status(200))
end
end
context 'when column is not found' do
let(:params) do
{
repository_id: repository.id,
id: -1
}
end
it 'respons with status 404' do
action
expect(response).to(have_http_status(404))
end
end
context 'when user does not have permissions' do
before do
user_team.role = :guest
user_team.save
end
it 'respons with status 403' do
action
expect(response).to(have_http_status(403))
end
end
context 'when column cannot be deleted fails' do
before do
service = double('failure_service')
allow(service).to(receive(:succeed?)).and_return(false)
allow(service).to(receive(:errors)).and_return({})
allow_any_instance_of(RepositoryColumns::DeleteColumnService).to(receive(:call)).and_return(service)
end
it 'respons with status 422' do
action
expect(response).to(have_http_status(422))
end
end
end
end