Update existing enterprises

This commit is contained in:
Maikel Linke
2025-12-05 16:30:51 +11:00
parent 7dfc4d21ca
commit b302dcfbec
4 changed files with 49 additions and 12 deletions

View File

@@ -77,6 +77,7 @@ class Enterprise < ApplicationRecord
has_many :connected_apps, dependent: :destroy
has_many :dfc_permissions, dependent: :destroy
has_one :custom_tab, dependent: :destroy
has_one :semantic_link, as: :subject, dependent: :delete
delegate :latitude, :longitude, :city, :state_name, to: :address

View File

@@ -15,7 +15,9 @@ class DfcImporter
def import_profile(farm)
owner = find_or_import_user(farm)
EnterpriseImporter.new.import(owner, farm)
enterprise = EnterpriseImporter.new(owner, farm).import
enterprise.save! if enterprise.changed?
enterprise.address.save! if enterprise.address.changed?
end
def find_or_import_user(farm)

View File

@@ -1,18 +1,44 @@
# frozen_string_literal: true
class EnterpriseImporter
def import(owner, dfc_enterprise)
address = dfc_enterprise.localizations.first
def initialize(owner, dfc_enterprise)
@owner = owner
@dfc_enterprise = dfc_enterprise
end
def import
enterprise = find || new
apply(enterprise)
enterprise
end
def find
semantic_id = @dfc_enterprise.semanticId
@owner.owned_enterprises.includes(:semantic_link)
.find_by(semantic_link: { semantic_id: })
end
def new
@owner.owned_enterprises.new(
address: Spree::Address.new,
semantic_link: SemanticLink.new(semantic_id: @dfc_enterprise.semanticId),
)
end
def apply(enterprise)
address = @dfc_enterprise.localizations.first
state = Spree::State.find_by(name: address.region) || Spree::State.first
owner.owned_enterprises.create!(
name: dfc_enterprise.name,
address: Spree::Address.new(
address1: address.street,
city: address.city,
zipcode: address.postalCode,
state: state,
country: state.country,
),
enterprise.name = @dfc_enterprise.name
enterprise.address.assign_attributes(
address1: address.street,
city: address.city,
zipcode: address.postalCode,
state: state,
country: state.country,
)
end
end

View File

@@ -18,5 +18,13 @@ RSpec.describe DfcImporter do
# Consider creating a test helper if you find this useful elsewhere.
# allow(ApplicationMailer).to receive(:delivery_method).and_return(:letter_opener)
# perform_enqueued_jobs(only: ActionMailer::MailDeliveryJob)
enterprise = Enterprise.last
expect(enterprise.semantic_link.semantic_id).to match /litefarm\.org/
# Repeating works without creating duplicates:
expect {
subject.import_enterprise_profiles("lf-dev")
}.not_to have_enqueued_mail
end
end