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_schema.py4# Desc: Validation de schéma (§18) — rejet des comptes sans url/confidence,5# agrégats (tier, portée, plateforme principale)6# ==============================================================================7import pytest89from creaka.identity import account10from creaka.schema import Creator, PlatformAccount111213def test_compte_sans_confidence_rejete():14 with pytest.raises(ValueError):15 PlatformAccount(platform="instagram", handle="nom", url="x",16 confidence=None).finalize()171819def test_compte_sans_url_canonisable_rejete():20 with pytest.raises(ValueError):21 PlatformAccount(platform="site-web", handle="nom", url="",22 confidence=0.9).finalize()232425def test_creator_sans_compte_valide_rejete():26 with pytest.raises(ValueError):27 Creator(source="t", external_id="", display_name="Nom",28 platforms=[]).finalize()293031def test_agregats():32 cr = Creator(source="t", external_id="", display_name="Nom Scène", platforms=[33 account("instagram", "nom", "listes_medias", followers=250_000),34 account("tiktok", "nom", "listes_medias", followers=900_000),35 ]).finalize()36 assert cr.primary_platform == "tiktok" # plus grosse audience37 assert cr.total_reach == 1_150_00038 assert cr.audience_tier == "macro" # basée sur la principale (900k)39 assert cr.external_id == "nom-scene"40 assert cr.languages == ["fr"]414243def test_dedup_intra_fiche_meilleure_confiance():44 cr = Creator(source="t", external_id="", display_name="Nom", platforms=[45 account("instagram", "nom", "handle_match", followers=100),46 account("instagram", "@NOM", "link_in_bio"),47 ]).finalize()48 assert len(cr.platforms) == 149 assert cr.platforms[0].confidence == 0.9550 assert cr.platforms[0].followers == 10051