nulib/php/tests/db/sqlite/ChannelMigrationTest.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);
}
}