mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-03-11 03:40:20 +00:00
Enterprise have access to the internal payment method by default. The access is handled at the application level so we don't have to manage database links.
85 lines
2.8 KiB
Ruby
85 lines
2.8 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
RSpec.describe Sets::ModelSet do
|
|
describe "updating" do
|
|
it "creates new models" do
|
|
attrs = { collection_attributes: { '1' => { name: "Fantasia", iso_name: "FAN" },
|
|
'2' => { name: "Utopia", iso_name: "UTO" } } }
|
|
|
|
ms = Sets::ModelSet.new(Spree::Country,
|
|
Spree::Country.all,
|
|
attrs)
|
|
|
|
expect { ms.save }.to change { Spree::Country.count }.by(2)
|
|
|
|
expect(Spree::Country.where(name: ["Fantasia", "Utopia"]).count).to eq(2)
|
|
end
|
|
|
|
it "updates existing models" do
|
|
e1 = create(:enterprise_group)
|
|
e2 = create(:enterprise_group)
|
|
|
|
attrs = { collection_attributes: { '1' => { id: e1.id, name: 'e1zz', description: 'foo' },
|
|
'2' => { id: e2.id, name: 'e2yy', description: 'bar' } } }
|
|
|
|
ms = Sets::ModelSet.new(EnterpriseGroup, EnterpriseGroup.all, attrs)
|
|
|
|
expect { ms.save }.to change { EnterpriseGroup.count }.by(0)
|
|
|
|
expect(EnterpriseGroup.where(name: ['e1zz', 'e2yy']).count).to eq(2)
|
|
end
|
|
|
|
it "destroys deleted models" do
|
|
e1 = create(:enterprise)
|
|
e2 = create(:enterprise)
|
|
|
|
attributes = { collection_attributes: { '1' => { id: e1.id, name: 'deleteme' },
|
|
'2' => { id: e2.id, name: 'e2' } } }
|
|
|
|
ms = Sets::ModelSet.new(Enterprise, Enterprise.all, attributes, nil,
|
|
proc { |attrs| attrs['name'] == 'deleteme' })
|
|
|
|
expect { ms.save }.to change { Enterprise.count }.by(-1)
|
|
|
|
expect(Enterprise.where(id: e1.id)).to be_empty
|
|
expect(Enterprise.where(id: e2.id)).to be_present
|
|
end
|
|
|
|
it "ignores deletable new records" do
|
|
attributes = { collection_attributes: { '1' => { name: 'deleteme' } } }
|
|
|
|
ms = Sets::ModelSet.new(Enterprise, Enterprise.all, attributes, nil,
|
|
proc { |attrs| attrs[:name] == 'deleteme' })
|
|
|
|
expect { ms.save }.to change { Enterprise.count }.by(0)
|
|
end
|
|
|
|
describe "errors" do
|
|
let(:product_b) { create(:simple_product, name: "Bananas") }
|
|
let(:product_a) { create(:simple_product, name: "Apples") }
|
|
let(:collection_attributes) do
|
|
{
|
|
0 => {
|
|
id: product_a.id,
|
|
name: "", # Product Name can't be blank
|
|
},
|
|
1 => {
|
|
id: product_b.id,
|
|
name: "Bananes",
|
|
},
|
|
}
|
|
end
|
|
subject{ Sets::ModelSet.new(Spree::Product, [product_a, product_b], collection_attributes:) }
|
|
|
|
it 'errors are aggregated' do
|
|
subject.save
|
|
|
|
expect(subject.errors.full_messages).to eq ["Product Name can't be blank"]
|
|
|
|
expect(subject.invalid).to include product_a
|
|
expect(subject.invalid).not_to include product_b
|
|
end
|
|
end
|
|
end
|
|
end
|