public async Task <IActionResult> Create([FromBody] CompanyAccountViewModel companyAccount)
        {
            if (companyAccount == null)
            {
                return(BadRequest());
            }

            var id = await _companyAccountServiceAsync.Add(companyAccount);

            return(Created($"api/Account/{id}", id));  //HTTP201 Resource created
        }
        public async Task <IActionResult> Update(Int64 id, [FromBody] CompanyAccountViewModel companyAccount)
        {
            if (companyAccount == null || companyAccount.Id != id)
            {
                return(BadRequest());
            }

            var retVal = await _companyAccountServiceAsync.Update(companyAccount);

            if (retVal == 0)
            {
                return(StatusCode(304));  //Not Modified
            }
            else if (retVal == -1)
            {
                return(StatusCode(412, "DbUpdateConcurrencyException"));  //412 Precondition Failed  - concurrency
            }
            else
            {
                return(Accepted(companyAccount));
            }
        }
        public async Task <int> addAccount(HttpClient client)
        {
            CompanyAccountViewModel companyAccount = new CompanyAccountViewModel
            {
                Name        = "Account",
                Email       = "*****@*****.**",
                Description = "desc" + (new Random()).Next().ToString(),
                IsTrial     = false,
                IsActive    = true,
                SetActive   = DateTime.Now
            };

            client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", TokenTest.TokenValue);
            var response = await client.PostAsync("/api/accountasync", new StringContent(
                                                      JsonConvert.SerializeObject(companyAccount), Encoding.UTF8, "application/json"));

            var jsonString = await response.Content.ReadAsStringAsync();

            int lastAdded = 0;

            int.TryParse(jsonString, out lastAdded);
            return(lastAdded);
        }
        public async Task account_add_update_delete_async()
        {
            var client = fixture.Client;

            if (String.IsNullOrEmpty(TokenTest.TokenValue))
            {
                await TokenTest.token_get(client);
            }

            //insert
            CompanyAccountViewModel vmentity = new CompanyAccountViewModel
            {
                Name        = "Account 1",
                Email       = "*****@*****.**",
                Description = "desc",
                IsTrial     = false,
                IsActive    = true,
                SetActive   = DateTime.Now
            };

            client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", TokenTest.TokenValue);
            var response = await client.PostAsync("/api/accountasync", new StringContent(
                                                      JsonConvert.SerializeObject(vmentity), Encoding.UTF8, "application/json"));

            response.EnsureSuccessStatusCode();
            Assert.Equal(HttpStatusCode.Created, response.StatusCode);
            var lastAddedId = await response.Content.ReadAsStringAsync();

            Assert.True(int.Parse(lastAddedId) > 1);
            int id = 0; int.TryParse(lastAddedId, out id);

            //get inserted
            var util = new Utility();

            vmentity = await util.GetAccount(client, id);

            //update test
            vmentity.Description = "desc updated";
            response             = await client.PutAsync("/api/accountasync/" + id.ToString(), new StringContent(JsonConvert.SerializeObject(vmentity), Encoding.UTF8, "application/json"));

            response.EnsureSuccessStatusCode();
            Assert.Equal(HttpStatusCode.Accepted, response.StatusCode);

            //confirm update
            response = await client.GetAsync("/api/accountasync/" + id.ToString());

            response.EnsureSuccessStatusCode();
            var jsonString = await response.Content.ReadAsStringAsync();

            var oj   = JObject.Parse(jsonString);
            var desc = oj["description"].ToString();

            Assert.Equal(desc, vmentity.Description);

            //another update with same account - concurrency
            vmentity.Description = "desc updated 2";
            response             = await client.PutAsync("/api/accountasync/" + id.ToString(), new StringContent(JsonConvert.SerializeObject(vmentity), Encoding.UTF8, "application/json"));

            Assert.Equal(HttpStatusCode.PreconditionFailed, response.StatusCode);

            //delete test
            response = await client.DeleteAsync("/api/accountasync/" + id.ToString());

            response.EnsureSuccessStatusCode();
            Assert.Equal(HttpStatusCode.NoContent, response.StatusCode);
        }