Untitled
unknown
ruby
4 years ago
2.5 kB
15
Indexable
class Store < ApplicationRecord
resourcify
belongs_to :user
belongs_to :branch_office
has_many :store_orders
has_many :purcharse_orders
has_many :movement_products
has_many :sale_documents
has_many :store_products
validates :user_id, presence: true
validates :address, presence: true
validates :name, presence: true
validates_uniqueness_of :address
validates_uniqueness_of :name
after_create :set_products
before_save :recalculate_stock_in_all_products, if: proc { fictional_changed? && !fictional }
scope :no_fictional, -> { where(fictional: false) }
def set_products
products = Product.all
products.each do |product|
next if StoreProduct.where(store_id: id, product_id: product.id).present?
StoreProduct.create(product_id: product.id, store_id: id, stock: 0)
end
end
def recalculate_stock_in_all_products
StoreProduct.ids.each do |store_product_id|
RecalculateProductStockJob.perform_later(store_product_id)
end
end
end
require 'rails_helper'
RSpec.describe Store, type: :model do
subject { described_class.new }
let(:store) { create(:store) }
let(:product) { create(:products) }
it 'is valid with valid attributes' do
expect(store).to be_valid
end
it { is_expected.to validate_presence_of(:name) }
it { is_expected.to validate_presence_of(:address) }
it { is_expected.to validate_uniqueness_of(:address).case_insensitive }
it { is_expected.to validate_uniqueness_of(:name).case_insensitive }
it { is_expected.to validate_presence_of(:name) }
it { is_expected.to validate_presence_of(:last_name) }
it { is_expected.to validate_presence_of(:phone_number) }
it { is_expected.to validate_presence_of(:address) }
it { is_expected.to validate_presence_of(:biography) }
it { is_expected.to validate_presence_of(:date_of_birth) }
it { is_expected.to belong_to(:user) }
it { is_expected.to belong_to(:branch_office) }
it { is_expected.to have_many(:store_orders) }
it { is_expected.to have_many(:purcharse_orders) }
it { is_expected.to have_many(:movement_products) }
it { is_expected.to have_many(:sale_documents) }
it { is_expected.to have_many(:store_products) }
context 'when recalculate' do
let(:product_number) { Product.count }
before do
store_count = StoreProduct.count
create(:product)
end
it 'when we need to recalculate all products' do
expect(store_count).to change{ 2 }
end
end
end
Editor is loading...