public void Write_Schema_Collections_To_Html_Files()
        {
            var sut = new SchemaCollectionsProvider();

            var connectionString = ConfigurationManager.ConnectionStrings["CrmOrganisation"];
            using (var conn = new CrmDbConnection(connectionString.ConnectionString))
            {
                WriteDataTableToHtmlFile("MetaDataCollections", sut.GetMetadataCollections());
                WriteDataTableToHtmlFile("Restrictions", sut.GetRestrictions());
                WriteDataTableToHtmlFile("DataSourceInformation", sut.GetDataSourceInfo(conn));
                //WriteDataTableToHtmlFile("DataTypes", connection);
                WriteDataTableToHtmlFile("ReservedWords", sut.GetReservedWords());
                //    WriteDataTableToHtmlFile("Databases", sut.getdata);
                //   WriteDataTableToHtmlFile("Schemata", sut.GetSchema(conn, "Schemata", null));
                WriteDataTableToHtmlFile("Tables", sut.GetTables(conn, null));
                WriteDataTableToHtmlFile("Columns", sut.GetColumns(conn, null));
                WriteDataTableToHtmlFile("Views", sut.GetViews(conn, null));
                WriteDataTableToHtmlFile("Users", sut.GetUsers(conn, null));
                WriteDataTableToHtmlFile("Indexes", sut.GetIndexes(conn, null));
                WriteDataTableToHtmlFile("IndexColumns", sut.GetIndexColumns(conn, null));
                //   WriteDataTableToHtmlFile("Constraints", sut.get);
                //  WriteDataTableToHtmlFile("PrimaryKey", sut.pr();
                //  WriteDataTableToHtmlFile("UniqueKeys", sut.Get);
                WriteDataTableToHtmlFile("ForeignKeys", sut.GetForeignKeys(conn, null));
                WriteDataTableToHtmlFile("UniqueKeys", sut.GetUniqueKeys(conn, null));
                // WriteDataTableToHtmlFile("ConstraintColumns", sut.get);

            }
        }
        public void Should_Be_Able_To_Get_UniqeKeys_For_A_Table(string tableName)
        {
            // Arrange
            var sut = new SchemaCollectionsProvider();

            var connectionString = ConfigurationManager.ConnectionStrings["CrmOrganisation"];
            using (var conn = new CrmDbConnection(connectionString.ConnectionString))
            {
                var restrictions = new string[] { tableName };
                // Act
                var collection = sut.GetUniqueKeys(conn, restrictions);

                // Assert
                Assert.That(collection, Is.Not.Null);
                Assert.That(collection.Columns, Is.Not.Null);
                Assert.That(collection.Rows.Count, Is.EqualTo(1)); // In Dynamics crm, only the primary key is a unique key. You cannot add additional unique keys to an entity.

                foreach (DataRow row in collection.Rows)
                {

                    var val = AssertColVal(collection, row, "constraint_catalog");
                    Assert.That(val, Is.EqualTo(conn.ConnectionInfo.OrganisationName));

                    val = AssertColVal(collection, row, "constraint_schema");
                    Assert.That(val, Is.EqualTo("dbo"));

                    val = AssertColVal(collection, row, "constraint_name");
                    Assert.IsFalse(string.IsNullOrEmpty((string)val));
                    Console.WriteLine(val);

                    val = AssertColVal(collection, row, "table_catalog");
                    Assert.That(val, Is.EqualTo(conn.ConnectionInfo.OrganisationName));

                    val = AssertColVal(collection, row, "table_schema");
                    Assert.That(val, Is.EqualTo("dbo"));

                    val = AssertColVal(collection, row, "table_name");
                    Assert.That(val, Is.EqualTo(tableName));

                    val = AssertColVal(collection, row, "constraint_type");
                    Assert.That(val, Is.EqualTo("PRIMARY KEY"));

                    val = AssertColVal(collection, row, "is_deferrable");
                    Assert.That(val, Is.EqualTo("NO"));

                    val = AssertColVal(collection, row, "initially_deferred");
                    Assert.That(val, Is.EqualTo("NO"));

                }

            }
        }