diff --git a/minisqlquery-master/src/MiniSqlQuery.Tests/DbModel/SqlCeSchemaService_Tests.cs b/minisqlquery-master/src/MiniSqlQuery.Tests/DbModel/SqlCeSchemaService_Tests.cs
new file mode 100644
index 0000000..4373388
--- /dev/null
+++ b/minisqlquery-master/src/MiniSqlQuery.Tests/DbModel/SqlCeSchemaService_Tests.cs
@@ -0,0 +1,144 @@
+#region License
+// Copyright 2005-2019 Paul Kohler (https://github.com/paulkohler/minisqlquery). All rights reserved.
+// This source code is made available under the terms of the GNU Lesser General Public License v3.0
+// https://github.com/paulkohler/minisqlquery/blob/master/LICENSE
+#endregion
+using System;
+using MiniSqlQuery.Core.DbModel;
+using NUnit.Framework;
+
+
+// ReSharper disable InconsistentNaming
+
+namespace MiniSqlQuery.Tests.DbModel
+{
+ [TestFixture(Description = "Requires SQLCE DB")]
+ [Category("Functional")]
+ public class SqlCeSchemaService_Tests
+ {
+ #region Setup/Teardown
+
+ [SetUp]
+ public void TestSetup()
+ {
+ _service = new SqlCeSchemaService { ProviderName = _providerName };
+ _model = _service.GetDbObjectModel(_connStr);
+ }
+
+ #endregion
+
+ private SqlCeSchemaService _service;
+ private string _connStr = @"data source=|DataDirectory|\Northwind.v4.sdf";
+ private string _providerName = "System.Data.SqlServerCe.4.0";
+ private DbModelInstance _model;
+
+ [Test]
+ public void Has_Customers_table()
+ {
+ Assert.That(_model.FindTable("[Customers]"), Is.Not.Null);
+ }
+
+ [Test]
+ public void Has_Categories_table()
+ {
+ Assert.That(_model.FindTable("[Categories]"), Is.Not.Null);
+ }
+
+ [Test]
+ public void Customers_table_has_columns()
+ {
+ var table = _model.FindTable("[Customers]");
+ Assert.That(table.Columns[0].Name, Is.EqualTo("Customer ID"));
+ Assert.That(table.Columns[0].DbType.Name, Is.EqualTo("nvarchar"));
+ Assert.That(table.Columns[0].DbType.Length, Is.EqualTo(5));
+
+ Assert.That(table.PrimaryKeyColumns.Count, Is.EqualTo(1));
+ }
+
+ [Test]
+ public void Check_FK_refs_for_Products()
+ {
+ var table = _model.FindTable("[Products]");
+ var supplierIdColumn = table.Columns[1];
+ var categoryIdColumn = table.Columns[2];
+ var productNameColumn = table.Columns[3];
+
+ Assert.That(table.Columns.Count, Is.EqualTo(11));
+ Assert.That(table.PrimaryKeyColumns.Count, Is.EqualTo(1));
+ Assert.That(table.ForeignKeyColumns.Count, Is.EqualTo(2));
+ Assert.That(table.NonKeyColumns.Count, Is.EqualTo(8));
+
+ Assert.That(supplierIdColumn.ForeignKeyReference, Is.Not.Null);
+ Assert.That(categoryIdColumn.ForeignKeyReference, Is.Not.Null);
+
+ Assert.That(supplierIdColumn.ForeignKeyReference.OwningColumn.Name, Is.EqualTo("Supplier ID"));
+ Assert.That(supplierIdColumn.ForeignKeyReference.ReferenceTable.Name, Is.EqualTo("Suppliers"));
+ Assert.That(supplierIdColumn.ForeignKeyReference.ReferenceColumn.Name, Is.EqualTo("Supplier ID"));
+ Assert.That(supplierIdColumn.ForeignKeyReference.UpdateRule, Is.EqualTo("CASCADE"));
+ Assert.That(supplierIdColumn.ForeignKeyReference.DeleteRule, Is.EqualTo("NO ACTION"));
+ Assert.That(supplierIdColumn.HasFK, Is.True);
+
+ Assert.That(categoryIdColumn.ForeignKeyReference.OwningColumn.Name, Is.EqualTo("Category ID"));
+ Assert.That(categoryIdColumn.ForeignKeyReference.ReferenceTable.Name, Is.EqualTo("Categories"));
+ Assert.That(categoryIdColumn.ForeignKeyReference.ReferenceColumn.Name, Is.EqualTo("Category ID"));
+ Assert.That(categoryIdColumn.ForeignKeyReference.UpdateRule, Is.EqualTo("CASCADE"));
+ Assert.That(categoryIdColumn.ForeignKeyReference.DeleteRule, Is.EqualTo("NO ACTION"));
+
+ Assert.That(productNameColumn.HasFK, Is.False);
+ Assert.That(productNameColumn.Name, Is.EqualTo("Product Name"));
+ }
+
+
+ [Test]
+ public void Build_dependency_tree_from_model()
+ {
+ DbModelDependencyWalker dependencyWalker = new DbModelDependencyWalker(_model);
+ var tables = dependencyWalker.SortTablesByForeignKeyReferences();
+
+ DisplayTableDetails(tables);
+ /*
+ Categories (fks:0)
+ Customers (fks:0)
+ Employees (fks:0)
+ Order Details_New (fks:0)
+ Shippers (fks:0)
+ Suppliers (fks:0)
+ Orders (fks:3)
+ (FK --> Customers.Customer ID)
+ (FK --> Employees.Employee ID)
+ (FK --> Shippers.Shipper ID)
+ Products (fks:2)
+ (FK --> Suppliers.Supplier ID)
+ (FK --> Categories.Category ID)
+ Order Details (fks:2)
+ (FK --> Orders.Order ID)
+ (FK --> Products.Product ID)
+ */
+
+ Assert.That(tables[0].Name, Is.EqualTo("Categories"));
+ Assert.That(tables[1].Name, Is.EqualTo("Customers"));
+ Assert.That(tables[2].Name, Is.EqualTo("Employees"));
+ Assert.That(tables[4].Name, Is.EqualTo("Shippers"));
+ Assert.That(tables[5].Name, Is.EqualTo("Suppliers"));
+ Assert.That(tables[6].Name, Is.EqualTo("Orders"), "Order is dependent on Customers, Employees, Shippers");
+ Assert.That(tables[7].Name, Is.EqualTo("Products"), "Products is dependent on Suppliers, Categories");
+ Assert.That(tables[8].Name, Is.EqualTo("Order Details"), "Order Details is dependent on Orders, Products");
+ }
+
+ private void DisplayTableDetails(DbModelTable[] tablesList)
+ {
+ foreach (DbModelTable table in tablesList)
+ {
+ Console.WriteLine(string.Format("{0} (fks:{1})", table.Name, table.ForeignKeyColumns.Count));
+ if (table.ForeignKeyColumns.Count > 0)
+ {
+ foreach (DbModelColumn fk in table.ForeignKeyColumns)
+ {
+ Console.WriteLine(" (FK --> {0}.{1})", fk.ForeignKeyReference.ReferenceTable.Name, fk.ForeignKeyReference.ReferenceColumn.Name);
+
+ }
+ }
+ }
+ }
+ }
+}
\ No newline at end of file