mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2025-03-06 04:34:06 +08:00
Merge pull request #2418 from okriuchykhin/ok_SCI_4276
Add API endpoints for new column types [SCI-4276]
This commit is contained in:
commit
4bea0781da
30 changed files with 1150 additions and 72 deletions
|
@ -0,0 +1,82 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module Api
|
||||
module V1
|
||||
class InventoryChecklistItemsController < BaseController
|
||||
before_action :load_team
|
||||
before_action :load_inventory
|
||||
before_action :load_inventory_column
|
||||
before_action :check_column_type
|
||||
before_action :load_inventory_checklist_item, only: %i(show update destroy)
|
||||
before_action :check_manage_permissions, only: %i(create update destroy)
|
||||
|
||||
def index
|
||||
checklist_items = @inventory_column.repository_checklist_items
|
||||
.page(params.dig(:page, :number))
|
||||
.per(params.dig(:page, :size))
|
||||
render jsonapi: checklist_items, each_serializer: InventoryChecklistItemSerializer
|
||||
end
|
||||
|
||||
def create
|
||||
checklist_item = @inventory_column.repository_checklist_items
|
||||
.create!(inventory_checklist_item_params)
|
||||
render jsonapi: checklist_item,
|
||||
serializer: InventoryChecklistItemSerializer,
|
||||
status: :created
|
||||
end
|
||||
|
||||
def show
|
||||
render jsonapi: @inventory_checklist_item,
|
||||
serializer: InventoryChecklistItemSerializer
|
||||
end
|
||||
|
||||
def update
|
||||
@inventory_checklist_item.attributes = update_inventory_checklist_item_params
|
||||
if @inventory_checklist_item.changed? && @inventory_checklist_item.save!
|
||||
render jsonapi: @inventory_checklist_item,
|
||||
serializer: InventoryChecklistItemSerializer
|
||||
else
|
||||
render body: nil, status: :no_content
|
||||
end
|
||||
end
|
||||
|
||||
def destroy
|
||||
@inventory_checklist_item.destroy!
|
||||
render body: nil
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def check_column_type
|
||||
raise TypeError unless @inventory_column.data_type == 'RepositoryChecklistValue'
|
||||
end
|
||||
|
||||
def load_inventory_checklist_item
|
||||
@inventory_checklist_item = @inventory_column.repository_checklist_items.find(params.require(:id))
|
||||
end
|
||||
|
||||
def check_manage_permissions
|
||||
unless can_manage_repository_column?(@inventory_column)
|
||||
raise PermissionError.new(RepositoryChecklistItem, :manage)
|
||||
end
|
||||
end
|
||||
|
||||
def inventory_checklist_item_params
|
||||
raise TypeError unless params.require(:data).require(:type) == 'inventory_checklist_items'
|
||||
|
||||
params.require(:data).require(:attributes)
|
||||
params.permit(data: { attributes: %i(data) })[:data].merge(
|
||||
created_by: @current_user,
|
||||
last_modified_by: @current_user,
|
||||
repository: @inventory
|
||||
)
|
||||
end
|
||||
|
||||
def update_inventory_checklist_item_params
|
||||
raise IDMismatchError unless params.require(:data).require(:id).to_i == params[:id].to_i
|
||||
|
||||
inventory_checklist_item_params[:attributes]
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -13,94 +13,94 @@ class RepositoryCell < ApplicationRecord
|
|||
includes(:repository_cell)
|
||||
.where(repository_cells: { value_type: 'RepositoryTextValue' })
|
||||
end),
|
||||
optional: true, foreign_key: :value_id
|
||||
optional: true, foreign_key: :value_id, inverse_of: :repository_cell
|
||||
belongs_to :repository_number_value,
|
||||
(lambda do
|
||||
includes(:repository_cell)
|
||||
.where(repository_cells: { value_type: 'RepositoryNumberValue' })
|
||||
end),
|
||||
optional: true, foreign_key: :value_id
|
||||
optional: true, foreign_key: :value_id, inverse_of: :repository_cell
|
||||
belongs_to :repository_date_value,
|
||||
(lambda do
|
||||
includes(:repository_cell)
|
||||
.where(repository_cells: { value_type: 'RepositoryDateTimeValueBase' })
|
||||
end),
|
||||
optional: true, foreign_key: :value_id
|
||||
optional: true, foreign_key: :value_id, inverse_of: :repository_cell
|
||||
belongs_to :repository_list_value,
|
||||
(lambda do
|
||||
includes(:repository_cell)
|
||||
.where(repository_cells: { value_type: 'RepositoryListValue' })
|
||||
end),
|
||||
optional: true, foreign_key: :value_id
|
||||
optional: true, foreign_key: :value_id, inverse_of: :repository_cell
|
||||
belongs_to :repository_asset_value,
|
||||
(lambda do
|
||||
includes(:repository_cell)
|
||||
.where(repository_cells: { value_type: 'RepositoryAssetValue' })
|
||||
end),
|
||||
optional: true, foreign_key: :value_id
|
||||
optional: true, foreign_key: :value_id, inverse_of: :repository_cell
|
||||
|
||||
belongs_to :repository_status_value,
|
||||
(lambda do
|
||||
includes(:repository_cell)
|
||||
.where(repository_cells: { value_type: 'RepositoryStatusValue' })
|
||||
end),
|
||||
optional: true, foreign_key: :value_id
|
||||
optional: true, foreign_key: :value_id, inverse_of: :repository_cell
|
||||
|
||||
belongs_to :repository_checklist_value,
|
||||
(lambda do
|
||||
includes(:repository_cell)
|
||||
.where(repository_cells: { value_type: 'RepositoryChecklistValue' })
|
||||
end),
|
||||
optional: true, foreign_key: :value_id
|
||||
optional: true, foreign_key: :value_id, inverse_of: :repository_cell
|
||||
|
||||
belongs_to :repository_date_time_value_base,
|
||||
(lambda do
|
||||
includes(:repository_cell)
|
||||
.where(repository_cells: { value_type: 'RepositoryDateTimeValueBase' })
|
||||
end),
|
||||
optional: true, foreign_key: :value_id
|
||||
optional: true, foreign_key: :value_id, inverse_of: :repository_cell
|
||||
|
||||
belongs_to :repository_date_time_value,
|
||||
(lambda do
|
||||
includes(:repository_cell)
|
||||
.where(repository_cells: { value_type: 'RepositoryDateTimeValueBase' })
|
||||
end),
|
||||
optional: true, foreign_key: :value_id
|
||||
optional: true, foreign_key: :value_id, inverse_of: :repository_cell
|
||||
|
||||
belongs_to :repository_time_value,
|
||||
(lambda do
|
||||
includes(:repository_cell)
|
||||
.where(repository_cells: { value_type: 'RepositoryDateTimeValueBase' })
|
||||
end),
|
||||
optional: true, foreign_key: :value_id
|
||||
optional: true, foreign_key: :value_id, inverse_of: :repository_cell
|
||||
|
||||
belongs_to :repository_date_time_range_value_base,
|
||||
(lambda do
|
||||
includes(:repository_cell)
|
||||
.where(repository_cells: { value_type: 'RepositoryDateTimeRangeValueBase' })
|
||||
end),
|
||||
optional: true, foreign_key: :value_id
|
||||
optional: true, foreign_key: :value_id, inverse_of: :repository_cell
|
||||
|
||||
belongs_to :repository_date_time_range_value,
|
||||
(lambda do
|
||||
includes(:repository_cell)
|
||||
.where(repository_cells: { value_type: 'RepositoryDateTimeRangeValueBase' })
|
||||
end),
|
||||
optional: true, foreign_key: :value_id
|
||||
optional: true, foreign_key: :value_id, inverse_of: :repository_cell
|
||||
|
||||
belongs_to :repository_date_range_value,
|
||||
(lambda do
|
||||
includes(:repository_cell)
|
||||
.where(repository_cells: { value_type: 'RepositoryDateTimeRangeValueBase' })
|
||||
end),
|
||||
optional: true, foreign_key: :value_id
|
||||
optional: true, foreign_key: :value_id, inverse_of: :repository_cell
|
||||
|
||||
belongs_to :repository_time_range_value,
|
||||
(lambda do
|
||||
includes(:repository_cell)
|
||||
.where(repository_cells: { value_type: 'RepositoryDateTimeRangeValueBase' })
|
||||
end),
|
||||
optional: true, foreign_key: :value_id
|
||||
optional: true, foreign_key: :value_id, inverse_of: :repository_cell
|
||||
|
||||
validates :repository_column,
|
||||
inclusion: { in: (lambda do |cell|
|
||||
|
|
|
@ -30,11 +30,15 @@ class RepositoryChecklistValue < ApplicationRecord
|
|||
end
|
||||
|
||||
def data_changed?(new_data)
|
||||
JSON.parse(new_data) != repository_checklist_items.pluck(:id)
|
||||
if new_data.is_a?(String)
|
||||
JSON.parse(new_data) != repository_checklist_items.pluck(:id)
|
||||
else
|
||||
new_data != repository_checklist_items.pluck(:id)
|
||||
end
|
||||
end
|
||||
|
||||
def update_data!(new_data, user)
|
||||
item_ids = JSON.parse(new_data)
|
||||
item_ids = new_data.is_a?(String) ? JSON.parse(new_data) : new_data
|
||||
return destroy! if item_ids.blank?
|
||||
|
||||
self.repository_checklist_items = repository_cell.repository_column
|
||||
|
@ -45,11 +49,12 @@ class RepositoryChecklistValue < ApplicationRecord
|
|||
end
|
||||
|
||||
def self.new_with_payload(payload, attributes)
|
||||
item_ids = payload.is_a?(String) ? JSON.parse(payload) : payload
|
||||
value = new(attributes)
|
||||
value.repository_checklist_items = value.repository_cell
|
||||
.repository_column
|
||||
.repository_checklist_items
|
||||
.where(id: JSON.parse(payload))
|
||||
.where(id: item_ids)
|
||||
value
|
||||
end
|
||||
|
||||
|
|
|
@ -4,7 +4,7 @@ class RepositoryDateRangeValue < RepositoryDateTimeRangeValueBase
|
|||
PRELOAD_INCLUDE = :repository_date_range_value
|
||||
|
||||
def data_changed?(new_data)
|
||||
data = JSON.parse(new_data).symbolize_keys
|
||||
data = new_data.is_a?(String) ? JSON.parse(new_data).symbolize_keys : new_data
|
||||
st = Time.zone.parse(data[:start_time])
|
||||
et = Time.zone.parse(data[:end_time])
|
||||
st.to_date != start_time.to_date || et.to_date != end_time.to_date
|
||||
|
@ -15,7 +15,7 @@ class RepositoryDateRangeValue < RepositoryDateTimeRangeValueBase
|
|||
end
|
||||
|
||||
def self.new_with_payload(payload, attributes)
|
||||
data = JSON.parse(payload).symbolize_keys
|
||||
data = payload.is_a?(String) ? JSON.parse(payload).symbolize_keys : payload
|
||||
|
||||
value = new(attributes)
|
||||
value.start_time = Time.zone.parse(data[:start_time])
|
||||
|
|
|
@ -4,7 +4,7 @@ class RepositoryDateTimeRangeValue < RepositoryDateTimeRangeValueBase
|
|||
PRELOAD_INCLUDE = :repository_date_time_range_value
|
||||
|
||||
def data_changed?(new_data)
|
||||
data = JSON.parse(new_data).symbolize_keys
|
||||
data = new_data.is_a?(String) ? JSON.parse(new_data).symbolize_keys : new_data
|
||||
st = Time.zone.parse(data[:start_time])
|
||||
et = Time.zone.parse(data[:end_time])
|
||||
st.to_i != start_time.to_i || et.to_i != end_time.to_i
|
||||
|
@ -15,7 +15,7 @@ class RepositoryDateTimeRangeValue < RepositoryDateTimeRangeValueBase
|
|||
end
|
||||
|
||||
def self.new_with_payload(payload, attributes)
|
||||
data = JSON.parse(payload).symbolize_keys
|
||||
data = payload.is_a?(String) ? JSON.parse(payload).symbolize_keys : payload
|
||||
|
||||
value = new(attributes)
|
||||
value.start_time = Time.zone.parse(data[:start_time])
|
||||
|
|
|
@ -27,7 +27,7 @@ class RepositoryDateTimeRangeValueBase < ApplicationRecord
|
|||
end
|
||||
|
||||
def update_data!(new_data, user)
|
||||
data = JSON.parse(new_data).symbolize_keys
|
||||
data = new_data.is_a?(String) ? JSON.parse(new_data).symbolize_keys : new_data
|
||||
self.start_time = Time.zone.parse(data[:start_time])
|
||||
self.end_time = Time.zone.parse(data[:end_time])
|
||||
self.last_modified_by = user
|
||||
|
|
|
@ -7,7 +7,7 @@ class RepositoryDateTimeValueBase < ApplicationRecord
|
|||
inverse_of: :created_repository_date_time_values
|
||||
belongs_to :last_modified_by, foreign_key: :last_modified_by_id, class_name: 'User', optional: true,
|
||||
inverse_of: :modified_repository_date_time_values
|
||||
has_one :repository_cell, as: :value, dependent: :destroy, inverse_of: :repository_date_time_value
|
||||
has_one :repository_cell, as: :value, dependent: :destroy
|
||||
accepts_nested_attributes_for :repository_cell
|
||||
|
||||
validates :repository_cell, :data, :type, presence: true
|
||||
|
|
|
@ -1,9 +1,13 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class RepositoryTextValue < ApplicationRecord
|
||||
belongs_to :created_by, foreign_key: :created_by_id, class_name: 'User'
|
||||
belongs_to :last_modified_by, foreign_key: :last_modified_by_id, class_name: 'User'
|
||||
has_one :repository_cell, as: :value, dependent: :destroy, inverse_of: :value
|
||||
belongs_to :created_by, foreign_key: :created_by_id,
|
||||
class_name: 'User',
|
||||
inverse_of: :created_repository_text_values
|
||||
belongs_to :last_modified_by, foreign_key: :last_modified_by_id,
|
||||
class_name: 'User',
|
||||
inverse_of: :modified_repository_text_values
|
||||
has_one :repository_cell, as: :value, dependent: :destroy
|
||||
accepts_nested_attributes_for :repository_cell
|
||||
|
||||
validates :repository_cell, presence: true
|
||||
|
|
|
@ -4,7 +4,7 @@ class RepositoryTimeRangeValue < RepositoryDateTimeRangeValueBase
|
|||
PRELOAD_INCLUDE = :repository_time_range_value
|
||||
|
||||
def data_changed?(new_data)
|
||||
data = JSON.parse(new_data).symbolize_keys
|
||||
data = new_data.is_a?(String) ? JSON.parse(new_data).symbolize_keys : new_data
|
||||
|
||||
st = Time.zone.parse(data[:start_time])
|
||||
et = Time.zone.parse(data[:end_time])
|
||||
|
@ -16,7 +16,7 @@ class RepositoryTimeRangeValue < RepositoryDateTimeRangeValueBase
|
|||
end
|
||||
|
||||
def self.new_with_payload(payload, attributes)
|
||||
data = JSON.parse(payload).symbolize_keys
|
||||
data = payload.is_a?(String) ? JSON.parse(payload).symbolize_keys : payload
|
||||
|
||||
value = new(attributes)
|
||||
value.start_time = Time.zone.parse(data[:start_time])
|
||||
|
|
|
@ -19,15 +19,6 @@ class User < ApplicationRecord
|
|||
|
||||
has_one_attached :avatar
|
||||
|
||||
# has_attached_file :avatar,
|
||||
# styles: {
|
||||
# medium: Constants::MEDIUM_PIC_FORMAT,
|
||||
# thumb: Constants::THUMB_PIC_FORMAT,
|
||||
# icon: Constants::ICON_PIC_FORMAT,
|
||||
# icon_small: Constants::ICON_SMALL_PIC_FORMAT
|
||||
# },
|
||||
# default_url: Constants::DEFAULT_AVATAR_URL
|
||||
|
||||
auto_strip_attributes :full_name, :initials, nullify: false
|
||||
validates :full_name,
|
||||
presence: true,
|
||||
|
@ -39,10 +30,6 @@ class User < ApplicationRecord
|
|||
presence: true,
|
||||
length: { maximum: Constants::EMAIL_MAX_LENGTH }
|
||||
|
||||
# validates_attachment :avatar,
|
||||
# :content_type => { :content_type => ["image/jpeg", "image/png"] },
|
||||
# size: { less_than: Constants::AVATAR_MAX_SIZE_MB.megabyte,
|
||||
# message: I18n.t('client_api.user.avatar_too_big') }
|
||||
validate :time_zone_check
|
||||
|
||||
store_accessor :settings, :time_zone, :notifications_settings
|
||||
|
@ -274,6 +261,16 @@ class User < ApplicationRecord
|
|||
foreign_key: 'last_modified_by_id',
|
||||
inverse_of: :last_modified_by,
|
||||
dependent: :nullify
|
||||
has_many :created_repository_text_values,
|
||||
class_name: 'RepositoryTextValue',
|
||||
foreign_key: 'created_by_id',
|
||||
inverse_of: :created_by,
|
||||
dependent: :nullify
|
||||
has_many :modified_repository_text_values,
|
||||
class_name: 'RepositoryTextValue',
|
||||
foreign_key: 'last_modified_by_id',
|
||||
inverse_of: :last_modified_by,
|
||||
dependent: :nullify
|
||||
|
||||
has_many :user_notifications, inverse_of: :user
|
||||
has_many :notifications, through: :user_notifications
|
||||
|
|
|
@ -10,14 +10,14 @@ module Api
|
|||
def value
|
||||
ActiveModelSerializers::SerializableResource.new(
|
||||
object.value,
|
||||
class_name: object.value_type,
|
||||
class_name: object.repository_column.data_type,
|
||||
namespace: Api::V1,
|
||||
adapter: :attribute
|
||||
).as_json
|
||||
end
|
||||
|
||||
def value_type
|
||||
Extends::API_REPOSITORY_DATA_TYPE_MAPPINGS[object.value_type]
|
||||
Extends::API_REPOSITORY_DATA_TYPE_MAPPINGS[object.repository_column.data_type]
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -0,0 +1,10 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module Api
|
||||
module V1
|
||||
class InventoryChecklistItemSerializer < ActiveModel::Serializer
|
||||
type :inventory_checklist_items
|
||||
attributes :id, :data
|
||||
end
|
||||
end
|
||||
end
|
|
@ -13,6 +13,14 @@ module Api
|
|||
object.data_type == 'RepositoryListValue' &&
|
||||
!instance_options[:hide_list_items]
|
||||
end)
|
||||
has_many :repository_checklist_items,
|
||||
key: :inventory_checklist_items,
|
||||
serializer: InventoryChecklistItemSerializer,
|
||||
class_name: 'RepositoryChecklistItem',
|
||||
if: (lambda do
|
||||
object.data_type == 'RepositoryChecklistValue' &&
|
||||
!instance_options[:hide_list_items]
|
||||
end)
|
||||
has_many :repository_status_items,
|
||||
key: :repository_status_items,
|
||||
serializer: InventoryStatusItemSerializer,
|
||||
|
|
|
@ -0,0 +1,14 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module Api
|
||||
module V1
|
||||
class RepositoryChecklistValueSerializer < ActiveModel::Serializer
|
||||
attribute :inventory_checklist_item_ids do
|
||||
object.repository_checklist_items.pluck(:id)
|
||||
end
|
||||
attribute :inventory_checklist_item_names do
|
||||
object.repository_checklist_items.pluck(:data)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -0,0 +1,9 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module Api
|
||||
module V1
|
||||
class RepositoryDateRangeValueSerializer < ActiveModel::Serializer
|
||||
attribute :formatted, key: :date_range
|
||||
end
|
||||
end
|
||||
end
|
|
@ -0,0 +1,9 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module Api
|
||||
module V1
|
||||
class RepositoryDateTimeRangeValueSerializer < ActiveModel::Serializer
|
||||
attribute :formatted, key: :date_time_range
|
||||
end
|
||||
end
|
||||
end
|
|
@ -0,0 +1,9 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module Api
|
||||
module V1
|
||||
class RepositoryDateTimeValueSerializer < ActiveModel::Serializer
|
||||
attribute :formatted, key: :date_time
|
||||
end
|
||||
end
|
||||
end
|
|
@ -0,0 +1,9 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module Api
|
||||
module V1
|
||||
class RepositoryDateValueSerializer < ActiveModel::Serializer
|
||||
attribute :formatted, key: :date
|
||||
end
|
||||
end
|
||||
end
|
15
app/serializers/api/v1/repository_status_value_serializer.rb
Normal file
15
app/serializers/api/v1/repository_status_value_serializer.rb
Normal file
|
@ -0,0 +1,15 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module Api
|
||||
module V1
|
||||
class RepositoryStatusValueSerializer < ActiveModel::Serializer
|
||||
attribute :repository_status_item_id, key: :inventory_status_item_id
|
||||
attribute :inventory_status_item_icon do
|
||||
object.repository_status_item.icon
|
||||
end
|
||||
attribute :inventory_status_item_name do
|
||||
object.repository_status_item.status
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -0,0 +1,9 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module Api
|
||||
module V1
|
||||
class RepositoryTimeRangeValueSerializer < ActiveModel::Serializer
|
||||
attribute :formatted, key: :time_range
|
||||
end
|
||||
end
|
||||
end
|
|
@ -0,0 +1,9 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module Api
|
||||
module V1
|
||||
class RepositoryTimeValueSerializer < ActiveModel::Serializer
|
||||
attribute :formatted, key: :time
|
||||
end
|
||||
end
|
||||
end
|
|
@ -94,7 +94,13 @@ class Extends
|
|||
|
||||
API_REPOSITORY_DATA_TYPE_MAPPINGS = { 'RepositoryTextValue' => 'text',
|
||||
'RepositoryDateValue' => 'date',
|
||||
'RepositoryTimeValue' => 'time',
|
||||
'RepositoryDateTimeValue' => 'date_time',
|
||||
'RepositoryDateRangeValue' => 'date_range',
|
||||
'RepositoryTimeRangeValue' => 'time_range',
|
||||
'RepositoryDateTimeRangeValue' => 'date_time_range',
|
||||
'RepositoryListValue' => 'list',
|
||||
'RepositoryChecklistValue' => 'checklist',
|
||||
'RepositoryAssetValue' => 'file',
|
||||
'RepositoryStatusValue' => 'status' }
|
||||
|
||||
|
|
|
@ -665,6 +665,10 @@ Rails.application.routes.draw do
|
|||
only: %i(index create show update destroy),
|
||||
path: 'list_items',
|
||||
as: :list_items
|
||||
resources :inventory_checklist_items,
|
||||
only: %i(index create show update destroy),
|
||||
path: 'checklist_items',
|
||||
as: :checklist_items
|
||||
resources :inventory_status_items,
|
||||
only: %i(index create show update destroy),
|
||||
path: 'status_items',
|
||||
|
|
|
@ -13,6 +13,7 @@ FactoryBot.define do
|
|||
class: 'RepositoryDateTimeRangeValue' do
|
||||
after(:build) do |value|
|
||||
value.repository_cell ||= build(:repository_cell, :date_time_range_value, repository_date_time_range_value: value)
|
||||
value.repository_cell.value = value
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -21,6 +22,7 @@ FactoryBot.define do
|
|||
class: 'RepositoryTimeRangeValue' do
|
||||
after(:build) do |value|
|
||||
value.repository_cell ||= build(:repository_cell, :time_range_value, repository_time_range_value: value)
|
||||
value.repository_cell.value = value
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -29,6 +31,7 @@ FactoryBot.define do
|
|||
class: 'RepositoryDateRangeValue' do
|
||||
after(:build) do |value|
|
||||
value.repository_cell ||= build(:repository_cell, :date_range_value, repository_date_range_value: value)
|
||||
value.repository_cell.value = value
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -10,18 +10,21 @@ FactoryBot.define do
|
|||
factory :repository_date_time_value, parent: :repository_date_time_value_base, class: 'RepositoryDateTimeValue' do
|
||||
after(:build) do |value|
|
||||
value.repository_cell ||= build(:repository_cell, :date_time_value, repository_date_time_value: value)
|
||||
value.repository_cell.value = value
|
||||
end
|
||||
end
|
||||
|
||||
factory :repository_time_value, parent: :repository_date_time_value_base, class: 'RepositoryTimeValue' do
|
||||
after(:build) do |value|
|
||||
value.repository_cell ||= build(:repository_cell, :time_value, repository_time_value: value)
|
||||
value.repository_cell.value = value
|
||||
end
|
||||
end
|
||||
|
||||
factory :repository_date_value, parent: :repository_date_time_value_base, class: 'RepositoryDateValue' do
|
||||
after(:build) do |value|
|
||||
value.repository_cell ||= build(:repository_cell, :date_value, repository_date_value: value)
|
||||
value.repository_cell.value = value
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
FactoryBot.define do
|
||||
factory :repository_status_item do
|
||||
sequence(:icon) { |n| "icon-#{n}" }
|
||||
sequence(:icon) { '😀' }
|
||||
sequence(:status) { |n| "status-#{n}" }
|
||||
repository
|
||||
repository_column
|
||||
|
|
|
@ -9,6 +9,7 @@ FactoryBot.define do
|
|||
repository_text_value.repository_cell ||= build(:repository_cell,
|
||||
:text_value,
|
||||
repository_text_value: repository_text_value)
|
||||
repository_text_value.repository_cell.value = repository_text_value
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
require 'rails_helper'
|
||||
|
||||
describe RepositoryTextValue, type: :model do
|
||||
let(:repository_text_value) { build :repository_text_value }
|
||||
let(:repository_text_value) { create :repository_text_value }
|
||||
|
||||
it 'is valid' do
|
||||
expect(repository_text_value).to be_valid
|
||||
|
|
|
@ -28,22 +28,65 @@ RSpec.describe 'Api::V1::InventoryCellsController', type: :request do
|
|||
second_list_item =
|
||||
create(:repository_list_item, repository: @valid_inventory,
|
||||
repository_column: @list_column, data: Faker::Name.unique.name)
|
||||
@status_column = create(:repository_column, repository: @valid_inventory, data_type: :RepositoryStatusValue)
|
||||
status_item = create(:repository_status_item,
|
||||
repository: @valid_inventory,
|
||||
repository_column: @status_column)
|
||||
second_status_item = create(:repository_status_item,
|
||||
repository: @valid_inventory,
|
||||
repository_column: @status_column)
|
||||
@checklist_column = create(:repository_column, name: Faker::Name.unique.name,
|
||||
repository: @valid_inventory, data_type: :RepositoryChecklistValue)
|
||||
checklist_items =
|
||||
create_list(:repository_checklist_item, 3, repository: @valid_inventory, repository_column: @checklist_column)
|
||||
checklist_item =
|
||||
create(:repository_checklist_item, repository: @valid_inventory,
|
||||
repository_column: @checklist_column, data: Faker::Name.unique.name)
|
||||
@file_column = create(:repository_column, name: Faker::Name.unique.name,
|
||||
repository: @valid_inventory, data_type: :RepositoryAssetValue)
|
||||
asset = create(:asset)
|
||||
@date_column = create(:repository_column, repository: @valid_inventory, data_type: :RepositoryDateValue)
|
||||
@time_column = create(:repository_column, repository: @valid_inventory, data_type: :RepositoryTimeValue)
|
||||
@date_time_column = create(:repository_column, repository: @valid_inventory, data_type: :RepositoryDateTimeValue)
|
||||
@date_range_column = create(:repository_column, repository: @valid_inventory, data_type: :RepositoryDateRangeValue)
|
||||
@time_range_column = create(:repository_column, repository: @valid_inventory, data_type: :RepositoryTimeRangeValue)
|
||||
@date_time_range_column = create(:repository_column,
|
||||
repository: @valid_inventory, data_type: :RepositoryDateTimeRangeValue)
|
||||
|
||||
@valid_item = create(:repository_row, repository: @valid_inventory)
|
||||
|
||||
create(:repository_text_value,
|
||||
data: Faker::Name.name,
|
||||
repository_cell_attributes:
|
||||
{ repository_row: @valid_item, repository_column: @text_column })
|
||||
repository_cell_attributes: { repository_row: @valid_item, repository_column: @text_column })
|
||||
create(:repository_list_value, repository_list_item: list_item,
|
||||
repository_cell_attributes:
|
||||
{ repository_row: @valid_item, repository_column: @list_column })
|
||||
repository_cell_attributes: { repository_row: @valid_item, repository_column: @list_column })
|
||||
create(:repository_status_value, repository_status_item: status_item,
|
||||
repository_cell_attributes: { repository_row: @valid_item, repository_column: @status_column })
|
||||
create(:repository_checklist_value, repository_checklist_items: checklist_items,
|
||||
repository_cell_attributes: { repository_row: @valid_item, repository_column: @checklist_column })
|
||||
create(:repository_asset_value, asset: asset,
|
||||
repository_cell_attributes:
|
||||
{ repository_row: @valid_item, repository_column: @file_column })
|
||||
repository_cell_attributes: { repository_row: @valid_item, repository_column: @file_column })
|
||||
create(:repository_date_value,
|
||||
data: Time.zone.today,
|
||||
repository_cell_attributes: { repository_row: @valid_item, repository_column: @date_column })
|
||||
create(:repository_time_value,
|
||||
data: Time.zone.now,
|
||||
repository_cell_attributes: { repository_row: @valid_item, repository_column: @time_column })
|
||||
create(:repository_date_time_value,
|
||||
data: DateTime.now,
|
||||
repository_cell_attributes: { repository_row: @valid_item, repository_column: @date_time_column })
|
||||
create(:repository_date_range_value,
|
||||
start_time: Time.zone.today,
|
||||
end_time: Time.zone.today + 1.day,
|
||||
repository_cell_attributes: { repository_row: @valid_item, repository_column: @date_range_column })
|
||||
create(:repository_time_range_value,
|
||||
start_time: Time.zone.now,
|
||||
end_time: Time.zone.now + 1.hour,
|
||||
repository_cell_attributes: { repository_row: @valid_item, repository_column: @time_range_column })
|
||||
create(:repository_date_time_range_value,
|
||||
start_time: DateTime.now,
|
||||
end_time: DateTime.now + 1.day,
|
||||
repository_cell_attributes: { repository_row: @valid_item, repository_column: @date_time_range_column })
|
||||
|
||||
@valid_headers =
|
||||
{ 'Authorization': 'Bearer ' + generate_token(@user.id),
|
||||
|
@ -67,6 +110,24 @@ RSpec.describe 'Api::V1::InventoryCellsController', type: :request do
|
|||
}
|
||||
}
|
||||
}
|
||||
@valid_status_body = {
|
||||
data: {
|
||||
type: 'inventory_cells',
|
||||
attributes: {
|
||||
column_id: @status_column.id,
|
||||
value: status_item.id
|
||||
}
|
||||
}
|
||||
}
|
||||
@valid_checklist_body = {
|
||||
data: {
|
||||
type: 'inventory_cells',
|
||||
attributes: {
|
||||
column_id: @checklist_column.id,
|
||||
value: checklist_items.pluck(:id)
|
||||
}
|
||||
}
|
||||
}
|
||||
@valid_file_body = {
|
||||
data: {
|
||||
type: 'inventory_cells',
|
||||
|
@ -79,10 +140,72 @@ RSpec.describe 'Api::V1::InventoryCellsController', type: :request do
|
|||
}
|
||||
}
|
||||
}
|
||||
@valid_date_body = {
|
||||
data: {
|
||||
type: 'inventory_cells',
|
||||
attributes: {
|
||||
column_id: @date_column.id,
|
||||
value: Time.zone.today
|
||||
}
|
||||
}
|
||||
}
|
||||
@valid_time_body = {
|
||||
data: {
|
||||
type: 'inventory_cells',
|
||||
attributes: {
|
||||
column_id: @time_column.id,
|
||||
value: Time.zone.now
|
||||
}
|
||||
}
|
||||
}
|
||||
@valid_date_time_body = {
|
||||
data: {
|
||||
type: 'inventory_cells',
|
||||
attributes: {
|
||||
column_id: @date_time_column.id,
|
||||
value: DateTime.now
|
||||
}
|
||||
}
|
||||
}
|
||||
@valid_date_range_body = {
|
||||
data: {
|
||||
type: 'inventory_cells',
|
||||
attributes: {
|
||||
column_id: @date_range_column.id,
|
||||
value: {
|
||||
start_time: Time.zone.today,
|
||||
end_time: Time.zone.today + 1.day
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@valid_time_range_body = {
|
||||
data: {
|
||||
type: 'inventory_cells',
|
||||
attributes: {
|
||||
column_id: @time_range_column.id,
|
||||
value: {
|
||||
start_time: Time.zone.now,
|
||||
end_time: Time.zone.now + 1.hour
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@valid_date_time_range_body = {
|
||||
data: {
|
||||
type: 'inventory_cells',
|
||||
attributes: {
|
||||
column_id: @date_time_range_column.id,
|
||||
value: {
|
||||
start_time: DateTime.now,
|
||||
end_time: DateTime.now + 1.day
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@update_text_body = {
|
||||
data: {
|
||||
id: @valid_item.repository_cells
|
||||
.where(repository_column: @text_column).first.id,
|
||||
id: @valid_item.repository_cells.where(repository_column: @text_column).first.id,
|
||||
type: 'inventory_cells',
|
||||
attributes: {
|
||||
column_id: @text_column.id,
|
||||
|
@ -92,8 +215,7 @@ RSpec.describe 'Api::V1::InventoryCellsController', type: :request do
|
|||
}
|
||||
@update_list_body = {
|
||||
data: {
|
||||
id: @valid_item.repository_cells
|
||||
.where(repository_column: @list_column).first.id,
|
||||
id: @valid_item.repository_cells.where(repository_column: @list_column).first.id,
|
||||
type: 'inventory_cells',
|
||||
attributes: {
|
||||
column_id: @list_column.id,
|
||||
|
@ -101,10 +223,29 @@ RSpec.describe 'Api::V1::InventoryCellsController', type: :request do
|
|||
}
|
||||
}
|
||||
}
|
||||
@update_status_body = {
|
||||
data: {
|
||||
id: @valid_item.repository_cells.where(repository_column: @status_column).first.id,
|
||||
type: 'inventory_cells',
|
||||
attributes: {
|
||||
column_id: @status_column.id,
|
||||
value: second_status_item.id
|
||||
}
|
||||
}
|
||||
}
|
||||
@update_checklist_body = {
|
||||
data: {
|
||||
id: @valid_item.repository_cells.where(repository_column: @checklist_column).first.id,
|
||||
type: 'inventory_cells',
|
||||
attributes: {
|
||||
column_id: @list_column.id,
|
||||
value: [checklist_item.id]
|
||||
}
|
||||
}
|
||||
}
|
||||
@update_file_body = {
|
||||
data: {
|
||||
id: @valid_item.repository_cells
|
||||
.where(repository_column: @file_column).first.id,
|
||||
id: @valid_item.repository_cells.where(repository_column: @file_column).first.id,
|
||||
type: 'inventory_cells',
|
||||
attributes: {
|
||||
column_id: @file_column.id,
|
||||
|
@ -115,6 +256,75 @@ RSpec.describe 'Api::V1::InventoryCellsController', type: :request do
|
|||
}
|
||||
}
|
||||
}
|
||||
@update_date_body = {
|
||||
data: {
|
||||
id: @valid_item.repository_cells.where(repository_column: @date_column).first.id,
|
||||
type: 'inventory_cells',
|
||||
attributes: {
|
||||
column_id: @date_column.id,
|
||||
value: Time.zone.today + 2.days
|
||||
}
|
||||
}
|
||||
}
|
||||
@update_time_body = {
|
||||
data: {
|
||||
id: @valid_item.repository_cells.where(repository_column: @time_column).first.id,
|
||||
type: 'inventory_cells',
|
||||
attributes: {
|
||||
column_id: @time_column.id,
|
||||
value: Time.zone.now + 2.hours
|
||||
}
|
||||
}
|
||||
}
|
||||
@update_date_time_body = {
|
||||
data: {
|
||||
id: @valid_item.repository_cells.where(repository_column: @date_time_column).first.id,
|
||||
type: 'inventory_cells',
|
||||
attributes: {
|
||||
column_id: @date_time_column.id,
|
||||
value: DateTime.now + 2.hours
|
||||
}
|
||||
}
|
||||
}
|
||||
@update_date_range_body = {
|
||||
data: {
|
||||
id: @valid_item.repository_cells.where(repository_column: @date_range_column).first.id,
|
||||
type: 'inventory_cells',
|
||||
attributes: {
|
||||
column_id: @date_range_column.id,
|
||||
value: {
|
||||
start_time: Time.zone.today,
|
||||
end_time: Time.zone.today + 2.days
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@update_time_range_body = {
|
||||
data: {
|
||||
id: @valid_item.repository_cells.where(repository_column: @time_range_column).first.id,
|
||||
type: 'inventory_cells',
|
||||
attributes: {
|
||||
column_id: @time_range_column.id,
|
||||
value: {
|
||||
start_time: Time.zone.now,
|
||||
end_time: Time.zone.now + 2.hours
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@update_date_time_range_body = {
|
||||
data: {
|
||||
id: @valid_item.repository_cells.where(repository_column: @date_time_range_column).first.id,
|
||||
type: 'inventory_cells',
|
||||
attributes: {
|
||||
column_id: @date_time_range_column.id,
|
||||
value: {
|
||||
start_time: DateTime.now,
|
||||
end_time: DateTime.now + 2.hours
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
end
|
||||
|
||||
describe 'GET inventory_cells, #index' do
|
||||
|
@ -123,7 +333,8 @@ RSpec.describe 'Api::V1::InventoryCellsController', type: :request do
|
|||
get api_v1_team_inventory_item_cells_path(
|
||||
team_id: @team.id,
|
||||
inventory_id: @valid_inventory.id,
|
||||
item_id: @valid_item.id
|
||||
item_id: @valid_item.id,
|
||||
page: { size: 100 }
|
||||
), headers: @valid_headers
|
||||
expect { hash_body = json }.not_to raise_exception
|
||||
expect(hash_body[:data]).to match(
|
||||
|
@ -241,6 +452,42 @@ RSpec.describe 'Api::V1::InventoryCellsController', type: :request do
|
|||
)
|
||||
end
|
||||
|
||||
it 'Response with correct inventory cell, status cell' do
|
||||
hash_body = nil
|
||||
empty_item = create(:repository_row, repository: @valid_inventory)
|
||||
post api_v1_team_inventory_item_cells_path(
|
||||
team_id: @team.id,
|
||||
inventory_id: @valid_inventory.id,
|
||||
item_id: empty_item.id
|
||||
), params: @valid_status_body.to_json, headers: @valid_headers
|
||||
expect(response).to have_http_status 201
|
||||
expect { hash_body = json }.not_to raise_exception
|
||||
expect(hash_body[:data]).to match(
|
||||
ActiveModelSerializers::SerializableResource
|
||||
.new(RepositoryCell.last,
|
||||
serializer: Api::V1::InventoryCellSerializer)
|
||||
.as_json[:data]
|
||||
)
|
||||
end
|
||||
|
||||
it 'Response with correct inventory cell, checklist cell' do
|
||||
hash_body = nil
|
||||
empty_item = create(:repository_row, repository: @valid_inventory)
|
||||
post api_v1_team_inventory_item_cells_path(
|
||||
team_id: @team.id,
|
||||
inventory_id: @valid_inventory.id,
|
||||
item_id: empty_item.id
|
||||
), params: @valid_checklist_body.to_json, headers: @valid_headers
|
||||
expect(response).to have_http_status 201
|
||||
expect { hash_body = json }.not_to raise_exception
|
||||
expect(hash_body[:data]).to match(
|
||||
ActiveModelSerializers::SerializableResource
|
||||
.new(RepositoryCell.last,
|
||||
serializer: Api::V1::InventoryCellSerializer)
|
||||
.as_json[:data]
|
||||
)
|
||||
end
|
||||
|
||||
it 'Response with correct inventory cell, file cell' do
|
||||
hash_body = nil
|
||||
empty_item = create(:repository_row, repository: @valid_inventory)
|
||||
|
@ -259,6 +506,114 @@ RSpec.describe 'Api::V1::InventoryCellsController', type: :request do
|
|||
)
|
||||
end
|
||||
|
||||
it 'Response with correct inventory cell, date cell' do
|
||||
hash_body = nil
|
||||
empty_item = create(:repository_row, repository: @valid_inventory)
|
||||
post api_v1_team_inventory_item_cells_path(
|
||||
team_id: @team.id,
|
||||
inventory_id: @valid_inventory.id,
|
||||
item_id: empty_item.id
|
||||
), params: @valid_date_body.to_json, headers: @valid_headers
|
||||
expect(response).to have_http_status 201
|
||||
expect { hash_body = json }.not_to raise_exception
|
||||
expect(hash_body[:data]).to match(
|
||||
ActiveModelSerializers::SerializableResource
|
||||
.new(RepositoryCell.last,
|
||||
serializer: Api::V1::InventoryCellSerializer)
|
||||
.as_json[:data]
|
||||
)
|
||||
end
|
||||
|
||||
it 'Response with correct inventory cell, time cell' do
|
||||
hash_body = nil
|
||||
empty_item = create(:repository_row, repository: @valid_inventory)
|
||||
post api_v1_team_inventory_item_cells_path(
|
||||
team_id: @team.id,
|
||||
inventory_id: @valid_inventory.id,
|
||||
item_id: empty_item.id
|
||||
), params: @valid_time_body.to_json, headers: @valid_headers
|
||||
expect(response).to have_http_status 201
|
||||
expect { hash_body = json }.not_to raise_exception
|
||||
expect(hash_body[:data]).to match(
|
||||
ActiveModelSerializers::SerializableResource
|
||||
.new(RepositoryCell.last,
|
||||
serializer: Api::V1::InventoryCellSerializer)
|
||||
.as_json[:data]
|
||||
)
|
||||
end
|
||||
|
||||
it 'Response with correct inventory cell, date_time cell' do
|
||||
hash_body = nil
|
||||
empty_item = create(:repository_row, repository: @valid_inventory)
|
||||
post api_v1_team_inventory_item_cells_path(
|
||||
team_id: @team.id,
|
||||
inventory_id: @valid_inventory.id,
|
||||
item_id: empty_item.id
|
||||
), params: @valid_date_time_body.to_json, headers: @valid_headers
|
||||
expect(response).to have_http_status 201
|
||||
expect { hash_body = json }.not_to raise_exception
|
||||
expect(hash_body[:data]).to match(
|
||||
ActiveModelSerializers::SerializableResource
|
||||
.new(RepositoryCell.last,
|
||||
serializer: Api::V1::InventoryCellSerializer)
|
||||
.as_json[:data]
|
||||
)
|
||||
end
|
||||
|
||||
it 'Response with correct inventory cell, date_range cell' do
|
||||
hash_body = nil
|
||||
empty_item = create(:repository_row, repository: @valid_inventory)
|
||||
post api_v1_team_inventory_item_cells_path(
|
||||
team_id: @team.id,
|
||||
inventory_id: @valid_inventory.id,
|
||||
item_id: empty_item.id
|
||||
), params: @valid_date_range_body.to_json, headers: @valid_headers
|
||||
expect(response).to have_http_status 201
|
||||
expect { hash_body = json }.not_to raise_exception
|
||||
expect(hash_body[:data]).to match(
|
||||
ActiveModelSerializers::SerializableResource
|
||||
.new(RepositoryCell.last,
|
||||
serializer: Api::V1::InventoryCellSerializer)
|
||||
.as_json[:data]
|
||||
)
|
||||
end
|
||||
|
||||
it 'Response with correct inventory cell, time_range cell' do
|
||||
hash_body = nil
|
||||
empty_item = create(:repository_row, repository: @valid_inventory)
|
||||
post api_v1_team_inventory_item_cells_path(
|
||||
team_id: @team.id,
|
||||
inventory_id: @valid_inventory.id,
|
||||
item_id: empty_item.id
|
||||
), params: @valid_time_range_body.to_json, headers: @valid_headers
|
||||
expect(response).to have_http_status 201
|
||||
expect { hash_body = json }.not_to raise_exception
|
||||
expect(hash_body[:data]).to match(
|
||||
ActiveModelSerializers::SerializableResource
|
||||
.new(RepositoryCell.last,
|
||||
serializer: Api::V1::InventoryCellSerializer)
|
||||
.as_json[:data]
|
||||
)
|
||||
end
|
||||
|
||||
it 'Response with correct inventory cell, date_time_range cell' do
|
||||
hash_body = nil
|
||||
empty_item = create(:repository_row, repository: @valid_inventory)
|
||||
post api_v1_team_inventory_item_cells_path(
|
||||
team_id: @team.id,
|
||||
inventory_id: @valid_inventory.id,
|
||||
item_id: empty_item.id
|
||||
), params: @valid_date_time_range_body.to_json, headers: @valid_headers
|
||||
expect(response).to have_http_status 201
|
||||
expect { hash_body = json }.not_to raise_exception
|
||||
expect(hash_body[:data]).to match(
|
||||
ActiveModelSerializers::SerializableResource
|
||||
.new(RepositoryCell.last,
|
||||
serializer: Api::V1::InventoryCellSerializer)
|
||||
.as_json[:data]
|
||||
)
|
||||
end
|
||||
|
||||
it 'When invalid request, payload mismatches column type' do
|
||||
hash_body = nil
|
||||
invalid_file_body = @valid_file_body.dup
|
||||
|
@ -318,15 +673,13 @@ RSpec.describe 'Api::V1::InventoryCellsController', type: :request do
|
|||
team_id: @team.id,
|
||||
inventory_id: @valid_inventory.id,
|
||||
item_id: @valid_item.id,
|
||||
id: @valid_item.repository_cells
|
||||
.where(repository_column: @text_column).first.id
|
||||
id: @valid_item.repository_cells.where(repository_column: @text_column).first.id
|
||||
), params: @update_text_body.to_json, headers: @valid_headers
|
||||
expect(response).to have_http_status 200
|
||||
expect { hash_body = json }.not_to raise_exception
|
||||
expect(hash_body[:data]).to match(
|
||||
ActiveModelSerializers::SerializableResource
|
||||
.new(@valid_item.repository_cells
|
||||
.where(repository_column: @text_column).first,
|
||||
.new(@valid_item.repository_cells.where(repository_column: @text_column).first,
|
||||
serializer: Api::V1::InventoryCellSerializer)
|
||||
.as_json[:data]
|
||||
)
|
||||
|
@ -338,15 +691,50 @@ RSpec.describe 'Api::V1::InventoryCellsController', type: :request do
|
|||
team_id: @team.id,
|
||||
inventory_id: @valid_inventory.id,
|
||||
item_id: @valid_item.id,
|
||||
id: @valid_item.repository_cells
|
||||
.where(repository_column: @list_column).first.id
|
||||
id: @valid_item.repository_cells.where(repository_column: @list_column).first.id
|
||||
), params: @update_list_body.to_json, headers: @valid_headers
|
||||
expect(response).to have_http_status 200
|
||||
expect { hash_body = json }.not_to raise_exception
|
||||
expect(hash_body[:data]).to match(
|
||||
ActiveModelSerializers::SerializableResource
|
||||
.new(@valid_item.repository_cells
|
||||
.where(repository_column: @list_column).first,
|
||||
.new(@valid_item.repository_cells.where(repository_column: @list_column).first,
|
||||
serializer: Api::V1::InventoryCellSerializer)
|
||||
.as_json[:data]
|
||||
)
|
||||
end
|
||||
|
||||
it 'Response with correct inventory cell, status cell' do
|
||||
hash_body = nil
|
||||
patch api_v1_team_inventory_item_cell_path(
|
||||
team_id: @team.id,
|
||||
inventory_id: @valid_inventory.id,
|
||||
item_id: @valid_item.id,
|
||||
id: @valid_item.repository_cells.where(repository_column: @status_column).first.id
|
||||
), params: @update_status_body.to_json, headers: @valid_headers
|
||||
expect(response).to have_http_status 200
|
||||
expect { hash_body = json }.not_to raise_exception
|
||||
expect(hash_body[:data]).to match(
|
||||
ActiveModelSerializers::SerializableResource
|
||||
.new(@valid_item.repository_cells.where(repository_column: @status_column).first,
|
||||
serializer: Api::V1::InventoryCellSerializer)
|
||||
.as_json[:data]
|
||||
)
|
||||
end
|
||||
|
||||
it 'Response with correct inventory cell, checklist cell' do
|
||||
hash_body = nil
|
||||
patch api_v1_team_inventory_item_cell_path(
|
||||
team_id: @team.id,
|
||||
inventory_id: @valid_inventory.id,
|
||||
item_id: @valid_item.id,
|
||||
id: @valid_item.repository_cells
|
||||
.where(repository_column: @checklist_column).first.id
|
||||
), params: @update_checklist_body.to_json, headers: @valid_headers
|
||||
expect(response).to have_http_status 200
|
||||
expect { hash_body = json }.not_to raise_exception
|
||||
expect(hash_body[:data]).to match(
|
||||
ActiveModelSerializers::SerializableResource
|
||||
.new(@valid_item.repository_cells.where(repository_column: @checklist_column).first,
|
||||
serializer: Api::V1::InventoryCellSerializer)
|
||||
.as_json[:data]
|
||||
)
|
||||
|
@ -358,15 +746,121 @@ RSpec.describe 'Api::V1::InventoryCellsController', type: :request do
|
|||
team_id: @team.id,
|
||||
inventory_id: @valid_inventory.id,
|
||||
item_id: @valid_item.id,
|
||||
id: @valid_item.repository_cells
|
||||
.where(repository_column: @file_column).first.id
|
||||
id: @valid_item.repository_cells.where(repository_column: @file_column).first.id
|
||||
), params: @update_file_body.to_json, headers: @valid_headers
|
||||
expect(response).to have_http_status 200
|
||||
expect { hash_body = json }.not_to raise_exception
|
||||
expect(hash_body[:data]).to match(
|
||||
ActiveModelSerializers::SerializableResource
|
||||
.new(@valid_item.repository_cells
|
||||
.where(repository_column: @file_column).first,
|
||||
.new(@valid_item.repository_cells.where(repository_column: @file_column).first,
|
||||
serializer: Api::V1::InventoryCellSerializer)
|
||||
.as_json[:data]
|
||||
)
|
||||
end
|
||||
|
||||
it 'Response with correct inventory cell, date cell' do
|
||||
hash_body = nil
|
||||
patch api_v1_team_inventory_item_cell_path(
|
||||
team_id: @team.id,
|
||||
inventory_id: @valid_inventory.id,
|
||||
item_id: @valid_item.id,
|
||||
id: @valid_item.repository_cells.where(repository_column: @date_column).first.id
|
||||
), params: @update_date_body.to_json, headers: @valid_headers
|
||||
expect(response).to have_http_status 200
|
||||
expect { hash_body = json }.not_to raise_exception
|
||||
expect(hash_body[:data]).to match(
|
||||
ActiveModelSerializers::SerializableResource
|
||||
.new(@valid_item.repository_cells.where(repository_column: @date_column).first,
|
||||
serializer: Api::V1::InventoryCellSerializer)
|
||||
.as_json[:data]
|
||||
)
|
||||
end
|
||||
|
||||
it 'Response with correct inventory cell, time cell' do
|
||||
hash_body = nil
|
||||
patch api_v1_team_inventory_item_cell_path(
|
||||
team_id: @team.id,
|
||||
inventory_id: @valid_inventory.id,
|
||||
item_id: @valid_item.id,
|
||||
id: @valid_item.repository_cells.where(repository_column: @time_column).first.id
|
||||
), params: @update_time_body.to_json, headers: @valid_headers
|
||||
expect(response).to have_http_status 200
|
||||
expect { hash_body = json }.not_to raise_exception
|
||||
expect(hash_body[:data]).to match(
|
||||
ActiveModelSerializers::SerializableResource
|
||||
.new(@valid_item.repository_cells.where(repository_column: @time_column).first,
|
||||
serializer: Api::V1::InventoryCellSerializer)
|
||||
.as_json[:data]
|
||||
)
|
||||
end
|
||||
|
||||
it 'Response with correct inventory cell, date_time cell' do
|
||||
hash_body = nil
|
||||
patch api_v1_team_inventory_item_cell_path(
|
||||
team_id: @team.id,
|
||||
inventory_id: @valid_inventory.id,
|
||||
item_id: @valid_item.id,
|
||||
id: @valid_item.repository_cells.where(repository_column: @date_time_column).first.id
|
||||
), params: @update_date_time_body.to_json, headers: @valid_headers
|
||||
expect(response).to have_http_status 200
|
||||
expect { hash_body = json }.not_to raise_exception
|
||||
expect(hash_body[:data]).to match(
|
||||
ActiveModelSerializers::SerializableResource
|
||||
.new(@valid_item.repository_cells.where(repository_column: @date_time_column).first,
|
||||
serializer: Api::V1::InventoryCellSerializer)
|
||||
.as_json[:data]
|
||||
)
|
||||
end
|
||||
|
||||
it 'Response with correct inventory cell, date_range cell' do
|
||||
hash_body = nil
|
||||
patch api_v1_team_inventory_item_cell_path(
|
||||
team_id: @team.id,
|
||||
inventory_id: @valid_inventory.id,
|
||||
item_id: @valid_item.id,
|
||||
id: @valid_item.repository_cells.where(repository_column: @date_range_column).first.id
|
||||
), params: @update_date_range_body.to_json, headers: @valid_headers
|
||||
expect(response).to have_http_status 200
|
||||
expect { hash_body = json }.not_to raise_exception
|
||||
expect(hash_body[:data]).to match(
|
||||
ActiveModelSerializers::SerializableResource
|
||||
.new(@valid_item.repository_cells.where(repository_column: @date_range_column).first,
|
||||
serializer: Api::V1::InventoryCellSerializer)
|
||||
.as_json[:data]
|
||||
)
|
||||
end
|
||||
|
||||
it 'Response with correct inventory cell, time_range cell' do
|
||||
hash_body = nil
|
||||
patch api_v1_team_inventory_item_cell_path(
|
||||
team_id: @team.id,
|
||||
inventory_id: @valid_inventory.id,
|
||||
item_id: @valid_item.id,
|
||||
id: @valid_item.repository_cells.where(repository_column: @time_range_column).first.id
|
||||
), params: @update_time_range_body.to_json, headers: @valid_headers
|
||||
expect(response).to have_http_status 200
|
||||
expect { hash_body = json }.not_to raise_exception
|
||||
expect(hash_body[:data]).to match(
|
||||
ActiveModelSerializers::SerializableResource
|
||||
.new(@valid_item.repository_cells.where(repository_column: @time_range_column).first,
|
||||
serializer: Api::V1::InventoryCellSerializer)
|
||||
.as_json[:data]
|
||||
)
|
||||
end
|
||||
|
||||
it 'Response with correct inventory cell, date_time_range cell' do
|
||||
hash_body = nil
|
||||
patch api_v1_team_inventory_item_cell_path(
|
||||
team_id: @team.id,
|
||||
inventory_id: @valid_inventory.id,
|
||||
item_id: @valid_item.id,
|
||||
id: @valid_item.repository_cells.where(repository_column: @date_time_range_column).first.id
|
||||
), params: @update_date_time_range_body.to_json, headers: @valid_headers
|
||||
expect(response).to have_http_status 200
|
||||
expect { hash_body = json }.not_to raise_exception
|
||||
expect(hash_body[:data]).to match(
|
||||
ActiveModelSerializers::SerializableResource
|
||||
.new(@valid_item.repository_cells.where(repository_column: @date_time_range_column).first,
|
||||
serializer: Api::V1::InventoryCellSerializer)
|
||||
.as_json[:data]
|
||||
)
|
||||
|
@ -380,8 +874,7 @@ RSpec.describe 'Api::V1::InventoryCellsController', type: :request do
|
|||
team_id: @team.id,
|
||||
inventory_id: @valid_inventory.id,
|
||||
item_id: @valid_item.id,
|
||||
id: @valid_item.repository_cells
|
||||
.where(repository_column: @file_column).first.id
|
||||
id: @valid_item.repository_cells.where(repository_column: @file_column).first.id
|
||||
), params: invalid_file_body.to_json, headers: @valid_headers
|
||||
expect(response).to have_http_status 400
|
||||
expect { hash_body = json }.not_to raise_exception
|
||||
|
|
|
@ -0,0 +1,379 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
require 'rails_helper'
|
||||
|
||||
RSpec.describe 'Api::V1::InventoryChecklistItemsController', type: :request do
|
||||
before :all do
|
||||
@user = create(:user)
|
||||
@teams = create_list(:team, 2, created_by: @user)
|
||||
create(:user_team, user: @user, team: @teams.first, role: 2)
|
||||
|
||||
@valid_inventory = create(:repository, name: Faker::Name.unique.name,
|
||||
created_by: @user, team: @teams.first)
|
||||
|
||||
@wrong_inventory = create(:repository, name: Faker::Name.unique.name,
|
||||
created_by: @user, team: @teams.second)
|
||||
create(:repository_column, name: Faker::Name.unique.name,
|
||||
repository: @wrong_inventory, data_type: :RepositoryTextValue)
|
||||
|
||||
@text_column = create(:repository_column, name: Faker::Name.unique.name,
|
||||
repository: @valid_inventory, data_type: :RepositoryTextValue)
|
||||
@checklist_column = create(:repository_column, name: Faker::Name.unique.name,
|
||||
repository: @valid_inventory, data_type: :RepositoryChecklistValue)
|
||||
@wrong_checklist_column = create(:repository_column,
|
||||
name: Faker::Name.unique.name,
|
||||
repository: @wrong_inventory,
|
||||
data_type: :RepositoryChecklistValue)
|
||||
create_list(:repository_checklist_item, 10, repository: @valid_inventory,
|
||||
repository_column: @checklist_column)
|
||||
create(:repository_checklist_item, repository: @wrong_inventory,
|
||||
repository_column: @wrong_checklist_column)
|
||||
|
||||
@valid_headers =
|
||||
{ 'Authorization': 'Bearer ' + generate_token(@user.id) }
|
||||
end
|
||||
|
||||
describe 'GET inventory_checklist_items, #index' do
|
||||
it 'Response with correct inventory list items, default per page' do
|
||||
hash_body = nil
|
||||
get api_v1_team_inventory_column_checklist_items_path(
|
||||
team_id: @teams.first.id,
|
||||
inventory_id: @teams.first.repositories.first.id,
|
||||
column_id: @checklist_column.id
|
||||
), headers: @valid_headers
|
||||
expect { hash_body = json }.not_to raise_exception
|
||||
expect(hash_body[:data]).to match(
|
||||
ActiveModelSerializers::SerializableResource
|
||||
.new(@checklist_column.repository_checklist_items.limit(10),
|
||||
each_serializer: Api::V1::InventoryChecklistItemSerializer)
|
||||
.as_json[:data]
|
||||
)
|
||||
end
|
||||
|
||||
it 'When invalid request, user in not member of the team' do
|
||||
hash_body = nil
|
||||
get api_v1_team_inventory_column_checklist_items_path(
|
||||
team_id: @wrong_inventory.team.id,
|
||||
inventory_id: @wrong_inventory.id,
|
||||
column_id: @wrong_inventory.repository_columns.first.id
|
||||
), headers: @valid_headers
|
||||
expect(response).to have_http_status(403)
|
||||
expect { hash_body = json }.not_to raise_exception
|
||||
expect(hash_body['errors'][0]).to include('status': 403)
|
||||
end
|
||||
|
||||
it 'When invalid request, non existing inventory' do
|
||||
hash_body = nil
|
||||
get api_v1_team_inventory_column_checklist_items_path(
|
||||
team_id: @teams.first.id,
|
||||
inventory_id: 123,
|
||||
column_id: 999
|
||||
), headers: @valid_headers
|
||||
expect(response).to have_http_status(404)
|
||||
expect { hash_body = json }.not_to raise_exception
|
||||
expect(hash_body['errors'][0]).to include('status': 404)
|
||||
end
|
||||
|
||||
it 'When invalid request, repository from another team' do
|
||||
hash_body = nil
|
||||
get api_v1_team_inventory_column_checklist_items_path(
|
||||
team_id: @teams.first.id,
|
||||
inventory_id: @wrong_inventory.id,
|
||||
column_id: @checklist_column.id
|
||||
), headers: @valid_headers
|
||||
expect(response).to have_http_status(404)
|
||||
expect { hash_body = json }.not_to raise_exception
|
||||
expect(hash_body['errors'][0]).to include('status': 404)
|
||||
end
|
||||
|
||||
it 'When invalid request, items from text column' do
|
||||
hash_body = nil
|
||||
get api_v1_team_inventory_column_checklist_items_path(
|
||||
team_id: @teams.first.id,
|
||||
inventory_id: @valid_inventory.id,
|
||||
column_id: @text_column.id
|
||||
), headers: @valid_headers
|
||||
expect(response).to have_http_status(400)
|
||||
expect { hash_body = json }.not_to raise_exception
|
||||
expect(hash_body['errors'][0]).to include('status': 400)
|
||||
end
|
||||
end
|
||||
|
||||
describe 'GET inventory_checklist_items, #show' do
|
||||
it 'Response with correct inventory list item' do
|
||||
hash_body = nil
|
||||
get api_v1_team_inventory_column_checklist_item_path(
|
||||
id: @checklist_column.repository_checklist_items.first.id,
|
||||
team_id: @teams.first.id,
|
||||
inventory_id: @teams.first.repositories.first.id,
|
||||
column_id: @checklist_column.id
|
||||
), headers: @valid_headers
|
||||
expect { hash_body = json }.not_to raise_exception
|
||||
expect(hash_body[:data]).to match(
|
||||
ActiveModelSerializers::SerializableResource
|
||||
.new(@checklist_column.repository_checklist_items.first,
|
||||
serializer: Api::V1::InventoryChecklistItemSerializer)
|
||||
.as_json[:data]
|
||||
)
|
||||
end
|
||||
|
||||
it 'When invalid request, non existing list item' do
|
||||
hash_body = nil
|
||||
get api_v1_team_inventory_column_checklist_item_path(
|
||||
id: 999,
|
||||
team_id: @teams.first.id,
|
||||
inventory_id: @teams.first.repositories.first.id,
|
||||
column_id: @checklist_column.id
|
||||
), headers: @valid_headers
|
||||
expect(response).to have_http_status(404)
|
||||
expect { hash_body = json }.not_to raise_exception
|
||||
expect(hash_body['errors'][0]).to include('status': 404)
|
||||
end
|
||||
|
||||
it 'When invalid request, list item from another column' do
|
||||
hash_body = nil
|
||||
get api_v1_team_inventory_column_checklist_items_path(
|
||||
id: @wrong_checklist_column.repository_checklist_items.first.id,
|
||||
team_id: @teams.first.id,
|
||||
inventory_id: @wrong_inventory.id,
|
||||
column_id: @checklist_column.id
|
||||
), headers: @valid_headers
|
||||
expect(response).to have_http_status(404)
|
||||
expect { hash_body = json }.not_to raise_exception
|
||||
expect(hash_body['errors'][0]).to include('status': 404)
|
||||
end
|
||||
end
|
||||
|
||||
describe 'POST inventory_checklist_item, #create' do
|
||||
before :all do
|
||||
@valid_headers['Content-Type'] = 'application/vnd.api+json'
|
||||
@request_body = {
|
||||
data: {
|
||||
type: 'inventory_checklist_items',
|
||||
attributes: { data: Faker::Name.unique.name }
|
||||
}
|
||||
}
|
||||
end
|
||||
|
||||
it 'Response with correct inventory list item' do
|
||||
hash_body = nil
|
||||
post api_v1_team_inventory_column_checklist_items_path(
|
||||
team_id: @teams.first.id,
|
||||
inventory_id: @valid_inventory.id,
|
||||
column_id: @checklist_column
|
||||
), params: @request_body.to_json, headers: @valid_headers
|
||||
expect(response).to have_http_status 201
|
||||
expect { hash_body = json }.not_to raise_exception
|
||||
expect(hash_body[:data]).to match(
|
||||
ActiveModelSerializers::SerializableResource
|
||||
.new(RepositoryChecklistItem.last,
|
||||
serializer: Api::V1::InventoryChecklistItemSerializer)
|
||||
.as_json[:data]
|
||||
)
|
||||
end
|
||||
|
||||
it 'When invalid request, user in not member of the team' do
|
||||
hash_body = nil
|
||||
post api_v1_team_inventory_column_checklist_items_path(
|
||||
team_id: @teams.second.id,
|
||||
inventory_id: @valid_inventory.id,
|
||||
column_id: @checklist_column
|
||||
), params: @request_body.to_json, headers: @valid_headers
|
||||
expect(response).to have_http_status 403
|
||||
expect { hash_body = json }.not_to raise_exception
|
||||
expect(hash_body['errors'][0]).to include('status': 403)
|
||||
end
|
||||
|
||||
it 'When invalid request, non existing inventory' do
|
||||
hash_body = nil
|
||||
post api_v1_team_inventory_column_checklist_items_path(
|
||||
team_id: @teams.first.id,
|
||||
inventory_id: 123,
|
||||
column_id: @checklist_column
|
||||
), params: @request_body.to_json, headers: @valid_headers
|
||||
expect(response).to have_http_status 404
|
||||
expect { hash_body = json }.not_to raise_exception
|
||||
expect(hash_body['errors'][0]).to include('status': 404)
|
||||
end
|
||||
|
||||
it 'When invalid request, repository from another team' do
|
||||
hash_body = nil
|
||||
post api_v1_team_inventory_column_checklist_items_path(
|
||||
team_id: @teams.first.id,
|
||||
inventory_id: @wrong_inventory.id,
|
||||
column_id: @checklist_column
|
||||
), params: @request_body.to_json, headers: @valid_headers
|
||||
expect(response).to have_http_status(404)
|
||||
expect { hash_body = json }.not_to raise_exception
|
||||
expect(hash_body['errors'][0]).to include('status': 404)
|
||||
end
|
||||
|
||||
it 'When invalid request, incorrect type' do
|
||||
invalid_request_body = @request_body.deep_dup
|
||||
invalid_request_body[:data][:type] = 'repository_rows'
|
||||
hash_body = nil
|
||||
post api_v1_team_inventory_column_checklist_items_path(
|
||||
team_id: @teams.first.id,
|
||||
inventory_id: @valid_inventory.id,
|
||||
column_id: @checklist_column
|
||||
), params: invalid_request_body.to_json, headers: @valid_headers
|
||||
expect(response).to have_http_status(400)
|
||||
expect { hash_body = json }.to_not raise_exception
|
||||
expect(hash_body['errors'][0]).to include('status': 400)
|
||||
end
|
||||
|
||||
it 'When invalid request, missing type param' do
|
||||
invalid_request_body = @request_body.deep_dup
|
||||
invalid_request_body[:data].delete(:type)
|
||||
hash_body = nil
|
||||
post api_v1_team_inventory_column_checklist_items_path(
|
||||
team_id: @teams.first.id,
|
||||
inventory_id: @valid_inventory.id,
|
||||
column_id: @checklist_column
|
||||
), params: invalid_request_body.to_json, headers: @valid_headers
|
||||
expect(response).to have_http_status(400)
|
||||
expect { hash_body = json }.to_not raise_exception
|
||||
expect(hash_body['errors'][0]).to include('status': 400)
|
||||
end
|
||||
|
||||
it 'When invalid request, missing attributes values' do
|
||||
hash_body = nil
|
||||
invalid_request_body = @request_body.deep_dup
|
||||
invalid_request_body[:data][:attributes].delete(:data)
|
||||
post api_v1_team_inventory_column_checklist_items_path(
|
||||
team_id: @teams.first.id,
|
||||
inventory_id: @valid_inventory.id,
|
||||
column_id: @checklist_column
|
||||
), params: invalid_request_body.to_json, headers: @valid_headers
|
||||
expect(response).to have_http_status(400)
|
||||
expect { hash_body = json }.to_not raise_exception
|
||||
expect(hash_body['errors'][0]).to include('status': 400)
|
||||
end
|
||||
end
|
||||
|
||||
describe 'PUT inventory_checklist_item, #update' do
|
||||
before :all do
|
||||
@valid_headers['Content-Type'] = 'application/vnd.api+json'
|
||||
@request_body = {
|
||||
data: {
|
||||
id: @checklist_column.repository_checklist_items.first.id,
|
||||
type: 'inventory_checklist_items',
|
||||
attributes: { data: 'Updated' }
|
||||
}
|
||||
}
|
||||
end
|
||||
|
||||
it 'Response with correct inventory list item' do
|
||||
hash_body = nil
|
||||
item_id = @checklist_column.repository_checklist_items.first.id
|
||||
put api_v1_team_inventory_column_checklist_item_path(
|
||||
id: item_id,
|
||||
team_id: @teams.first.id,
|
||||
inventory_id: @valid_inventory.id,
|
||||
column_id: @checklist_column
|
||||
), params: @request_body.to_json, headers: @valid_headers
|
||||
expect(response).to have_http_status 200
|
||||
expect { hash_body = json }.not_to raise_exception
|
||||
expect(hash_body[:data]).to match(
|
||||
ActiveModelSerializers::SerializableResource
|
||||
.new(@checklist_column.repository_checklist_items.find(item_id),
|
||||
serializer: Api::V1::InventoryChecklistItemSerializer)
|
||||
.as_json[:data]
|
||||
)
|
||||
expect(@checklist_column.repository_checklist_items.find(item_id).data).to match('Updated')
|
||||
end
|
||||
|
||||
it 'When invalid request, incorrect type' do
|
||||
invalid_request_body = @request_body.deep_dup
|
||||
invalid_request_body[:data][:type] = 'repository_rows'
|
||||
hash_body = nil
|
||||
put api_v1_team_inventory_column_checklist_item_path(
|
||||
id: @checklist_column.repository_checklist_items.first.id,
|
||||
team_id: @teams.first.id,
|
||||
inventory_id: @valid_inventory.id,
|
||||
column_id: @checklist_column
|
||||
), params: invalid_request_body.to_json, headers: @valid_headers
|
||||
expect(response).to have_http_status(400)
|
||||
expect { hash_body = json }.to_not raise_exception
|
||||
expect(hash_body['errors'][0]).to include('status': 400)
|
||||
end
|
||||
|
||||
it 'When invalid request, missing attributes values' do
|
||||
hash_body = nil
|
||||
invalid_request_body = @request_body.deep_dup
|
||||
invalid_request_body[:data][:attributes].delete(:data)
|
||||
put api_v1_team_inventory_column_checklist_item_path(
|
||||
id: @checklist_column.repository_checklist_items.first.id,
|
||||
team_id: @teams.first.id,
|
||||
inventory_id: @valid_inventory.id,
|
||||
column_id: @checklist_column
|
||||
), params: invalid_request_body.to_json, headers: @valid_headers
|
||||
expect(response).to have_http_status(400)
|
||||
expect { hash_body = json }.to_not raise_exception
|
||||
expect(hash_body['errors'][0]).to include('status': 400)
|
||||
end
|
||||
|
||||
it 'When invalid request, non existing item' do
|
||||
hash_body = nil
|
||||
invalid_request_body = @request_body.deep_dup
|
||||
invalid_request_body[:id] = 999
|
||||
put api_v1_team_inventory_column_checklist_item_path(
|
||||
id: 999,
|
||||
team_id: @teams.first.id,
|
||||
inventory_id: @valid_inventory.id,
|
||||
column_id: @checklist_column
|
||||
), params: invalid_request_body.to_json, headers: @valid_headers
|
||||
expect(response).to have_http_status(404)
|
||||
expect { hash_body = json }.to_not raise_exception
|
||||
expect(hash_body['errors'][0]).to include('status': 404)
|
||||
end
|
||||
end
|
||||
|
||||
describe 'DELETE inventory_checklist_item, #destroy' do
|
||||
it 'Destroys inventory list item' do
|
||||
deleted_id = @checklist_column.repository_checklist_items.last.id
|
||||
delete api_v1_team_inventory_column_checklist_item_path(
|
||||
id: deleted_id,
|
||||
team_id: @teams.first.id,
|
||||
inventory_id: @valid_inventory.id,
|
||||
column_id: @checklist_column.id
|
||||
), headers: @valid_headers
|
||||
expect(response).to have_http_status(200)
|
||||
expect(RepositoryChecklistItem.where(id: deleted_id)).to_not exist
|
||||
end
|
||||
|
||||
it 'Invalid request, non existing inventory list item' do
|
||||
delete api_v1_team_inventory_column_checklist_item_path(
|
||||
id: 1001,
|
||||
team_id: @teams.first.id,
|
||||
inventory_id: @valid_inventory.id,
|
||||
column_id: @checklist_column.id
|
||||
), headers: @valid_headers
|
||||
expect(response).to have_http_status(404)
|
||||
end
|
||||
|
||||
it 'When invalid request, incorrect repository' do
|
||||
deleted_id = @checklist_column.repository_checklist_items.last.id
|
||||
delete api_v1_team_inventory_column_checklist_item_path(
|
||||
id: deleted_id,
|
||||
team_id: @teams.first.id,
|
||||
inventory_id: 9999,
|
||||
column_id: @checklist_column.id
|
||||
), headers: @valid_headers
|
||||
expect(response).to have_http_status(404)
|
||||
expect(RepositoryChecklistItem.where(id: deleted_id)).to exist
|
||||
end
|
||||
|
||||
it 'When invalid request, repository from another team' do
|
||||
deleted_id = @checklist_column.repository_checklist_items.last.id
|
||||
delete api_v1_team_inventory_column_checklist_item_path(
|
||||
id: deleted_id,
|
||||
team_id: @teams.second.id,
|
||||
inventory_id: @valid_inventory.id,
|
||||
column_id: @checklist_column.id
|
||||
), headers: @valid_headers
|
||||
expect(response).to have_http_status(403)
|
||||
expect(RepositoryChecklistItem.where(id: deleted_id)).to exist
|
||||
end
|
||||
end
|
||||
end
|
Loading…
Reference in a new issue