mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2024-12-26 17:51:13 +08:00
Stock management test [SCI-6420] (#3946)
* Initial test for stock management * Repository stock values adding [does not work] SCI-6420 * Fix typos SCI-6420 * Fix test [SCI-6420] * Test changes [SCI-6402] * Remove locking test [SCI-6420] * Remove lock [SCI-6420] * Remove serializer [SCI-6420] * Fix stock test and add ledger creation on consume [SCI-6420]
This commit is contained in:
parent
6b309871a3
commit
1c21e11510
7 changed files with 219 additions and 0 deletions
60
spec/controllers/repository_stock_value_controller.rb
Normal file
60
spec/controllers/repository_stock_value_controller.rb
Normal file
|
@ -0,0 +1,60 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
require 'rails_helper'
|
||||
|
||||
describe RepositoryStockValuesController, type: :controller do
|
||||
before :all do
|
||||
ApplicationSettings.instance.update(
|
||||
values: ApplicationSettings.instance.values.merge({"stock_management_enabled" => true})
|
||||
)
|
||||
end
|
||||
|
||||
login_user
|
||||
let!(:user) { controller.current_user }
|
||||
let!(:team) { create :team, created_by: user }
|
||||
let!(:user_team) { create :user_team, :admin, team: team, user: user }
|
||||
let!(:repository) { create :repository, team: team, created_by: user }
|
||||
let(:repository_column) do
|
||||
create :repository_column, :stock_type, created_by: user, repository: repository
|
||||
end
|
||||
|
||||
let!(:repository_row) do
|
||||
create :repository_row, repository: repository,
|
||||
created_by: user,
|
||||
last_modified_by: user
|
||||
end
|
||||
|
||||
let!(:repository_stock_unit_item) {create :repository_stock_unit_item, created_by: user,
|
||||
last_modified_by: user,
|
||||
repository_column: repository_column}
|
||||
|
||||
describe 'create' do
|
||||
let(:params) do {
|
||||
repository_stock_value: {
|
||||
amount: 10,
|
||||
unit_item_id: repository_stock_unit_item.id,
|
||||
comment: 'test',
|
||||
low_stock_threshold: ''
|
||||
},
|
||||
operator: 'set',
|
||||
change_amount: 0,
|
||||
repository_id: repository.id,
|
||||
id: repository_row.id
|
||||
}
|
||||
end
|
||||
|
||||
let(:action) { post :create_or_update, params: params, format: :json }
|
||||
let(:action1) { post :create_or_update, params: params, format: :json }
|
||||
|
||||
it 'Create stock value' do
|
||||
expect { action }.to change(RepositoryLedgerRecord, :count).by(1)
|
||||
end
|
||||
|
||||
it 'Ledger immutability' do
|
||||
action
|
||||
expect { action1 }
|
||||
.to (change(RepositoryLedgerRecord, :count).by(1)
|
||||
.and(change(RepositoryStockValue, :count).by(0)))
|
||||
end
|
||||
end
|
||||
end
|
10
spec/factories/repository_ledger_record.rb
Normal file
10
spec/factories/repository_ledger_record.rb
Normal file
|
@ -0,0 +1,10 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
FactoryBot.define do
|
||||
factory :repository_ledger_record do
|
||||
repository_stock_value
|
||||
association :reference, factory: :repository_row
|
||||
user
|
||||
end
|
||||
end
|
||||
|
|
@ -5,6 +5,16 @@ require 'rails_helper'
|
|||
describe MyModuleRepositoryRow, type: :model do
|
||||
let(:my_module_repository_row) { build :mm_repository_row }
|
||||
|
||||
let(:user) { create :user }
|
||||
let(:repository_stock_value) { create :repository_stock_value }
|
||||
|
||||
let(:repository_row) { create :repository_row, repository_stock_value: repository_stock_value }
|
||||
let(:my_module_repository_row_stock) { create :mm_repository_row,
|
||||
repository_row: repository_row,
|
||||
assigned_by: user,
|
||||
last_modified_by: user
|
||||
}
|
||||
|
||||
it 'is valid' do
|
||||
expect(my_module_repository_row).to be_valid
|
||||
end
|
||||
|
@ -16,6 +26,8 @@ describe MyModuleRepositoryRow, type: :model do
|
|||
describe 'Database table' do
|
||||
it { should have_db_column :id }
|
||||
it { should have_db_column :repository_row_id }
|
||||
it { should have_db_column :repository_stock_unit_item_id }
|
||||
it { should have_db_column :stock_consumption }
|
||||
it { should have_db_column :my_module_id }
|
||||
it { should have_db_column :assigned_by_id }
|
||||
it { should have_db_column :created_at }
|
||||
|
@ -24,7 +36,16 @@ describe MyModuleRepositoryRow, type: :model do
|
|||
|
||||
describe 'Relations' do
|
||||
it { should belong_to(:my_module) }
|
||||
it { should belong_to(:repository_stock_unit_item).optional }
|
||||
it { should belong_to(:assigned_by).class_name('User').optional }
|
||||
it { should belong_to(:repository_row) }
|
||||
end
|
||||
|
||||
describe 'Repository ledger record' do
|
||||
it 'Ledger creation on changed consumption' do
|
||||
my_module_repository_row_stock.stock_consumption = 10.0
|
||||
expect { my_module_repository_row_stock.save! }
|
||||
.to change(RepositoryLedgerRecord, :count).by(1)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -10,6 +10,7 @@ describe RepositoryCell, type: :model do
|
|||
let(:repository_cell_a) { build :repository_cell, :asset_value }
|
||||
let(:repository_cell_s) { build :repository_cell, :status_value }
|
||||
let(:repository_cell_d_r) { build :repository_cell, :date_time_range_value }
|
||||
let(:repository_cell_s_v) { build :repository_cell, :stock_value }
|
||||
|
||||
context 'when do not have value' do
|
||||
it 'is not valid' do
|
||||
|
@ -41,6 +42,10 @@ describe RepositoryCell, type: :model do
|
|||
it 'is valid for date time range value' do
|
||||
expect(repository_cell_d_r).to be_valid
|
||||
end
|
||||
|
||||
it 'is valid for stock value' do
|
||||
expect(repository_cell_s_v).to be_valid
|
||||
end
|
||||
end
|
||||
|
||||
it 'should be of class RepositoryCell' do
|
||||
|
|
35
spec/models/repository_ledger_record_spec.rb
Normal file
35
spec/models/repository_ledger_record_spec.rb
Normal file
|
@ -0,0 +1,35 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
require 'rails_helper'
|
||||
|
||||
describe RepositoryLedgerRecord, type: :model do
|
||||
let(:repository_ledger_record) { build :repository_ledger_record }
|
||||
let(:repository_stock_value_new) { build :repository_stock_value }
|
||||
|
||||
it 'is valid' do
|
||||
expect(repository_ledger_record).to be_valid
|
||||
end
|
||||
|
||||
it 'should be of class RepositoryLedgerRecord' do
|
||||
expect(subject.class).to eq RepositoryLedgerRecord
|
||||
end
|
||||
|
||||
describe 'Database table' do
|
||||
it { should have_db_column :id }
|
||||
it { should have_db_column :repository_stock_value_id }
|
||||
it { should have_db_column :reference_id }
|
||||
it { should have_db_column :reference_type }
|
||||
it { should have_db_column :amount }
|
||||
it { should have_db_column :balance }
|
||||
it { should have_db_column :user_id }
|
||||
it { should have_db_column :comment }
|
||||
it { should have_db_column :created_at }
|
||||
it { should have_db_column :updated_at }
|
||||
end
|
||||
|
||||
describe 'Associations' do
|
||||
it { should belong_to(:repository_stock_value).optional }
|
||||
it { should belong_to(:reference) }
|
||||
it { should belong_to(:user) }
|
||||
end
|
||||
end
|
32
spec/models/repository_stock_unit_item_spec.rb
Normal file
32
spec/models/repository_stock_unit_item_spec.rb
Normal file
|
@ -0,0 +1,32 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
require 'rails_helper'
|
||||
|
||||
describe RepositoryStockUnitItem, type: :model do
|
||||
let(:repository_stock_unit_item) { build :repository_stock_unit_item }
|
||||
|
||||
it 'is valid' do
|
||||
expect(repository_stock_unit_item).to be_valid
|
||||
end
|
||||
|
||||
it 'should be of class RepositoryStockUnitItem' do
|
||||
expect(subject.class).to eq RepositoryStockUnitItem
|
||||
end
|
||||
|
||||
describe 'Database table' do
|
||||
it { should have_db_column :id }
|
||||
it { should have_db_column :data }
|
||||
it { should have_db_column :repository_column_id }
|
||||
it { should have_db_column :created_by_id }
|
||||
it { should have_db_column :last_modified_by_id }
|
||||
it { should have_db_column :created_at }
|
||||
it { should have_db_column :updated_at }
|
||||
end
|
||||
|
||||
describe 'Associations' do
|
||||
it { should belong_to(:repository_column) }
|
||||
it { should belong_to(:created_by) }
|
||||
it { should belong_to(:last_modified_by) }
|
||||
end
|
||||
|
||||
end
|
56
spec/models/repository_stock_value_spec.rb
Normal file
56
spec/models/repository_stock_value_spec.rb
Normal file
|
@ -0,0 +1,56 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
require 'rails_helper'
|
||||
|
||||
describe RepositoryStockValue, type: :model do
|
||||
let(:repository_stock_value) { build :repository_stock_value }
|
||||
let(:repository) { build :repository }
|
||||
let(:user) { build :user }
|
||||
|
||||
|
||||
it 'is valid' do
|
||||
expect(repository_stock_value).to be_valid
|
||||
end
|
||||
|
||||
it 'should be of class RepositoryStockValue' do
|
||||
expect(subject.class).to eq RepositoryStockValue
|
||||
end
|
||||
|
||||
describe 'Database table' do
|
||||
it { should have_db_column :id }
|
||||
it { should have_db_column :amount }
|
||||
it { should have_db_column :repository_stock_unit_item_id }
|
||||
it { should have_db_column :type }
|
||||
it { should have_db_column :last_modified_by_id }
|
||||
it { should have_db_column :created_by_id }
|
||||
it { should have_db_column :created_at }
|
||||
it { should have_db_column :updated_at }
|
||||
it { should have_db_column :low_stock_threshold }
|
||||
end
|
||||
|
||||
describe 'Associations' do
|
||||
it { is_expected.to belong_to(:repository_stock_unit_item).optional }
|
||||
it { is_expected.to belong_to(:created_by).optional }
|
||||
it { is_expected.to belong_to(:last_modified_by).optional }
|
||||
end
|
||||
|
||||
|
||||
describe 'Saving stock value' do
|
||||
let(:repository_stock_value1) { build :repository_stock_value }
|
||||
it 'Save stock value' do
|
||||
expect { repository_stock_value.save }.to change(RepositoryStockValue, :count).by(1)
|
||||
end
|
||||
|
||||
it 'Updating stock value' do
|
||||
repository_stock_value.save
|
||||
expect { repository_stock_value.update_data!({amount: 10, low_stock_threshold:''}, user) }
|
||||
.to change(RepositoryStockValue, :count).by(0)
|
||||
end
|
||||
|
||||
it 'Updating stock value with ledger' do
|
||||
repository_stock_value.save
|
||||
expect { repository_stock_value.update_stock_with_ledger!(10, repository, "") }
|
||||
.to (change(RepositoryLedgerRecord, :count).by(1))
|
||||
end
|
||||
end
|
||||
end
|
Loading…
Reference in a new issue