Untitled

 avatar
unknown
ruby
4 years ago
2.5 kB
11
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...