Skip to content

Commit

Permalink
♻️ Supprime duplication du model QuestionClicDansImage
Browse files Browse the repository at this point in the history
  • Loading branch information
cprodhomme authored and etienneCharignon committed Oct 9, 2024
1 parent 2368e22 commit 77dd6b1
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 11 deletions.
25 changes: 15 additions & 10 deletions app/models/question_clic_dans_image.rb
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
# frozen_string_literal: true

class QuestionClicDansImage < Question
CLASS_BONNE_REPONSE = 'bonne-reponse'

has_one_attached :zone_cliquable
has_one_attached :image_au_clic

Expand All @@ -24,11 +26,7 @@ def clic_multiple?
return false unless zone_cliquable.attached?

svg_content = zone_cliquable.download

doc = Nokogiri::XML(svg_content, nil, 'UTF-8')
elements_cliquables = doc.css('.bonne-reponse')

elements_cliquables.size > 1
svg_contient_class_bonne_reponse?(svg_content, 2)
end

private
Expand Down Expand Up @@ -60,12 +58,19 @@ def valide_zone_cliquable_avec_reponse
return if attachment_changes['zone_cliquable'].nil?

file = attachment_changes['zone_cliquable'].attachable
doc = Nokogiri::XML(file, nil, 'UTF-8')
elements_cliquables = doc.css('.bonne-reponse')

return unless elements_cliquables.empty?
return if svg_contient_class_bonne_reponse?(file, 1)

errors.add(:zone_cliquable, "doit contenir la classe 'bonne_reponse'")
errors.add(:zone_cliquable, :class_bonne_reponse_not_found)
throw(:abort)
end

def fichier_encode_base64(attachment)
file_content = attachment.download
ApplicationController.helpers.fichier_encode_en_base64(file_content)
end

def svg_contient_class_bonne_reponse?(svg_content, minimum)
doc = Nokogiri::XML(svg_content, nil, 'UTF-8')
doc.css(".#{CLASS_BONNE_REPONSE}").size >= minimum
end
end
6 changes: 6 additions & 0 deletions config/locales/models/question.yml
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,12 @@ fr:
bonne_reponse: Bonne réponse
question_glisser_deposer:
reponses: Réponses
errors:
models:
question_clic_dans_image:
attributes:
zone_cliquable:
class_bonne_reponse_not_found: "doit contenir la classe 'bonne-reponse'"
formtastic:
actions:
question: &question_actions
Expand Down
4 changes: 3 additions & 1 deletion spec/features/admin/question_clic_dans_image_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,9 @@
end

it do
expect(page).to have_content("doit contenir la classe 'bonne_reponse'")
expect(page).to have_content(
"doit contenir la classe '#{QuestionClicDansImage::CLASS_BONNE_REPONSE}'"
)
expect(Question.count).to eq(0)
end
end
Expand Down

0 comments on commit 77dd6b1

Please sign in to comment.