Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        public void FromByteArray_Empty_ReturnsEmptyString()
        {
            var actual   = ETag.FromByteArray(new byte[] { });
            var expected = "\"\"";

            Assert.AreEqual(expected, actual);
        }
Exemplo n.º 4
0
        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);
        }
Exemplo n.º 5
0
        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);
        }
Exemplo n.º 6
0
 /// <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);
     }
 }
Exemplo n.º 7
0
        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);
        }
Exemplo n.º 8
0
        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));
        }
Exemplo n.º 9
0
 public static void AreEqual(byte[] expected, EntityTagHeaderValue actual)
 {
     Assert.IsNotNull(expected);
     Assert.IsNotNull(actual);
     Assert.AreEqual(ETag.FromByteArray(expected), actual.Tag);
 }
Exemplo n.º 10
0
        public void FromByteArray_Null_ThrowsArgumentNullException()
        {
            var actual = ETag.FromByteArray(null);

            Assert.Fail("ArgumentNullException expected");
        }