コード例 #1
0
        public void BeginChangeTracking_DoesNotClear_Modified_List()
        {
            var db = new BucketContext(ClusterHelper.GetBucket("beer-sample"));

            db.BeginChangeTracking();

            var query = from x in db.Query<Beer>()
                        where x.Type == "beer"
                        select x;

            db.BeginChangeTracking();

            var context = db as IChangeTrackableContext;

            Assert.AreEqual(0, context.ModifiedCount);

            var brewery = query.First();
            brewery.Abv = 10;

            Assert.AreEqual(1, context.ModifiedCount);

            db.BeginChangeTracking();

            Assert.AreEqual(1, context.ModifiedCount);
        }
コード例 #2
0
        public ActionResult Edit(int id, AirlineModel model)
        {
            // Begin tracking changes
            _db.BeginChangeTracking();

            // Query must execute after call to BeginChangeTracking()
            var query = from p in _db.Query <Airline>()
                        where p.Id == id
                        select p;

            var airline = query.FirstOrDefault();

            if (airline == null)
            {
                return(HttpNotFound());
            }

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

            // Make changes to document(s) and submit them
            airline.Name     = model.Name;
            airline.Callsign = model.Callsign;
            _db.SubmitChanges();

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

            return(RedirectToAction("Index"));
        }
コード例 #3
0
        public void BeginChangeTracking_DoesNotClear_Modified_List()
        {
            var db = new BucketContext(ClusterHelper.GetBucket("beer-sample"));

            db.BeginChangeTracking();

            var query = from x in db.Query <Beer>()
                        where x.Type == "beer"
                        select x;

            db.BeginChangeTracking();

            var context = db as IChangeTrackableContext;

            Assert.AreEqual(0, context.ModifiedCount);

            var brewery = query.First();

            brewery.Abv = 10;

            Assert.AreEqual(1, context.ModifiedCount);

            db.BeginChangeTracking();

            Assert.AreEqual(1, context.ModifiedCount);
        }
コード例 #4
0
        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);
        }
コード例 #5
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();
        }
コード例 #6
0
        public void BeginChangeTracking_CalledTwiceThenEndChangeTracking_ChangTrackingEnabledIsTrue()
        {
            //arrange
            var bucket = new Mock <IBucket>();

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

            var ctx = new BucketContext(bucket.Object);

            //act
            ctx.BeginChangeTracking();
            ctx.BeginChangeTracking();
            ctx.EndChangeTracking();

            //assert
            Assert.IsTrue(ctx.ChangeTrackingEnabled);
        }
コード例 #7
0
        public void SubmitChanges_ModifiedDoc_NoConsistencyCheck_DoesntPassCas()
        {
            //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.Upsert(It.IsAny <string>(), It.IsAny <object>(), It.IsAny <ulong>()))
            .Returns(fakeResult.Object);

            var ctx = new BucketContext(bucket.Object);

            ctx.BeginChangeTracking();

            var metadata = new DocumentMetadata()
            {
                Cas = 100,
                Id  = "Test"
            };

            var beer = new Mock <Beer>();

            beer.SetupAllProperties();

            var trackedDoc = beer.As <ITrackedDocumentNode>();

            trackedDoc.Setup(m => m.Metadata).Returns(metadata);
            trackedDoc.Setup(m => m.IsDeleted).Returns(false);
            trackedDoc.Setup(m => m.IsDirty).Returns(true);

            ((IChangeTrackableContext)ctx).Track(beer.Object);
            ((IChangeTrackableContext)ctx).Modified(beer.Object);

            //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.Upsert(It.IsAny <string>(), It.IsAny <object>(), It.IsAny <ulong>()), Times.Never);
        }
コード例 #8
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());
        }
コード例 #9
0
        public void Query_EnableProxyGeneration_ReturnsProxyBeer()
        {
            var db = new BucketContext(ClusterHelper.GetBucket("beer-sample"));

            db.BeginChangeTracking();

            var query = from x in db.Query <Beer>()
                        where x.Type == "beer"
                        select x;

            var beer = query.First();

            // ReSharper disable once SuspiciousTypeConversion.Global
            var status = beer as ITrackedDocumentNode;

            Assert.NotNull(status);
            Assert.IsFalse(status.IsDirty);
        }
コード例 #10
0
        public void GetDocumentId_WhenChangeTrackingEnabled_ProxyUses__idFieldForKey()
        {
            var document = (Beer)DocumentProxyManager.Default.CreateProxy(typeof(Beer));

            ((ITrackedDocumentNode)document).Metadata.Id = "thekey";

            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 key = ctx.GetDocumentId(document);

            Assert.AreEqual("thekey", key);
        }
コード例 #11
0
        public void SubmitChanges_WhenDocsAreModified_DocumentIsMutated()
        {
            var db = new BucketContext(ClusterHelper.GetBucket("beer-sample"));

            var query = from x in db.Query <Beer>()
                        where x.Type == "beer"
                        select x;

            db.BeginChangeTracking();

            var beer = query.First();

            beer.Abv = beer.Abv + 1;

            db.SubmitChanges();

            var doc = ClusterHelper.GetBucket("beer-sample").GetDocument <Beer>(((ITrackedDocumentNode)beer).Metadata.Id);

            Assert.AreEqual(beer.Abv, doc.Content.Abv);
        }
コード例 #12
0
        public void Query_EnableProxyGeneration_ReturnsProxyBeerWithId()
        {
            var db = new BucketContext(ClusterHelper.GetBucket("beer-sample"));

            db.BeginChangeTracking();

            const string documentId = "21st_amendment_brewery_cafe-21a_ipa";

            var query = from x in db.Query <Beer>().UseKeys(new[] { documentId })
                        where x.Type == "beer"
                        select x;

            var beer = query.First();

            // ReSharper disable once SuspiciousTypeConversion.Global
            var status = beer as ITrackedDocumentNode;

            Assert.NotNull(status);
            Assert.AreEqual(documentId, status.Metadata.Id);
        }
コード例 #13
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);
        }
コード例 #14
0
        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);
            }
        }
コード例 #15
0
        public void Query_EnableProxyGenerationSetAddress_FlagAsDirty()
        {
            var db = new BucketContext(ClusterHelper.GetBucket("beer-sample"));

            db.BeginChangeTracking();

            var query = from x in db.Query <Brewery>()
                        where x.Type == "brewery" && x.Address.Any()
                        select x;

            var brewery   = query.First();
            var addresses = brewery.Address;

            addresses[0] = "Test";

            // ReSharper disable once SuspiciousTypeConversion.Global
            var status = addresses as ITrackedDocumentNode;

            Assert.NotNull(status);
            Assert.IsTrue(status.IsDirty);
        }
コード例 #16
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);
        }
コード例 #17
0
        public void Save_Adds_New_Document_To_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);

            //assert
            Assert.AreEqual(1, ctx.ModifiedCount);
        }
コード例 #18
0
        public void Query_EnableProxyGenerationChangesInSubDocuments_FlagAsDirty()
        {
            var db = new BucketContext(ClusterHelper.GetBucket("beer-sample"));

            db.BeginChangeTracking();

            var query = from x in db.Query <Brewery>()
                        where x.Type == "brewery" && N1QlFunctions.IsValued(x.Geo)
                        select x;

            var beer = query.First();

            // ReSharper disable once SuspiciousTypeConversion.Global
            var status = beer as ITrackedDocumentNode;

            Assert.NotNull(status);
            Assert.False(status.IsDirty);

            beer.Geo.Latitude = 90M;

            Assert.True(status.IsDirty);
        }
コード例 #19
0
        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);
        }
コード例 #20
0
        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);
        }
コード例 #21
0
        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);
        }
コード例 #22
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);
        }
コード例 #23
0
        public void GetDocumentId_WhenChangeTrackingEnabled_ProxyUses__idFieldForKey()
        {
            var document = (Beer)DocumentProxyManager.Default.CreateProxy(typeof(Beer));

            ((ITrackedDocumentNode) document).Metadata.Id = "thekey";

            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 key = ctx.GetDocumentId(document);

            Assert.AreEqual("thekey", key);
        }
コード例 #24
0
        public void EndChangeTracking_ChangeTrackingEnabled_Is_False()
        {
            //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();

            //act
            ctx.EndChangeTracking();

            //assert
            Assert.IsFalse(ctx.ChangeTrackingEnabled);
        }
コード例 #25
0
ファイル: CouchbaseUnitOfWork.cs プロジェクト: xgame92/Stove
 protected override void BeginUow()
 {
     Bucket  = _cluster.OpenBucket();
     Session = new BucketContext(Bucket);
     Session.BeginChangeTracking();
 }
コード例 #26
0
        public void Query_EnableProxyGenerationChangesInSubDocuments_FlagAsDirty()
        {
            var db = new BucketContext(ClusterHelper.GetBucket("beer-sample"));

            db.BeginChangeTracking();

            var query = from x in db.Query<Brewery>()
                        where x.Type == "brewery" && N1QlFunctions.IsValued(x.Geo)
                        select x;

            var beer = query.First();

            // ReSharper disable once SuspiciousTypeConversion.Global
            var status = beer as ITrackedDocumentNode;

            Assert.NotNull(status);
            Assert.False(status.IsDirty);

            beer.Geo.Latitude = 90M;

            Assert.True(status.IsDirty);
        }
コード例 #27
0
        public void Query_EnableProxyGeneration_ReturnsProxyBeer()
        {
            var db = new BucketContext(ClusterHelper.GetBucket("beer-sample"));

            db.BeginChangeTracking();

            var query = from x in db.Query<Beer>()
                        where x.Type == "beer"
                        select x;

            var beer = query.First();

            // ReSharper disable once SuspiciousTypeConversion.Global
            var status = beer as ITrackedDocumentNode;

            Assert.NotNull(status);
            Assert.IsFalse(status.IsDirty);
        }
コード例 #28
0
        public void Query_EnableProxyGeneration_ReturnsProxyBeerWithId()
        {
            var db = new BucketContext(ClusterHelper.GetBucket("beer-sample"));
            db.BeginChangeTracking();

            const string documentId = "21st_amendment_brewery_cafe-21a_ipa";

            var query = from x in db.Query<Beer>().UseKeys(new[] { documentId })
                        where x.Type == "beer"
                        select x;

            var beer = query.First();

            // ReSharper disable once SuspiciousTypeConversion.Global
            var status = beer as ITrackedDocumentNode;

            Assert.NotNull(status);
            Assert.AreEqual(documentId, status.Metadata.Id);
        }
コード例 #29
0
        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);
            }
        }
コード例 #30
0
        public void SubmitChanges_WhenDocsAreModified_DocumentIsMutated()
        {
            var db = new BucketContext(ClusterHelper.GetBucket("beer-sample"));

            var query = from x in db.Query<Beer>()
                        where x.Type == "beer"
                        select x;

            db.BeginChangeTracking();

            var beer = query.First();

            beer.Abv = beer.Abv+1;

            db.SubmitChanges();

            var doc = ClusterHelper.GetBucket("beer-sample").GetDocument<Beer>(((ITrackedDocumentNode) beer).Metadata.Id);
            Assert.AreEqual(beer.Abv, doc.Content.Abv);
        }
コード例 #31
0
        public void Query_EnableProxyGenerationAddAddress_FlagAsDirty()
        {
            var db = new BucketContext(ClusterHelper.GetBucket("beer-sample"));

            db.BeginChangeTracking();

            var query = from x in db.Query<Brewery>()
                        where x.Type == "brewery" && x.Address.Any()
                        select x;

            var brewery = query.First();
            var addresses = brewery.Address;

            addresses.Add("Test");

            // ReSharper disable once SuspiciousTypeConversion.Global
            var status = addresses as ITrackedDocumentNode;

            Assert.NotNull(status);
            Assert.IsTrue(status.IsDirty);
        }