rosavox/lib/alveolata/storage/implementation-wrapper/test.spec.php
2025-05-23 07:33:29 +00:00

174 lines
4.6 KiB
PHP

<?php
// require_once(DIR_ALVEOLATA . '/definitions.php');
require_once(DIR_ALVEOLATA . '/database/implementation-sqlite/wrapper-class.php');
require_once(DIR_ALVEOLATA . '/database/implementation-mysql/wrapper-class.php');
require_once(DIR_ALVEOLATA . '/database/functions.php');
require_once(DIR_ALVEOLATA . '/storage/implementation-sqltable/functions.php');
require_once(DIR_ALVEOLATA . '/storage/implementation-sqltable/wrapper-class.php');
require_once(DIR_ALVEOLATA . '/storage/implementation-wrapper/functions.php');
require_once(DIR_ALVEOLATA . '/storage/implementation-wrapper/wrapper-class.php');
\alveolata\test\add(
[
'name' => 'alveolata',
'sections' => [
[
'name' => 'storage',
'sections' => [
[
'name' => 'wrapper',
'setup' => function (&$environment) {
$environment['path_database'] = '/tmp/localdb.sqlite';
exec(sprintf('echo "" > %s', $environment['path_database']));
$database = \alveolata\database\make(
'sqlite',
[
'path' => $environment['path_database'],
]
);
$tablename = '_testtable_';
$fields = [
[
'name' => 'state',
'type' => 'VARCHAR(64)',
'null_allowed' => false,
'default' => '',
],
];
$core = \alveolata\storage\implementation_sqltable::make(
$database,
$tablename,
$fields
);
$environment['storage'] = \alveolata\storage\implementation_wrapper::make(
$core,
function (string $key_outer) : int {
return intval($key_outer);
},
function (int $key_inner) : string {
return strval($key_inner);
},
function (bool $value_outer) : array {
return [
'state' => (
$value_outer
? 'true'
: 'false'
),
];
},
function (array $value_inner) : bool {
return ($value_inner['state'] === 'true');
}
);
$environment['storage']->setup();
},
'sections' => [
[
'name' => 'create_delete',
'cases' => [
[
'name' => 'test',
'procedure' => function ($assert, $environment) {
// constants
$state = true;
// execution & assertions
$assert->runs(
function () use (&$environment, &$state) {
$key = $environment['storage']->create($state);
$environment['storage']->delete($key);
}
);
}
],
]
],
[
'name' => 'read',
'cases' => [
[
'name' => 'test',
'procedure' => function ($assert, $environment) {
// constants
$state = true;
// setup
$key = $environment['storage']->create($state);
// execution
$value = $environment['storage']->read($key);
// assertions
$assert->equal($value, $state);
// cleanup
$environment['storage']->delete($key);
}
],
]
],
[
'name' => 'search',
'cases' => [
[
'name' => 'test',
'procedure' => function ($assert, $environment) {
// constants
$state = true;
// setup
$key = $environment['storage']->create($state);
// execution
$keys = $environment['storage']->search([]);
// assertions
$assert->equal($keys, [$key]);
// cleanup
$environment['storage']->delete($key);
}
],
]
],
[
'name' => 'update',
'cases' => [
[
'name' => 'test',
'procedure' => function ($assert, $environment) {
// constants
$state1 = true;
$state2 = false;
// setup
$key = $environment['storage']->create($state1);
// execution
$environment['storage']->update($key, $state2);
$value = $environment['storage']->read($key);
// assertions
$assert->equal($value, $state2);
// cleanup
$environment['storage']->delete($key);
}
],
]
],
],
'cleanup' => function (&$environment) {
$environment['storage']->teardown();
exec(sprintf('rm -f %s', $environment['path_database']));
}
]
]
],
]
]
);