示例#1
0
        public virtual async Task <(string, ServiceModelState)> Create(
            AbookCreateModel model)
        {
            var user  = context.GetCurrentUser();
            var abook = new Abook
            {
                AbookId = Guid.NewGuid().ToString()
            };

            model.Attach(abook);

            var member = new AbookMember
            {
                AbookId  = abook.AbookId,
                UserId   = user.Id,
                Priority = 0
            };

            await context.Abooks.AddAsync(abook);

            await context.AbookMembers.AddAsync(member);

            await context.SaveChangesAsync();

            return(abook.AbookId, null);
        }
示例#2
0
 public async Task <ActionResult> Create(AbookCreateModel abook)
 {
     return(await PostResult(
                async() => await abookService.Create(abook),
                abookId => new { AbookId = abookId },
                nameof(abook)
                ));
 }
示例#3
0
        public async Task Scenario_A()
        {
            var user = new
            {
                Id   = "*****@*****.**",
                Name = "scenario user"
            };

            var client = factory.CreateClient()
                         .DefaultAuthorizationBearer(user.Id, user.Name);

            {// Register User
                await client.SendAsync(request => request
                                       .ApiRequest(HttpMethod.Put, "/users"))
                .EnsureStatusCode(HttpStatusCode.OK);

                var created = await db.MUsers.IgnoreQueryFilters()
                              .FirstAsync(m => m.Id == user.Id);

                Assert.Equal(user.Id, created.Id);
                Assert.Equal(user.Id, created.Email);
                Assert.Equal(user.Name, created.Name);
            }

            {// Create Account book
                var abook = new AbookCreateModel
                {
                    Name               = "new abook",
                    Memo               = "new abook memo",
                    StartOfMonthDate   = 1,
                    StartOfMonthIsPrev = false
                };

                // [Post] /abooks
                var created = await client.SendAsync(request => request
                                                     .ApiRequest(HttpMethod.Post, "/abooks")
                                                     .ContentWithJSON(abook))
                              .EnsureStatusCode(HttpStatusCode.Created)
                              .ResponseToObjectAsync(new { AbookId = "" });

                Assert.False(string.IsNullOrEmpty(created.AbookId));

                // [Get] /abooks/current
                var current = await client.SendAsync(request => request
                                                     .ApiRequest(HttpMethod.Get, "/abooks/current"))
                              .EnsureStatusCode(HttpStatusCode.OK)
                              .ResponseToObjectAsync <AbookViewModel>();

                Assert.Equal(created.AbookId, current.AbookId);
                Assert.Equal(abook.Name, current.Name);
                Assert.Equal(abook.Memo, current.Memo);
                Assert.Equal(abook.StartOfMonthDate, current.StartOfMonthDate);
                Assert.Equal(abook.StartOfMonthIsPrev, current.StartOfMonthIsPrev);
            }

            {// Create Accounts
                var accounts = new[] {
                    new AccountCreateModel
                    {
                        Name       = "SALARY",
                        Color      = "#100000",
                        FinanceDiv = FinanceDiv.Income,
                        Avaliable  = true
                    },
                    new AccountCreateModel
                    {
                        Name       = "FOOD",
                        Color      = "#200001",
                        FinanceDiv = FinanceDiv.Expense,
                        Avaliable  = true
                    },
                    new AccountCreateModel
                    {
                        Name       = "FEE",
                        Color      = "#200002",
                        FinanceDiv = FinanceDiv.Expense,
                        Avaliable  = true,
                        UseFee     = true
                    },
                    new AccountCreateModel
                    {
                        Name       = "MONEY",
                        Color      = "#300001",
                        FinanceDiv = FinanceDiv.Assets,
                        Avaliable  = true
                    },
                    new AccountCreateModel
                    {
                        Name       = "DEPOSIT",
                        Color      = "#300002",
                        FinanceDiv = FinanceDiv.Assets,
                        Avaliable  = true
                    }
                };

                foreach (var account in accounts)
                {
                    // [Post] /accounts
                    var created = await client.SendAsync(request => request
                                                         .ApiRequest(HttpMethod.Post, "/accounts")
                                                         .ContentWithJSON(account))
                                  .EnsureStatusCode(HttpStatusCode.Created)
                                  .ResponseToObjectAsync(new { Id = "" });

                    Assert.False(string.IsNullOrEmpty(created.Id));

                    // [Get] /accounts/{id}
                    var fetch = await client.SendAsync(request => request
                                                       .ApiRequest(HttpMethod.Get, $"/accounts/{created.Id}"))
                                .EnsureStatusCode(HttpStatusCode.OK)
                                .ResponseToObjectAsync <AccountViewModel>();

                    Assert.Equal(created.Id, fetch.Id);
                    Assert.Equal(account.Name, fetch.Name);
                    Assert.Equal(account.FinanceDiv, fetch.FinanceDiv);
                    Assert.Equal(account.Color, fetch.Color);
                    Assert.Equal(account.Avaliable, fetch.Avaliable);
                }
            }

            {// Create Journals
                // [Get] /accounts
                var accounts = await client.SendAsync(request => request
                                                      .ApiRequest(HttpMethod.Get, "/accounts"))
                               .EnsureStatusCode(HttpStatusCode.OK)
                               .ResponseToObjectAsync <AccountViewModel[]>();

                Assert.Equal(5, accounts.Count());
                Assert.Equal(new[] { 1, 1, 2, 1, 2 }, accounts.Select(m => m.DispOrder).ToArray());

                var selectAccounts = accounts
                                     .ToDictionary(m => m.Name, m => new JounalEditAccountModel {
                    Id = m.Id
                });

                var journals = new[] {
                    new JournalCreateModel
                    {
                        AccrualDate   = DateTime.UtcNow.Date,
                        JournalDiv    = JournalDiv.Income,
                        DebitAccount  = selectAccounts["MONEY"],
                        CreditAccount = selectAccounts["SALARY"],
                        Amount        = 190000
                    },
                    new JournalCreateModel
                    {
                        AccrualDate   = DateTime.UtcNow.AddDays(1).Date,
                        JournalDiv    = JournalDiv.Expense,
                        DebitAccount  = selectAccounts["FOOD"],
                        CreditAccount = selectAccounts["MONEY"],
                        Amount        = 16000
                    },
                    new JournalCreateModel
                    {
                        AccrualDate   = DateTime.UtcNow.AddDays(2).Date,
                        JournalDiv    = JournalDiv.Transfer,
                        DebitAccount  = selectAccounts["DEPOSIT"],
                        CreditAccount = selectAccounts["MONEY"],
                        Amount        = 50000
                    },
                    new JournalCreateModel
                    {
                        AccrualDate   = DateTime.UtcNow.AddDays(2).Date,
                        JournalDiv    = JournalDiv.Transfer,
                        DebitAccount  = selectAccounts["DEPOSIT"],
                        CreditAccount = selectAccounts["MONEY"],
                        Fee           = new FeeEditModel
                        {
                            Account = selectAccounts["FEE"],
                            Amount  = 210
                        },
                        Amount = 8890
                    }
                };

                foreach (var journal in journals)
                {
                    // [Post] /journals
                    var created = await client.SendAsync(request => request
                                                         .ApiRequest(HttpMethod.Post, "/journals")
                                                         .ContentWithJSON(journal))
                                  .EnsureStatusCode(HttpStatusCode.Created)
                                  .ResponseToObjectAsync(new { Id = "" });

                    Assert.False(string.IsNullOrEmpty(created.Id));

                    // [Get] /journals/{id}
                    var fetch = await client.SendAsync(request => request
                                                       .ApiRequest(HttpMethod.Get, $"/journals/{created.Id}"))
                                .EnsureStatusCode(HttpStatusCode.OK)
                                .ResponseToObjectAsync <JournalViewModel>();

                    Assert.Equal(created.Id, fetch.Id);
                    Assert.Equal(journal.AccrualDate, fetch.AccrualDate);
                    Assert.Equal(journal.JournalDiv, fetch.JournalDiv);
                    Assert.Equal(journal.DebitAccount.Id, fetch.DebitAccount.Id);
                    Assert.Equal(journal.CreditAccount.Id, fetch.CreditAccount.Id);
                    Assert.Equal(journal.Fee?.Account.Id, fetch.Fee?.Account.Id);
                    Assert.Equal(journal.Fee?.Amount, fetch.Fee?.Amount);
                }
            }
        }