Example #1
0
        public void SubmitChanges_WithConsistencyCheck_Succeeds()
        {
            var bucket = ClusterHelper.GetBucket("beer-sample");

            var clusterVersion = VersionProvider.Current.GetVersion(bucket);

            if (clusterVersion < FeatureVersions.ReadYourOwnWrite)
            {
                Assert.Ignore("Cluster does not support RYOW, test skipped.");
            }

            var db = new BucketContext(bucket);

            // Make doc to test
            db.Save(new BeerFiltered
            {
                Name      = "TestBeer",
                BreweryId = "TestBrewery",
                Type      = "beer",
                Abv       = 1,
                Updated   = DateTime.Now
            });

            db.BeginChangeTracking();

            var beer = db.Query <BeerFiltered>()
                       .ConsistentWith(db.MutationState)
                       .First(p => p.Name == "TestBeer");

            beer.Abv = 5;

            db.SubmitChanges();
        }
        public void Save_RemoveThenSave_ClearsIsDeletedFlagAndSetsIsDirtyAndAddsToModified()
        {
            //arrange
            var bucket = new Mock <IBucket>();

            bucket.Setup(x => x.Configuration).Returns(new ClientConfiguration().BucketConfigs.First().Value);

            var ctx = new BucketContext(bucket.Object);

            ctx.BeginChangeTracking();

            var beer = (Beer)DocumentProxyManager.Default.CreateProxy(typeof(Beer));

            beer.Name = "doc1";

            // ReSharper disable once SuspiciousTypeConversion.Global
            var trackedDoc = (ITrackedDocumentNode)beer;

            trackedDoc.Metadata = new DocumentMetadata()
            {
                Id = "doc1"
            };

            trackedDoc.ClearStatus();
            (ctx as IChangeTrackableContext).Track(beer);

            //act
            ctx.Remove(beer);
            ctx.Save(beer);

            //assert
            Assert.True(trackedDoc.IsDirty);
            Assert.False(trackedDoc.IsDeleted);
            Assert.AreEqual(1, ctx.ModifiedCount);
        }
Example #3
0
        public void Remove_ThenQuery_ReturnsChanges()
        {
            var bucket = ClusterHelper.GetBucket("beer-sample");

            var clusterVersion = VersionProvider.Current.GetVersion(bucket);

            if (clusterVersion < FeatureVersions.ReadYourOwnWrite)
            {
                Assert.Ignore("Cluster does not support RYOW, test skipped.");
            }

            var db        = new BucketContext(bucket);
            var testValue = new Random().Next(0, 100000);
            var testKey   = "Remove_ThenQuery_ReturnsChanges_" + testValue;

            var testDocument = new Sample
            {
                Id    = testKey,
                Value = testValue
            };

            db.Save(testDocument);
            db.Remove(testDocument);

            Assert.NotNull(db.MutationState);

            var result = db.Query <Sample>()
                         .ConsistentWith(db.MutationState)
                         .Select(p => p.Id)
                         .FirstOrDefault(p => p == testKey);

            Assert.Null(result);
        }
Example #4
0
        public ActionResult Create(AirlineModel model)
        {
            EnsureIncrementInitialized();

            // Begin change tracking
            _db.BeginChangeTracking();

            if (!ModelState.IsValid)
            {
                return(View(model));
            }

            var airline = new Airline()
            {
                Id       = (int)_bucket.Increment(IncrementDocument).Value,
                Name     = model.Name,
                Callsign = model.Callsign
            };

            // Add the document and save the changes
            _db.Save(airline);
            _db.SubmitChanges();

            // Collect mutation state for queries on the next page view
            TempData["AirlineMutationState"] = _db.MutationState;

            return(RedirectToAction("Index"));
        }
Example #5
0
        public static void Write()
        {
            var test = new TestDocument();

            test.Id   = TestId;
            test.Name = "Test document";

            _bucketContext.Save(test);
        }
 public void Save_When_KeyAttribute_Is_Not_Defined_Throw_DocumentIdMissingException()
 {
     var brewery = new Brewery();
        var bucket = new Mock<IBucket>();
        var result = new Mock<IOperationResult<Brewery>>();
        result.Setup(x => x.Status).Returns(ResponseStatus.Success);
        bucket.Setup(x => x.Upsert(It.IsAny<string>(), It.IsAny<Brewery>())).Returns(result.Object);
        var ctx = new BucketContext(bucket.Object);
        Assert.Throws<KeyAttributeMissingException>(()=>ctx.Save(brewery));
 }
Example #7
0
 public ActionResult Create(ContactDto contactDto)
 {
     try
     {
         // TODO: Add insert logic here
         //contactsModel.Id = Guid.NewGuid().ToString();
         var contact = new Contact {
             id              = Guid.NewGuid().ToString(), Nama = contactDto.Nama, Nim = contactDto.Nim, Jurusan = contactDto.Jurusan,
             Fakultas        = contactDto.Fakultas,
             DosenPembimbing = contactDto.DosenPembimbing
         };
         _bucketContext.Save(contact);
         return(RedirectToAction(nameof(Index)));
     }
     catch (Exception e)
     {
         ModelState.TryAddModelException("exception", e);
         return(View());
     }
 }
        public void Save_When_Write_Is_Not_Succesful_Throw_CouchbaseWriteException()
        {
            var beer   = new Beer();
            var bucket = new Mock <IBucket>();
            var result = new Mock <IOperationResult <Beer> >();

            result.Setup(x => x.Success).Returns(false);
            bucket.Setup(x => x.Upsert(It.IsAny <string>(), It.IsAny <Beer>())).Returns(result.Object);
            var ctx = new BucketContext(bucket.Object);

            Assert.Throws <CouchbaseWriteException>(() => ctx.Save(beer));
        }
        public void Save_When_KeyAttribute_Is_Not_Defined_Throw_DocumentIdMissingException()
        {
            var brewery = new Brewery();
            var bucket  = new Mock <IBucket>();
            var result  = new Mock <IOperationResult <Brewery> >();

            result.Setup(x => x.Status).Returns(ResponseStatus.Success);
            bucket.Setup(x => x.Upsert(It.IsAny <string>(), It.IsAny <Brewery>())).Returns(result.Object);
            var ctx = new BucketContext(bucket.Object);

            Assert.Throws <KeyAttributeMissingException>(() => ctx.Save(brewery));
        }
        public void Save_When_Write_Is_Succesful_Return_Success()
        {
            var beer   = new Beer();
            var bucket = new Mock <IBucket>();
            var result = new Mock <IOperationResult <Beer> > ();

            result.Setup(x => x.Status).Returns(ResponseStatus.Success);
            result.Setup(x => x.Success).Returns(true);
            bucket.Setup(x => x.Upsert(It.IsAny <string>(), It.IsAny <Beer>())).Returns(result.Object);
            var ctx = new BucketContext(bucket.Object);

            ctx.Save(beer);
        }
Example #11
0
        public void Save_Updates_Duplicate_Document_In_Modified_List()
        {
            //arrange
            var bucket = new Mock <IBucket>();

            bucket.Setup(x => x.Configuration).Returns(new ClientConfiguration().BucketConfigs.First().Value);

            var ctx = new BucketContext(bucket.Object);

            ctx.BeginChangeTracking();

            var beer = new Beer
            {
                Name = "doc1" //key field
            };

            //act
            ctx.Save(beer);
            ctx.Save(beer);

            //assert
            Assert.AreEqual(1, ctx.ModifiedCount);
        }
Example #12
0
        public void SubmitChanges_WithConsistencyCheck_FailsOnCasMismatch()
        {
            var bucket = ClusterHelper.GetBucket("beer-sample");

            var clusterVersion = VersionProvider.Current.GetVersion(bucket);

            if (clusterVersion < FeatureVersions.ReadYourOwnWrite)
            {
                Assert.Ignore("Cluster does not support RYOW, test skipped.");
            }

            var db = new BucketContext(bucket);

            // Make doc to test
            db.Save(new BeerFiltered
            {
                Name      = "TestBeer",
                BreweryId = "TestBrewery",
                Type      = "beer",
                Abv       = 1,
                Updated   = DateTime.Now
            });

            db.BeginChangeTracking();

            var beer = db.Query <BeerFiltered>()
                       .ConsistentWith(db.MutationState)
                       .First(p => p.Name == "TestBeer" && p.BreweryId == "TestBrewery");

            // Alter document in separate context
            var db2 = new BucketContext(bucket);

            db2.Save(new BeerFiltered
            {
                Name      = "TestBeer",
                BreweryId = "TestBrewery",
                Type      = "beer",
                Abv       = 2,
                Updated   = DateTime.Now
            });

            // Alter document in tracked context
            beer.Abv = 5;

            Assert.Throws <CouchbaseConsistencyException>(() => db.SubmitChanges());
        }
Example #13
0
        public void Save_When_Write_Is_Succesful_Return_Success()
        {
            //arrange
            var beer = new Beer {
                Name = "beer1"
            };
            var bucket = new Mock <IBucket>();
            var result = new Mock <IOperationResult <Beer> >();

            result.Setup(x => x.Status).Returns(ResponseStatus.Success);
            result.Setup(x => x.Success).Returns(true);
            bucket.Setup(x => x.Upsert(It.IsAny <string>(), It.IsAny <Beer>())).Returns(result.Object);
            var ctx = new BucketContext(bucket.Object);

            //act
            ctx.Save(beer);

            //assert - does not throw exception
        }
Example #14
0
        public void Save_WhenChangeTrackingEnabled_AddsToTrackedList()
        {
            //arrange
            var bucket = new Mock <IBucket>();

            bucket.Setup(x => x.Configuration).Returns(new ClientConfiguration().BucketConfigs.First().Value);

            var ctx = new BucketContext(bucket.Object);

            ctx.BeginChangeTracking();

            var beer = new Beer
            {
                Name = "doc1" //key field
            };

            ctx.Save(beer);

            Assert.AreEqual(1, ctx.TrackedCount);
        }
Example #15
0
        public void SubmitChanges_NewDoc_NoConsistencyCheck_UsesUpsert()
        {
            //arrange

            var fakeResult = new Mock <IOperationResult <object> >();

            fakeResult.Setup(m => m.Status).Returns(ResponseStatus.Success);
            fakeResult.Setup(m => m.Success).Returns(true);

            var bucket = new Mock <IBucket>();

            bucket.Setup(x => x.Configuration).Returns(new ClientConfiguration().BucketConfigs.First().Value);
            bucket
            .Setup(x => x.Upsert(It.IsAny <string>(), It.IsAny <object>()))
            .Returns(fakeResult.Object);
            bucket
            .Setup(x => x.Insert(It.IsAny <string>(), It.IsAny <object>()))
            .Returns(fakeResult.Object);

            var ctx = new BucketContext(bucket.Object);

            ctx.BeginChangeTracking();

            var beer = new Beer()
            {
                Name = "Test"
            };

            ctx.Save(beer);

            //act
            ctx.SubmitChanges(new SaveOptions()
            {
                PerformConsistencyCheck = false
            });

            //assert
            bucket.Verify(x => x.Upsert(It.IsAny <string>(), It.IsAny <object>()), Times.Once);
            bucket.Verify(x => x.Insert(It.IsAny <string>(), It.IsAny <object>()), Times.Never);
        }
Example #16
0
        public void EndChangeTracking_WhenCalled_ModifiedList()
        {
            //arrange
            var bucket = new Mock <IBucket>();

            bucket.Setup(x => x.Configuration).Returns(new ClientConfiguration().BucketConfigs.First().Value);

            var ctx = new BucketContext(bucket.Object);

            ctx.BeginChangeTracking();

            var beer = new Beer
            {
                Name = "doc1" //key field
            };

            ctx.Save(beer);

            //act
            ctx.EndChangeTracking();

            //assert
            Assert.AreEqual(0, ctx.ModifiedCount);
        }
        public void SubmitChanges_WhenCalled_DoesNotClearTrackedList()
        {
            //arrange
            var bucket = new Mock<IBucket>();
            bucket.Setup(x => x.Configuration).Returns(new ClientConfiguration().BucketConfigs.First().Value);

            var ctx = new BucketContext(bucket.Object);
            ctx.BeginChangeTracking();

            var beer = new Beer
            {
                Name = "doc1" //key field
            };

            ctx.Save(beer);

            //act
            ctx.SubmitChanges();

            //assert
            Assert.AreEqual(1, ctx.TrackedCount);
        }
        public void SubmitChanges_Removes_Document_From_Modified_List()
        {
            //arrange
            var bucket = new Mock<IBucket>();
            bucket.Setup(x => x.Configuration).Returns(new ClientConfiguration().BucketConfigs.First().Value);

            var ctx = new BucketContext(bucket.Object);
            ctx.BeginChangeTracking();

            var beer = new Beer
            {
                Name = "doc1" //key field
            };

            ctx.Save(beer);

            //act
            ctx.SubmitChanges();

            //assert
            Assert.AreEqual(0, ctx.ModifiedCount);
        }
        public void Save_When_Write_Is_Succesful_Return_Success()
        {
            //arrange
            var beer = new Beer();
            var bucket = new Mock<IBucket>();
            var result = new Mock<IOperationResult<Beer>>();
            result.Setup(x => x.Status).Returns(ResponseStatus.Success);
            result.Setup(x => x.Success).Returns(true);
            bucket.Setup(x => x.Upsert(It.IsAny<string>(), It.IsAny<Beer>())).Returns(result.Object);
            var ctx = new BucketContext(bucket.Object);

            //act
            ctx.Save(beer);

            //assert - does not throw exception
        }
        public void Save_When_Write_Is_Not_Succesful_Throw_CouchbaseWriteException()
        {
            //arrange
            var beer = new Beer();
            var bucket = new Mock<IBucket>();
            var result = new Mock<IOperationResult<Beer>>();
            result.Setup(x => x.Success).Returns(false);
            bucket.Setup(x => x.Upsert(It.IsAny<string>(), It.IsAny<Beer>())).Returns(result.Object);
            var ctx = new BucketContext(bucket.Object);

            //act
            Assert.Throws<CouchbaseWriteException>(() => ctx.Save(beer));
        }
        public void Save_WhenChangeTrackingEnabled_AddsToTrackedList()
        {
            //arrange
            var bucket = new Mock<IBucket>();
            bucket.Setup(x => x.Configuration).Returns(new ClientConfiguration().BucketConfigs.First().Value);

            var ctx = new BucketContext(bucket.Object);
            ctx.BeginChangeTracking();

            var beer = new Beer
            {
                Name = "doc1" //key field
            };

            ctx.Save(beer);

            Assert.AreEqual(1, ctx.TrackedCount);
        }
        public void SubmitChanges_ThenQuery_ReturnsChanges()
        {
            var bucket = ClusterHelper.GetBucket("beer-sample");

            var clusterVersion = VersionProvider.Current.GetVersion(bucket);
            if (clusterVersion < FeatureVersions.ReadYourOwnWrite)
            {
                Assert.Ignore("Cluster does not support RYOW, test skipped.");
            }

            var db = new BucketContext(bucket);
            var testValue = new Random().Next(0, 100000);
            var testKey = "SubmitChanges_ThenQuery_ReturnsChanges_" + testValue;

            var testDocument = new Sample
            {
                Id = testKey,
                Value = testValue
            };

            db.BeginChangeTracking();
            db.Save(testDocument);
            db.SubmitChanges();

            try
            {
                Assert.NotNull(db.MutationState);

                var result = db.Query<Sample>()
                    .ConsistentWith(db.MutationState)
                    .FirstOrDefault(p => p.Id == testKey);

                Assert.NotNull(result);
                Assert.AreEqual(testValue, result.Value);
            }
            finally
            {
                db.Remove(testDocument);
            }
        }