76 lines
1.9 KiB
PHP
76 lines
1.9 KiB
PHP
<?php
|
|
namespace nulib\db\sqlite;
|
|
|
|
use nulib\db\Capacitor;
|
|
use nulib\db\sqlite\impl\MyChannel;
|
|
use nulib\db\sqlite\impl\MyChannelV2;
|
|
use nulib\db\sqlite\impl\MyChannelV3;
|
|
use nulib\output\msg;
|
|
use nulib\output\std\StdMessenger;
|
|
use nulib\php\time\DateTime;
|
|
use nulib\tests\TestCase;
|
|
|
|
class ChannelMigrationTest extends TestCase {
|
|
static function setUpBeforeClass(): void {
|
|
parent::setUpBeforeClass();
|
|
msg::set_messenger_class(StdMessenger::class);
|
|
}
|
|
|
|
protected function addData(MyChannel $channel, array $data): void {
|
|
foreach ($data as [$name, $value, $dateCre, $dateMod, $age]) {
|
|
$channel->charge([
|
|
"name" => $name,
|
|
"value" => $value,
|
|
"date_cre" => $dateCre,
|
|
"date_mod" => $dateMod,
|
|
"age" => $age,
|
|
]);
|
|
}
|
|
}
|
|
|
|
function testMigration() {
|
|
$storage = new SqliteStorage(__DIR__.'/capacitor.db');
|
|
$data = [
|
|
["first", "premier", new DateTime(), new DateTime(), 15],
|
|
["second", "deuxieme", new DateTime(), new DateTime(), 15],
|
|
];
|
|
|
|
new Capacitor($storage, $channel = new MyChannel());
|
|
$channel->reset(true);
|
|
$this->addData($channel, $data);
|
|
|
|
new Capacitor($storage, $channel = new MyChannelV2());
|
|
$this->addData($channel, $data);
|
|
|
|
new Capacitor($storage, $channel = new MyChannelV3());
|
|
$this->addData($channel, $data);
|
|
|
|
$sql = $channel->getCapacitor()->getCreateSql();
|
|
$class = MyChannelV3::class;
|
|
$expected = <<<EOT
|
|
-- -*- coding: utf-8 mode: sql -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
|
-- autogénéré à partir de $class
|
|
|
|
-- 0init
|
|
create table if not exists my (
|
|
id_ integer primary key autoincrement
|
|
, name varchar
|
|
, value varchar
|
|
, item__ mediumtext
|
|
, item__sum_ varchar(40)
|
|
, created_ datetime
|
|
, modified_ datetime
|
|
);
|
|
|
|
-- dates
|
|
alter table my add column date_cre datetime;
|
|
alter table my add column date_mod datetime;
|
|
|
|
-- infos
|
|
alter table my add column age integer;
|
|
|
|
EOT;
|
|
self::assertSame($expected, $sql);
|
|
}
|
|
}
|