Beispiel #1
0
def test_controleSeriesOK(courbesTest):
    """
        teste selection des courbes : valeurs OK
    """

    config = configparser.RawConfigParser()
    config.read('FinancesLocales.properties')

    # récup données de test
    pathDatabaseMini = config.get('Test', 'genCode.pathDatabaseMini')
    pathCSVMini = config.get('Test', 'genCode.pathCSVMini')
    if os.path.isfile(pathDatabaseMini):
        print("destruction de la base :", pathDatabaseMini)
        os.remove(pathDatabaseMini)

    # Insertion dans la table ville des villes à traiter
    # Création base
    connDB = database.createDatabase(config, pathDatabaseMini, False)
    connDB.executemany(
        """
        INSERT INTO villes(codeCommune, nomMinFi, nom, nomWkpFr)
        VALUES (?, ?, ?, ?)
        """, (('068376', 'WITTENHEIM', 'Wittenheim', 'Wittenheim'), ))
    connDB.commit()

    # Création de la création de la base de test
    param = ['updateDataMinFi.py', pathDatabaseMini, pathCSVMini]
    updateDataMinFi.main(param)
    assert os.path.isfile(pathDatabaseMini)

    # Lit dans la base les infos concernant la ville à traiter
    listeVilleWalheim = [
        ville
        for ville in database.getListeVilles4Departement(connDB, '068', False)
        if ville[0] == '068376'
    ]
    ville = listeVilleWalheim[0]

    # Recup des annees de données fiscales por WALHEIN
    dictAllGrandeur = database.getAllValeursDataMinFi4Entite(
        connDB, 'V', ville[0], False)
    listAnnees = database.getListeAnneesDataMinFi4Entite(
        connDB, 'V', ville[0], False)
    assert len(listAnnees) == 3

    # Grandeurs calculées
    genCodeCommon.calculeGrandeur(config, dictAllGrandeur, listAnnees, True,
                                  False)

    # Test calcul des valeurs
    nbCourbeOrig = len(courbesTest)
    anneesOK = genCodeGraphiques.controleSeries(dictAllGrandeur, courbesTest,
                                                listAnnees, True)
    assert anneesOK == sorted(listAnnees)
    assert nbCourbeOrig == len(courbesTest)

    # Fermeture base
    database.closeDatabase(connDB, True)
def test_genereCode1Ville_OK(typeCode):
    """ test génération des données pour une ville """

    # Contournement OS X and Linux : invalide locale
    if platform.system() in ('Darwin', 'Linux'):
        locale.setlocale(locale.LC_ALL, os.getenv('LANG'))

    config = configparser.RawConfigParser()
    config.read('FinancesLocales.properties')

    nomProg = "test_genereCode1Ville"

    # Création répertoire de sortie hebergeant les villes
    repVilles = config.get('Test', 'genCode.pathVilles')
    if not os.path.isdir(repVilles):
        os.mkdir(repVilles)

    # récup données de test
    pathDatabaseMini = config.get('Test', 'genCode.pathDatabaseMini')
    pathCSVMini = config.get('Test', 'genCode.pathCSVMini')
    if os.path.isfile(pathDatabaseMini):
        print("Destruction de la base de test :", pathDatabaseMini)
        os.remove(pathDatabaseMini)

    # Insertion dans la table ville des villes à traiter
    # Création base
    connDB = database.createDatabase(config, pathDatabaseMini, False)
    connDB.executemany(
        """
        INSERT INTO villes(codeCommune, nomMinFi, nom, nomWkpFr)
        VALUES (?, ?, ?, ?)
        """, (('068376', 'WITTENHEIM', 'Wittenheim', 'Wittenheim'), ))
    connDB.commit()

    # Création de la base de test
    param = ['updateDataMinFi.py', pathDatabaseMini, pathCSVMini]
    updateDataMinFi.main(param)
    assert os.path.isfile(pathDatabaseMini)

    # Lit dans la base les infos concernant la ville à traiter
    listeVilleWalheim = [
        ville
        for ville in database.getListeVilles4Departement(connDB, '068', False)
        if ville[0] == '068376'
    ]
    ville = listeVilleWalheim[0]

    # Test fonction de génération
    genereCode1Ville.genereCode1Ville(config, connDB, repVilles, ville,
                                      nomProg, typeCode, True, True)

    # Fermeture base
    database.closeDatabase(connDB, False)
def a_voir_test_genereCode1Ville_55(typeCode):
    """
    test génération des données pour une ville du département 55
    qui pose des problèmes au 21/11/2021 : donnees incompletes
    """

    config = configparser.RawConfigParser()
    config.read('FinancesLocales.properties')

    nomProg = "test_genereCode1Ville"

    # Création répertoire de sortie hebergeant les villes
    repVilles = config.get('Test', 'genCode.pathVilles55')
    if not os.path.isdir(repVilles):
        os.mkdir(repVilles)

    # récup données de test
    pathDatabaseMini = config.get('Test', 'genCode.pathDatabaseMini55')
    pathCSVMini = config.get('Test', 'genCode.pathCSVMini55')
    if os.path.isfile(pathDatabaseMini):
        print("Destruction de la base de test :", pathDatabaseMini)
        os.remove(pathDatabaseMini)

    # Insertion dans la table ville des villes à traiter
    # Création base
    connDB = database.createDatabase(config, pathDatabaseMini, False)
    connDB.executemany(
        """
        INSERT INTO villes(codeCommune, nomMinFi, nom, nomWkpFr)
        VALUES (?, ?, ?, ?)
        """, (('055039', 'BEAUMONT-EN-VERDUNOIS', 'Beaumont-en-Verdunois',
               'Beaumont-en-Verdunois'), ))
    connDB.commit()

    # Création de la base de test
    param = ['updateDataMinFi.py', pathDatabaseMini, pathCSVMini]
    updateDataMinFi.main(param)
    assert os.path.isfile(pathDatabaseMini)

    # Lit dans la base les infos concernant la ville à traiter
    listeVille = database.getListeVilles4Departement(connDB, '055', True)
    ville = listeVille[0]

    # Test fonction de génération
    genereCode1Ville.genereCode1Ville(config, connDB, repVilles, ville,
                                      nomProg, typeCode, True, True)

    # Fermeture base
    database.closeDatabase(connDB, False)
def test_calculeGrandeur(isWikicode):
    """
        teste le calcule de grandeurs agglomérées
    """

    config = configparser.RawConfigParser()
    config.read('FinancesLocales.properties')

    # récup données de test
    pathDatabaseMini = config.get('Test', 'genCode.pathDatabaseMini')
    pathCSVMini = config.get('Test', 'genCode.pathCSVMini')
    if os.path.isfile(pathDatabaseMini):
        print("destruction de la base :", pathDatabaseMini)
        os.remove(pathDatabaseMini)

    # Insertion dans la table ville des villes à traiter
    # Création base
    connDB = database.createDatabase(config, pathDatabaseMini, False)
    connDB.executemany("""
        INSERT INTO villes(codeCommune, nomMinFi, nom, nomWkpFr)
        VALUES (?, ?, ?, ?)
        """, (('068376', 'WITTENHEIM', 'Wittenheim', 'Wittenheim'),)
                       )
    connDB.commit()

    # Création de la création de la base de test
    param = ['updateDataMinFi.py', pathDatabaseMini, pathCSVMini]
    updateDataMinFi.main(param)
    assert os.path.isfile(pathDatabaseMini)

    # Lit dans la base les infos concernant la ville à traiter
    listeVilleWalheim = [ville
                         for ville in database.getListeVilles4Departement(connDB, '068', False)
                         if ville[0] == '068376']
    ville = listeVilleWalheim[0]

    # Recup des annees de données fiscales por WALHEIN
    dictAllGrandeur = database.getAllValeursDataMinFi4Entite(connDB, 'V',
                                                             ville[0], True)
    listAnnees = database.getListeAnneesDataMinFi4Entite(connDB, 'V', ville[0], True)
    assert len(listAnnees) == 3

    # Test calcul des valeurs
    genCodeCommon.calculeGrandeur(config, dictAllGrandeur, listAnnees, isWikicode, True)
    for grandeur in ["tendance ratio", "ratio dette / caf", "ratio n"]:
        assert grandeur in dictAllGrandeur

    # Fermeture base
    database.closeDatabase(connDB, True)
def test_createDbDataMinFi():
    """
        Test génération database avec un fichier CSV réduit à 2 villes
        """
    config = configparser.RawConfigParser()
    config.read('FinancesLocales.properties')

    # récup données de test
    pathDatabaseMini = config.get('Test', 'updateDataMinFi.pathDatabaseMini')
    pathCSVMini = config.get('Test', 'updateDataMinFi.pathCSVMini')
    if os.path.isfile(pathDatabaseMini):
        print("destruction de la base :", pathDatabaseMini)
        os.remove(pathDatabaseMini)

    # Insertion dans la table ville des villes à traiter
    # Création base
    connDB = database.createDatabase(config, pathDatabaseMini, False)
    connDB.executemany(
        """
        INSERT INTO villes(codeCommune, nomMinFi)
        VALUES (?, ?)
        """, (('068356', 'WALHEIM'), ('040281', 'ST PIERRE DU MONT')))
    connDB.commit()
    database.closeDatabase(connDB, True)

    # Appel programme
    param = ['updateDataMinFi.py', pathDatabaseMini, pathCSVMini]
    updateDataMinFi.main(param)
    assert os.path.isfile(pathDatabaseMini)

    # Test info ville 1
    connDB = sqlite3.connect(pathDatabaseMini)
    cursor = connDB.cursor()
    cursor.execute(
        "SELECT codeCommune, nomMinFi, nomStrate FROM villes ORDER BY codeCommune"
    )
    listVilles = cursor.fetchall()
    assert len(listVilles) == 2
    assert listVilles[0][0] == '040281'
    assert listVilles[0][1] == 'ST PIERRE DU MONT'
    assert listVilles[0][2] == "n'appartenant à aucun groupement fiscalisé"
    assert listVilles[1][0] == '068356'
    assert listVilles[1][1] == 'WALHEIM'
    assert listVilles[1][2] == "n'appartenant à aucun groupement fiscalisé"
    cursor.close()

    connDB.close()
def test_genCodeProg(verbose):
    """
    Teste le programme de génération du code Wiki et HTML
    sur base de test 1 ville et 3 années.
    """

    # Contournement OS X and Linux : invalide locale
    if platform.system() in ('Darwin', 'Linux'):
        locale.setlocale(locale.LC_ALL, os.getenv('LANG'))

    config = configparser.RawConfigParser()
    config.read('FinancesLocales.properties')

    # Ménage répertoire de sortie
    pathOutput = config.get('Test', 'genCode.pathOutput')
    resultatsPath = pathOutput
    print("resultatsPath =", resultatsPath)

    if os.path.isdir(resultatsPath):
        print("Effacement de :", resultatsPath)
        shutil.rmtree(resultatsPath)

    # récup données de test
    pathDatabaseMini = config.get('Test', 'genCode.pathDatabaseMini')
    pathCSVMini = config.get('Test', 'genCode.pathCSVMini')
    if os.path.isfile(pathDatabaseMini):
        print("Destruction de la base de test :", pathDatabaseMini)
        os.remove(pathDatabaseMini)

    # Insertion dans la table ville des villes à traiter
    # Création base
    connDB = database.createDatabase(config, pathDatabaseMini, False)
    connDB.executemany(
        """
        INSERT INTO villes(codeCommune, nomMinFi, nom, nomWkpFr)
        VALUES (?, ?, ?, ?)
        """, (('068376', 'WITTENHEIM', 'Wittenheim', 'Wittenheim'), ))
    connDB.commit()
    # Création de la base de test
    param = ['updateDataMinFi.py', pathDatabaseMini, pathCSVMini]
    updateDataMinFi.main(param)
    assert os.path.isfile(pathDatabaseMini)

    # Test du programme genCode
    if verbose:
        param = ['genCode.py', '-v', pathDatabaseMini, resultatsPath]
    else:
        param = ['genCode.py', pathDatabaseMini, resultatsPath]
    genCode.main(param)

    # Vérif des résultats
    assert os.path.isdir(resultatsPath)
    assert os.path.isdir(os.path.join(resultatsPath, "Departement_068"))
    assert os.path.isfile(
        os.path.join(resultatsPath, "Departement_068", "index.html"))
    assert os.path.isdir(
        os.path.join(resultatsPath, "Departement_068", "Wittenheim"))
    assert os.path.isfile(
        os.path.join(resultatsPath, "Departement_068", "Wittenheim",
                     "Wittenheim.html"))
    assert os.path.isfile(
        os.path.join(resultatsPath, "Departement_068", "Wittenheim",
                     "Wittenheim_wikicode.html"))
    assert os.path.isfile(
        os.path.join(resultatsPath, "Departement_068", "Wittenheim",
                     "CHARGES_FINANCIERES_SUBVENTIONS_VERSEES.svg"))

    # Fermeture base
    database.closeDatabase(connDB, False)
def test_genCodeTableauxPicto(isComplet, isWikicode):
    """
        teste la génération de tous les tableau pour 1 ville : Wittenheim 68)
        Wittenheim et les années 2013 à 2015 pour comparaison avec
        http://marielaure.monde.free.fr/Finances_Locales_Web/Departement_68/Wittenheim/Wittenheim.html
    """

    config = configparser.RawConfigParser()
    config.read('FinancesLocales.properties')

    # récup données de test
    pathDatabaseMini = config.get('Test', 'genCode.pathDatabaseMini')
    pathCSVMini = config.get('Test', 'genCode.pathCSVMini')
    if os.path.isfile(pathDatabaseMini):
        print("destruction de la base :", pathDatabaseMini)
        os.remove(pathDatabaseMini)

    # Insertion dans la table ville des villes à traiter
    # Création base
    connDB = database.createDatabase(config, pathDatabaseMini, False)
    connDB.executemany("""
        INSERT INTO villes(codeCommune, nomMinFi, nom, nomWkpFr)
        VALUES (?, ?, ?, ?)
        """, (('068376', 'WITTENHEIM', 'Wittenheim', 'Wittenheim'),)
                       )
    connDB.commit()

    # Création de la création de la base de test
    param = ['updateDataMinFi.py', pathDatabaseMini, pathCSVMini]
    updateDataMinFi.main(param)
    assert os.path.isfile(pathDatabaseMini)

    listeVilleWalheim = [ville
                         for ville in database.getListeVilles4Departement(connDB, '068', False)
                         if ville[0] == '068376']
    ville = listeVilleWalheim[0]

    # Recup des données fiscales por WALHEIN
    dictAllGrandeur = database.getAllValeursDataMinFi4Entite(connDB, 'V',
                                                             ville[0], False)
    listAnnees = database.getListeAnneesDataMinFi4Entite(connDB, 'V',
                                                         ville[0], False)
    assert len(listAnnees) == 3
    # Agglomère certaines grandeurs et complète dictAllGrandeur
    genCodeCommon.calculeGrandeur(config, dictAllGrandeur,
                            listAnnees, isWikicode, False)

    # Lecture du modèle de test reduit au tableau picto
    nomBaseModele = config.get('Test', 'genCodeTableauxPicto.ficModele')
    typeSortie = ""
    if isWikicode:
        typeSortie = "wikicode"
    else:
        typeSortie = "HTML"
    modele = nomBaseModele + '_' + typeSortie + '.txt'
    textSection = utilitaires.lectureFiltreModele(modele, isComplet, False)
    isGroupement = False

    print("textSection AVANT genCodeTableauxPicto=", textSection)
    
    # Définit le contenu des tableaux picto
    grandeursAnalyse = genCodeTableaux.defTableauxPicto(config,
                                        dictAllGrandeur, listAnnees,
                                        isWikicode, False)   
    textSection = genCodeCommon.genCodeTableauxPicto(config,
                                                       dictAllGrandeur,
                                                       grandeursAnalyse,
                                                       textSection,
                                                       listAnnees, isComplet,
                                                       isWikicode,
                                                     True,
                                                     isGroupement,
                                                     False)

    # Test Résultat comptable en 2015
    # (cle fres1) : 12.94
    print("textSection APRES genCodeTableauxPicto=", textSection)
    assert "13" in textSection

    # Test valeur des Charges de personnels par habitant en 2015
    # (cle fperso) : 470.19
    assert "470" in textSection

    if isComplet:
        # Test valeur des charges de la strate en 2015
        # (cle mres1) : 131.95
        assert "132" in textSection

    # Test valeur taux taxe d'habitation en 2015
    # (cle tth) : 10.11
    assert "10" in textSection

    if isComplet:
        # Test valeur taux taxe d'habitation pour la strate en 2015
        # (cle tmth) : 15.98
        assert "16" in textSection
    
    database.closeDatabase(connDB, True)
def test_getValeursDict(avecStrate):
    """ Teste la fonction getValeursDict """

    isWikicode = False
    config = configparser.RawConfigParser()
    config.read('FinancesLocales.properties')

    # récup données de test
    pathDatabaseMini = config.get('Test', 'genCode.pathDatabaseMini')
    pathCSVMini = config.get('Test', 'genCode.pathCSVMini')
    if os.path.isfile(pathDatabaseMini):
        print("destruction de la base :", pathDatabaseMini)
        os.remove(pathDatabaseMini)

    # Insertion dans la table ville des villes à traiter
    # Création base
    connDB = database.createDatabase(config, pathDatabaseMini, False)
    connDB.executemany("""
        INSERT INTO villes(codeCommune, nomMinFi, nom, nomWkpFr)
        VALUES (?, ?, ?, ?)
        """, (('068376', 'WITTENHEIM', 'Wittenheim', 'Wittenheim'),)
                       )
    connDB.commit()

    # Création de la création de la base de test
    param = ['updateDataMinFi.py', pathDatabaseMini, pathCSVMini]
    updateDataMinFi.main(param)
    assert os.path.isfile(pathDatabaseMini)

    listeVilleWalheim = [ville
                         for ville in database.getListeVilles4Departement(connDB, '068', False)
                         if ville[0] == '068376']
    ville = listeVilleWalheim[0]

    # Recup des annees de données fiscales por WALHEIN
    listAnnees = database.getListeAnneesDataMinFi4Entite(connDB, 'V',
                                                         ville[0], False)
    assert len(listAnnees) == 3

    verbose = True
    grandeursAnalyse = []
    couleurDettesCAF = config.get('Tableaux', 'tableaux.couleurDettesCAF')
    dictEncoursDette = \
    {
        "l'encours de la dette" :
        {
            'libellePicto' : 'Encours de la dette',
            'cle' : 'encours de la dette au 31 12 n',
            'note' : "",
            'noteHtml' : '',
            'nul' : "pas d'encours pour la dette"
        }
    }
    grandeursAnalyse.append([dictEncoursDette, 0, "ENCOURS_DETTE", couleurDettesCAF])

    dictAnnuiteDette = \
    {
        "l'annuité de la dette" :
        {
            'libellePicto' : 'annuité de la dette',
            'cle' : "annuité de la dette",
            'note' : "",
            'noteHtml' : '',
            'nul' : 'aucune annuité pour la dette'
        }
    }
    grandeursAnalyse.append([dictAnnuiteDette, 0, "ANNUITE_DETTE", couleurDettesCAF])

    dictAllGrandeur = database.getAllValeursDataMinFi4Entite(connDB, 'V', ville[0], verbose)
    
    nbAnneesTendance = int(config.get('GenWIkiCode', 'gen.nbAnneesTendance'))
    listeAnneesTendance = sorted(listAnnees[:nbAnneesTendance])


    for grandeurs in grandeursAnalyse:
        genCodeCommon.getValeursDict(dictAllGrandeur,
                   listeAnneesTendance, listAnnees[0],
                   grandeurs[0], avecStrate,
                   verbose)
        print(grandeurs[0], "=", grandeurs[0])
        assert grandeurs[0]["l'encours de la dette"]['Valeur totale'] == 10817
        assert grandeurs[0]["l'encours de la dette"]['Par habitant'] == 734
        if avecStrate:
            assert grandeurs[0]["l'encours de la dette"]['En moyenne pour la strate'] == 944
        else:
            assert not 'En moyenne pour la strate' in grandeurs[0]["l'encours de la dette"]
        assert grandeurs[0]["l'encours de la dette"]['dictAnneesValeur'][2013] == pytest.approx(479.18)
        assert grandeurs[0]["l'encours de la dette"]['dictAnneesValeur'][2014] == pytest.approx(671.41)
        assert grandeurs[0]["l'encours de la dette"]['dictAnneesValeur'][2015] == pytest.approx(733.67)
        break
Beispiel #9
0
def test_genCodeTableauxWikicode(isComplet):
    """
        teste la génération de tous les tableaux pour 1 ville : Wittenheim 68)
        Wittenheim et les années 2013 à 2015 pour comparaison avec
        http://marielaure.monde.free.fr/Finances_Locales_Web/Departement_68/Wittenheim/Wittenheim.html
    """

    isWikicode = True
    config = configparser.RawConfigParser()
    config.read('FinancesLocales.properties')

    # récup données de test
    pathDatabaseMini = config.get('Test', 'genCode.pathDatabaseMini')
    pathCSVMini = config.get('Test', 'genCode.pathCSVMini')
    if os.path.isfile(pathDatabaseMini):
        print("destruction de la base :", pathDatabaseMini)
        os.remove(pathDatabaseMini)

    # Insertion dans la table ville des villes à traiter
    # Création base
    connDB = database.createDatabase(config, pathDatabaseMini, False)
    connDB.executemany("""
        INSERT INTO villes(codeCommune, nomMinFi, nom, nomWkpFr)
        VALUES (?, ?, ?, ?)
        """, (('068376', 'WITTENHEIM', 'Wittenheim', 'Wittenheim'),)
                       )
    connDB.commit()

    # Création de la création de la base de test
    param = ['updateDataMinFi.py', pathDatabaseMini, pathCSVMini]
    updateDataMinFi.main(param)
    assert os.path.isfile(pathDatabaseMini)

    listeVilleWalheim = [ville
                         for ville in database.getListeVilles4Departement(connDB, '068', False)
                         if ville[0] == '068376']
    ville = listeVilleWalheim[0]

    # Recup des données fiscales por WALHEIN
    dictAllGrandeur = database.getAllValeursDataMinFi4Entite(connDB, 'V', ville[0], False)
    listAnnees = database.getListeAnneesDataMinFi4Entite(connDB, 'V',
                                                         ville[0], False)
    assert len(listAnnees) == 3
    # Agglomère certaines grandeurs et complète dictAllGrandeur
    genCodeCommon.calculeGrandeur(config, dictAllGrandeur,
                            listAnnees, isWikicode, False)

    verbose = True

    # Lecture du modèle
    nomBaseModele = config.get('Modele', 'modele.nomBaseModele')
    typeSortie = config.get('GenCode', 'gen.idFicDetail')
    modele = nomBaseModele + '_' + typeSortie + '.txt'
    textSection = utilitaires.lectureFiltreModele(modele, isComplet, verbose)

    textSection = genCodeTableaux.genCodeTableaux(config, dictAllGrandeur,
                                                  textSection,
                                                  listAnnees, isComplet,
                                                  isWikicode, verbose)
    # Test valeur des charges en 2015
    # (cle charge) : 12659.65
    assert "12660" in textSection

    # Test valeur des charges par habitant en 2015
    # (cle fcharge) : 858.63
    assert "859" in textSection

    if isComplet:
        # Test valeur des charges de la strate en 2015
        # (cle mcharge) : 1223.21
        assert "1223" in textSection
   
    # Test valeur taux taxe d'habitation en 2015
    # (cle tth) : 10.11
    assert "10" in textSection

    if isComplet:
        # Test valeur taux taxe d'habitation pour la strate en 2015
        # (cle tmth) : 15.98
        assert "16" in textSection
    
    database.closeDatabase(connDB, True)
Beispiel #10
0
def test_genCodeGraphiques_OK(isComplet, isWikicode):
    """ Test la génération de tous les graphiques """

    config = configparser.RawConfigParser()
    config.read('FinancesLocales.properties')

    # Création répertoire de sortie des graphiques
    repOutGraphique = config.get('Test',
                                 'genHTMLCodeGraphiques.pathOutputTest')
    if not os.path.isdir(repOutGraphique):
        os.mkdir(repOutGraphique)

    # récup données de test
    pathDatabaseMini = config.get('Test', 'genCode.pathDatabaseMini')
    pathCSVMini = config.get('Test', 'genCode.pathCSVMini')
    if os.path.isfile(pathDatabaseMini):
        print("Destruction de la base de test :", pathDatabaseMini)
        os.remove(pathDatabaseMini)

    # Insertion dans la table ville des villes à traiter
    # Création base
    connDB = database.createDatabase(config, pathDatabaseMini, False)
    connDB.executemany(
        """
        INSERT INTO villes(codeCommune, nomMinFi, nom, nomWkpFr)
        VALUES (?, ?, ?, ?)
        """, (('068376', 'WITTENHEIM', 'Wittenheim', 'Wittenheim'), ))
    connDB.commit()

    # Création de la création de la base de test
    param = ['updateDataMinFi.py', pathDatabaseMini, pathCSVMini]
    updateDataMinFi.main(param)
    assert os.path.isfile(pathDatabaseMini)

    # Lit dans la base les infos concernant la ville à traiter
    listeVilleWalheim = [
        ville
        for ville in database.getListeVilles4Departement(connDB, '068', False)
        if ville[0] == '068376'
    ]
    ville = listeVilleWalheim[0]

    # Recup des annees de données fiscales por WALHEIN
    dictAllGrandeur = database.getAllValeursDataMinFi4Entite(
        connDB, 'V', ville[0], False)
    listAnnees = database.getListeAnneesDataMinFi4Entite(
        connDB, 'V', ville[0], False)
    assert len(listAnnees) == 3

    # Agglomère certaines grandeurs et complète dictAllGrandeur
    genCodeCommon.calculeGrandeur(config, dictAllGrandeur, listAnnees, True,
                                  False)

    # Lecture du modèle
    nomBaseModele = config.get('Modele', 'modele.nomBaseModele')
    typeSortie = config.get('GenCode', 'gen.idFicDetail')
    modele = nomBaseModele + '_' + typeSortie + '.txt'
    textSection = utilitaires.lectureFiltreModele(modele, isComplet, False)

    # Generation des graphiques pour une ville
    textSection = genCodeGraphiques.genCodeGraphiques(config, repOutGraphique,
                                                      dictAllGrandeur,
                                                      textSection, ville[1],
                                                      listAnnees, isComplet,
                                                      isWikicode, True, True)

    # Test des valeurs générées
    if isWikicode:
        assert "Graphique polygonal" in textSection
    else:
        assert ".svg" in textSection
Beispiel #11
0
def test_controleSeriesSupprAll():
    """
        teste selection des courbes :
        suppression de toutes les courbes d'un graphique :
        doit lever une exception ValueError
    """

    config = configparser.RawConfigParser()
    config.read('FinancesLocales.properties')

    # récup données de test
    pathDatabaseMini = config.get('Test', 'genCode.pathDatabaseMini')
    pathCSVMini = config.get('Test', 'genCode.pathCSVMini')
    if os.path.isfile(pathDatabaseMini):
        print("destruction de la base :", pathDatabaseMini)
        os.remove(pathDatabaseMini)

    # Insertion dans la table ville des villes à traiter
    # Création base
    connDB = database.createDatabase(config, pathDatabaseMini, False)
    connDB.executemany(
        """
        INSERT INTO villes(codeCommune, nomMinFi, nom, nomWkpFr)
        VALUES (?, ?, ?, ?)
        """, (('068376', 'WITTENHEIM', 'Wittenheim', 'Wittenheim'), ))
    connDB.commit()

    # Création de la création de la base de test
    param = ['updateDataMinFi.py', pathDatabaseMini, pathCSVMini]
    updateDataMinFi.main(param)
    assert os.path.isfile(pathDatabaseMini)

    # Lit dans la base les infos concernant la ville à traiter
    listeVilleWalheim = [
        ville
        for ville in database.getListeVilles4Departement(connDB, '068', False)
        if ville[0] == '068376'
    ]
    ville = listeVilleWalheim[0]

    # Recup des annees de données fiscales por WALHEIN
    dictAllGrandeur = database.getAllValeursDataMinFi4Entite(
        connDB, 'V', ville[0], False)
    listAnnees = database.getListeAnneesDataMinFi4Entite(
        connDB, 'V', ville[0], False)
    assert len(listAnnees) == 3

    # Les courbee de clé "inconnue*" devront être supprimees
    # et une exception levee
    courbesTest = [
        {
            'cle': "inconnue1",
            'sousCle': "Valeur totale",
        },
        {
            'cle': "inconnue2",
            'sousCle': "Valeur totale",
        },
    ]

    # Test calcul des valeurs
    with pytest.raises(ValueError,
                       match=r'.*pas de courbe pour le graphique.*'):
        genCodeGraphiques.controleSeries(dictAllGrandeur, courbesTest,
                                         listAnnees, True)

    # Fermeture base
    database.closeDatabase(connDB, True)
Beispiel #12
0
def test_genGraphique(courbesTest, nomGraphique, titreGrahique):
    """
        teste generation de courbes pour sortie HTML
    """

    config = configparser.RawConfigParser()
    config.read('FinancesLocales.properties')

    # Création répertoire de sortie des graphiques
    repOutGraphique = config.get('Test', 'genHTMLCodeGraphiques.pathOutputTest')
    if not os.path.isdir(repOutGraphique):
        os.mkdir(repOutGraphique)
    # Suppression fichier existant
    nomImage = nomGraphique + '.svg'
    cheminImage = os.path.join(repOutGraphique, nomImage)
    if os.path.isfile(cheminImage):
        print("Image précédente :", cheminImage)
        os.remove(cheminImage)
    
    # récup données de test
    pathDatabaseMini = config.get('Test', 'genCode.pathDatabaseMini')
    pathCSVMini = config.get('Test', 'genCode.pathCSVMini')
    if os.path.isfile(pathDatabaseMini):
        print("Destruction de la base de test :", pathDatabaseMini)
        os.remove(pathDatabaseMini)

    # Insertion dans la table ville des villes à traiter
    # Création base
    connDB = database.createDatabase(config, pathDatabaseMini, False)
    connDB.executemany("""
        INSERT INTO villes(codeCommune, nomMinFi, nom, nomWkpFr)
        VALUES (?, ?, ?, ?)
        """, (('068376', 'WITTENHEIM', 'Wittenheim', 'Wittenheim'),)
                       )
    connDB.commit()

    # Création de la création de la base de test
    param = ['updateDataMinFi.py', pathDatabaseMini, pathCSVMini]
    updateDataMinFi.main(param)
    assert os.path.isfile(pathDatabaseMini)

    # Lit dans la base les infos concernant la ville à traiter
    listeVilleWalheim = [ville
                         for ville in database.getListeVilles4Departement(connDB, '068', False)
                         if ville[0] == '068376']
    ville = listeVilleWalheim[0]

    # Recup des annees de données fiscales por WALHEIN
    dictAllGrandeur = database.getAllValeursDataMinFi4Entite(connDB, 'V',
                                                             ville[0], False)
    listAnnees = database.getListeAnneesDataMinFi4Entite(connDB, 'V',
                                                         ville[0], False)
    assert len(listAnnees) == 3
    # Agglomère certaines grandeurs et complète dictAllGrandeur
    genCodeCommon.calculeGrandeur(config, dictAllGrandeur,
                            listAnnees, True, False)

    # Test calcul des valeurs
    nbCourbeOrig = len(courbesTest)
    anneesOK = genCodeGraphiques.controleSeries(dictAllGrandeur, courbesTest,
                                                listAnnees, False)

    # Détermination de l'arrondi à utiliser et à afficher
    listeCles = [courbe['cle']
                 for courbe in courbesTest
                 if courbe['sousCle'] == "Valeur totale"]
    if listeCles:
        arrondi, arrondiStr, arrondiStrAffiche = \
                utilitaires.setArrondi(dictAllGrandeur["Valeur totale"], anneesOK,
                                       1000.0, listeCles, False)
    else:
        arrondi = 1.0
        arrondiStr = "%"
        arrondiStrAffiche = arrondiStr

    # Generation des graphiques HTML
    textLien = \
            genHTMLCodeGraphiques.genGraphique(repOutGraphique, dictAllGrandeur,
                                               nomGraphique, titreGrahique, ville[1],
                                               anneesOK, courbesTest,
                                               arrondi, arrondiStrAffiche,
                                               True)
    assert nomGraphique in textLien
    assert os.path.isfile(cheminImage)

    # Fermeture base
    database.closeDatabase(connDB, True)
Beispiel #13
0
def test_genCodeTexte_func(typeCode):
    """
        test la génération des données texte pour 1 ville : Wittenheim 68)
        Choisir Wittenheim et les années 2013 à 2015 pour comparaison avec
        http://marielaure.monde.free.fr/Finances_Locales_Web/Departement_68/Wittenheim/Wittenheim.html
    """

    config = configparser.RawConfigParser()
    config.read('FinancesLocales.properties')

    # récup données de test
    pathDatabaseMini = config.get('Test', 'genCode.pathDatabaseMini')
    print("pathDatabaseMini =", pathDatabaseMini)
    pathCSVMini = config.get('Test', 'genCode.pathCSVMini')
    print("pathCSVMini =", pathCSVMini)
    if os.path.isfile(pathDatabaseMini):
        print("destruction de la base :", pathDatabaseMini)
        os.remove(pathDatabaseMini)

    # Insertion dans la table ville des villes à traiter
    # Création base
    connDB = database.createDatabase(config, pathDatabaseMini, False)
    connDB.executemany(
        """
        INSERT INTO villes(codeCommune, nomMinFi, nom, nomWkpFr)
        VALUES (?, ?, ?, ?)
        """, (('068376', 'WITTENHEIM', 'Wittenheim', 'Wittenheim'), ))
    connDB.commit()

    # Création de la création de la base de test
    param = ['updateDataMinFi.py', pathDatabaseMini, pathCSVMini]
    updateDataMinFi.main(param)
    assert os.path.isfile(pathDatabaseMini)

    # Lecture et filtrage du fichier modèle
    nomBaseModele = config.get('Modele', 'modele.nomBaseModele')
    numVersion = config.get('Version', 'version.number')
    cle = ''
    isWikicode = True
    if typeCode == "wikiArticle":
        cle = 'gen.idFicDetail'
        isWikicode = True
    elif typeCode == "HTML":
        cle = 'gen.idFicHTML'
        isWikicode = False
    typeSortie = config.get('GenCode', cle)
    modele = nomBaseModele + '_' + typeSortie + '.txt'
    isComplet = (config.get('Modele', 'modele.type') == 'complet')
    textSection = utilitaires.lectureFiltreModele(modele, isComplet, False)

    # Lit dans la base les infos concernant la ville à traiter
    listeVilleWalheim = [
        ville
        for ville in database.getListeVilles4Departement(connDB, '068', False)
        if ville[0] == '068376'
    ]
    ville = listeVilleWalheim[0]

    # Recup des annees de données fiscales pour WALHEIN
    dictAllGrandeur = database.getAllValeursDataMinFi4Entite(
        connDB, 'V', ville[0], True)

    listAnnees = database.getListeAnneesDataMinFi4Entite(
        connDB, 'V', ville[0], True)
    print("listAnnees =", listAnnees)
    assert len(listAnnees) == 3

    infosGroupement = ('200066041', 'Communauté de communes Sundgau',
                       'CC du Sundgau')

    # Agglomère certaines grandeurs et complète dictAllGrandeur
    genCodeCommon.calculeGrandeur(config, dictAllGrandeur, listAnnees,
                                  isWikicode, False)

    # Test de la generation du texte
    textSection = genCodeTexte.genTexte(config, dictAllGrandeur,
                                        infosGroupement, modele, textSection,
                                        ville, listAnnees, "test_genCodeTexte",
                                        isWikicode, True)
    assert "21547710" in textSection

    if isWikicode:
        # Vérification sources WEB dans texte généré
        urlMinFi = config.get('Extraction', 'dataGouvFr.Comptes')
        assert urlMinFi in textSection
        urlMinFiVilles = config.get('Extraction', 'dataGouvFr.ComptesVilles')
        assert urlMinFiVilles in textSection

    if not isWikicode:
        assert "Sundgau" in textSection
    database.closeDatabase(connDB, False)
def test_genereTableauTaux(isWikicode, isComplet):
    """
        teste la génération des données tableau des taux
        pour 1 ville : Wittenheim 68)
        Wittenheim et les années 2013 à 2015 pour comparaison avec
        http://marielaure.monde.free.fr/Finances_Locales_Web/Departement_68/Wittenheim/Wittenheim.html
    """

    config = configparser.RawConfigParser()
    config.read('FinancesLocales.properties')

    # récup données de test
    pathDatabaseMini = config.get('Test', 'genCode.pathDatabaseMini')
    pathCSVMini = config.get('Test', 'genCode.pathCSVMini')
    if os.path.isfile(pathDatabaseMini):
        print("destruction de la base :", pathDatabaseMini)
        os.remove(pathDatabaseMini)

    # Insertion dans la table ville des villes à traiter
    # Création base
    connDB = database.createDatabase(config, pathDatabaseMini, False)
    connDB.executemany(
        """
        INSERT INTO villes(codeCommune, nomMinFi, nom, nomWkpFr)
        VALUES (?, ?, ?, ?)
        """, (('068376', 'WITTENHEIM', 'Wittenheim', 'Wittenheim'), ))
    connDB.commit()

    # Création de la création de la base de test
    param = ['updateDataMinFi.py', pathDatabaseMini, pathCSVMini]
    updateDataMinFi.main(param)
    assert os.path.isfile(pathDatabaseMini)

    nomTableau = "TAXES"
    listeVilleWalheim = [
        ville
        for ville in database.getListeVilles4Departement(connDB, '068', False)
        if ville[0] == '068376'
    ]
    ville = listeVilleWalheim[0]
    # Recup des annees de données fiscales por WALHEIN
    listAnnees = database.getListeAnneesDataMinFi4Entite(
        connDB, 'V', ville[0], False)
    assert len(listAnnees) == 3
    nbAnneesTableau = min(
        int(config.get('GenWIkiCode', 'gen.nbLignesTableauxEuros')),
        len(listAnnees))

    couleurStrate = config.get('Tableaux', 'tableaux.couleurStrate')
    couleurTitres = config.get('Tableaux', 'tableaux.couleurTitres')
    couleurTaxeHabitation = config.get('Tableaux',
                                       'tableaux.couleurTaxeHabitation')
    couleurTaxeFonciereBati = config.get('Tableaux',
                                         'tableaux.couleurTaxeFonciereBati')
    couleurTaxeFonciereNonBati = config.get(
        'Tableaux', 'tableaux.couleurTaxeFonciereNonBati')

    verbose = False
    listeValeurs = [
        [
            "taux taxe habitation", "taux taxe d'habitation",
            couleurTaxeHabitation
        ],
        [
            "taux taxe foncière bâti", "taux foncier bâti",
            couleurTaxeFonciereBati
        ],
        [
            "taux taxe foncière non bâti", "taux foncier non bâti",
            couleurTaxeFonciereNonBati
        ],
    ]

    # Récupère toutes les valeurs pour cette ville pour les grandeurs demandées
    dictAllGrandeur = database.getAllValeursDataMinFi4Entite(
        connDB, 'V', ville[0], verbose)

    # Test de la generation tableau
    if isWikicode:
        ligne = genWikiCodeTableaux.genereTableauTaux(
            nomTableau, listAnnees, nbAnneesTableau, listeValeurs,
            dictAllGrandeur, couleurTitres, couleurStrate, isComplet, verbose)
    else:
        ligne = genHTMLCodeTableaux.genereTableauTaux(
            nomTableau, listAnnees, nbAnneesTableau, listeValeurs,
            dictAllGrandeur, couleurTitres, couleurStrate, isComplet, verbose)

    print("ligne=", ligne)

    # Test valeur taux taxe d'habitation en 2015
    # (cle tth) : 10.11
    assert "10.11" in ligne

    if isComplet:
        # Test valeur taux taxe d'habitation pour la strate en 2015
        # (cle tmth) : 15.98
        assert "15.68" in ligne
def test_calculeGrandeurCleBesoin():
    """
        teste le calcule de grandeurs agglomérées
    """
    isWikicode = True
    config = configparser.RawConfigParser()
    config.read('FinancesLocales.properties')

    # récup données de test
    pathDatabaseMini = config.get('Test', 'genCode.pathDatabaseMini')
    pathCSVMini = config.get('Test', 'genCode.pathCSVMini')
    if os.path.isfile(pathDatabaseMini):
        print("destruction de la base :", pathDatabaseMini)
        os.remove(pathDatabaseMini)

    # Insertion dans la table ville des villes à traiter
    # Création base
    connDB = database.createDatabase(config, pathDatabaseMini, False)
    connDB.executemany("""
        INSERT INTO villes(codeCommune, nomMinFi, nom, nomWkpFr)
        VALUES (?, ?, ?, ?)
        """, (('068376', 'WITTENHEIM', 'Wittenheim', 'Wittenheim'),)
                       )
    connDB.commit()

    # Création de la création de la base de test
    param = ['updateDataMinFi.py', pathDatabaseMini, pathCSVMini]
    updateDataMinFi.main(param)
    assert os.path.isfile(pathDatabaseMini)

    # Lit dans la base les infos concernant la ville à traiter
    listeVilleWalheim = [ville
                         for ville in database.getListeVilles4Departement(connDB, '068', False)
                         if ville[0] == '068376']
    ville = listeVilleWalheim[0]

    # Recup des annees de données fiscales por WALHEIN
    dictAllGrandeur = database.getAllValeursDataMinFi4Entite(connDB, 'V',
                                                             ville[0], False)
    listAnnees = database.getListeAnneesDataMinFi4Entite(connDB, 'V', ville[0], False)
    assert len(listAnnees) == 3

    # Appel fonction à tester pour un ville
    genCodeCommon.calculeGrandeur(config, dictAllGrandeur, listAnnees, isWikicode, False)
    print("Avant Suppression")
    print("Valeur totale=", dictAllGrandeur['Valeur totale'].keys())
    print("Par habitant=", dictAllGrandeur['Par habitant'].keys())

    # Test valeur présente pour une ville et svg valeurs
    cleManquante = "besoin ou capacité de financement de la section investissement"
    cleManquanteHab = "besoin ou capacité de financement de la section investissement par habitant"
    assert cleManquante in dictAllGrandeur['Valeur totale']
    assert cleManquanteHab in dictAllGrandeur['Par habitant']
    ValeursTotale = dictAllGrandeur['Valeur totale'][cleManquante]
    ValeursHab = dictAllGrandeur['Par habitant'][cleManquanteHab]

    cleRessourceInv = "total des ressources d'investissement"
    assert cleRessourceInv in dictAllGrandeur['Valeur totale']

    # Suppresion de la clé pour se mettre dans la situation d'un groupement de commune
    del dictAllGrandeur['Valeur totale'][cleManquante]
    del dictAllGrandeur['Par habitant'][cleManquanteHab]
    assert cleManquante not in dictAllGrandeur['Valeur totale']
    assert cleManquanteHab not in dictAllGrandeur['Par habitant']

    # Appel fonction à tester pour un ville
    genCodeCommon.calculeGrandeur(config, dictAllGrandeur, listAnnees, isWikicode, False)

    # Test valeur présente à nouveau pour une ville et controle valeurs
    assert cleManquante in dictAllGrandeur['Valeur totale']
    assert cleManquanteHab in dictAllGrandeur['Par habitant']
    ValeursTotaleNew = dictAllGrandeur['Valeur totale'][cleManquante]
    ValeursHabNew = dictAllGrandeur['Par habitant'][cleManquanteHab]

    # Comparaison à un chouia près : 1e-3
    assert ValeursTotale == pytest.approx(ValeursTotaleNew, rel=1e-3)
    assert ValeursHab == pytest.approx(ValeursHabNew, rel=1e-3)
    
    # Fermeture base
    database.closeDatabase(connDB, True)
def test_genereTableau(isWikicode, isComplet):
    """
        teste la génération des données tableau pour 1 ville : Wittenheim 68)
        Wittenheim et les années 2013 à 2015 pour comparaison avec
        http://marielaure.monde.free.fr/Finances_Locales_Web/Departement_68/Wittenheim/Wittenheim.html
    """

    config = configparser.RawConfigParser()
    config.read('FinancesLocales.properties')

    # récup données de test
    pathDatabaseMini = config.get('Test', 'genCode.pathDatabaseMini')
    pathCSVMini = config.get('Test', 'genCode.pathCSVMini')
    if os.path.isfile(pathDatabaseMini):
        print("destruction de la base :", pathDatabaseMini)
        os.remove(pathDatabaseMini)

    # Insertion dans la table ville des villes à traiter
    # Création base
    connDB = database.createDatabase(config, pathDatabaseMini, False)
    connDB.executemany(
        """
        INSERT INTO villes(codeCommune, nomMinFi, nom, nomWkpFr)
        VALUES (?, ?, ?, ?)
        """, (('068376', 'WITTENHEIM', 'Wittenheim', 'Wittenheim'), ))
    connDB.commit()

    # Création de la création de la base de test
    param = ['updateDataMinFi.py', pathDatabaseMini, pathCSVMini]
    updateDataMinFi.main(param)
    assert os.path.isfile(pathDatabaseMini)

    nomTableau = "PRINCIPAL"
    listeVilleWalheim = [
        ville
        for ville in database.getListeVilles4Departement(connDB, '068', False)
        if ville[0] == '068376'
    ]
    ville = listeVilleWalheim[0]
    # Recup des annees de données fiscales por WALHEIN
    listAnnees = database.getListeAnneesDataMinFi4Entite(
        connDB, 'V', ville[0], False)
    assert len(listAnnees) == 3
    nbAnneesTableau = min(
        int(config.get('GenWIkiCode', 'gen.nbLignesTableauxEuros')),
        len(listAnnees))

    couleurStrate = config.get('Tableaux', 'tableaux.couleurStrate')
    couleurTitres = config.get('Tableaux', 'tableaux.couleurTitres')
    couleurSolde = config.get('Tableaux', 'tableaux.couleurSolde')
    couleurRecettes = config.get('Tableaux', 'tableaux.couleurRecettes')
    couleurCharges = config.get('Tableaux', 'tableaux.couleurCharges')
    couleurDettesCAF = config.get('Tableaux', 'tableaux.couleurDettesCAF')
    couleurEmploisInvest = config.get('Tableaux',
                                      'tableaux.couleurEmploisInvest')
    couleurRessourcesInvest = config.get('Tableaux',
                                         'tableaux.couleurRessourcesInvest')

    verbose = True
    listeValeurs = [
        [
            "total des produits de fonctionnement",
            genCodeCommon.genLien(
                config, ["Recettes publiques", "Produits de fonctionnement"],
                isWikicode, verbose), couleurRecettes
        ],
        [
            "total des charges de fonctionnement",
            genCodeCommon.genLien(
                config, ["Dépenses publiques", "Charges de fonctionnement"],
                isWikicode, verbose), couleurCharges
        ],
        [
            "resultat comptable",
            genCodeCommon.genLien(config, [
                "Résultat fiscal en France",
                "Solde de la section de fonctionnement"
            ], isWikicode, verbose), couleurSolde
        ],
        [
            "total des emplois investissement",
            genCodeCommon.genLien(config,
                                  ["Investissement", "Emplois investissement"],
                                  isWikicode, verbose), couleurEmploisInvest
        ],
        [
            "total des ressources d'investissement",
            genCodeCommon.genLien(
                config, ["Investissement", "Ressources d'investissement"],
                isWikicode, verbose), couleurRessourcesInvest
        ],
        [
            "besoin ou capacité de financement de la section investissement",
            genCodeCommon.genLien(config, [
                "Résultat fiscal en France",
                "Solde de la section d'investissement"
            ], isWikicode, verbose), couleurSolde
        ],
    ]

    # Récupère toutes les valeurs pour cette ville pour les grandeurs demandées
    dictAllGrandeur = database.getAllValeursDataMinFi4Entite(
        connDB, 'V', ville[0], verbose)
    # Test de la generation tableau
    if isWikicode:
        ligne = genWikiCodeTableaux.genereTableau(
            nomTableau, listAnnees, nbAnneesTableau, listeValeurs,
            dictAllGrandeur, couleurTitres, couleurStrate, isComplet, verbose)
    else:
        ligne = genHTMLCodeTableaux.genereTableau(
            nomTableau, listAnnees, nbAnneesTableau, listeValeurs,
            dictAllGrandeur, couleurTitres, couleurStrate, isComplet, verbose)

    # Test valeur des charges en 2015
    # (cle charge) : 12659.65
    assert "12660" in ligne

    # Test valeur des charges par habitant en 2015
    # (cle fcharge) : 858.63
    assert "859" in ligne

    if isComplet:
        # Test valeur des charges de la strate en 2015
        # (cle mcharge) : 1223.21
        assert "1223" in ligne
Beispiel #17
0
def test_genGraphique(courbesTest):
    """
        teste generation de courbe
    """

    config = configparser.RawConfigParser()
    config.read('FinancesLocales.properties')

    # récup données de test
    pathDatabaseMini = config.get('Test', 'genCode.pathDatabaseMini')
    pathCSVMini = config.get('Test', 'genCode.pathCSVMini')
    if os.path.isfile(pathDatabaseMini):
        print("destruction de la base :", pathDatabaseMini)
        os.remove(pathDatabaseMini)

    # Insertion dans la table ville des villes à traiter
    # Création base
    connDB = database.createDatabase(config, pathDatabaseMini, False)
    connDB.executemany(
        """
        INSERT INTO villes(codeCommune, nomMinFi, nom, nomWkpFr)
        VALUES (?, ?, ?, ?)
        """, (('068376', 'WITTENHEIM', 'Wittenheim', 'Wittenheim'), ))
    connDB.commit()

    # Création de la création de la base de test
    param = ['updateDataMinFi.py', pathDatabaseMini, pathCSVMini]
    updateDataMinFi.main(param)
    assert os.path.isfile(pathDatabaseMini)

    # Lit dans la base les infos concernant la ville à traiter
    listeVilleWalheim = [
        ville
        for ville in database.getListeVilles4Departement(connDB, '068', False)
        if ville[0] == '068376'
    ]
    ville = listeVilleWalheim[0]

    # Recup des annees de données fiscales por WALHEIN
    dictAllGrandeur = database.getAllValeursDataMinFi4Entite(
        connDB, 'V', ville[0], False)
    listAnnees = database.getListeAnneesDataMinFi4Entite(
        connDB, 'V', ville[0], False)
    assert len(listAnnees) == 3
    # Agglomère certaines grandeurs et complète dictAllGrandeur
    genCodeCommon.calculeGrandeur(config, dictAllGrandeur, listAnnees, True,
                                  False)

    # Test calcul des valeurs
    nbCourbeOrig = len(courbesTest)
    anneesOK = genCodeGraphiques.controleSeries(dictAllGrandeur, courbesTest,
                                                listAnnees, False)

    # Détermination de l'arrondi à utiliser et à afficher
    listeCles = [
        courbe['cle'] for courbe in courbesTest
        if courbe['sousCle'] == "Valeur totale"
    ]
    if listeCles:
        arrondi, arrondiStr, arrondiStrAffiche = \
                utilitaires.setArrondi(dictAllGrandeur["Valeur totale"], anneesOK,
                                       1000.0, listeCles, False)
    else:
        arrondi = 1.0
        arrondiStr = "%"
        arrondiStrAffiche = arrondiStr

    # Generation des graphiques
    graphiqueWiki, legendeVille, legendeStrate = \
            genWikiCodeGraphiques.genGraphique(config, dictAllGrandeur,
                                               ville[1], anneesOK,
                                               courbesTest,
                                               'graph.largeurPage',
                                               arrondi,
                                               arrondiStrAffiche,
                                               True)
    for annee in anneesOK:
        assert str(annee) in graphiqueWiki
    for courbe in courbesTest:
        assert courbe['libelle'] in legendeVille

    for courbe in courbesTest:
        for annee in anneesOK:
            if courbe['cle'].startswith('Taux'):
                valeurData = \
                    round(dictAllGrandeur['Taux'][courbe['cle']][annee])
            elif courbe['sousCle'] == "":
                valeurData = round(dictAllGrandeur[courbe['cle']][annee])
            else:
                valeurData = round(
                    dictAllGrandeur[courbe['sousCle']][courbe['cle']][annee] *
                    arrondi)
            assert str(valeurData) in graphiqueWiki

    # Fermeture base
    database.closeDatabase(connDB, True)