Créa·Ka — annuaire public cross-plateforme des créateurs de contenu québécois (crea-ka.com)
Python 73.6%
HTML 13.2%
TypeScript 6%
JavaScript 4.5%
CSS 1.7%
Dockerfile 0.6%
1# ==============================================================================2# Author: Simon-Pierre Boucher <contact@spboucher.ai>3# File: tests/test_identity.py4# Desc: Tests de résolution d'identité & déduplication — cas multi-plateformes5# + cas-pièges d'HOMONYMES à ne jamais fusionner (§12, §18)6# ==============================================================================7from creaka.dedup import dedupe, merge_creators, should_merge8from creaka.identity import account, merge_accounts9from creaka.schema import Creator101112def _creator(name, accounts, **kw):13 return Creator(source="test", external_id="", display_name=name,14 platforms=accounts, **kw).finalize()151617def test_homonymes_jamais_fusionnes():18 """Deux personnes au même nom SANS compte partagé → deux fiches (§12.2)."""19 a = _creator("Alex Tremblay", [account("instagram", "alex.gaming", "listes_medias")])20 b = _creator("Alex Tremblay", [account("instagram", "alexcuisine", "listes_medias")])21 assert not should_merge(a, b)22 assert len(dedupe([a, b])) == 2232425def test_fusion_sur_compte_fort_partage():26 a = _creator("Nom Scène", [account("instagram", "nomscene", "listes_medias"),27 account("youtube", "nomscene", "listes_medias")])28 b = _creator("Nom Scene", [account("instagram", "nomscene", "link_in_bio"),29 account("twitch", "nomscene_tv", "link_in_bio")])30 assert should_merge(a, b)31 merged = dedupe([a, b])32 assert len(merged) == 133 keys = {acc.key for acc in merged[0].platforms}34 # union : on ne perd AUCUN lien vérifié35 assert keys == {"instagram:nomscene", "youtube:nomscene", "twitch:nomscene_tv"}363738def test_pas_de_fusion_sur_compte_faible():39 """Un compte partagé à confiance basse ne suffit pas (sous STRONG_THRESHOLD)."""40 a = _creator("Personne Un", [account("instagram", "commun", "mention"),41 account("youtube", "personneun", "listes_medias")])42 b = _creator("Personne Deux", [account("instagram", "commun", "mention"),43 account("tiktok", "personnedeux", "listes_medias")])44 assert not should_merge(a, b)454647def test_merge_accounts_meilleure_confiance():48 old = [account("instagram", "nom", "handle_match", followers=1000).finalize()]49 new = [account("instagram", "nom", "link_in_bio").finalize()]50 merged = merge_accounts(old, new)51 assert len(merged) == 152 assert merged[0].confidence == 0.95 # link_in_bio gagne53 assert merged[0].followers == 1000 # métrique conservée545556def test_merge_creators_regime_mineur_et_optout():57 a = _creator("Jeune Talent", [account("tiktok", "jeune", "listes_medias")],58 region="Montréal", city="Montréal")59 b = _creator("Jeune Talent", [account("tiktok", "jeune", "link_in_bio")],60 is_minor=True)61 merged = merge_creators(a, b)62 assert merged.is_minor is True63 assert merged.region is None and merged.city is None # régime restreint §1564