Skip to content

Commit

Permalink
Split InduMapper into InduFranceMapper + InduEtrangerMapper
Browse files Browse the repository at this point in the history
  • Loading branch information
pskl committed Feb 17, 2025
1 parent 05925f1 commit 9a05629
Show file tree
Hide file tree
Showing 7 changed files with 110 additions and 5 deletions.
29 changes: 29 additions & 0 deletions app/services/asp/mappers/adresse/indu_etranger_mapper.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# frozen_string_literal: true

module ASP
module Mappers
module Adresse
class InduEtrangerMapper < FranceMapper
def localiteetranger
student.address_line1
end

def bureaudistribetranger
student.address_line2
end

def voiepointgeoetranger
student.address_line2
end

def districtetranger
student.address_line2
end

def regionetranger
student.address_line2
end
end
end
end
end
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
module ASP
module Mappers
module Adresse
class InduMapper < FranceMapper
class InduFranceMapper < FranceMapper
def pointremise
student.address_line1
end
Expand Down
44 changes: 44 additions & 0 deletions lib/asp/entities/adresse/indu_etranger.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
# frozen_string_literal: true

module ASP
module Entities
module Adresse
class InduEtranger < Entity
ADRESSE_ATTR_MAX_LENGTH = 38

attribute :localiteetranger, :string, limit: ADRESSE_ATTR_MAX_LENGTH
attribute :bureaudistribetranger, :string, limit: ADRESSE_ATTR_MAX_LENGTH
attribute :voiepointgeoetranger, :string, limit: ADRESSE_ATTR_MAX_LENGTH
attribute :districtetranger, :string, limit: ADRESSE_ATTR_MAX_LENGTH
attribute :regionetranger, :string, limit: ADRESSE_ATTR_MAX_LENGTH
attribute :codetypeadr, :string
attribute :codeinseepays, :string

validates_presence_of %i[
localiteetranger
bureaudistribetranger
codetypeadr
codeinseepays
]

def self.payment_mapper_class
Mappers::Adresse::InduEtrangerMapper
end

def root_node_name
"adresse"
end

def fragment(xml) # rubocop:disable Metrics/AbcSize
xml.localiteetranger(localiteetranger)
xml.bureaudistribetranger(bureaudistribetranger)
xml.voiepointgeoetranger(voiepointgeoetranger) if voiepointgeoetranger.present?
xml.districtetranger(districtetranger) if districtetranger.present?
xml.regionetranger(regionetranger) if regionetranger.present?
xml.codetypeadr(codetypeadr)
xml.codeinseepays(codeinseepays)
end
end
end
end
end
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
module ASP
module Entities
module Adresse
class Indu < Entity
class InduFrance < Entity
ADRESSE_ATTR_MAX_LENGTH = 38

attribute :pointremise, :string, limit: ADRESSE_ATTR_MAX_LENGTH
Expand All @@ -22,7 +22,7 @@ class Indu < Entity
]

def self.payment_mapper_class
Mappers::Adresse::InduMapper
Mappers::Adresse::InduFranceMapper
end

def root_node_name
Expand Down
2 changes: 1 addition & 1 deletion lib/asp/entities/entity.rb
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ def root_node_name

def adresse_entity_class
if payment_request.pfmp.rectified?
Adresse::Indu
payment_request.student.lives_in_france? ? Adresse::InduFrance : Adresse::InduEtranger
else
payment_request.student.lives_in_france? ? Adresse::France : Adresse::Etranger
end
Expand Down
32 changes: 32 additions & 0 deletions spec/lib/asp/entities/adresse/indu_etranger_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
# frozen_string_literal: true

require "rails_helper"

describe ASP::Entities::Adresse::InduEtranger, type: :model do
describe "fragment" do
let(:pfmp) { create(:pfmp, :rectified) }

before do
pfmp.student.update(
address_line1: "A" * 50,
address_line2: "B" * 50
)
end

describe "validation" do
it { is_expected.to validate_presence_of(:localiteetranger) }
it { is_expected.to validate_presence_of(:bureaudistribetranger) }
it { is_expected.to validate_presence_of(:codetypeadr) }
end

it_behaves_like "an XML-fragment producer" do
let(:entity) { described_class.from_payment_request(pfmp.latest_payment_request) }
let(:probe) { %w[codetypeadr PRINCIPALE] }

it "uses the establishment details for the address" do # rubocop:disable RSpec/MultipleExpectations
expect(document.at("localiteetranger").text).to eq "A" * 38
expect(document.at("bureaudistribetranger").text).to eq "B" * 38
end
end
end
end
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

require "rails_helper"

describe ASP::Entities::Adresse::Indu, type: :model do
describe ASP::Entities::Adresse::InduFrance, type: :model do
describe "fragment" do
let(:pfmp) { create(:pfmp, :rectified) }

Expand Down

0 comments on commit 9a05629

Please sign in to comment.