public void TryGetId_CaseSensitive(string idKey, bool expected) { // Arrange var token = JObject.Parse(string.Format("{{{0}:'abc123'}}", idKey)); // Act bool result = CosmosDBItemValueBinder <object> .TryGetId(token, out string id); // Assert Assert.Equal(expected, result); if (result) { Assert.Equal("abc123", id); } else { Assert.Null(id); } }
public async Task SetAsync_Updates_IfPropertyChanges() { // Arrange var mockService = new Mock <ICosmosDBService>(MockBehavior.Strict); Item original = new Item { Id = "abc123", Text = "hello" }; Item updated = new Item { Id = "abc123", Text = "goodbye" }; mockService .Setup(m => m.ReplaceDocumentAsync(_expectedUri, updated)) .ReturnsAsync(new Document()); CosmosDBAttribute attribute = new CosmosDBAttribute(DatabaseName, CollectionName) { Id = Id }; var context = new CosmosDBContext { Service = mockService.Object, ResolvedAttribute = attribute }; JObject clonedOrig = CosmosDBItemValueBinder <object> .CloneItem(original); // Act await CosmosDBItemValueBinder <Item> .SetValueInternalAsync(clonedOrig, updated, context); // Assert mockService.VerifyAll(); }
public async Task SetAsync_Poco_SkipsUpdate_IfSame() { // Arrange var mockService = new Mock <ICosmosDBService>(MockBehavior.Strict); Item original = new Item { Id = "abc123", Text = "hello" }; Item updated = new Item { Id = "abc123", Text = "hello" }; CosmosDBAttribute attribute = new CosmosDBAttribute(DatabaseName, CollectionName) { Id = Id }; var context = new CosmosDBContext { Service = mockService.Object, ResolvedAttribute = attribute }; JObject clonedOrig = CosmosDBItemValueBinder <object> .CloneItem(original); // Act await CosmosDBItemValueBinder <Item> .SetValueInternalAsync(clonedOrig, updated, context); // Assert // nothing on the client should be called mockService.VerifyAll(); }
public async Task SetAsync_Poco_Throws_IfIdChanges() { // Arrange var mockService = new Mock <ICosmosDBService>(MockBehavior.Strict); Item original = new Item { Id = "abc123", }; Item updated = new Item { Id = "def456", }; CosmosDBAttribute attribute = new CosmosDBAttribute(DatabaseName, CollectionName) { Id = Id }; var context = new CosmosDBContext { Service = mockService.Object, ResolvedAttribute = attribute }; var originalJson = JObject.FromObject(original); // Act var ex = await Assert.ThrowsAsync <InvalidOperationException>( () => CosmosDBItemValueBinder <Item> .SetValueInternalAsync(originalJson, updated, context)); // Assert Assert.Equal("Cannot update the 'Id' property.", ex.Message); mockService.Verify(); }