Skip to content

Commit ccee803

Browse files
authored
Merge pull request #88 from dotnetprojects/view-exists
Added TableExists and ViewExists Tests
2 parents 68ade64 + 05e1d8f commit ccee803

8 files changed

+351
-1
lines changed
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
using System;
2+
using System.Threading;
3+
using System.Threading.Tasks;
4+
using DotNetProjects.Migrator.Providers;
5+
using DotNetProjects.Migrator.Providers.Impl.Oracle;
6+
using DryIoc;
7+
using Migrator.Tests.Database;
8+
using Migrator.Tests.Database.Interfaces;
9+
using Migrator.Tests.Providers.Base;
10+
using Migrator.Tests.Settings;
11+
using Migrator.Tests.Settings.Config;
12+
using Migrator.Tests.Settings.Models;
13+
using NUnit.Framework;
14+
15+
namespace Migrator.Tests.Providers.OracleProvider.Base;
16+
17+
public class OracleTransformationProviderTestBase : TransformationProviderSimpleBase
18+
{
19+
[SetUp]
20+
public async Task SetUpAsync()
21+
{
22+
using var cts = new CancellationTokenSource(TimeSpan.FromSeconds(10));
23+
var configReader = new ConfigurationReader();
24+
25+
var databaseConnectionConfig = configReader.GetDatabaseConnectionConfigById(DatabaseConnectionConfigIds.OracleId);
26+
27+
var connectionString = databaseConnectionConfig?.ConnectionString;
28+
29+
if (string.IsNullOrEmpty(connectionString))
30+
{
31+
throw new IgnoreException($"No Oracle {nameof(DatabaseConnectionConfig.ConnectionString)} is set.");
32+
}
33+
34+
DbProviderFactories.RegisterFactory("Oracle.ManagedDataAccess.Client", () => Oracle.ManagedDataAccess.Client.OracleClientFactory.Instance);
35+
36+
using var container = new Container();
37+
container.RegisterDatabaseIntegrationTestService();
38+
var databaseIntegrationTestServiceFactory = container.Resolve<IDatabaseIntegrationTestServiceFactory>();
39+
var oracleIntegrationTestService = databaseIntegrationTestServiceFactory.Create(DatabaseProviderType.Oracle);
40+
var databaseInfo = await oracleIntegrationTestService.CreateTestDatabaseAsync(databaseConnectionConfig, cts.Token);
41+
42+
Provider = new OracleTransformationProvider(new OracleDialect(), databaseInfo.DatabaseConnectionConfig.ConnectionString, null, "default", "Oracle.ManagedDataAccess.Client");
43+
Provider.BeginTransaction();
44+
45+
AddDefaultTable();
46+
}
47+
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
using System.Data;
2+
using DotNetProjects.Migrator.Framework;
3+
using Migrator.Tests.Providers.OracleProvider.Base;
4+
using NUnit.Framework;
5+
6+
namespace Migrator.Tests.Providers.OracleProvider;
7+
8+
[TestFixture]
9+
[Category("Oracle")]
10+
public class OracleTransformationProvider_TableExistsTests : OracleTransformationProviderTestBase
11+
{
12+
[Test]
13+
public void TableExists_TableExists_Returns()
14+
{
15+
// Arrange
16+
const string testTableName = "MyDefaultTestTable";
17+
const string propertyName1 = "Color1";
18+
19+
Provider.AddTable(testTableName,
20+
new Column(propertyName1, DbType.Int32)
21+
);
22+
23+
// Act
24+
var tableExists = Provider.TableExists(testTableName);
25+
26+
// Assert
27+
Assert.That(tableExists, Is.True);
28+
}
29+
30+
[Test]
31+
public void TableExists_TableDoesNotExist_ReturnsFalse()
32+
{
33+
// Arrange
34+
const string myTableName = "MyTable";
35+
36+
// Act
37+
var tableExists = Provider.TableExists(myTableName);
38+
39+
// Assert
40+
Assert.That(tableExists, Is.False);
41+
}
42+
}
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
using System.Data;
2+
using DotNetProjects.Migrator.Framework;
3+
using Migrator.Tests.Providers.OracleProvider.Base;
4+
using NUnit.Framework;
5+
6+
namespace Migrator.Tests.Providers.OracleProvider;
7+
8+
[TestFixture]
9+
[Category("Oracle")]
10+
public class OracleTransformationProvider_ViewExistsTests : OracleTransformationProviderTestBase
11+
{
12+
[Test]
13+
public void ViewExists_ViewExists_Returns()
14+
{
15+
// Arrange
16+
const string testTableName = "MyDefaultTestTable";
17+
const string myViewName = "MyView";
18+
const string propertyName1 = "Color1";
19+
20+
Provider.AddTable(testTableName,
21+
new Column(propertyName1, DbType.Int32)
22+
);
23+
24+
Provider.ExecuteNonQuery($"CREATE VIEW {myViewName} AS SELECT {propertyName1} FROM {testTableName}");
25+
26+
// Act
27+
var viewExists = Provider.ViewExists(myViewName);
28+
29+
// Assert
30+
Assert.That(viewExists, Is.True);
31+
}
32+
33+
[Test]
34+
public void ViewExists_ViewDoesNotExist_ReturnsFalse()
35+
{
36+
// Arrange
37+
const string myViewName = "MyView";
38+
39+
// Act
40+
var viewExists = Provider.ViewExists(myViewName);
41+
42+
// Assert
43+
Assert.That(viewExists, Is.False);
44+
}
45+
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
using System.Data;
2+
using DotNetProjects.Migrator.Framework;
3+
using NUnit.Framework;
4+
5+
namespace Migrator.Tests.Providers.PostgreSQL;
6+
7+
[TestFixture]
8+
[Category("Postgre")]
9+
public class PostgreSQLTransformationProvider_TableExistsTests : PostgreSQLTransformationProviderTestBase
10+
{
11+
[Test]
12+
public void TableExists_TableExists_Returns()
13+
{
14+
// Arrange
15+
const string testTableName = "MyDefaultTestTable";
16+
const string propertyName1 = "Color1";
17+
18+
Provider.AddTable(testTableName,
19+
new Column(propertyName1, DbType.Int32)
20+
);
21+
22+
// Act
23+
var tableExists = Provider.TableExists(testTableName);
24+
25+
// Assert
26+
Assert.That(tableExists, Is.True);
27+
}
28+
29+
[Test]
30+
public void TableExists_TableDoesNotExist_ReturnsFalse()
31+
{
32+
// Arrange
33+
const string myTableName = "MyTable";
34+
35+
// Act
36+
var tableExists = Provider.TableExists(myTableName);
37+
38+
// Assert
39+
Assert.That(tableExists, Is.False);
40+
}
41+
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
using System.Data;
2+
using DotNetProjects.Migrator.Framework;
3+
using NUnit.Framework;
4+
5+
namespace Migrator.Tests.Providers.PostgreSQL;
6+
7+
[TestFixture]
8+
[Category("Postgre")]
9+
public class PostgreSQLTransformationProvider_ViewExistsTests : PostgreSQLTransformationProviderTestBase
10+
{
11+
[Test]
12+
public void ViewExists_ViewExists_Returns()
13+
{
14+
// Arrange
15+
const string testTableName = "MyDefaultTestTable";
16+
const string myViewName = "MyView";
17+
const string propertyName1 = "Color1";
18+
19+
Provider.AddTable(testTableName,
20+
new Column(propertyName1, DbType.Int32)
21+
);
22+
23+
Provider.ExecuteNonQuery($"CREATE VIEW {myViewName} AS SELECT {propertyName1} FROM {testTableName}");
24+
25+
// Act
26+
var viewExists = Provider.ViewExists(myViewName);
27+
28+
// Assert
29+
Assert.That(viewExists, Is.True);
30+
}
31+
32+
[Test]
33+
public void ViewExists_ViewDoesNotExist_ReturnsFalse()
34+
{
35+
// Arrange
36+
const string myViewName = "MyView";
37+
38+
// Act
39+
var viewExists = Provider.ViewExists(myViewName);
40+
41+
// Assert
42+
Assert.That(viewExists, Is.False);
43+
}
44+
}
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
using System.Data;
2+
using DotNetProjects.Migrator.Framework;
3+
using Migrator.Tests.Providers.SQLServer.Base;
4+
using NUnit.Framework;
5+
6+
namespace Migrator.Tests.Providers.SQLServer;
7+
8+
[TestFixture]
9+
[Category("SqlServer")]
10+
public class SQLServerTransformationProvider_TableExistsTests : SQLServerTransformationProviderTestBase
11+
{
12+
[Test]
13+
public void TableExists_WithSchemaNameTableExists_Returns()
14+
{
15+
// Arrange
16+
const string testTableName = "MyDefaultTestTable";
17+
const string propertyName1 = "Color1";
18+
19+
Provider.AddTable(testTableName,
20+
new Column(propertyName1, DbType.Int32)
21+
);
22+
23+
// Act
24+
var tableExists = Provider.TableExists($"dbo.{testTableName}");
25+
26+
// Assert
27+
Assert.That(tableExists, Is.True);
28+
}
29+
30+
[Test]
31+
public void TableExists_NoSchemaNameTableExists_Returns()
32+
{
33+
// Arrange
34+
const string testTableName = "MyDefaultTestTable";
35+
const string propertyName1 = "Color1";
36+
37+
Provider.AddTable(testTableName,
38+
new Column(propertyName1, DbType.Int32)
39+
);
40+
41+
// Act
42+
var tableExists = Provider.TableExists(testTableName);
43+
44+
// Assert
45+
Assert.That(tableExists, Is.True);
46+
}
47+
48+
[Test]
49+
public void TableExists_TableDoesNotExist_ReturnsFalse()
50+
{
51+
// Arrange
52+
const string myTableName = "MyTableName";
53+
54+
// Act
55+
var tableExists = Provider.TableExists(myTableName);
56+
57+
// Assert
58+
Assert.That(tableExists, Is.False);
59+
}
60+
}
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
using System.Data;
2+
using DotNetProjects.Migrator.Framework;
3+
using Migrator.Tests.Providers.SQLServer.Base;
4+
using NUnit.Framework;
5+
6+
namespace Migrator.Tests.Providers.SQLServer;
7+
8+
[TestFixture]
9+
[Category("SqlServer")]
10+
public class SQLServerTransformationProvider_ViewExistsTests : SQLServerTransformationProviderTestBase
11+
{
12+
[Test]
13+
public void ViewExists_WithSchemaNameViewExists_Returns()
14+
{
15+
// Arrange
16+
const string testTableName = "MyDefaultTestTable";
17+
const string myViewName = "MyView";
18+
const string propertyName1 = "Color1";
19+
20+
Provider.AddTable(testTableName,
21+
new Column(propertyName1, DbType.Int32)
22+
);
23+
24+
Provider.ExecuteNonQuery($"CREATE VIEW dbo.{myViewName} AS SELECT {propertyName1} FROM dbo.{testTableName}");
25+
26+
// Act
27+
var viewExists = Provider.ViewExists($"dbo.{myViewName}");
28+
29+
// Assert
30+
Assert.That(viewExists, Is.True);
31+
}
32+
33+
[Test]
34+
public void ViewExists_NoSchemaNameViewExists_Returns()
35+
{
36+
// Arrange
37+
const string testTableName = "MyDefaultTestTable";
38+
const string myViewName = "MyView";
39+
const string propertyName1 = "Color1";
40+
41+
Provider.AddTable(testTableName,
42+
new Column(propertyName1, DbType.Int32)
43+
);
44+
45+
Provider.ExecuteNonQuery($"CREATE VIEW dbo.{myViewName} AS SELECT {propertyName1} FROM dbo.{testTableName}");
46+
47+
// Act
48+
var viewExists = Provider.ViewExists(myViewName);
49+
50+
// Assert
51+
Assert.That(viewExists, Is.True);
52+
}
53+
54+
[Test]
55+
public void ViewExists_ViewDoesNotExist_ReturnsFalse()
56+
{
57+
// Arrange
58+
const string myViewName = "MyView";
59+
60+
// Act
61+
var viewExists = Provider.ViewExists(myViewName);
62+
63+
// Assert
64+
Assert.That(viewExists, Is.False);
65+
}
66+
}

src/Migrator/Providers/Impl/SqlServer/SqlServerTransformationProvider.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,12 @@ public override bool ViewExists(string viewName)
8888
// This is not clean! Usually you should use schema as well as this query will find views in other tables as well!
8989

9090
using var cmd = CreateCommand();
91-
using var reader = ExecuteQuery(cmd, $"SELECT OBJECT_ID('{viewName}', 'V')");
91+
cmd.CommandText = $"SELECT OBJECT_ID(@FullViewName, 'V')";
92+
93+
var parameter = cmd.CreateParameter();
94+
parameter.ParameterName = "@FullViewName";
95+
parameter.Value = viewName;
96+
cmd.Parameters.Add(parameter);
9297

9398
var result = cmd.ExecuteScalar();
9499

0 commit comments

Comments
 (0)