Files
VolcanicCore/tests/VolcanicCore.Tests/MigratorTests.cs

53 lines
1.4 KiB
C#

using Microsoft.Data.Sqlite;
using VolcanicCore.Persistence;
using VolcanicCore.Persistence.Migrations;
namespace VolcanicCore.Tests;
public class MigratorTests
{
private sealed class M1 : IMigration
{
public int Version => 1;
public void Apply(SqliteConnection conn)
{
using var cmd = conn.CreateCommand();
cmd.CommandText = "CREATE TABLE t (id INTEGER PRIMARY KEY);";
cmd.ExecuteNonQuery();
}
}
private sealed class M2 : IMigration
{
public int Version => 2;
public void Apply(SqliteConnection conn)
{
using var cmd = conn.CreateCommand();
cmd.CommandText = "ALTER TABLE t ADD COLUMN name TEXT;";
cmd.ExecuteNonQuery();
}
}
[Fact]
public void Migrator_applies_missing_migrations_in_order_and_sets_user_version()
{
using var conn = new SqliteConnection("Data Source=:memory:");
conn.Open();
var mig = new Migrator(new IMigration[] { new M2(), new M1() });
mig.Apply(conn);
Assert.Equal(2, ReadUserVersion(conn));
// Re-applying is a no-op.
mig.Apply(conn);
Assert.Equal(2, ReadUserVersion(conn));
}
private static int ReadUserVersion(SqliteConnection conn)
{
using var cmd = conn.CreateCommand();
cmd.CommandText = "PRAGMA user_version;";
return Convert.ToInt32(cmd.ExecuteScalar());
}
}