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); }
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); }
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")); }
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)); }
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); }
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); }
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 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 }
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_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 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); } }