Merge pull request #12906 from mkllnk/dfc-stock-import

Fail gracefully on DFC product import errors
This commit is contained in:
Maikel
2024-10-11 13:50:09 +11:00
committed by GitHub
3 changed files with 60 additions and 1 deletions

View File

@@ -38,6 +38,11 @@ module Admin
end
@count = imported.compact.count
rescue Faraday::Error,
Addressable::URI::InvalidURIError,
ActionController::ParameterMissing => e
flash[:error] = e.message
redirect_to admin_product_import_path
end
private

View File

@@ -111,6 +111,31 @@ RSpec.describe SuppliedProductBuilder do
end
end
describe ".update_product" do
let(:subject) { builder.update_product(product, variant) }
let(:product) {
DfcIo.import(product_json).find do |subject|
subject.is_a? DataFoodConsortium::Connector::SuppliedProduct
end
}
let(:product_json) { ExampleJson.read("product.GET") }
it "updates a variant" do
variant # Create test data first
expect { subject }.not_to change {
Spree::Variant.count
}
expect(subject).to eq variant
expect(subject.display_name).to eq "Fillet Steak - 201g x 1 Steak"
expect(subject.variant_unit).to eq "items"
expect(subject.unit_value).to eq 1
expect(subject.on_demand).to eq false
expect(subject.on_hand).to eq 11
end
end
describe ".import_product" do
let(:supplied_product) do
DfcProvider::SuppliedProduct.new(

View File

@@ -66,7 +66,9 @@ RSpec.describe "DFC Product Import" do
}.to change { enterprise.supplied_products.count }
.and change { linked_variant.display_name }
.and change { linked_variant.unit_value }
.and change { linked_variant.price }
.and change { linked_variant.price }.to(2.09)
.and change { linked_variant.on_demand }.to(true)
.and change { linked_variant.on_hand }.by(0)
expect(page).to have_content "Importing a DFC product catalog"
@@ -74,4 +76,31 @@ RSpec.describe "DFC Product Import" do
expect(product.variants[0].semantic_links).to be_present
expect(product.image).to be_present
end
it "fails gracefully" do
user.oidc_account.update!(
uid: "anonymous@example.net",
updated_at: 1.minute.ago,
)
url = "https://example.net/unauthorized"
stub_request(:get, url).to_return(status: [401, "Unauthorized"])
visit admin_product_import_path
select enterprise.name, from: "Enterprise"
fill_in "catalog_url", with: url
expect { click_button "Import" }.not_to change { Spree::Variant.count }
expect(page).to have_content "the server responded with status 401"
select enterprise.name, from: "Enterprise"
fill_in "catalog_url", with: "badurl"
click_button "Import"
expect(page).to have_content "Absolute URI missing hierarchical segment: 'http://:80'"
select enterprise.name, from: "Enterprise"
fill_in "catalog_url", with: ""
click_button "Import"
expect(page).to have_content "param is missing or the value is empty: catalog_url"
end
end