/// <summary> /// Gets the <see cref="IETagHandler"/> from the configuration. /// </summary> /// <param name="configuration">The server configuration.</param> /// <returns>The <see cref="IETagHandler"/> for the configuration.</returns> public static IETagHandler GetETagHandler(this HttpConfiguration configuration) { if (configuration == null) { throw Error.ArgumentNull("configuration"); } object handler; if (!configuration.Properties.TryGetValue(ETagHandlerKey, out handler)) { IETagHandler defaultETagHandler = new DefaultODataETagHandler(); configuration.SetETagHandler(defaultETagHandler); return defaultETagHandler; } if (handler == null) { throw Error.InvalidOperation(SRResources.NullETagHandler); } IETagHandler etagHandler = handler as IETagHandler; if (etagHandler == null) { throw Error.InvalidOperation(SRResources.InvalidETagHandler, handler.GetType()); } return etagHandler; }
public void DefaultODataETagHandler_RoundTrips(object value) { // Arrange DefaultODataETagHandler handler = new DefaultODataETagHandler(); Dictionary<string, object> properties = new Dictionary<string, object> { { "Any", value } }; // Act EntityTagHeaderValue etagHeaderValue = handler.CreateETag(properties); IList<object> values = handler.ParseETag(etagHeaderValue).Select(p => p.Value).ToList(); // Assert Assert.True(etagHeaderValue.IsWeak); Assert.Equal(1, values.Count); Assert.Equal(value, values[0]); }
public void DefaultODataETagHandler_RoundTrips(object value) { // Arrange DefaultODataETagHandler handler = new DefaultODataETagHandler(); Dictionary <string, object> properties = new Dictionary <string, object> { { "Any", value } }; // Act EntityTagHeaderValue etagHeaderValue = handler.CreateETag(properties); IList <object> values = handler.ParseETag(etagHeaderValue).Select(p => p.Value).ToList(); // Assert Assert.True(etagHeaderValue.IsWeak); Assert.Equal(1, values.Count); Assert.Equal(value, values[0]); }
public void GetIfMatchOrNoneMatch_ReturnsETag_SetETagHeaderValue(string header) { // Arrange HttpRequestMessage request = new HttpRequestMessage(); HttpConfiguration cofiguration = new HttpConfiguration(); request.SetConfiguration(cofiguration); Dictionary<string, object> properties = new Dictionary<string, object> { { "Name", "Foo" } }; EntityTagHeaderValue etagHeaderValue = new DefaultODataETagHandler().CreateETag(properties); if (header.Equals("IfMatch")) { request.Headers.IfMatch.Add(etagHeaderValue); } else { request.Headers.IfNoneMatch.Add(etagHeaderValue); } ODataModelBuilder builder = new ODataModelBuilder(); EntityTypeConfiguration<Customer> customer = builder.Entity<Customer>(); customer.HasKey(c => c.Id); customer.Property(c => c.Id); customer.Property(c => c.Name).IsConcurrencyToken(); IEdmModel model = builder.GetEdmModel(); Mock<ODataPathSegment> mockSegment = new Mock<ODataPathSegment> { CallBase = true }; mockSegment.Setup(s => s.GetEdmType(null)).Returns(model.GetEdmType(typeof(Customer))); mockSegment.Setup(s => s.GetEntitySet(null)).Returns((IEdmEntitySet)null); ODataPath odataPath = new ODataPath(new[] { mockSegment.Object }); request.SetODataPath(odataPath); ODataQueryContext context = new ODataQueryContext(model, typeof(Customer)); // Act ODataQueryOptions<Customer> query = new ODataQueryOptions<Customer>(context, request); ETag result = header.Equals("IfMatch") ? query.IfMatch : query.IfNoneMatch; dynamic dynamicResult = result; // Assert Assert.Equal("Foo", result["Name"]); Assert.Equal("Foo", dynamicResult.Name); }
public void CreateETag_ETagCreatedAndParsed_GivenValues(string notUsed, object[] values) { // Arrange DefaultODataETagHandler handler = new DefaultODataETagHandler(); Dictionary<string, object> properties = new Dictionary<string, object>(); for (int i = 0; i < values.Length; i++) { properties.Add("Prop" + i, values[i]); } // Act EntityTagHeaderValue etagHeaderValue = handler.CreateETag(properties); IList<object> results = handler.ParseETag(etagHeaderValue).Select(p => p.Value).ToList(); // Assert Assert.True(etagHeaderValue.IsWeak); Assert.Equal(values.Length, results.Count); for (int i = 0; i < values.Length; i++) { Assert.Equal(values[i], results[i]); } }
public void CreateETag_ETagCreatedAndParsed_GivenValues() { // Arrange object[] values = new object[] { "any", 1 }; DefaultODataETagHandler handler = new DefaultODataETagHandler(); Dictionary <string, object> properties = new Dictionary <string, object>(); for (int i = 0; i < values.Length; i++) { properties.Add("Prop" + i, values[i]); } // Act EntityTagHeaderValue etagHeaderValue = handler.CreateETag(properties); IList <object> results = handler.ParseETag(etagHeaderValue).OrderBy(p => p.Key).Select(p => p.Value).ToList(); // Assert Assert.True(etagHeaderValue.IsWeak); Assert.Equal(values.Length, results.Count); for (int i = 0; i < values.Length; i++) { Assert.Equal(values[i], results[i]); } }
public void GetETagTEntity_Returns_ETagInHeader() { // Arrange HttpRequestMessage request = new HttpRequestMessage(); HttpConfiguration cofiguration = new HttpConfiguration(); request.SetConfiguration(cofiguration); Dictionary<string, object> properties = new Dictionary<string, object> { { "City", "Foo" } }; EntityTagHeaderValue etagHeaderValue = new DefaultODataETagHandler().CreateETag(properties); CustomersModelWithInheritance model = new CustomersModelWithInheritance(); Mock<ODataPathSegment> mockSegment = new Mock<ODataPathSegment> { CallBase = true }; mockSegment.Setup(s => s.GetEdmType(null)).Returns(model.Customer); mockSegment.Setup(s => s.GetEntitySet(null)).Returns((IEdmEntitySet)null); ODataPath odataPath = new ODataPath(new[] { mockSegment.Object }); request.SetODataPath(odataPath); // Act ETag<Customer> result = request.GetETag<Customer>(etagHeaderValue); dynamic dynamicResult = result; // Assert Assert.Equal("Foo", result["City"]); Assert.Equal("Foo", dynamicResult.City); }