销毁两个减去的对象数组的结果

时间:2014-01-23 16:08:59

标签: ruby-on-rails ruby arrays rspec

一点背景知识:

每个产品都有一组变体,产品的变体数量应根据其属性而变化。

一个名为find_valid_variants的方法返回产品应具有的变体,然后将其传递给destroy_redundant_variants方法,该方法应该销毁该产品具有但不包含在valid_variants中的任何变体。

def self.find_valid_variants(product)
    product.product_options.blank? ? options = [nil] : options = product.product_options
    product.product_sides.blank? ? sides = [nil] : sides = product.product_sides
    product.product_sizes.blank? ? sizes = [nil] : sizes = product.product_sizes

    valid_variants = []

    sides.product(sizes, options).each do |side, size, option|
        valid_variants << Variant.where(product_id: product.id, product_side_id: side, product_size_id: size, product_option_id: option)
    end
    valid_variants
end

def self.find_redundant_variants(product)
    destroy_redundant_variants(product, find_valid_variants(product))
end

def self.destroy_redundant_variants(product, valid_variants)
    (product.variants - valid_variants).each { |valid_variant| valid_variant.destroy }
end

问题是,在我的测试用例中,该方法会破坏所有产品变体,它只能破坏2。

这是Rspec测试:

it "destroys the redundant variants" do
    @product = Fabricate(:product, product_size_ids: ["#{@product_size.id}", "#{@product_size_2.id}"], product_options_attributes: [{name: 'Rounded', description: 'Add a round edge'}, {name: 'None', description: 'Nothing'}])
    @product.variants.count.should == 4
    @product.product_options.each { |p| p.destroy }
    @product.reload
    ProductVariationService.find_redundant_variants(@product)
    @product.variants.count.should == 2
end

0 个答案:

没有答案