Files
Umbraco-CMS/tests/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Migrations/AlterMigrationTests.cs
Ronald Barendse 13c788d6ec Add AsyncMigrationBase, update base classes and call async methods (#17057)
* Add AsyncMigrationBase, update base classes and call async methods

* Restored and obsoleted synchronous execution on IMigrationPlanExecutor.

* Resolved breaking changes.

* Fixed build.

* Further obsoletes.

* Fix build against v16/dev.

* Removed and obsolete code related to post-migrations.

* Removed service registration of unused interface.

---------

Co-authored-by: Andy Butland <abutland73@gmail.com>
2025-03-03 11:54:22 +01:00

139 lines
4.0 KiB
C#

// Copyright (c) Umbraco.
// See LICENSE for more details.
using System.Diagnostics;
using System.Linq;
using Microsoft.Extensions.Logging;
using Moq;
using NUnit.Framework;
using Umbraco.Cms.Infrastructure.Migrations;
using Umbraco.Cms.Tests.Common.TestHelpers;
using Umbraco.Cms.Tests.UnitTests.Umbraco.Infrastructure.Migrations.Stubs;
namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Infrastructure.Migrations;
[TestFixture]
public class AlterMigrationTests
{
private readonly ILogger<MigrationContext> _logger = Mock.Of<ILogger<MigrationContext>>();
private class TestPlan : MigrationPlan
{
public TestPlan()
: base("Test")
{
}
}
private MigrationContext GetMigrationContext(out TestDatabase db)
{
db = new TestDatabase();
return new MigrationContext(new TestPlan(), db, _logger);
}
[Test]
public async Task Drop_Foreign_Key()
{
// Arrange
var context = GetMigrationContext(out var database);
var stub = new DropForeignKeyMigrationStub(context);
// Act
await stub.RunAsync().ConfigureAwait(false);
foreach (var op in database.Operations)
{
Console.WriteLine("{0}\r\n\t{1}", op.Text, op.Sql);
}
// Assert
Assert.That(database.Operations.Count, Is.EqualTo(1));
Assert.That(database.Operations[0].Sql, Is.EqualTo("ALTER TABLE [umbracoUser2app] DROP CONSTRAINT [FK_umbracoUser2app_umbracoUser_id]"));
}
[Test]
public async Task CreateColumn()
{
var context = GetMigrationContext(out var database);
var migration = new CreateColumnMigration(context);
await migration.RunAsync().ConfigureAwait(false);
foreach (var op in database.Operations)
{
Console.WriteLine("{0}\r\n\t{1}", op.Text, op.Sql);
}
Assert.That(database.Operations.Count, Is.EqualTo(1));
Assert.That(
database.Operations[0].Sql,
Is.EqualTo("ALTER TABLE [bar] ADD [foo] UniqueIdentifier NOT NULL"));
}
public class CreateColumnMigration : MigrationBase
{
public CreateColumnMigration(IMigrationContext context)
: base(context)
{
}
protected override void Migrate() => Alter.Table("bar").AddColumn("foo").AsGuid().Do();
}
[Test]
public async Task AlterColumn()
{
var context = GetMigrationContext(out var database);
var migration = new AlterColumnMigration(context);
await migration.RunAsync().ConfigureAwait(false);
foreach (var op in database.Operations)
{
Console.WriteLine("{0}\r\n\t{1}", op.Text, op.Sql);
}
Assert.That(database.Operations.Count, Is.EqualTo(1));
Assert.That(
database.Operations[0].Sql,
Is.EqualTo("ALTER TABLE [bar] ALTER COLUMN [foo] UniqueIdentifier NOT NULL"));
}
public class AlterColumnMigration : MigrationBase
{
public AlterColumnMigration(IMigrationContext context)
: base(context)
{
}
protected override void Migrate() =>
// bad/good syntax...
//// Alter.Column("foo").OnTable("bar").AsGuid().NotNullable();
Alter.Table("bar").AlterColumn("foo").AsGuid().NotNullable().Do();
}
[Ignore("this doesn't actually test anything")]
[Test]
public async Task Can_Get_Up_Migration_From_MigrationStub()
{
// Arrange
var context = GetMigrationContext(out var database);
var stub = new AlterUserTableMigrationStub(context);
// Act
await stub.RunAsync().ConfigureAwait(false);
// Assert
Assert.That(database.Operations.Any(), Is.True);
// Console output
Debug.Print("Number of expressions in context: {0}", database.Operations.Count);
Debug.Print(string.Empty);
foreach (var expression in database.Operations)
{
Debug.Print(expression.ToString());
}
}
}