From 3894fc48f6a7fd402a72341c005f4a317ef84352 Mon Sep 17 00:00:00 2001 From: Frederic Merizen Date: Tue, 6 Mar 2018 14:37:20 +0100 Subject: [PATCH] [Fix #1543] Strip html tags from textarea champs --- .../2018_03_06_clean_html_textareas.rake | 16 +++++++++++ .../2018_03_06_clean_html_textareas_spec.rb | 27 +++++++++++++++++++ 2 files changed, 43 insertions(+) create mode 100644 lib/tasks/2018_03_06_clean_html_textareas.rake create mode 100644 spec/lib/rake/2018_03_06_clean_html_textareas_spec.rb diff --git a/lib/tasks/2018_03_06_clean_html_textareas.rake b/lib/tasks/2018_03_06_clean_html_textareas.rake new file mode 100644 index 000000000..37ff84579 --- /dev/null +++ b/lib/tasks/2018_03_06_clean_html_textareas.rake @@ -0,0 +1,16 @@ +require Rails.root.join("app", "helpers", "html_to_string_helper") + +namespace :'2018_03_06_clean_html_textareas' do + task clean: :environment do + include ActionView::Helpers::TextHelper + include HtmlToStringHelper + + types_de_champ = TypeDeChamp.joins(:champ) + .where(type_champ: "textarea") + .where("champs.value LIKE '%<%'") + + types_de_champ.find_each do |tdc| + tdc.champ.each { |c| c.update_column(:value, html_to_string(c.value)) } + end + end +end diff --git a/spec/lib/rake/2018_03_06_clean_html_textareas_spec.rb b/spec/lib/rake/2018_03_06_clean_html_textareas_spec.rb new file mode 100644 index 000000000..86bcd3a91 --- /dev/null +++ b/spec/lib/rake/2018_03_06_clean_html_textareas_spec.rb @@ -0,0 +1,27 @@ +require 'spec_helper' + +describe '2018_03_06_clean_html_textareas#clean' do + let(:procedure) { create(:procedure) } + let(:type_champ) { create(:type_de_champ, procedure: procedure, type_champ: :textarea) } + let(:champ) { type_champ.champ.create(value: "

Gnahar
greu bouahaha

") } + let(:champ_date) { Time.local(1995) } + let(:rake_date) { Time.local(2018) } + let(:rake_task) { Rake::Task['2018_03_06_clean_html_textareas:clean'] } + + before do + Timecop.freeze(champ_date) { champ } + TPS::Application.load_tasks + Timecop.freeze(rake_date) { rake_task.invoke } + champ.reload + end + + after { rake_task.reenable } + + it 'cleans up html tags' do + expect(champ.value).to eq("Gnahar\ngreu bouahaha\n") + end + + it 'does not change the model’s dates' do + expect(champ.updated_at).to eq(champ_date) + end +end