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

276 lines
7.5 KiB
PHP

<?php
// require_once(DIR_ALVEOLATA . '/definitions.php');
require_once(DIR_ALVEOLATA . '/list/functions.php');
require_once(DIR_ALVEOLATA . '/database/implementation-sqlite/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-sqltablecluster/functions.php');
require_once(DIR_ALVEOLATA . '/storage/implementation-sqltablecluster/wrapper-class.php');
\alveolata\test\add(
[
'name' => 'alveolata',
'sections' => [
[
'name' => 'storage',
'sections' => [
[
'name' => 'sqltablecluster',
'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'],
]
);
$database->query(
'CREATE TABLE fehuz(
id INTEGER PRIMARY KEY AUTOINCREMENT,
value TEXT
);',
[]
);
$database->query(
'CREATE TABLE uruz(
id INTEGER PRIMARY KEY AUTOINCREMENT,
fehuz_id INTEGER NOT NULL,
value TEXT
);',
[]
);
$database->query(
'CREATE TABLE thurisaz(
id INTEGER PRIMARY KEY AUTOINCREMENT,
value TEXT
);',
[]
);
$database->query(
'CREATE TABLE ansuz(
id INTEGER PRIMARY KEY AUTOINCREMENT,
fehuz_id INTEGER NOT NULL,
thurisaz_id INTEGER NOT NULL,
FOREIGN KEY (fehuz_id) REFERENCES fehuz(id),
FOREIGN KEY (thurisaz_id) REFERENCES thurisaz(id)
);',
[]
);
$sqltable_thurisaz = \alveolata\storage\implementation_sqltable::make(
$database,
'thurisaz'
);
$sqltablecluster = \alveolata\storage\implementation_sqltablecluster::make(
\alveolata\storage\implementation_sqltable::make(
$database,
'fehuz'
),
[
'uruz' => [
'target_table' => \alveolata\storage\implementation_sqltable::make(
$database,
'uruz'
),
'core_id_column' => 'fehuz_id',
'include_own_id' => false,
'exclude_core_id' => false,
]
],
[
'thurisaz' => [
'target_table' => $sqltable_thurisaz,
'edge_table' => \alveolata\storage\implementation_sqltable::make(
$database,
'ansuz'
),
'core_id_column' => 'fehuz_id',
'target_id_column' => 'thurisaz_id',
]
],
function ($stuff) {
return [
'fehuz' => $stuff['core_row']['value'],
'uruz' => \alveolata\list_\map(
$stuff['tight_supplement_values']['uruz'],
function ($x) {return $x['value'];}
),
'thurisaz' => \alveolata\list_\map(
$stuff['loose_supplement_values']['thurisaz'],
function ($x) {return $x['value'];}
),
];
},
function ($value) {
return [
'core_row' => [
'value' => $value['fehuz'],
],
'tight_supplement_values' => [
'uruz' => \alveolata\list_\map(
$value['uruz'],
function ($x) {return ['value' => $x];}
),
],
'loose_supplement_values' => [
'thurisaz' => \alveolata\list_\map(
$value['thurisaz'],
function ($x) {return ['value' => $x];}
),
],
];
}
);
$environment['sqltable_thurisaz'] = $sqltable_thurisaz;
$environment['storage'] = $sqltablecluster;
},
'sections' => [
[
'name' => 'create_delete',
'cases' => [
[
'name' => 'test',
'procedure' => function ($assert, $environment) {
// constants
$value = [
'fehuz' => 'fehuz',
'uruz' => [
'uruz1',
'uruz2',
],
'thurisaz' => [
// 'thurisaz1',
// 'thurisaz2',
],
];
// execution & assertions
$assert->runs(
function () use (&$environment, &$value) {
$key = $environment['storage']->create($value);
$environment['storage']->delete($key);
}
);
}
],
]
],
[
'name' => 'read',
'cases' => [
[
'name' => 'test',
'procedure' => function ($assert, $environment) {
// constants
$value = [
'fehuz' => 'fehuz',
'uruz' => [
'uruz1',
'uruz2',
],
'thurisaz' => [
// 'thurisaz1',
// 'thurisaz2',
],
];
// setup
$key = $environment['storage']->create($value);
// execution
$value_read = $environment['storage']->read($key);
// assertions
$assert->equal($value_read, $value);
// cleanup
$environment['storage']->delete($key);
}
],
]
],
[
'name' => 'search',
'cases' => [
[
'name' => 'test',
'procedure' => function ($assert, $environment) {
// constants
$value = [
'fehuz' => 'fehuz',
'uruz' => [
'uruz1',
'uruz2',
],
'thurisaz' => [
// 'thurisaz1',
// 'thurisaz2',
],
];
// setup
$key = $environment['storage']->create($value);
// execution
$keys = $environment['storage']->search(['value' => 'fehuz']);
// assertions
$assert->equal($keys, [$key]);
// cleanup
$environment['storage']->delete($key);
}
],
]
],
/*
[
'name' => 'update',
'cases' => [
[
'name' => 'test',
'procedure' => function ($assert, $environment) {
// constants
$value1 = [
'foo' => 'Foo',
'bar' => [['val' => 0], ['val' => 2]],
'baz' => [['val' => 1], ['val' => 3]],
];
$value2 = [
'foo' => 'Fox',
'bar' => [['val' => 4], ['val' => 6]],
'baz' => [['val' => 5], ['val' => 7]],
];
// setup
$key = $environment['storage']->create($value1);
// execution
$environment['storage']->update($key, $value2);
$value_read = $environment['storage']->read($key);
// assertions
$assert->equal($value_read, $value2);
// cleanup
$environment['storage']->delete($key);
}
],
]
],
*/
],
'cleanup' => function (&$environment) {
// $environment['storage']->teardown();
exec(sprintf('rm -f %s', $environment['path_database']));
}
]
]
],
]
]
);