public static async Task GetRoutine_WhenGivenNonMatchingRoutineName_ReturnsNone()
        {
            var identifierDefaults = new IdentifierDefaults("test_server", "test_database", "test_schema");
            var identifierResolver = new VerbatimIdentifierResolutionStrategy();

            var tables = Array.Empty<IRelationalDatabaseTable>();
            var views = Array.Empty<IDatabaseView>();
            var sequences = Array.Empty<IDatabaseSequence>();
            var synonyms = Array.Empty<IDatabaseSynonym>();

            var testRoutineName = Identifier.CreateQualifiedIdentifier("test_routine_name");
            var routine = new Mock<IDatabaseRoutine>();
            routine.Setup(t => t.Name).Returns(testRoutineName);
            var routines = new[] { routine.Object };

            var database = new RelationalDatabase(
                identifierDefaults,
                identifierResolver,
                tables,
                views,
                sequences,
                synonyms,
                routines
            );

            var dbRoutine = await database.GetRoutine("missing_routine_name").ToOption().ConfigureAwait(false);

            Assert.That(dbRoutine, OptionIs.None);
        }
        public static async Task GetAllRoutines_WhenInvoked_ReturnsRoutinesFromCtor()
        {
            var identifierDefaults = new IdentifierDefaults("test_server", "test_database", "test_schema");
            var identifierResolver = new VerbatimIdentifierResolutionStrategy();
            var tables = Array.Empty<IRelationalDatabaseTable>();
            var views = Array.Empty<IDatabaseView>();
            var sequences = Array.Empty<IDatabaseSequence>();
            var synonyms = Array.Empty<IDatabaseSynonym>();

            var testRoutineName = Identifier.CreateQualifiedIdentifier("test_routine_name");
            var routine = new Mock<IDatabaseRoutine>();
            routine.Setup(t => t.Name).Returns(testRoutineName);
            var routines = new[] { routine.Object };

            var database = new RelationalDatabase(
                identifierDefaults,
                identifierResolver,
                tables,
                views,
                sequences,
                synonyms,
                routines
            );

            var dbRoutines = await database.GetAllRoutines().ToListAsync().ConfigureAwait(false);
            var routineName = dbRoutines.Select(r => r.Name).Single();

            Assert.That(routineName, Is.EqualTo(testRoutineName));
        }
        public static async Task GetSynonym_WhenGivenMatchingSynonymName_ReturnsSynonymFromCtor()
        {
            var identifierDefaults = new IdentifierDefaults("test_server", "test_database", "test_schema");
            var identifierResolver = new VerbatimIdentifierResolutionStrategy();

            var tables = Array.Empty<IRelationalDatabaseTable>();
            var views = Array.Empty<IDatabaseView>();
            var sequences = Array.Empty<IDatabaseSequence>();

            var testSynonymName = Identifier.CreateQualifiedIdentifier("test_synonym_name");
            var synonym = new Mock<IDatabaseSynonym>();
            synonym.Setup(t => t.Name).Returns(testSynonymName);
            var synonyms = new[] { synonym.Object };

            var routines = Array.Empty<IDatabaseRoutine>();

            var database = new RelationalDatabase(
                identifierDefaults,
                identifierResolver,
                tables,
                views,
                sequences,
                synonyms,
                routines
            );

            var dbSynonym = await database.GetSynonym(testSynonymName).ToOption().ConfigureAwait(false);
            var synonymName = dbSynonym.Match(s => s.Name.LocalName, string.Empty);

            Assert.Multiple(() =>
            {
                Assert.That(dbSynonym, OptionIs.Some);
                Assert.That(synonymName, Is.EqualTo(testSynonymName.LocalName));
            });
        }
        public static async Task SnapshotAsync_WhenGivenRelationalDatabaseWithObjects_ReturnsDatabaseWithMatchingObjectsInGetAllObjects()
        {
            var identifierDefaults = new IdentifierDefaults("test_server", "test_database", "test_schema");
            var identifierResolver = new VerbatimIdentifierResolutionStrategy();

            var testTableName = Identifier.CreateQualifiedIdentifier("test_table_name");
            var table = new Mock<IRelationalDatabaseTable>();
            table.Setup(t => t.Name).Returns(testTableName);
            var tables = new[] { table.Object };

            var testViewName = Identifier.CreateQualifiedIdentifier("test_view_name");
            var view = new Mock<IDatabaseView>();
            view.Setup(t => t.Name).Returns(testViewName);
            var views = new[] { view.Object };

            var testSequenceName = Identifier.CreateQualifiedIdentifier("test_sequence_name");
            var sequence = new Mock<IDatabaseSequence>();
            sequence.Setup(t => t.Name).Returns(testSequenceName);
            var sequences = new[] { sequence.Object };

            var testSynonymName = Identifier.CreateQualifiedIdentifier("test_synonym_name");
            var synonym = new Mock<IDatabaseSynonym>();
            synonym.Setup(t => t.Name).Returns(testSynonymName);
            var synonyms = new[] { synonym.Object };

            var testRoutineName = Identifier.CreateQualifiedIdentifier("test_routine_name");
            var routine = new Mock<IDatabaseRoutine>();
            routine.Setup(t => t.Name).Returns(testRoutineName);
            var routines = new[] { routine.Object };

            var database = new RelationalDatabase(
                identifierDefaults,
                identifierResolver,
                tables,
                views,
                sequences,
                synonyms,
                routines
            );

            var snapshot = await RelationalDatabase.SnapshotAsync(database, identifierResolver).ConfigureAwait(false);
            var snapshotTables = await snapshot.GetAllTables().ToListAsync().ConfigureAwait(false);
            var snapshotViews = await snapshot.GetAllViews().ToListAsync().ConfigureAwait(false);
            var snapshotSequences = await snapshot.GetAllSequences().ToListAsync().ConfigureAwait(false);
            var snapshotSynonyms = await snapshot.GetAllSynonyms().ToListAsync().ConfigureAwait(false);
            var snapshotRoutines = await snapshot.GetAllRoutines().ToListAsync().ConfigureAwait(false);

            Assert.Multiple(() =>
            {
                Assert.That(snapshotTables, Is.EqualTo(tables));
                Assert.That(snapshotViews, Is.EqualTo(views));
                Assert.That(snapshotSequences, Is.EqualTo(sequences));
                Assert.That(snapshotSynonyms, Is.EqualTo(synonyms));
                Assert.That(snapshotRoutines, Is.EqualTo(routines));
            });
        }
        public static void GetResolutionOrder_GivenIdentifier_ReturnsIdenticalIdentifier()
        {
            var resolver = new VerbatimIdentifierResolutionStrategy();
            var input    = new Identifier("A", "B", "C", "D");

            var results = resolver.GetResolutionOrder(input).ToList();

            Assert.Multiple(() =>
            {
                Assert.That(results, Has.Exactly(1).Items);
                Assert.That(results[0], Is.EqualTo(input));
            });
        }
        public static void Ctor_GivenNullViews_ThrowsArgumentNullException()
        {
            var identifierDefaults = new IdentifierDefaults("test_server", "test_database", "test_schema");
            var identifierResolver = new VerbatimIdentifierResolutionStrategy();
            var tables = Array.Empty<IRelationalDatabaseTable>();
            var sequences = Array.Empty<IDatabaseSequence>();
            var synonyms = Array.Empty<IDatabaseSynonym>();
            var routines = Array.Empty<IDatabaseRoutine>();

            Assert.That(
                () => new RelationalDatabase(
                    identifierDefaults,
                    identifierResolver,
                    tables,
                    null,
                    sequences,
                    synonyms,
                    routines
                ),
                Throws.ArgumentNullException
            );
        }
        public static async Task SnapshotAsync_WhenGivenEmptyRelationalDatabase_ReturnsDatabaseWithMatchingIdentifierDefaults()
        {
            var identifierDefaults = new IdentifierDefaults("test_server", "test_database", "test_schema");
            var identifierResolver = new VerbatimIdentifierResolutionStrategy();

            var database = new RelationalDatabase(
                identifierDefaults,
                identifierResolver,
                Array.Empty<IRelationalDatabaseTable>(),
                Array.Empty<IDatabaseView>(),
                Array.Empty<IDatabaseSequence>(),
                Array.Empty<IDatabaseSynonym>(),
                Array.Empty<IDatabaseRoutine>()
            );

            var snapshot = await RelationalDatabase.SnapshotAsync(database, identifierResolver).ConfigureAwait(false);

            Assert.Multiple(() =>
            {
                Assert.That(snapshot.IdentifierDefaults.Server, Is.EqualTo(identifierDefaults.Server));
                Assert.That(snapshot.IdentifierDefaults.Database, Is.EqualTo(identifierDefaults.Database));
                Assert.That(snapshot.IdentifierDefaults.Schema, Is.EqualTo(identifierDefaults.Schema));
            });
        }
예제 #8
0
        public static void GetColumnLookup_ForIdentifierResolvingOverloadGivenNullView_ThrowsArgumentNullException()
        {
            var resolver = new VerbatimIdentifierResolutionStrategy();

            Assert.That(() => DatabaseViewExtensions.GetColumnLookup(null, resolver), Throws.ArgumentNullException);
        }
        public static void GetCheckLookup_ForIdentifierResolvingOverloadGivenNullTable_ThrowsArgumentNullException()
        {
            var resolver = new VerbatimIdentifierResolutionStrategy();

            Assert.That(() => RelationalDatabaseTableExtensions.GetCheckLookup(null, resolver), Throws.ArgumentNullException);
        }
        public static void GetResolutionOrder_GivenNullIdentifier_ThrowsArgumentNullException()
        {
            var resolver = new VerbatimIdentifierResolutionStrategy();

            Assert.That(() => resolver.GetResolutionOrder(null), Throws.ArgumentNullException);
        }