public async Task ReplaceItem_PreconditionsSucceed_Returns200() { var item = GetItemFromDb <HUnit>("hunit-8"); var originalData = item.Data; item.Data = "Replaced"; var response = await SendRequestToServer <HUnit>(HttpMethod.Put, $"/tables/hunits/{item.Id}", item, new Dictionary <string, string> { { "If-Match", ETag.FromByteArray(item.Version) } }); Assert.AreEqual(HttpStatusCode.OK, response.StatusCode); var actual = await GetValueFromResponse <HUnit>(response); Assert.AreEqual(item.Id, actual.Id); Assert.AreEqual(item.Data, actual.Data); Assert.IsTrue(actual.Version.Length > 0); HttpAssert.IsWithin(DateTimeOffset.UtcNow, actual.UpdatedAt, 1000); HttpAssert.AreEqual(actual.Version, response.Headers.ETag); HttpAssert.Match(actual.UpdatedAt, response.Content.Headers.LastModified); var dbItem = GetItemFromDb <HUnit>(item.Id); Assert.IsNotNull(dbItem); Assert.AreEqual(item.Data, dbItem.Data); }
public async Task PatchItem_PreconditionsFail_Returns412() { var item = await GetItemFromDb <HUnit>("hunit-13"); var patchDoc = @"[{ ""op"": ""replace"", ""path"": ""/Data"", ""value"": ""Replaced"" }]"; var response = await SendRequestToServer(HttpMethod.Patch, $"/tables/hunits/{item.Id}", patchDoc, new Dictionary <string, string> { { "If-None-Match", ETag.FromByteArray(item.Version) } }); Assert.AreEqual(HttpStatusCode.PreconditionFailed, response.StatusCode); var actual = await GetValueFromResponse <HUnit>(response); Assert.AreEqual(item.Id, actual.Id); Assert.AreEqual(item.Data, actual.Data); HttpAssert.AreEqual(actual.Version, response.Headers.ETag); HttpAssert.Match(actual.UpdatedAt, response.Content.Headers.LastModified); var dbItem = await GetItemFromDb <HUnit>(item.Id); Assert.IsNotNull(dbItem); Assert.AreEqual(item.Data, dbItem.Data); }
public void FromByteArray_Empty_ReturnsEmptyString() { var actual = ETag.FromByteArray(new byte[] { }); var expected = "\"\""; Assert.AreEqual(expected, actual); }
public async Task PatchItem_PreconditionsSucceed_Returns200() { var item = await GetItemFromDb <HUnit>("hunit-14"); var patchDoc = @"[{ ""op"": ""replace"", ""path"": ""/Data"", ""value"": ""Replaced"" }]"; var response = await SendRequestToServer(HttpMethod.Patch, $"/tables/hunits/{item.Id}", patchDoc, new Dictionary <string, string> { { "If-Match", ETag.FromByteArray(item.Version) } }); Assert.AreEqual(HttpStatusCode.OK, response.StatusCode); var actual = await GetValueFromResponse <HUnit>(response); Assert.AreEqual(item.Id, actual.Id); Assert.AreEqual("Replaced", actual.Data); Assert.IsTrue(actual.Version.Length > 0); HttpAssert.IsWithin(DateTimeOffset.UtcNow, actual.UpdatedAt, 1000); HttpAssert.AreEqual(actual.Version, response.Headers.ETag); HttpAssert.Match(actual.UpdatedAt, response.Content.Headers.LastModified); var dbItem = await GetItemFromDb <HUnit>(item.Id); Assert.IsNotNull(dbItem); Assert.AreEqual("Replaced", dbItem.Data); }
public void FromByteArray_ValidData_ReturnsExpected() { var testData = new byte[] { 0x01, 0x00, 0x42, 0x22, 0x47, 0x8F }; var actual = ETag.FromByteArray(testData); var expected = "\"AQBCIkeP\""; Assert.AreEqual(expected, actual); }
/// <summary> /// Adds any necessary response headers, such as ETag and Last-Modified /// </summary> /// <param name="item">The item being returned</param> private void AddHeadersToResponse(TEntity item) { if (item != null) { Response.Headers["ETag"] = ETag.FromByteArray(item.Version); Response.Headers["Last-Modified"] = item.UpdatedAt.ToString(DateTimeFormatInfo.InvariantInfo.RFC1123Pattern); } }
public async Task ReadItemAsync_PreconditionsFailed_Returns304() { var firstResponse = await SendRequestToServer <Movie>(HttpMethod.Get, $"/tables/movies/{Movie4.Id}", null); Assert.AreEqual(HttpStatusCode.OK, firstResponse.StatusCode); var firstActual = await GetValueFromResponse <Movie>(firstResponse); var response = await SendRequestToServer <Movie>(HttpMethod.Get, $"/tables/movies/{Movie4.Id}", null, new Dictionary <string, string> { { "If-None-Match", ETag.FromByteArray(firstActual.Version) } }); Assert.AreEqual(HttpStatusCode.NotModified, response.StatusCode); }
public async Task ReadItemAsync_PreconditionsSucceed_Returns200() { var firstResponse = await SendRequestToServer <Movie>(HttpMethod.Get, $"/tables/movies/{Movie4.Id}", null); Assert.AreEqual(HttpStatusCode.OK, firstResponse.StatusCode); var firstActual = await GetValueFromResponse <Movie>(firstResponse); var response = await SendRequestToServer <Movie>(HttpMethod.Get, $"/tables/movies/{Movie4.Id}", null, new Dictionary <string, string> { { "If-Match", ETag.FromByteArray(firstActual.Version) } }); Assert.AreEqual(HttpStatusCode.OK, response.StatusCode); var actual = await GetValueFromResponse <Movie>(response); HttpAssert.AreEqual(actual.Version, response.Headers.ETag); HttpAssert.Match(actual.UpdatedAt, response.Content.Headers.LastModified); Assert.IsTrue(Movie4.Equals(actual)); }
public static void AreEqual(byte[] expected, EntityTagHeaderValue actual) { Assert.IsNotNull(expected); Assert.IsNotNull(actual); Assert.AreEqual(ETag.FromByteArray(expected), actual.Tag); }
public void FromByteArray_Null_ThrowsArgumentNullException() { var actual = ETag.FromByteArray(null); Assert.Fail("ArgumentNullException expected"); }