public async Task ShouldDropStorageAsync()
        {
            // Given

            const string collectionName = nameof(ShouldDropStorageAsync);

            var connection = MongoTestHelpers.GetConnection();
            var database   = connection.GetDatabase();

            database.DropCollection(collectionName);

            var documentMetadata = new DocumentMetadata {
                Type = collectionName
            };

            // When

            var storageManager = new MongoDocumentStorageManager(connection);
            await storageManager.CreateStorageAsync(documentMetadata);

            var collection        = database.GetCollection <DynamicWrapper>(collectionName);
            var collectionContent = new[] { new DynamicWrapper(), new DynamicWrapper(), new DynamicWrapper() };

            collection.InsertMany(collectionContent);

            var collectionCountBeforeDrop = collection.Count(Builders <DynamicWrapper> .Filter.Empty);

            await storageManager.DropStorageAsync(collectionName);

            var collectionCountAfterDrop = collection.Count(Builders <DynamicWrapper> .Filter.Empty);

            // Then
            Assert.AreEqual(collectionContent.Length, collectionCountBeforeDrop);
            Assert.AreEqual(0, collectionCountAfterDrop);
        }
        public async Task ShouldDropDatabaseAsync()
        {
            // Given
            var connection = MongoTestHelpers.GetConnection();

            // When

            var database    = connection.GetDatabase();
            var collection1 = database.GetCollection <DynamicWrapper>("DropDatabaseCollection1");
            var collection2 = database.GetCollection <DynamicWrapper>("DropDatabaseCollection2");

            collection1.InsertMany(new[] { new DynamicWrapper(), new DynamicWrapper() });
            collection2.InsertMany(new[] { new DynamicWrapper(), new DynamicWrapper(), new DynamicWrapper() });

            var collectionSizeBeforeDrop1 = collection1.Count(Builders <DynamicWrapper> .Filter.Empty);
            var collectionSizeBeforeDrop2 = collection2.Count(Builders <DynamicWrapper> .Filter.Empty);

            await connection.DropDatabaseAsync();

            var collectionSizeAfterDrop1 = collection1.Count(Builders <DynamicWrapper> .Filter.Empty);
            var collectionSizeAfterDrop2 = collection2.Count(Builders <DynamicWrapper> .Filter.Empty);

            // Then
            Assert.AreEqual(2, collectionSizeBeforeDrop1);
            Assert.AreEqual(3, collectionSizeBeforeDrop2);
            Assert.AreEqual(0, collectionSizeAfterDrop1);
            Assert.AreEqual(0, collectionSizeAfterDrop2);
        }
        public void ShouldGetDatabase()
        {
            // Given
            var connection = MongoTestHelpers.GetConnection();

            // When
            var database = connection.GetDatabase();

            // Then
            Assert.IsNotNull(database);
        }
        public async Task ShouldReturnsDatabaseStatus()
        {
            // Given
            var connection = MongoTestHelpers.GetConnection();

            // When
            var status = await connection.GetDatabaseStatusAsync();

            // Then
            Assert.IsNotNull(status);
            Assert.AreEqual(MongoTestHelpers.DatabaseName, status["db"]);
        }
Example #5
0
        public void ShouldSaveDynamicWrapperWithXmlDate()
        {
            // Given

            var date1 = DateTime.Today.AddDays(1);
            var date2 = DateTime.Today.AddDays(2);
            var date3 = DateTime.Today.AddDays(3);

            var instance = new DynamicWrapper
            {
                { "_id", 1 },
                { "DateProperty", (Date)date1 },
                { "NullableDateProperty", (Date)date2 },
                {
                    "ComplexProperty", new DynamicWrapper
                    {
                        { "DateProperty", (Date)date3 }
                    }
                }
            };

            var converters     = new IMemberValueConverter[] { new XmlDateMemberValueConverter() };
            var classStorage   = MongoTestHelpers.GetEmptyStorageProvider <XmlDateClass>(nameof(ShouldSaveDynamicWrapperWithXmlDate), converters);
            var dynamicStorage = MongoTestHelpers.GetStorageProvider(nameof(ShouldSaveDynamicWrapperWithXmlDate), converters);

            // When

            dynamicStorage.InsertOne(instance);

            var classInstance   = classStorage.Find().FirstOrDefault();
            var dynamicInstance = dynamicStorage.Find().FirstOrDefault();

            // Then

            Assert.IsNotNull(classInstance);
            Assert.AreEqual(date1, classInstance.DateProperty);
            Assert.AreEqual(date2, classInstance.NullableDateProperty);
            Assert.IsNotNull(classInstance.ComplexProperty);
            Assert.AreEqual(date3, classInstance.ComplexProperty.DateProperty);
            Assert.IsNull(classInstance.ComplexProperty.NullableDateProperty);

            Assert.IsNotNull(dynamicInstance);
            Assert.AreEqual(((Date)date1).UnixTime, dynamicInstance["DateProperty"]);
            Assert.AreEqual(((Date)date2).UnixTime, dynamicInstance["NullableDateProperty"]);
            Assert.IsNotNull(dynamicInstance["ComplexProperty"]);
            Assert.AreEqual(((Date)date3).UnixTime, ((DynamicWrapper)dynamicInstance["ComplexProperty"])["DateProperty"]);
            Assert.IsNull(((DynamicWrapper)dynamicInstance["ComplexProperty"])["NullableDateProperty"]);
        }
Example #6
0
        public void ShouldSaveDynamicWrapperWithDate()
        {
            // Given

            var date1 = Date.Now.AddDays(1);
            var date2 = Date.Now.AddDays(2);
            var date3 = Date.Now.AddDays(3);

            var instance = new DynamicWrapper
            {
                { "_id", 1 },
                { "DateProperty", date1 },
                { "NullableDateProperty", date2 },
                {
                    "ComplexProperty", new DynamicWrapper
                    {
                        { "DateProperty", date3 }
                    }
                }
            };

            var classStorage   = MongoTestHelpers.GetEmptyStorageProvider <DateClassExample>(nameof(ShouldSaveDynamicWrapperWithDate));
            var dynamicStorage = MongoTestHelpers.GetStorageProvider(nameof(ShouldSaveDynamicWrapperWithDate));

            // When

            dynamicStorage.InsertOne(instance);

            var classInstance   = classStorage.Find().FirstOrDefault();
            var dynamicInstance = dynamicStorage.Find().FirstOrDefault();

            // Then

            Assert.IsNotNull(classInstance);
            Assert.AreEqual(date1, classInstance.DateProperty);
            Assert.AreEqual(date2, classInstance.NullableDateProperty);
            Assert.IsNotNull(classInstance.ComplexProperty);
            Assert.AreEqual(date3, classInstance.ComplexProperty.DateProperty);
            Assert.IsNull(classInstance.ComplexProperty.NullableDateProperty);

            Assert.IsNotNull(dynamicInstance);
            Assert.AreEqual(date1.UnixTime, dynamicInstance["DateProperty"]);
            Assert.AreEqual(date2.UnixTime, dynamicInstance["NullableDateProperty"]);
            Assert.IsNotNull(dynamicInstance["ComplexProperty"]);
            Assert.AreEqual(date3.UnixTime, ((DynamicWrapper)dynamicInstance["ComplexProperty"])["DateProperty"]);
            Assert.IsNull(((DynamicWrapper)dynamicInstance["ComplexProperty"])["NullableDateProperty"]);
        }
        public void ShouldSaveDynamicWrapperWithTime()
        {
            // Given

            var time1 = Time.Now.AddDays(1);
            var time2 = Time.Now.AddDays(2);
            var time3 = Time.Now.AddDays(3);

            var instance = new DynamicWrapper
            {
                { "_id", 1 },
                { "TimeProperty", time1 },
                { "NullableTimeProperty", time2 },
                {
                    "ComplexProperty", new DynamicWrapper
                    {
                        { "TimeProperty", time3 }
                    }
                }
            };

            var classStorage   = MongoTestHelpers.GetEmptyStorageProvider <TimeClassExample>(nameof(ShouldSaveDynamicWrapperWithTime));
            var dynamicStorage = MongoTestHelpers.GetStorageProvider(nameof(ShouldSaveDynamicWrapperWithTime));

            // When

            dynamicStorage.InsertOne(instance);

            var classInstance   = classStorage.Find().FirstOrDefault();
            var dynamicInstance = dynamicStorage.Find().FirstOrDefault();

            // Then

            Assert.IsNotNull(classInstance);
            Assert.AreEqual(time1, classInstance.TimeProperty);
            Assert.AreEqual(time2, classInstance.NullableTimeProperty);
            Assert.IsNotNull(classInstance.ComplexProperty);
            Assert.AreEqual(time3, classInstance.ComplexProperty.TimeProperty);
            Assert.IsNull(classInstance.ComplexProperty.NullableTimeProperty);

            Assert.IsNotNull(dynamicInstance);
            Assert.AreEqual(time1.TotalSeconds, dynamicInstance["TimeProperty"]);
            Assert.AreEqual(time2.TotalSeconds, dynamicInstance["NullableTimeProperty"]);
            Assert.IsNotNull(dynamicInstance["ComplexProperty"]);
            Assert.AreEqual(time3.TotalSeconds, ((DynamicWrapper)dynamicInstance["ComplexProperty"])["TimeProperty"]);
            Assert.IsNull(((DynamicWrapper)dynamicInstance["ComplexProperty"])["NullableTimeProperty"]);
        }
        public async Task ShouldCreateStorageAsync()
        {
            // Given

            const string collectionName = nameof(ShouldCreateStorageAsync);

            var connection = MongoTestHelpers.GetConnection();
            var database   = connection.GetDatabase();

            database.DropCollection(collectionName);

            var documentMetadata = new DocumentMetadata
            {
                Type    = collectionName,
                Indexes = new List <DocumentIndex>
                {
                    new DocumentIndex
                    {
                        Key = new Dictionary <string, DocumentIndexKeyType>
                        {
                            { "Id", DocumentIndexKeyType.Asc },
                        }
                    },
                    new DocumentIndex
                    {
                        Key = new Dictionary <string, DocumentIndexKeyType>
                        {
                            { "Name", DocumentIndexKeyType.Asc },
                            { "Birthday", DocumentIndexKeyType.Desc }
                        }
                    },
                    new DocumentIndex
                    {
                        Key = new Dictionary <string, DocumentIndexKeyType>
                        {
                            { "Description", DocumentIndexKeyType.Text }
                        }
                    }
                }
            };

            // When - Create Collection

            var storageManager = new MongoDocumentStorageManager(connection);
            await storageManager.CreateStorageAsync(documentMetadata);

            await storageManager.CreateStorageAsync(documentMetadata); // No effect

            var collection = connection.GetDatabase().GetCollection <DynamicWrapper>(collectionName);

            // When - Using Indexes

            collection.InsertMany(new[]
            {
                CreateTestObject(1, "Name1", DateTime.Today.AddHours(1), "Some description 1 for Name1"),
                CreateTestObject(2, "Name1", DateTime.Today.AddHours(2), "Some description 2 for Name1"),
                CreateTestObject(3, "Name2", DateTime.Today.AddHours(3), "Some description 3 for Name2"),
                CreateTestObject(4, "Name2", DateTime.Today.AddHours(4), "Some description 4 for Name2"),
                CreateTestObject(5, "Name2", DateTime.Today.AddHours(5), "Some description 5 for Name2"),
                CreateTestObject(6, "Name3", DateTime.Today.AddHours(6), "Some description 6 for Name3")
            });

            var filterBuilder = Builders <DynamicWrapper> .Filter;
            var resultIndex1  = collection.FindSync(filterBuilder.Eq("Id", 3)).ToList();
            var resultIndex2  = collection.FindSync(filterBuilder.And(filterBuilder.Eq("Name", "Name2"), filterBuilder.Lt("Birthday", DateTime.Today.AddHours(5)))).ToList();
            var resultIndex3  = collection.FindSync(filterBuilder.Text("some name2")).ToList();

            // Then

            // Id: Ascending
            Assert.AreEqual(1, resultIndex1.Count);
            Assert.AreEqual(3, resultIndex1[0]["Id"]);
            Assert.AreEqual("Name2", resultIndex1[0]["Name"]);
            Assert.AreEqual(DateTime.Today.AddHours(3).ToUniversalTime(), resultIndex1[0]["Birthday"]);
            Assert.AreEqual("Some description 3 for Name2", resultIndex1[0]["Description"]);

            // Name: Ascending, Birthday: Descending
            Assert.AreEqual(2, resultIndex2.Count);
            Assert.AreEqual(4, resultIndex2[0]["Id"]);
            Assert.AreEqual("Name2", resultIndex2[0]["Name"]);
            Assert.AreEqual(DateTime.Today.AddHours(4).ToUniversalTime(), resultIndex2[0]["Birthday"]);
            Assert.AreEqual("Some description 4 for Name2", resultIndex2[0]["Description"]);
            Assert.AreEqual(3, resultIndex2[1]["Id"]);
            Assert.AreEqual("Name2", resultIndex2[1]["Name"]);
            Assert.AreEqual(DateTime.Today.AddHours(3).ToUniversalTime(), resultIndex2[1]["Birthday"]);
            Assert.AreEqual("Some description 3 for Name2", resultIndex2[1]["Description"]);

            // Description: Text
            Assert.AreEqual(3, resultIndex3.Count);
            CollectionAssert.AreEquivalent(new[] { 3, 4, 5 }, new[] { resultIndex3[0]["Id"], resultIndex3[1]["Id"], resultIndex3[2]["Id"] });
        }