Importa i prospect Calcio a 5 senza toccare la Pallavolo e filtra le organizzazioni per sport.
CI / scan_ruby (push) Failing after 15m50s
CI / scan_js (push) Successful in 18m7s
CI / lint (push) Failing after 12m1s

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-09-05 11:07:43 +02:00
co-authored by Cursor
parent b5737a7ee7
commit e492c43bf8
7 changed files with 320 additions and 9 deletions
@@ -0,0 +1,30 @@
require "test_helper"
class OrganizationsControllerTest < ActionDispatch::IntegrationTest
test "sport filter is a dropdown of values already in the project" do
login_as users(:admin)
create_campaign_org(name: "Futsal Test", email: "futsal@example.com", sport: "Calcio a 5")
get organizations_path(project_code: "matchlivetv")
assert_response :success
assert_select "select[name=sport]" do
assert_select "option[value='']", text: "Sport"
assert_select "option[value=Calcio]", text: "Calcio"
assert_select "option[value='Calcio a 5']", text: "Calcio a 5"
end
assert_select "input[name=sport]", count: 0
end
test "sport filter keeps only organizations of that sport" do
login_as users(:admin)
create_campaign_org(name: "Futsal Test", email: "futsal@example.com", sport: "Calcio a 5")
get organizations_path(project_code: "matchlivetv", sport: "Calcio a 5")
assert_response :success
assert_match(/Futsal Test/, response.body)
assert_no_match(/ASD Test Calcio/, response.body)
assert_select "select[name=sport] option[value='Calcio a 5'][selected]"
end
end
@@ -48,4 +48,63 @@ class CampaignImportMatchlivetvLaunchTest < ActiveSupport::TestCase
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