Example #1
0
        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();
        }
Example #2
0
        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);
        }
Example #3
0
        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);
            }
        }
Example #5
0
        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)
            });
        }