public async Task AddAsync_Object_InsertsItem() { // Arrange var mockClient = new Mock <IMobileServiceClient>(MockBehavior.Strict); var mockTable = new Mock <IMobileServiceTable>(MockBehavior.Strict); var item = new { id = "abc123", text = "123abc" }; mockTable .Setup(m => m.InsertAsync(It.Is <JObject>(j => j["id"].ToString() == "abc123" && j["text"].ToString() == "123abc"))) .Returns(Task.FromResult(JToken.Parse("{}"))); mockClient .Setup(m => m.GetTable("Item")) .Returns(mockTable.Object); var context = new EasyTableContext { ResolvedTableName = "Item", Client = mockClient.Object, }; IAsyncCollector <object> collector = new EasyTableAsyncCollector <object>(context); // Act await collector.AddAsync(item); // Assert mockClient.VerifyAll(); mockTable.VerifyAll(); }
public async Task SetAsync_Poco_Throws_IfIdChanges() { // Arrange var mockClient = new Mock <IMobileServiceClient>(MockBehavior.Strict); TodoItem original = new TodoItem { Id = "abc123", }; TodoItem updated = new TodoItem { Id = "def456", }; var context = new EasyTableContext { Client = mockClient.Object, }; var originalJson = JObject.FromObject(original); // Act var ex = await Assert.ThrowsAsync <InvalidOperationException>( () => EasyTableItemValueBinder <TodoItem> .SetValueInternalAsync(originalJson, updated, context)); // Assert Assert.Equal("Cannot update the 'Id' property.", ex.Message); mockClient.Verify(); }
public void ResolveId_CreatesExpectedString(string token, string expected) { // Arrange ParameterInfo parameter = EasyTableTestHelper.GetValidInputItemParameters().First(); var easyTableContext = new EasyTableContext() { ResolvedId = token }; var bindingContract = new Dictionary <string, Type>(); bindingContract.Add("MyItemId", typeof(string)); var bindingProviderContext = new BindingProviderContext(parameter, bindingContract, CancellationToken.None); var binding = new EasyTableItemBinding(parameter, easyTableContext, bindingProviderContext); var bindingData = new Dictionary <string, object>(); bindingData.Add("MyItemId", "abc123"); // Act var resolved = binding.ResolveId(bindingData); // Assert Assert.Equal(expected, resolved); }
public async Task SetAsync_JObject_Throws_IfIdChanges() { // Arrange var mockClient = new Mock <IMobileServiceClient>(MockBehavior.Strict); JObject original = new JObject(); original["id"] = "abc123"; original["data"] = "hello"; JObject updated = original.DeepClone() as JObject; original["id"] = "def456"; var context = new EasyTableContext { Client = mockClient.Object, ResolvedTableName = "TodoItem" }; // Act var ex = await Assert.ThrowsAsync <InvalidOperationException>( () => EasyTableItemValueBinder <JObject> .SetValueInternalAsync(original, updated, context)); // Assert Assert.Equal("Cannot update the 'Id' property.", ex.Message); mockClient.Verify(); }
public async Task AddAsync_JObject_InsertsItem() { // Arrange var mockClient = new Mock <IMobileServiceClient>(MockBehavior.Strict); var mockTable = new Mock <IMobileServiceTable>(MockBehavior.Strict); var item = new JObject(); mockTable .Setup(m => m.InsertAsync(item)) .Returns(Task.FromResult(item as JToken)); mockClient .Setup(m => m.GetTable("TodoItem")) .Returns(mockTable.Object); var context = new EasyTableContext { Client = mockClient.Object, ResolvedTableName = "TodoItem" }; IAsyncCollector <JObject> collector = new EasyTableAsyncCollector <JObject>(context); // Act await collector.AddAsync(item); // Assert mockClient.VerifyAll(); mockTable.VerifyAll(); }
public async Task SetAsync_Poco_SkipsUpdate_IfSame() { // Arrange var mockClient = new Mock <IMobileServiceClient>(MockBehavior.Strict); TodoItem original = new TodoItem { Id = "abc123", Text = "hello" }; TodoItem updated = new TodoItem { Id = "abc123", Text = "hello" }; var context = new EasyTableContext { Client = mockClient.Object, }; JObject clonedOrig = EasyTableItemValueBinder <object> .CloneItem(original); // Act await EasyTableItemValueBinder <TodoItem> .SetValueInternalAsync(clonedOrig, updated, context); // Assert // nothing on the client should be called mockClient.VerifyAll(); }
public async Task AddAsync_Poco_InsertsItem() { // Arrange var mockClient = new Mock <IMobileServiceClient>(MockBehavior.Strict); var mockTable = new Mock <IMobileServiceTable <TodoItem> >(MockBehavior.Strict); var item = new TodoItem(); mockTable .Setup(m => m.InsertAsync(item)) .Returns(Task.FromResult(item)); mockClient .Setup(m => m.GetTable <TodoItem>()) .Returns(mockTable.Object); var context = new EasyTableContext { Client = mockClient.Object, }; IAsyncCollector <TodoItem> collector = new EasyTableAsyncCollector <TodoItem>(context); // Act await collector.AddAsync(item); // Assert mockClient.VerifyAll(); mockTable.VerifyAll(); }
private static IAsyncCollector <T> CreateCollector <T>(HttpMessageHandler handler, string tableName) { var context = new EasyTableContext { ResolvedTableName = tableName, Client = new MobileServiceClient("https://someuri", handler) }; return(new EasyTableAsyncCollector <T>(context)); }
public async Task BindAsync_Returns_CorrectValueProvider(ParameterInfo parameter, Type expectedType) { // Arrange var easyTableContext = new EasyTableContext(); var binding = new EasyTableTableBinding(parameter, easyTableContext); // Act var valueProvider = await binding.BindAsync(null, null); // Assert Assert.Equal(expectedType, valueProvider.GetType()); }
public async Task BindAsync_Returns_CorrectValueProvider(ParameterInfo parameter, Type expectedType) { // Arrange var easyTableContext = new EasyTableContext(); var bindingProviderContext = new BindingProviderContext(parameter, null, CancellationToken.None); var binding = new EasyTableItemBinding(parameter, easyTableContext, bindingProviderContext); // Act var valueProvider = await binding.BindAsync("abc123", null); // Assert Assert.Equal(expectedType, valueProvider.GetType()); }
[InlineData(typeof(IMobileServiceTable <object>), "Item", false)] // object only works for output binding public void IsMobileServiceTableType_CorrectlyValidates(Type tableType, string tableName, bool expected) { // Arrange var context = new EasyTableContext { ResolvedTableName = tableName }; // Act bool result = EasyTableTableBinding.IsMobileServiceTableType(tableType, context); // Assert Assert.Equal(expected, result); }
[InlineData(typeof(IMobileServiceTable <object>), "Item", false)] // object only works for output binding public void IsValidQueryType_ValidatesCorrectly(Type parameterType, string tableName, bool expected) { // Arrange var context = new EasyTableContext { ResolvedTableName = tableName }; // Act bool result = EasyTableQueryBinding.IsValidQueryType(parameterType, context); // Assert Assert.Equal(expected, result); }
public void IsValidEasyTableType_CorrectlyEvaluates(Type typeToEvaluate, string tableName, bool expected) { // Arrange var context = new EasyTableContext { ResolvedTableName = tableName }; // Act bool result = EasyTableUtility.IsValidItemType(typeToEvaluate, context); // Assert Assert.Equal(expected, result); }
public void GetValue_ReturnsCorrectType() { var parameter = EasyTableTestHelper.GetValidInputQueryParameters().Single(); var context = new EasyTableContext() { Client = new MobileServiceClient("http://someuri") }; var provider = new EasyTableQueryValueProvider<TodoItem>(parameter, context); var value = provider.GetValue(); Assert.True(typeof(IMobileServiceTableQuery<TodoItem>).IsAssignableFrom(value.GetType())); }
public async Task BindAsync_Returns_CorrectValueProvider() { // Arrange var parameter = EasyTableTestHelper.GetValidInputQueryParameters().Single(); var expectedType = typeof(EasyTableQueryValueProvider <TodoItem>); var easyTableContext = new EasyTableContext(); var binding = new EasyTableQueryBinding(parameter, easyTableContext); // Act var valueProvider = await binding.BindAsync(null, null); // Assert Assert.Equal(expectedType, valueProvider.GetType()); }
public void IsValidCollectorType_ValidatesCorrectly(Type parameterType, string tableName, bool isOutParameter, bool expected) { // Arrange Type typeToTest = isOutParameter ? parameterType.MakeByRefType() : parameterType; var context = new EasyTableContext { ResolvedTableName = tableName }; // Act bool result = EasyTableOutputBindingProvider.IsValidCollectorType(typeToTest, context); // Assert Assert.Equal(expected, result); }
public void GetValue_WithTableName_ReturnsCorrectType() { var parameter = EasyTableTestHelper.GetValidInputQueryParameters().Single(); var context = new EasyTableContext() { Client = new MobileServiceClient("http://someuri"), ResolvedTableName = "SomeOtherTable" }; var provider = new EasyTableQueryValueProvider<TodoItem>(parameter, context); var value = provider.GetValue() as IMobileServiceTableQuery<TodoItem>; Assert.NotNull(value); Assert.Equal("SomeOtherTable", value.Table.TableName); }
private static IValueBinder CreatePocoBinder(ParameterInfo parameter, out Mock <IMobileServiceClient> mockClient, out Mock <IMobileServiceTable <TodoItem> > mockTable) { mockClient = new Mock <IMobileServiceClient>(MockBehavior.Strict); mockTable = new Mock <IMobileServiceTable <TodoItem> >(MockBehavior.Strict); mockClient .Setup(m => m.GetTable <TodoItem>()) .Returns(mockTable.Object); var context = new EasyTableContext { Client = mockClient.Object }; return(new EasyTableItemValueBinder <TodoItem>(parameter, context, "abc123")); }
private static IValueBinder CreateJObjectBinder(ParameterInfo parameter, out Mock <IMobileServiceClient> mockClient, out Mock <IMobileServiceTable> mockTable) { mockClient = new Mock <IMobileServiceClient>(MockBehavior.Strict); mockTable = new Mock <IMobileServiceTable>(MockBehavior.Strict); mockClient .Setup(m => m.GetTable(It.IsAny <string>())) .Returns(mockTable.Object); var context = new EasyTableContext { Client = mockClient.Object, ResolvedTableName = "TodoItem" }; return(new EasyTableItemValueBinder <JObject>(parameter, context, "abc123")); }
public void GetValue_Poco_QueriesCorrectTable() { // Arrange var handler = new TestHandler("{}"); var context = new EasyTableContext { Client = new MobileServiceClient("https://someuri", handler) }; var parameter = EasyTableTestHelper.GetInputParameter <TodoItem>(); var binder = new EasyTableItemValueBinder <TodoItem>(parameter, context, "abc123"); // Act var value = binder.GetValue(); // Assert Assert.NotNull(value); Assert.Equal("https://someuri/tables/TodoItem/abc123", handler.IssuedRequest.RequestUri.ToString()); }
public async Task SetValue_Poco_UpdatesCorrectTable() { // Arrange var handler = new TestHandler("{}"); var context = new EasyTableContext { Client = new MobileServiceClient("https://someuri", handler) }; var original = JObject.Parse("{'Id':'abc123'}"); var updated = new TodoItem { Id = "abc123", Text = "updated" }; // Act await EasyTableItemValueBinder <TodoItem> .SetValueInternalAsync(original, updated, context); // Assert Assert.Equal("https://someuri/tables/TodoItem/abc123", handler.IssuedRequest.RequestUri.ToString()); }
public async Task SetAsync_Poco_Updates_IfPropertyChanges() { // Arrange var mockClient = new Mock <IMobileServiceClient>(MockBehavior.Strict); var mockTable = new Mock <IMobileServiceTable <TodoItem> >(MockBehavior.Strict); TodoItem original = new TodoItem { Id = "abc123", Text = "hello" }; TodoItem updated = new TodoItem { Id = "abc123", Text = "goodbye" }; mockTable .Setup(m => m.UpdateAsync(updated)) .Returns(Task.FromResult <TodoItem>(null)); mockClient .Setup(m => m.GetTable <TodoItem>()) .Returns(mockTable.Object); var context = new EasyTableContext { Client = mockClient.Object, }; JObject clonedOrig = EasyTableItemValueBinder <object> .CloneItem(original); // Act await EasyTableItemValueBinder <TodoItem> .SetValueInternalAsync(clonedOrig, updated, context); // Assert mockClient.VerifyAll(); mockTable.VerifyAll(); }
public async Task SetAsync_JObject_Updates_IfPropertyChanges() { // Arrange var mockClient = new Mock <IMobileServiceClient>(MockBehavior.Strict); var mockTable = new Mock <IMobileServiceTable>(MockBehavior.Strict); JObject original = new JObject(); original["id"] = "abc123"; original["data"] = "hello"; JObject updated = original.DeepClone() as JObject; original["data"] = "goodbye"; mockTable .Setup(m => m.UpdateAsync(updated)) .Returns(Task.FromResult <JToken>(null)); mockClient .Setup(m => m.GetTable("TodoItem")) .Returns(mockTable.Object); var context = new EasyTableContext { Client = mockClient.Object, ResolvedTableName = "TodoItem" }; // Act await EasyTableItemValueBinder <JObject> .SetValueInternalAsync(original, updated, context); // Assert mockClient.VerifyAll(); mockTable.VerifyAll(); }
public async Task SetAsync_JObject_SkipsUpdate_IfSame() { // Arrange var mockClient = new Mock <IMobileServiceClient>(MockBehavior.Strict); JObject original = new JObject(); original["id"] = "abc123"; original["data"] = "hello"; JObject updated = original.DeepClone() as JObject; var context = new EasyTableContext { Client = mockClient.Object, ResolvedTableName = "TodoItem" }; // Act await EasyTableItemValueBinder <JObject> .SetValueInternalAsync(original, updated, context); // Assert mockClient.VerifyAll(); }