public async Task TestCosmosDbAzureCosmosDbOk()
        {
            //SETUP
            var config = new ConfigurationBuilder()
                         .AddUserSecrets <Startup>()
                         .Build();
            var builder = new DbContextOptionsBuilder <NoSqlDbContext>()
                          .UseCosmos(
                config["CosmosUrl"],
                config["CosmosKey"],
                nameof(TestNoSqlDbContext));

            using (var context = new NoSqlDbContext(builder.Options))
            {
                await context.Database.EnsureCreatedAsync();

                //ATTEMPT
                var book = NoSqlTestData.CreateDummyNoSqlBook();
                context.Add(book);
                await context.SaveChangesAsync();

                //VERIFY
                (await context.Books.CountAsync(p => p.BookId == book.BookId)).ShouldEqual(1);
            }
        }
        public async Task TestCosmosDbAzureCosmosDbOk()
        {
            //SETUP
            var config = new ConfigurationBuilder()
                         .AddUserSecrets <Startup>()
                         .Build();
            var builder = new DbContextOptionsBuilder <NoSqlDbContext>()
                          .UseCosmos(
                config["CosmosUrl"],
                config["CosmosKey"],
                GetType().Name);

            using (var context = new NoSqlDbContext(builder.Options))
            {
                await context.Database.EnsureCreatedAsync();

                //ATTEMPT
                var book = NoSqlTestData.CreateDummyNoSqlBook();
                context.Add(book);
                await context.SaveChangesAsync();

                //VERIFY
                context.Books.Find(book.BookId).ShouldNotBeNull();
            }
        }
Пример #3
0
        private async Task <int> RunSqlTransactionWithNoSqlWriteAsync(DbContext sqlContext, int bookChanges, Func <Task <int> > callBaseSaveChangesAsync)
        {
            if (sqlContext.Database.CurrentTransaction != null)
            {
                throw new InvalidOperationException("You can't use the NoSqlBookUpdater if you are using transactions.");
            }

            var applier = new ApplyChangeToNoSql(sqlContext, _noSqlContext);

            using (var transaction = sqlContext.Database.BeginTransaction())
            {
                var result = await callBaseSaveChangesAsync();                //Save the SQL changes

                await applier.UpdateNoSqlAsync(_bookChanges);                 //apply the book changes to the NoSql database

                var numNoSqlChanges = await _noSqlContext.SaveChangesAsync(); //And Save to NoSql database

                if (bookChanges != numNoSqlChanges)
                {
                    throw new InvalidOperationException($"{bookChanges} books were changed in SQL, but the NoSQL changed {numNoSqlChanges}");
                }
                transaction.Commit();
                return(result);
            }
        }
        public async Task TestCosmosDbCatchFailedRequestOk()
        {
            //SETUP
            var config  = AppSettings.GetConfiguration();
            var builder = new DbContextOptionsBuilder <NoSqlDbContext>()
                          .UseCosmos(
                config["endpoint"],
                config["authKey"],
                "UNKNOWNDATABASE");

            using (var context = new NoSqlDbContext(builder.Options))
            {
                //ATTEMPT
                var book = NoSqlTestData.CreateDummyNoSqlBook();
                context.Add(book);
                var ex = await Assert.ThrowsAsync <CosmosException>(async() => await context.SaveChangesAsync());

                //VERIFY
                ex.Message.ShouldStartWith("Response status code does not indicate success: 404 Substatus:");
            }
        }
        public async Task TestCosmosDbCatchFailedRequestOk()
        {
            //SETUP
            var config  = AppSettings.GetConfiguration();
            var builder = new DbContextOptionsBuilder <NoSqlDbContext>()
                          .UseCosmos(
                config["endpoint"],
                config["authKey"],
                "UNKNOWNDATABASE");

            using (var context = new NoSqlDbContext(builder.Options))
            {
                //ATTEMPT
                var book = NoSqlTestData.CreateDummyNoSqlBook();
                context.Add(book);
                var ex = await Assert.ThrowsAsync <HttpException>(async() => await context.SaveChangesAsync());

                //VERIFY
                ex.Message.ShouldEqual("NotFound");
            }
        }
        public async Task TestCosmosDbLocalDbEmulatorCreateDatabaseOk()
        {
            //SETUP
            var config  = AppSettings.GetConfiguration();
            var builder = new DbContextOptionsBuilder <NoSqlDbContext>()
                          .UseCosmos(
                config["endpoint"],
                config["authKey"],
                GetType().Name);

            using (var context = new NoSqlDbContext(builder.Options))
            {
                await context.Database.EnsureCreatedAsync();

                //ATTEMPT
                var book = NoSqlTestData.CreateDummyNoSqlBook();
                context.Add(book);
                await context.SaveChangesAsync();

                //VERIFY
                context.Books.Find(book.BookId).ShouldNotBeNull();
            }
        }
        public async Task TestCosmosDbLocalDbEmulatorCreateDatabaseOk()
        {
            //SETUP
            var config  = AppSettings.GetConfiguration();
            var builder = new DbContextOptionsBuilder <NoSqlDbContext>()
                          .UseCosmos(
                config["endpoint"],
                config["authKey"],
                nameof(TestNoSqlDbContext));

            using (var context = new NoSqlDbContext(builder.Options))
            {
                await context.Database.EnsureCreatedAsync();

                //ATTEMPT
                var book = NoSqlTestData.CreateDummyNoSqlBook();
                context.Add(book);
                await context.SaveChangesAsync();

                //VERIFY
                (await context.Books.CountAsync(p => p.BookId == book.BookId)).ShouldEqual(1);
            }
        }