From 666fbf53bf88c9d29eeaf54c58d2e87e8d4afd7c Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Thu, 16 Aug 2018 15:29:19 +0100 Subject: [PATCH] Validate enterprise.is_primary_producer? --- app/models/product_import/entry_validator.rb | 5 ++++ config/locales/en.yml | 1 + spec/models/product_importer_spec.rb | 30 ++++++++++++++++++-- 3 files changed, 33 insertions(+), 3 deletions(-) diff --git a/app/models/product_import/entry_validator.rb b/app/models/product_import/entry_validator.rb index d3632911ad..f17d4a09aa 100644 --- a/app/models/product_import/entry_validator.rb +++ b/app/models/product_import/entry_validator.rb @@ -62,6 +62,11 @@ module ProductImport return end + unless Enterprise.find_by_name(supplier_name).is_primary_producer? + mark_as_invalid(entry, attribute: "supplier", error: I18n.t(:error_not_primary_producer, name: supplier_name)) + return + end + entry.supplier_id = @spreadsheet_data.suppliers_index[supplier_name] end diff --git a/config/locales/en.yml b/config/locales/en.yml index e8df84c912..540d306a95 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -1739,6 +1739,7 @@ See the %{link} to find out more about %{sitename}'s features and to start using error_number: "must be number" error_email: "must be email address" error_not_found_in_database: "%{name} not found in database" + error_not_primary_producer: "%{name} is not enabled as a producer" error_no_permission_for_enterprise: "\"%{name}\": you do not have permission to manage products for this enterprise" item_handling_fees: "Item Handling Fees (included in item totals)" january: "January" diff --git a/spec/models/product_importer_spec.rb b/spec/models/product_importer_spec.rb index b1fd165fa1..c0cbc6718f 100644 --- a/spec/models/product_importer_spec.rb +++ b/spec/models/product_importer_spec.rb @@ -8,9 +8,10 @@ describe ProductImport::ProductImporter do let!(:user) { create_enterprise_user } let!(:user2) { create_enterprise_user } let!(:user3) { create_enterprise_user } - let!(:enterprise) { create(:enterprise, owner: user, name: "User Enterprise") } - let!(:enterprise2) { create(:distributor_enterprise, owner: user2, name: "Another Enterprise") } - let!(:enterprise3) { create(:distributor_enterprise, owner: user3, name: "And Another Enterprise") } + let!(:enterprise) { create(:enterprise, is_primary_producer: true, owner: user, name: "User Enterprise") } + let!(:enterprise2) { create(:distributor_enterprise, is_primary_producer: true, owner: user2, name: "Another Enterprise") } + let!(:enterprise3) { create(:distributor_enterprise, is_primary_producer: true, owner: user3, name: "And Another Enterprise") } + let!(:enterprise4) { create(:enterprise, is_primary_producer: false, owner: user, name: "Non-Producer") } let!(:relationship) { create(:enterprise_relationship, parent: enterprise, child: enterprise2, permissions_list: [:create_variant_overrides]) } let!(:category) { create(:taxon, name: 'Vegetables') } @@ -163,6 +164,29 @@ describe ProductImport::ProductImporter do end end + describe "when enterprises are not valid" do + before do + csv_data = CSV.generate do |csv| + csv << ["name", "supplier", "category", "on_hand", "price", "units", "unit_type"] + csv << ["Product 1", "Non-existent Enterprise", "Vegetables", "5", "5.50", "500", "g"] + csv << ["Product 2", "Non-Producer", "Vegetables", "5", "5.50", "500", "g"] + end + File.write('/tmp/test-m.csv', csv_data) + file = File.new('/tmp/test-m.csv') + settings = {'import_into' => 'product_list'} + @importer = ProductImport::ProductImporter.new(file, admin, start: 1, end: 100, settings: settings) + end + after { File.delete('/tmp/test-m.csv') } + + it "adds enterprise errors" do + @importer.validate_entries + entries = JSON.parse(@importer.entries_json) + + expect(entries['2']['errors']['supplier']).to include "not found in database" + expect(entries['3']['errors']['supplier']).to include "not enabled as a producer" + end + end + describe "adding new variants to existing products and updating exiting products" do before do csv_data = CSV.generate do |csv|