public async Task <IActionResult> Post([FromBody] FinanceControlCenter controlCenter) { if (!ModelState.IsValid) { HIHAPIUtility.HandleModalStateError(ModelState); } // User String usrName = String.Empty; try { usrName = HIHAPIUtility.GetUserID(this); if (String.IsNullOrEmpty(usrName)) { throw new UnauthorizedAccessException(); } } catch { throw new UnauthorizedAccessException(); } // Check whether User assigned with specified Home ID var hms = _context.HomeMembers.Where(p => p.HomeID == controlCenter.HomeID && p.User == usrName).Count(); if (hms <= 0) { throw new UnauthorizedAccessException(); } if (!controlCenter.IsValid(this._context)) { return(BadRequest()); } controlCenter.CreatedAt = DateTime.Now; controlCenter.Createdby = usrName; _context.FinanceControlCenter.Add(controlCenter); await _context.SaveChangesAsync(); return(Created(controlCenter)); }
public async Task <IActionResult> Put([FromODataUri] int key, [FromBody] FinanceControlCenter update) { if (!ModelState.IsValid) { HIHAPIUtility.HandleModalStateError(ModelState); } if (key != update.ID) { throw new BadRequestException("Inputted ID mismatched"); } // User String usrName = String.Empty; try { usrName = HIHAPIUtility.GetUserID(this); if (String.IsNullOrEmpty(usrName)) { throw new UnauthorizedAccessException(); } } catch { throw new UnauthorizedAccessException(); } // Check whether User assigned with specified Home ID var hms = _context.HomeMembers.Where(p => p.HomeID == update.HomeID && p.User == usrName).Count(); if (hms <= 0) { throw new UnauthorizedAccessException(); } if (!update.IsValid(this._context)) { return(BadRequest()); } update.Updatedby = usrName; update.UpdatedAt = DateTime.Now; _context.Entry(update).State = EntityState.Modified; try { await _context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException exp) { if (!_context.FinanceControlCenter.Any(p => p.ID == key)) { return(NotFound()); } else { throw new DBOperationException(exp.Message); } } return(Updated(update)); }
public async Task TestCase1() { string token = await IdentityServerSetup.Instance.GetAccessTokenForUser(DataSetupUtility.UserA, DataSetupUtility.IntegrationTestPassword); var clientWithAuth = _factory.CreateClient(); clientWithAuth.SetBearerToken(token); // Step 1. Metadata request var metadata = await this._client.GetAsync("/api/$metadata"); Assert.Equal(HttpStatusCode.OK, metadata.StatusCode); var content = await metadata.Content.ReadAsStringAsync(); if (content.Length > 0) { // How to verify metadata? // TBD. } // Step 2. Read Home Defines - Non authority case var req1 = await this._client.GetAsync("/api/HomeDefines"); Assert.Equal(HttpStatusCode.Unauthorized, req1.StatusCode); // Step 3. Read Home Defines - Authority case var resp2 = await clientWithAuth.GetAsync("/api/HomeDefines"); Assert.True(resp2.IsSuccessStatusCode); string result = resp2.Content.ReadAsStringAsync().Result; if (!String.IsNullOrEmpty(result)) { JToken outer = JToken.Parse(result); // Old way to deserialize the arry JArray inner = outer["value"].Value <JArray>(); var dfs = inner.ToObject <List <HomeDefine> >(); Assert.Equal(2, dfs.Count); // For user A, Home1 Is a must var bHome1Exist = false; foreach (var df in dfs) { Assert.NotNull(df); Assert.True(df.ID > 0); Assert.False(String.IsNullOrEmpty(df.Name)); Assert.NotNull(df.HomeMembers); if (df.ID == DataSetupUtility.Home1ID) { bHome1Exist = true; } } Assert.True(bHome1Exist); } // Step 4. Read home defines - with home members resp2 = await clientWithAuth.GetAsync("/api/HomeDefines?$expand=HomeMembers"); Assert.True(resp2.IsSuccessStatusCode); result = resp2.Content.ReadAsStringAsync().Result; if (!String.IsNullOrEmpty(result)) { JToken outer = JToken.Parse(result); JArray inner = outer["value"].Value <JArray>(); var dfs = inner.ToObject <List <HomeDefine> >(); Assert.Equal(2, dfs.Count); // For user A, Home1 Is a must foreach (var df in dfs) { Assert.NotNull(df); Assert.True(df.ID > 0); Assert.False(String.IsNullOrEmpty(df.Name)); Assert.NotNull(df.HomeMembers); var exist = df.HomeMembers.Single(p => p.User == DataSetupUtility.UserA); Assert.NotNull(exist); } } var hid = DataSetupUtility.Home1ID; var cc1id = 0; var ord1id = 0; var acnt1id = 0; var doc1id = 0; var jsetting = new JsonSerializerSettings(); jsetting.Converters.Add(new StringEnumConverter()); jsetting.ReferenceLoopHandling = ReferenceLoopHandling.Ignore; jsetting.DateFormatString = "yyyy-MM-dd"; // Step 5. Create a control center var cc = new FinanceControlCenter() { HomeID = hid, Name = "Control Center 1", Comment = "Comment 1", Owner = DataSetupUtility.UserA }; var kjson = JsonConvert.SerializeObject(cc, jsetting); var inputContent = new StringContent(kjson, Encoding.UTF8, "application/json"); resp2 = await clientWithAuth.PostAsync("/api/FinanceControlCenters", inputContent); Assert.True(resp2.IsSuccessStatusCode); result = resp2.Content.ReadAsStringAsync().Result; if (!String.IsNullOrEmpty(result)) { var odatarst = JsonConvert.DeserializeObject <FinanceControlCenter>(result); Assert.Equal(odatarst.Name, cc.Name); Assert.Equal(odatarst.HomeID, cc.HomeID); Assert.Equal(odatarst.Owner, cc.Owner); cc1id = odatarst.ID; Assert.True(cc1id > 0); } // Step 6. Create an order var ord = new FinanceOrder() { HomeID = hid, Name = "Order 1", Comment = "Comment 1" }; var srule = new FinanceOrderSRule() { Order = ord, RuleID = 1, ControlCenterID = cc1id, Precent = 100 }; ord.SRule.Add(srule); kjson = JsonConvert.SerializeObject(ord, jsetting); inputContent = new StringContent(kjson, Encoding.UTF8, "application/json"); resp2 = await clientWithAuth.PostAsync("/api/FinanceOrders", inputContent); Assert.True(resp2.IsSuccessStatusCode); result = resp2.Content.ReadAsStringAsync().Result; if (!String.IsNullOrEmpty(result)) { var odatarst = JsonConvert.DeserializeObject <FinanceOrder>(result); Assert.Equal(odatarst.Name, ord.Name); ord1id = odatarst.ID; Assert.True(ord1id > 0); } // Step 7. Create an account var acnt = new FinanceAccount() { HomeID = DataSetupUtility.Home1ID, Name = "Account 1", CategoryID = FinanceAccountCategory.AccountCategory_Cash, Owner = DataSetupUtility.UserA }; kjson = JsonConvert.SerializeObject(acnt, jsetting); inputContent = new StringContent(kjson, Encoding.UTF8, "application/json"); resp2 = await clientWithAuth.PostAsync("/api/FinanceAccounts", inputContent); Assert.True(resp2.IsSuccessStatusCode); result = resp2.Content.ReadAsStringAsync().Result; if (!String.IsNullOrEmpty(result)) { var odatarst = JsonConvert.DeserializeObject <FinanceAccount>(result); Assert.Equal(odatarst.Name, acnt.Name); acnt1id = odatarst.ID; Assert.True(acnt1id > 0); } // Step 7a. Get all accounts resp2 = await clientWithAuth.GetAsync("/api/FinanceAccounts?hid=" + hid.ToString()); Assert.True(resp2.IsSuccessStatusCode); result = resp2.Content.ReadAsStringAsync().Result; if (!String.IsNullOrEmpty(result)) { //var odatarst = JsonConvert.DeserializeObject<FinanceAccount>(result); //Assert.Equal(odatarst.Name, acnt.Name); //acnt1id = odatarst.ID; //Assert.True(acnt1id > 0); } // Step 7b. Read one specified account resp2 = await clientWithAuth.GetAsync("/api/FinanceAccounts(" + acnt1id.ToString() + ")"); // ?hid=" + hid.ToString()); Assert.True(resp2.IsSuccessStatusCode); result = resp2.Content.ReadAsStringAsync().Result; if (!String.IsNullOrEmpty(result)) { } // Step 8. Post a document var doc = new FinanceDocument() { DocType = FinanceDocumentType.DocType_Normal, HomeID = hid, TranDate = DateTime.Today, Desp = "First document", TranCurr = DataSetupUtility.Home1BaseCurrency, }; var item = new FinanceDocumentItem() { DocumentHeader = doc, ItemID = 1, Desp = "Item 1.1", TranType = 2, // Wage TranAmount = 10, AccountID = acnt1id, ControlCenterID = cc1id, }; doc.Items.Add(item); jsetting.NullValueHandling = NullValueHandling.Ignore; kjson = JsonConvert.SerializeObject(doc, jsetting); inputContent = new StringContent(kjson, Encoding.UTF8, "application/json"); resp2 = await clientWithAuth.PostAsync("/api/FinanceDocuments", inputContent); Assert.True(resp2.IsSuccessStatusCode); result = resp2.Content.ReadAsStringAsync().Result; if (!String.IsNullOrEmpty(result)) { var odatarst = JsonConvert.DeserializeObject <FinanceDocument>(result); Assert.Equal(odatarst.Desp, doc.Desp); doc1id = odatarst.ID; Assert.True(doc1id > 0); } // Step 9. Create an ADP document //var adpcontext = new FinanceADPDocumentCreateContext(); //adpcontext.DocumentInfo = new FinanceDocument(); //adpcontext.AccountInfo = new FinanceAccount(); }
public async Task TestCase1(int hid, string user) { var context = this.fixture.GetCurrentDataContext(); // 0. Create control centers for other homes if (hid == DataSetupUtility.Home1ID) { fixture.InitHome1TestData(context); } if (hid == DataSetupUtility.Home2ID) { fixture.InitHome2TestData(context); } if (hid == DataSetupUtility.Home3ID) { fixture.InitHome3TestData(context); } if (hid == DataSetupUtility.Home4ID) { fixture.InitHome4TestData(context); } if (hid == DataSetupUtility.Home5ID) { fixture.InitHome5TestData(context); } var curhmemquery = (from homemem in context.HomeMembers where homemem.HomeID == hid && homemem.User == user select homemem).FirstOrDefault(); var curhmem = Assert.IsType <HomeMember>(curhmemquery); var existccamt = (from homemem in context.HomeMembers join fincc in context.FinanceControlCenter on new { homemem.HomeID, homemem.User } equals new { fincc.HomeID, User = user } select fincc.ID).ToList().Count(); var existccamt_curhome = context.FinanceControlCenter.Where(p => p.HomeID == hid).Count(); // 1. Create first control center var control = new FinanceControlCentersController(context); var userclaim = DataSetupUtility.GetClaimForUser(user); var httpctx = UnitTestUtility.GetDefaultHttpContext(provider, userclaim); control.ControllerContext = new ControllerContext() { HttpContext = httpctx }; var cc = new FinanceControlCenter() { HomeID = hid, Name = "Control Center 1", Comment = "Comment 1", Owner = DataSetupUtility.UserA }; var rst = await control.Post(cc); Assert.NotNull(rst); var rst2 = Assert.IsType <CreatedODataResult <FinanceControlCenter> >(rst); Assert.Equal(rst2.Entity.Name, cc.Name); Assert.Equal(rst2.Entity.HomeID, cc.HomeID); Assert.Equal(rst2.Entity.Owner, cc.Owner); var firstccid = rst2.Entity.ID; Assert.True(firstccid > 0); ccsCreated.Add(firstccid); // 2. Now read the whole control centers (without Home ID) var queryUrl = @"http://localhost/api/FinanceControlCenters"; var req = UnitTestUtility.GetHttpRequest(httpctx, "GET", queryUrl); var odatacontext = UnitTestUtility.GetODataQueryContext <FinanceControlCenter>(this.model); var options = UnitTestUtility.GetODataQueryOptions <FinanceControlCenter>(odatacontext, req); var rst3 = control.Get(options); Assert.NotNull(rst3); if (curhmem.IsChild.HasValue && curhmem.IsChild == true) { existccamt = context.FinanceControlCenter.Where(p => p.Owner == user).Count(); Assert.Equal(existccamt, rst3.Cast <FinanceControlCenter>().Count()); } else { Assert.Equal(1 + existccamt, rst3.Cast <FinanceControlCenter>().Count()); } // 2a. Now read the whole control centers (with Home ID) queryUrl = @"http://localhost/api/FinanceControlCenters?$filter=HomeID eq " + hid.ToString(); req = UnitTestUtility.GetHttpRequest(httpctx, "GET", queryUrl); //var odatacontext = UnitTestUtility.GetODataQueryContext<FinanceControlCenter>(this.model); options = UnitTestUtility.GetODataQueryOptions <FinanceControlCenter>(odatacontext, req); rst3 = control.Get(options); Assert.NotNull(rst3); if (curhmem.IsChild.HasValue && curhmem.IsChild == true) { existccamt_curhome = context.FinanceControlCenter.Where(p => p.HomeID == hid && p.Owner == user).Count(); Assert.Equal(existccamt_curhome, rst3.Cast <FinanceControlCenter>().Count()); } else { Assert.Equal(1 + existccamt_curhome, rst3.Cast <FinanceControlCenter>().Count()); } // 3. Now create another one! cc = new FinanceControlCenter() { HomeID = hid, Name = "Control Center 2", Comment = "Comment 2", ParentID = rst2.Entity.ID, Owner = DataSetupUtility.UserA }; rst = await control.Post(cc); Assert.NotNull(rst); rst2 = Assert.IsType <CreatedODataResult <FinanceControlCenter> >(rst); Assert.Equal(rst2.Entity.Name, cc.Name); Assert.Equal(rst2.Entity.HomeID, cc.HomeID); Assert.Equal(rst2.Entity.Owner, cc.Owner); var sndccid = rst2.Entity.ID; Assert.True(sndccid > 0); ccsCreated.Add(sndccid); // 4. Change one control center cc.Owner = DataSetupUtility.UserB; rst = await control.Put(sndccid, cc); Assert.NotNull(rst); var rst4 = Assert.IsType <UpdatedODataResult <FinanceControlCenter> >(rst); Assert.Equal(rst4.Entity.Name, cc.Name); Assert.Equal(rst4.Entity.HomeID, cc.HomeID); Assert.Equal(rst4.Entity.Owner, DataSetupUtility.UserB); // 5. Delete the second control center var rst5 = await control.Delete(sndccid); Assert.NotNull(rst5); var rst6 = Assert.IsType <StatusCodeResult>(rst5); Assert.Equal(204, rst6.StatusCode); // 6. Now read the whole control centers rst3 = control.Get(options); Assert.NotNull(rst3); if (curhmem.IsChild.HasValue && curhmem.IsChild == true) { existccamt_curhome = context.FinanceControlCenter.Where(p => p.HomeID == hid && p.Owner == user).Count(); Assert.Equal(existccamt_curhome, rst3.Cast <FinanceControlCenter>().Count()); } else { Assert.Equal(1 + existccamt_curhome, rst3.Cast <FinanceControlCenter>().Count()); } // 7. Delete the first control center rst5 = await control.Delete(firstccid); Assert.NotNull(rst5); rst6 = Assert.IsType <StatusCodeResult>(rst5); Assert.Equal(204, rst6.StatusCode); // 8. Now read the whole control centers rst3 = control.Get(options); Assert.NotNull(rst3); if (curhmem.IsChild.HasValue && curhmem.IsChild == true) { existccamt_curhome = context.FinanceControlCenter.Where(p => p.HomeID == hid && p.Owner == user).Count(); Assert.Equal(existccamt_curhome, rst3.Cast <FinanceControlCenter>().Count()); } else { Assert.Equal(existccamt_curhome, rst3.Cast <FinanceControlCenter>().Count()); } ccsCreated.Clear(); context.Dispose(); }