Skip to content

15. Toepassingsopdracht – versie 7

Image

15.1. Implémentation

We gaan hier verder met versie 6 door de constanten die in de hoofdscripts worden gebruikt, in een configuratiebestand onder te brengen. Het configuratiebestand krijgt de naam jSON en de inhoud ervan is als volgt:


{
    "rootDirectory": "C:/Data/st-2019/dev/php7/poly/scripts-console/impots/version-07",
    "databaseFilename": "Data/database.json",
    "taxAdminDataFileName": "Data/taxadmindata.json",
    "taxPayersDataFileName": "Data/taxpayersdata.json",
    "resultsFileName": "Data/results.json",
    "errorsFileName": "Data/errors.json",
    "dependencies": {
        "BaseEntity": "/../version-05/Entities/BaseEntity.php",
        "TaxAdminData": "/../version-05/Entities/TaxAdminData.php",
        "TaxPayerData": "/../version-05/Entities/TaxPayerData.php",
        "Database": "/../version-05/Entities/Database.php",
        "ExceptionImpots": "/../version-05/Entities/ExceptionImpots.php",
        "Utilitaires": "/../version-05/Utilities/Utilitaires.php",
        "InterfaceDao": "/../version-05/Dao/InterfaceDao.php",
        "TraitDao": "/../version-05/Dao/TraitDao.php",
        "InterfaceDao4TransferAdminData2Database": "/../version-05/Dao/InterfaceDao4TransferAdminData2Database.php",
        "DaoTransferAdminDataFromJsonFile2Database": "/../version-05/Dao/DaoTransferAdminDataFromJsonFile2Database.php",        
        "DaoImpotsWithTaxAdminDataInDatabase": "/../version-05/Dao/DaoImpotsWithTaxAdminDataInDatabase.php",
        "InterfaceMetier": "/../version-05/Métier/InterfaceMetier.php",
        "Metier": "/../version-05/Métier/Metier.php"
    },
    "dependencies4calculate": [
        "BaseEntity",
        "TaxAdminData",
        "TaxPayerData",
        "Database",
        "ExceptionImpots",
        "Utilitaires",
        "InterfaceDao",
        "TraitDao",
        "DaoImpotsWithTaxAdminDataInDatabase",
        "InterfaceMetier",
        "Metier"],
    "dependencies4transfer": [
        "BaseEntity",
        "TaxAdminData",
        "Database",
        "ExceptionImpots",
        "Utilitaires",
        "InterfaceDao",
        "TraitDao",  
        "InterfaceDao4TransferAdminData2Database",
        "DaoTransferAdminDataFromJsonFile2Database"]
}

In deze configuratie:

  • regel 2: de map ten opzichte waarvan alle paden in dit configuratiebestand worden gemeten;
  • regels 3-7: de paden naar alle jSON-bestanden van de applicatie;
  • regels 8-22: de paden van alle bestanden van de applicatie, in de vorm [clé=>chemin];
  • regels 23-34: de afhankelijkheden voor de belastingberekening in de vorm van een lijst met sleutels uit het woordenboek [dependencies] (regels 8-22);
  • regels 35-44: de afhankelijkheden voor de overdracht naar de database van het bestand jSON en [taxadmindata.json] in de vorm van een lijst met sleutels uit het woordenboek [dependencies] (regels 8-22);

Het script voor de overdracht naar de database van de belastingdienst [MainTransferAdminDataFromFile2PostgresSQLDatabase.php] ziet er als volgt uit:


<?php

// strikte naleving van de gedeclareerde typen van functieparameters
declare (strict_types=1);

// naamruimte
namespace Application;

// foutbeheer door PHP
// ini_set("display_errors", "0");
//
// pad naar het configuratiebestand
define("CONFIG_FILENAME", "../Data/config.json");

// de configuratie wordt opgehaald
$config = \json_decode(\file_get_contents(CONFIG_FILENAME), true);

// de benodigde afhankelijkheden worden in het script opgenomen
$rootDirectory = $config["rootDirectory"];
foreach ($config["dependencies4transfer"] as $dependency) {
  require $rootDirectory . $config["dependencies"][$dependency];
}

// definitie van de constanten
define("DATABASE_CONFIG_FILENAME", "$rootDirectory/{$config["databaseFilename"]}");
define("TAXADMINDATA_FILENAME", "$rootDirectory/{$config["taxAdminDataFileName"]}");

//
try {
  // de laag [dao] aanmaken
  $dao = new DaoTransferAdminDataFromJsonFile2Database(DATABASE_CONFIG_FILENAME, TAXADMINDATA_FILENAME);
  // de gegevens worden naar de database overgebracht
  $dao->transferAdminData2Database();
} catch (ExceptionImpots $ex) {
  // de fout wordt weergegeven
  print $ex->getMessage() . "\n";
}
// einde
print "Terminé\n";
exit;

Opmerkingen

De code blijft dezelfde als in de paragraaf met de link. Het enige verschil is het gebruik van het bestand [config.json] in plaats van de constanten op de regels 18-26;

  • regel 16: de functie [file_get_contents] zet het bestand [config.json] om in een tekenreeks. De functie [json_decode] gebruikt deze tekenreeks vervolgens om het woordenboek [$config] samen te stellen. De tweede parameter [true] van de functie [json_decode] geeft aan dat er een woordenboek moet worden samengesteld;
  • regels 19-22: hier worden de afhankelijkheden opgenomen die nodig zijn voor het script om de gegevens uit het bestand [taxadmindata.json] naar de database over te zetten;
    • [$config["dependencies4transfer"]] is de tabel met de afhankelijkheden die nodig zijn voor het overdrachtsscript. Dit is een lijst met sleutels. De paden van de bestanden die in het project moeten worden opgenomen, zijn te vinden in het woordenboek [$config["dependencies"]];
    • $config["rootDirectory"] vertegenwoordigt het pad waarmee de op te nemen bestanden moeten worden voorafgegaan;

Op dezelfde manier wordt het script voor de belastingberekening als volgt: [MainCalculateImpotsWithTaxAdminDataInPostgresDatabase]:


<?php

// strikte naleving van de gedeclareerde typen van de functieparameters
declare (strict_types=1);

// naamruimte
namespace Application;

// foutbeheer door PHP
// ini_set("display_errors", "0");
//
// pad naar het configuratiebestand
define("CONFIG_FILENAME", "../Data/config.json");

// de configuratie wordt opgehaald
$config = \json_decode(\file_get_contents(CONFIG_FILENAME), true);

// de benodigde afhankelijkheden worden in het script opgenomen
$rootDirectory = $config["rootDirectory"];
foreach ($config["dependencies4calculate"] as $dependency) {
  require $rootDirectory . $config["dependencies"][$dependency];
}

// definitie van de constanten
define("DATABASE_CONFIG_FILENAME", "$rootDirectory/{$config["databaseFilename"]}");
define("TAXPAYERSDATA_FILENAME", "$rootDirectory/{$config["taxPayersDataFileName"]}");
define("RESULTS_FILENAME", "$rootDirectory/{$config["resultsFileName"]}");
define("ERRORS_FILENAME", "$rootDirectory/{$config["errorsFileName"]}");

//
try {
  // de laag [dao] aanmaken
  $dao = new DaoImpotsWithTaxAdminDataInDatabase(DATABASE_CONFIG_FILENAME);
  // de laag [métier] aanmaken
  $métier = new Metier($dao);
  // berekening van de belasting in batchmodus
  $métier->executeBatchImpots(TAXPAYERSDATA_FILENAME, RESULTS_FILENAME, ERRORS_FILENAME);
} catch (ExceptionImpots $ex) {
  // de fout wordt weergegeven
  print "Une erreur s'est produite : " . utf8_encode($ex->getMessage()) . "\n";
}
// einde
print "Terminé\n";
exit;

15.2. Tests [Codeception]

Deze versie is, net als de vorige versies, gevalideerd door middel van tests [Codeception].

Image

15.2.1. Test van de laag [dao]

De test [DaoTest.php] is als volgt:


<?php

// strikte naleving van de gedeclareerde typen van de functieparameters
declare (strict_types=1);

// naamruimte
namespace Application;

// definitie van constanten
define("ROOT", "C:/Data/st-2019/dev/php7/poly/scripts-console/impots/version-07");
// pad naar het configuratiebestand
define("CONFIG_FILENAME", ROOT."/Data/config.json");
// de configuratie wordt opgehaald
$config = \json_decode(\file_get_contents(CONFIG_FILENAME), true);
// de benodigde afhankelijkheden worden in het script opgenomen
$rootDirectory = $config["rootDirectory"];
foreach ($config["dependencies4calculate"] as $dependency) {
  require $rootDirectory . $config["dependencies"][$dependency];
}
// overige constanten
define("DATABASE_CONFIG_FILENAME", "$rootDirectory/{$config["databaseFilename"]}");

// test -----------------------------------------------------

class DaoTest extends \Codeception\Test\Unit {
  // TaxAdminData
  private $taxAdminData;

  public function __construct() {
    parent::__construct();
    // aanmaken van de laag [dao]
    $dao = new DaoImpotsWithTaxAdminDataInDatabase(DATABASE_CONFIG_FILENAME);
    $this->taxAdminData = $dao->getTaxAdminData();
  }

  // tests
  public function testTaxAdminData() {

  }

}

Opmerkingen

  • regels 9-21: definitie van de testomgeving. We gebruiken dezelfde omgeving, zonder de laag [métier], als die welke wordt gebruikt door het hoofdscript [MainCalculateImpotsWithTaxAdminDataInPostgresDatabase], beschreven in de paragraaf 'link';
  • regels 29-34: opbouw van de laag [dao];
  • regel 33: het attribuut [$this→taxAdminData] bevat de te testen gegevens;
  • regels 37-39: de methode [testTaxAdminData] is de methode die wordt beschreven in de paragraaf 'link';

De testresultaten zijn als volgt:

Image

15.2.2. Test van de laag [métier]

De test [MetierTest.php] is als volgt:


<?php

// strikte naleving van de gedeclareerde typen van functieparameters
declare (strict_types=1);

// naamruimte
namespace Application;

// definitie van constanten
define("ROOT", "C:/Data/st-2019/dev/php7/poly/scripts-console/impots/version-07");
// pad naar het configuratiebestand
define("CONFIG_FILENAME", ROOT . "/Data/config.json");
// de configuratie wordt opgehaald
$config = \json_decode(\file_get_contents(CONFIG_FILENAME), true);
// de benodigde afhankelijkheden worden in het script opgenomen
$rootDirectory = $config["rootDirectory"];
foreach ($config["dependencies4calculate"] as $dependency) {
  require $rootDirectory . $config["dependencies"][$dependency];
}
// andere constanten
define("DATABASE_CONFIG_FILENAME", "$rootDirectory/{$config["databaseFilename"]}");

// testklasse
class MetierTest extends \Codeception\Test\Unit {
  // bedrijfslaag
  private $métier;

  public function __construct() {
    parent::__construct();
    // aanmaken van de laag [dao]
    $dao = new DaoImpotsWithTaxAdminDataInDatabase(DATABASE_CONFIG_FILENAME);
    // aanmaken van de laag [métier]
    $this->métier = new Metier($dao);
  }

  // tests
  public function test1() {

  }

  -----------------------------------

  public function test11() {

  }

}

Opmerkingen

  • regels 9-21: definitie van de testomgeving. We gebruiken dezelfde omgeving als die van het hoofdscript [MainCalculateImpotsWithTaxAdminDataInPostgresDatabase], beschreven in de paragraaf 'link';
  • regels 28-34: opbouw van de laag [dao];
  • regel 33: het attribuut [$this→métier] is een verwijzing naar de te testen laag [métier];
  • regels 37-45: de methoden [test1, test2…, test11] zijn de methoden die worden beschreven in de paragraaf 'link';

De testresultaten zijn als volgt:

Image