public IHttpActionResult UpdateProperty([FromBody] ExtendedPropertyModel propertyModel)
        {
            try
            {
                var connectionString = Request.Headers.GetValues("connectionString").FirstOrDefault();

                HttpRequires.IsNotNull(connectionString, "Invalid Connection");
                HttpRequires.IsNotNull(propertyModel, "Invalid Properties");
                ValidatePropertyModel(propertyModel);

                DalResponseModel deletionResponse, addResponse;

                //Using the sql server system procedures I had (for add and delete). Instead of an in
                // place update, the process is to first delete the existing property, and then add
                // the new values. To avoid a situation where the delete succeeds but the add fails,
                // we use a transaction scope.
                using (var scope = new TransactionScope())
                {
                    deletionResponse = _propertyDal.DeleteProperty(propertyModel, connectionString);
                    addResponse      = _propertyDal.AddProperty(propertyModel, connectionString);
                    HttpAssert.Success(deletionResponse);
                    HttpAssert.Success(addResponse);
                    scope.Complete();
                }

                return(Ok());
            }
            catch (ArgumentException ex)
            {
                return(BadRequest(ex.Message));
            }
            catch (Exception ex)
            {
                return(InternalServerError(ex));
            }
        }
        public IHttpActionResult AddProperty([FromBody] ExtendedPropertyModel propertyModel)
        {
            try
            {
                var connectionString = Request.Headers.GetValues("connectionString").FirstOrDefault();

                HttpRequires.IsNotNull(connectionString, "Invalid Connection");
                HttpRequires.IsNotNull(propertyModel, "Invalid Properties");
                ValidatePropertyModel(propertyModel);

                var response = _propertyDal.AddProperty(propertyModel, connectionString);

                HttpAssert.Success(response);
                return(Ok());
            }
            catch (ArgumentException ex)
            {
                return(BadRequest(ex.Message));
            }
            catch (Exception ex)
            {
                return(InternalServerError(ex));
            }
        }
Esempio n. 3
0
        public async Task ReplaceItem_PreconditionsFail_Returns412()
        {
            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-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(originalData, actual.Data);

            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(originalData, dbItem.Data);
        }