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); }
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")); }
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); }
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); }
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 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); }
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); }
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()); }
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); }
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); }
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); }
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); }
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); } }
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); }
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); }
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); }
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); }
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_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_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 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); }
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); }
protected override void BeginUow() { Bucket = _cluster.OpenBucket(); Session = new BucketContext(Bucket); Session.BeginChangeTracking(); }
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); }
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); }
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); }
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); } }
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); }
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); }