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));
        }
Beispiel #3
0
        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();
        }
Beispiel #4
0
        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();
        }