Files
eminuxCRM/test/services/campaign_import_matchlivetv_launch_test.rb
T
eminuxandCursor e492c43bf8
CI / scan_ruby (push) Failing after 15m50s
CI / scan_js (push) Successful in 18m7s
CI / lint (push) Failing after 12m1s
Importa i prospect Calcio a 5 senza toccare la Pallavolo e filtra le organizzazioni per sport.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-05 11:07:43 +02:00

111 lines
5.1 KiB
Ruby
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
require "test_helper"
require "tempfile"
class CampaignImportMatchlivetvLaunchTest < ActiveSupport::TestCase
test "imports campaign rows onto MatchLiveTV" do
csv = Tempfile.new(["campagna", ".csv"])
csv.write(<<~CSV)
N.,Regione,Prov.,Società,M/F,Email verificata,Sito / profilo,Streaming rilevato,Evidenza / fit commerciale,Test A/B,Stato invio,Data invio,Esito,Demo / Trial,Conversione,Piano,Fonte contatto / ricerca,Data verifica,Note follow-up
1,Piemonte,TO,Vol-Ley Academy Volpiano,F,volley.academy.to@gmail.com,https://www.facebook.com/p/Vol-Ley-Academy-100063526780569/,NON RILEVATO,Academy giovanile,A,DA INVIARE,,,NO,NO,,https://example.com/fonte,2026-08-17,
7,Lombardia,MB,Volley Brianza Est,F,ds@volleybrianzaest.it,https://www.volleybrianzaest.it/, / PARZIALE,U16/U18 nazionale,A,DA INVIARE,,,NO,NO,,https://www.volleybrianzaest.it/,46251,
100,Valle d'Aosta,AO,Cogne Aosta Volley,F,cogneaostavolley@gmail.com,https://www.youtube.com/@CogneAostaVolley,SÌ SPORTCAM,Vivaio prolifico,B,DA INVIARE,,,NO,NO,,https://www.fipav-vda.com/societa,2026-08-17,
CSV
csv.flush
result = CampaignImport::MatchlivetvLaunch.new(
path: csv.path,
user: users(:admin),
project: projects(:matchlivetv),
wipe: false
).call
assert_empty result.errors, result.errors.inspect
assert_equal 3, result.imported
org = Organization.find_by!(name: "Vol-Ley Academy Volpiano")
assert_equal "female", org.team_gender
assert_equal "not_detected", org.streaming_status
assert_equal 1, org.list_position
assert_equal Date.new(2026, 8, 17), org.verified_at
assert_equal "campaign", org.lead_source
assert org.projects.exists?(code: "matchlivetv")
assert_equal "volley.academy.to@gmail.com", org.contacts.primary_first.first.email
opp = org.campaign_opportunity(projects(:matchlivetv))
assert_equal "A", opp.ab_variant
assert_equal "to_send", opp.send_status
assert_equal "to_contact", opp.pipeline_stage
assert_not opp.demo_trial
assert_not opp.converted
brianza = Organization.find_by!(name: "Volley Brianza Est")
assert_equal "yes_partial", brianza.streaming_status
assert_equal Date.new(2026, 8, 17), brianza.verified_at
cogne = Organization.find_by!(name: "Cogne Aosta Volley")
assert_equal "yes_sportcam", cogne.streaming_status
assert_equal "B", cogne.campaign_opportunity(projects(:matchlivetv)).ab_variant
ensure
csv.close!
end
test "imports with a distinct sport and skips duplicate clubs" do
csv = Tempfile.new(["calcioa5", ".csv"])
csv.write(<<~CSV)
N.,Regione,Prov.,Società,M/F,Email verificata,Sito / profilo,Streaming rilevato,Evidenza / fit commerciale,Test A/B,Stato invio,Data invio,Esito,Demo / Trial,Conversione,Piano,Fonte contatto / ricerca,Data verifica,Note follow-up
101,Lazio,RM,Ecocity Futsal Genzano,M,info@ecocityfutsal.it,ecocityfutsal.it,LIMITATO,Attiva,A,DA INVIARE,,,NO,NO,,fonte,2026-09-06,
129,Lazio,RM,Ecocity Futsal Genzano,M,amministrazione@pec.ecocityfutsal.it,ecocityfutsal.it,LIMITATO,PEC,A,DA INVIARE,,,NO,NO,,fonte,2026-09-06,
157,Valle d'Aosta,AO,SSDARL AOSTA CALCIO 511,M/F,aostacalcio511@gmail.com,divisionecalcioa5.it,NON RILEVATO,U19,A,DA INVIARE,,,NO,NO,NO,fonte,2026-09-06,
CSV
csv.flush
create_campaign_org(name: "Aosta Calcio 511", email: "esistente@example.com", list_position: 97)
result = CampaignImport::MatchlivetvLaunch.new(
path: csv.path,
user: users(:admin),
project: projects(:matchlivetv),
wipe: false,
sport: "Calcio a 5",
campaign_name: "Campagna Calcio a 5"
).call
assert_empty result.errors, result.errors.inspect
assert_equal 1, result.imported
assert_equal 2, result.skipped
org = Organization.find_by!(name: "Ecocity Futsal Genzano")
assert_equal "Calcio a 5", org.sport
assert_equal "Campagna Calcio a 5", org.campaign_opportunity(projects(:matchlivetv)).name
assert_nil org.campaign_opportunity(projects(:matchlivetv)).product
assert_equal 1, Organization.where("LOWER(name) = ?", "ecocity futsal genzano").count
assert_nil Organization.find_by(name: "SSDARL AOSTA CALCIO 511")
ensure
csv.close!
end
test "strips spaces inside campaign emails" do
csv = Tempfile.new(["email", ".csv"])
csv.write(<<~CSV)
N.,Regione,Prov.,Società,M/F,Email verificata,Sito / profilo,Streaming rilevato,Evidenza / fit commerciale,Test A/B,Stato invio,Data invio,Esito,Demo / Trial,Conversione,Piano,Fonte contatto / ricerca,Data verifica,Note follow-up
144,Emilia-Romagna,RE,Real Casalgrandese C5,M,REAL CASALGRANDESEC5@LIBERO.IT,divisionecalcioa5.it,NON RILEVATO,Attiva,B,DA INVIARE,,,NO,NO,,fonte,2026-09-06,
CSV
csv.flush
result = CampaignImport::MatchlivetvLaunch.new(
path: csv.path,
user: users(:admin),
project: projects(:matchlivetv),
wipe: false,
sport: "Calcio a 5",
campaign_name: "Campagna Calcio a 5"
).call
assert_empty result.errors, result.errors.inspect
org = Organization.find_by!(name: "Real Casalgrandese C5")
assert_equal "realcasalgrandesec5@libero.it", org.email
ensure
csv.close!
end
end