public void CreateContext_AttributeUri_Wins(string attributeUriString, string configUriString, string expectedUriString) { // Arrange var attribute = new EasyTableAttribute { MobileAppUri = attributeUriString }; var mockFactory = new Mock <IMobileServiceClientFactory>(); mockFactory .Setup(f => f.CreateClient(new Uri(expectedUriString), null)) .Returns <IMobileServiceClient>(null); var config = new EasyTablesConfiguration { MobileAppUri = new Uri(configUriString), ClientFactory = mockFactory.Object }; // Act EasyTableAttributeBindingProvider.CreateContext(config, attribute, null); // Assert mockFactory.VerifyAll(); }
public void CreateContext_AttributeKey_Wins(string attributeKey, string configKey, string expectedKey) { // Arrange var attribute = new EasyTableAttribute { ApiKey = attributeKey }; var handler = new TestHandler(); var config = new EasyTablesConfiguration { MobileAppUri = new Uri("https://someuri"), ApiKey = configKey, ClientFactory = new TestMobileServiceClientFactory(handler) }; // Act var context = EasyTableAttributeBindingProvider.CreateContext(config, attribute, null); // Assert // Issue a request to check the header that's being sent. context.Client.GetTable("Test").LookupAsync("123"); IEnumerable <string> values = null; string actualKey = null; if (handler.IssuedRequest.Headers.TryGetValues("ZUMO-API-KEY", out values)) { actualKey = values.Single(); } Assert.Equal(expectedKey, actualKey); }
public override async Task BindAsync(BindingContext context) { EasyTableAttribute attribute = new EasyTableAttribute { TableName = TableName, Id = Id, MobileAppUri = MobileAppUri, ApiKey = ApiKey }; RuntimeBindingContext runtimeContext = new RuntimeBindingContext(attribute); if (Access == FileAccess.Read && _bindingDirection == BindingDirection.In) { JObject input = await context.Binder.BindAsync <JObject>(runtimeContext); if (input != null) { byte[] byteArray = Encoding.UTF8.GetBytes(input.ToString()); using (MemoryStream stream = new MemoryStream(byteArray)) { stream.CopyTo(context.Value); } } } else if (Access == FileAccess.Write && _bindingDirection == BindingDirection.Out) { await BindAsyncCollectorAsync <JObject>(context.Value, context.Binder, runtimeContext); } }
public override async Task BindAsync(BindingContext context) { EasyTableAttribute attribute = new EasyTableAttribute { TableName = TableName, Id = Id, MobileAppUri = MobileAppUri, ApiKey = ApiKey }; RuntimeBindingContext runtimeContext = new RuntimeBindingContext(attribute); if (Access == FileAccess.Read && _bindingDirection == BindingDirection.In) { JObject input = await context.Binder.BindAsync<JObject>(runtimeContext); if (input != null) { byte[] byteArray = Encoding.UTF8.GetBytes(input.ToString()); using (MemoryStream stream = new MemoryStream(byteArray)) { stream.CopyTo(context.Value); } } } else if (Access == FileAccess.Write && _bindingDirection == BindingDirection.Out) { await BindAsyncCollectorAsync<JObject>(context.Value, context.Binder, runtimeContext); } }
public void CreateContext_ResolvesNames() { // Arrange var resolver = new TestNameResolver(); resolver.Values.Add("MyTableName", "TestTable"); resolver.Values.Add("MyId", "abc123"); var attribute = new EasyTableAttribute { TableName = "%MyTableName%", Id = "%MyId%" }; // Act var context = EasyTableAttributeBindingProvider.CreateContext(_easyTableConfig, attribute, resolver); // Assert Assert.Equal("TestTable", context.ResolvedTableName); Assert.Equal("abc123", context.ResolvedId); }
public Task <IBinding> TryCreateAsync(BindingProviderContext context) { if (context == null) { throw new ArgumentNullException("context"); } ParameterInfo parameter = context.Parameter; EasyTableAttribute attribute = parameter.GetEasyTableAttribute(); if (attribute == null) { return(Task.FromResult <IBinding>(null)); } if (_easyTableConfig.MobileAppUri == null && string.IsNullOrEmpty(attribute.MobileAppUri)) { throw new InvalidOperationException( string.Format(CultureInfo.CurrentCulture, "The Easy Tables Uri must be set either via a '{0}' app setting, via the EasyTableAttribute.MobileAppUri property or via EasyTableConfiguration.MobileAppUri.", EasyTablesConfiguration.AzureWebJobsMobileAppUriName)); } EasyTableContext easyTableContext = CreateContext(_easyTableConfig, attribute, _nameResolver); IBindingProvider compositeProvider = new CompositeBindingProvider(new IBindingProvider[] { new EasyTableOutputBindingProvider(_jobHostConfig, easyTableContext), new EasyTableQueryBinding(context.Parameter, easyTableContext), new EasyTableTableBinding(parameter, easyTableContext), new EasyTableItemBinding(parameter, easyTableContext, context) }); return(compositeProvider.TryCreateAsync(context)); }
internal static EasyTableContext CreateContext(EasyTablesConfiguration config, EasyTableAttribute attribute, INameResolver resolver) { Uri resolvedMobileAppUri = config.MobileAppUri; string resolvedApiKey = config.ApiKey; // Override the config Uri with value from the attribute, if present. if (!string.IsNullOrEmpty(attribute.MobileAppUri)) { string uriString = EasyTablesConfiguration.GetSettingFromConfigOrEnvironment(attribute.MobileAppUri); resolvedMobileAppUri = new Uri(uriString); } // If the attribute specifies an empty string ApiKey, set the ApiKey to null. if (attribute.ApiKey == string.Empty) { resolvedApiKey = null; } else if (attribute.ApiKey != null) { resolvedApiKey = EasyTablesConfiguration.GetSettingFromConfigOrEnvironment(attribute.ApiKey); } return(new EasyTableContext { Config = config, Client = CreateMobileServiceClient(config.ClientFactory, resolvedMobileAppUri, resolvedApiKey), ResolvedId = Resolve(attribute.Id, resolver), ResolvedTableName = Resolve(attribute.TableName, resolver) }); }