예제 #1
0
        public async Task CreateItem_MissingId_Returns201_AndCreatesId()
        {
            var item = new HUnit
            {
                Data = "create-item-missing-id-returns-201"
            };
            var response = await SendRequestToServer <HUnit>(HttpMethod.Post, "tables/hunits", item);

            Assert.AreEqual(HttpStatusCode.Created, response.StatusCode);
            var actual = await GetValueFromResponse <HUnit>(response);

            Assert.IsNotNull(actual.Id);                // Check existence of Id
            Assert.IsNotNull(new Guid(actual.Id));      // Make sure it is a real GUID
            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>(actual.Id);

            Assert.IsNotNull(dbItem);
            Assert.AreEqual(item.Data, dbItem.Data);
        }
예제 #2
0
        public async Task ReplaceItem_ValidId_Returns200()
        {
            var item = new HUnit()
            {
                Id = "hunit-6", Data = "Replaced"
            };
            var response = await SendRequestToServer <HUnit>(HttpMethod.Put, $"/tables/hunits/{item.Id}", item);

            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);
        }
예제 #3
0
        public async Task CreateItem_MissingItem_Returns201()
        {
            var item = new HUnit
            {
                Id   = Guid.NewGuid().ToString("N"),
                Data = "create-item-missing-item-returns-201"
            };
            var response = await SendRequestToServer <HUnit>(HttpMethod.Post, "tables/hunits", item);

            Assert.AreEqual(HttpStatusCode.Created, 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);
        }
예제 #4
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);
        }
예제 #5
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);
        }
예제 #6
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);
        }
예제 #7
0
        public async Task ReadItemAsync_SoftDelete_ValidItem_Returns200()
        {
            var response = await SendRequestToServer <Movie>(HttpMethod.Get, $"/tables/rmovies/rmovie-6", null);

            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(Movie6.Equals(actual));
        }
예제 #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));
        }