Exemplo n.º 1
0
        public void Add_writes_to_database()
        {
            // Arrange
            var options = new DbContextOptionsBuilder <SimpleBankDbContext>()
                          .UseInMemoryDatabase(databaseName: "Add_writes_to_database")
                          .Options;

            // Act
            using (var context = new SimpleBankDbContext(options))
            {
                var service = new UserService(context);

                var task = Task.Run(async() =>
                {
                    return(await service.CreateNewUser(new BankUser
                    {
                        AccountNumber = "test",
                        AccountName = "tester tests",
                        Balance = 10000,
                        Password = "******",
                        CreatedDate = DateTime.Now
                    }));
                });

                var isCreatedSuccess = task.Result;
                Assert.True(isCreatedSuccess == 1);
            }

            // Assert
            using (var context = new SimpleBankDbContext(options))
            {
                Assert.Equal(1, context.BankUsers.Count());
                Assert.Equal("tester tests", context.BankUsers.Single().AccountName);
            }
        }
Exemplo n.º 2
0
        public static void Initialize(SimpleBankDbContext context)
        {
            context.Database.EnsureCreated();

            // Look for any users.
            if (context.BankUsers.Any())
            {
                return;   // DB has been seeded
            }

            var users = new BankUser[]
            {
                new BankUser {
                    AccountName = "edward", AccountNumber = "account1", Balance = 1000, Password = "******", CreatedDate = DateTime.Now
                },
                new BankUser {
                    AccountName = "will", AccountNumber = "account2", Balance = 50, Password = "******", CreatedDate = DateTime.Now
                },
            };

            foreach (BankUser s in users)
            {
                context.BankUsers.Add(s);
            }

            context.SaveChanges();
        }
Exemplo n.º 3
0
        public SimpleBankDbContext CreateSimpleBankDbContextForTesting()
        {
            this._context = new SimpleBankDbContext(_dbContextBuilder.Options);

            // ensure db created
            _context.Database.EnsureCreated();

            return(_context);
        }
Exemplo n.º 4
0
        public void Withdraw_with_negative_amount()
        {
            // Arrange
            var fakeTimestamp = BitConverter.GetBytes(DateTime.Now.Ticks);
            var options       = new DbContextOptionsBuilder <SimpleBankDbContext>()
                                .UseInMemoryDatabase(databaseName: "Withdraw_with_negative_amount")
                                .Options;

            using (var context = new SimpleBankDbContext(options))
            {
                var service = new UserService(context);

                var task = Task.Run(async() =>
                {
                    return(await service.CreateNewUser(new BankUser
                    {
                        AccountNumber = "test",
                        AccountName = "tester tests",
                        Balance = 10000,
                        Password = "******",
                        CreatedDate = DateTime.Now,
                        Timestamp = fakeTimestamp
                    }));
                });

                var isCreatedSuccess = task.Result;
                Assert.True(isCreatedSuccess == 1);
                Assert.True(context.BankUsers.Single(x => x.AccountNumber == "test") != null);
            }

            // Act
            using (var context = new SimpleBankDbContext(options))
            {
                var service = new UserService(context);

                var task = Task.Run(async() =>
                {
                    return(await service.Withdraw(
                               context.BankUsers.Single(x => x.AccountNumber == "test").ID,
                               -100,
                               fakeTimestamp
                               ));
                });

                // Assert
                var result = task.Result;
                Assert.True(result.ErrorList.Any());
            }
        }
Exemplo n.º 5
0
        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, SimpleBankDbContext context)
        {
            loggerFactory.AddConsole(Configuration.GetSection("Logging"));
            loggerFactory.AddDebug();

            app.UseApplicationInsightsRequestTelemetry();

            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
                app.UseBrowserLink();
            }
            else
            {
                app.UseExceptionHandler("/Home/Error");
            }

            app.UseApplicationInsightsExceptionTelemetry();

            app.UseStaticFiles();

            // configure Cookies Identity
            app.UseCookieAuthentication(new CookieAuthenticationOptions
            {
                AuthenticationScheme  = "SimpleBankCookies",
                LoginPath             = new PathString("/Home/Error/"),
                AccessDeniedPath      = new PathString("/Home/Error/"),
                AutomaticAuthenticate = true,
                AutomaticChallenge    = true
            });

            app.UseMvc(routes =>
            {
                routes.MapRoute(
                    name: "default",
                    template: "{controller=Home}/{action=Index}/{id?}");
            });

            // init Database
            DbInitializer.Initialize(context);
        }
 private async Task <int> CreateUserTask(string accountName, string password, decimal balance, SimpleBankDbContext context)
 {
     return(await new UserService(context).CreateNewUser(
                new BankUser
     {
         AccountNumber = accountName,
         AccountName = accountName + password,
         Balance = balance,
         Password = password,
         CreatedDate = DateTime.Now
     }));
 }
Exemplo n.º 7
0
 public UserService(SimpleBankDbContext dbContext)
 {
     _context = dbContext;
 }
Exemplo n.º 8
0
 public TransferService(SimpleBankDbContext dbContext)
 {
     _context = dbContext;
 }
Exemplo n.º 9
0
        public void Transfer_with_exceeding_amount()
        {
            // Arrange
            var user1Timestamp = BitConverter.GetBytes(DateTime.Now.Ticks);
            var user2Timestamp = BitConverter.GetBytes(DateTime.Now.AddMilliseconds(1).Ticks);
            var options        = new DbContextOptionsBuilder <SimpleBankDbContext>()
                                 .UseInMemoryDatabase(databaseName: "Transfer_with_exceeding_amount")
                                 .Options;

            using (var context = new SimpleBankDbContext(options))
            {
                var service = new UserService(context);

                var user1CreatedOk = Task.Run(async() =>
                {
                    return(await service.CreateNewUser(new BankUser
                    {
                        AccountNumber = "user1",
                        AccountName = "User 1",
                        Balance = 10000,
                        Password = "******",
                        CreatedDate = DateTime.Now,
                        Timestamp = user1Timestamp
                    }));
                });

                var isUser1CreatedSuccess = user1CreatedOk.Result;
                Assert.True(isUser1CreatedSuccess == 1);
                Assert.True(context.BankUsers.Single(x => x.AccountNumber == "user1") != null);

                var user2CreatedOk = Task.Run(async() =>
                {
                    return(await service.CreateNewUser(new BankUser
                    {
                        AccountNumber = "user2",
                        AccountName = "User 2",
                        Balance = 100,
                        Password = "******",
                        CreatedDate = DateTime.Now,
                        Timestamp = user2Timestamp
                    }));
                });

                var isUser2CreatedSuccess = user1CreatedOk.Result;
                Assert.True(isUser1CreatedSuccess == 1);
                Assert.True(context.BankUsers.Single(x => x.AccountNumber == "user2") != null);
            }

            // Act
            using (var context = new SimpleBankDbContext(options))
            {
                var service = new UserService(context);

                var task = Task.Run(async() =>
                {
                    return(await service.Transfer(
                               context.BankUsers.Single(x => x.AccountNumber == "user1").ID,
                               context.BankUsers.Single(x => x.AccountNumber == "user2").ID,
                               20000,
                               user1Timestamp,
                               user2Timestamp
                               ));
                });

                // Assert
                var result = task.Result;
                Assert.True(result.ErrorList.Any());
            }
        }