public AccountRoutes() : base("/account")
        {
           Get[@"/login"] = _ => View["account/login/index"];

            Post[@"/login"] = _ =>
            {
                var loginParams = this.Bind<LoginParams>();
                FakeDatabaseUser user;
                FakeDatabase db = new FakeDatabase();

                user = db.Users.FirstOrDefault(
                    x =>
                        x.UserName.Equals(loginParams.LoginName) &&
                        x.Password.Equals(loginParams.Password));

                if (user == null)
                {
                    return View["account/loginerror"];
                }

                return this.Login(user.UserId, fallbackRedirectUrl: "http://*****:*****@"/logout"] = _ => this.LogoutAndRedirect("http://localhost:3579/account/login");
        }
 public void DataCenterEditExistingStartTest()
 {
     var db = new FakeDatabase();
     db.AddSet(TestDataCenterData.DataCenters);
     var controller = new DataCentersController(db);
     controller.ControllerContext = new FakeControllerContext();
     ViewResult result = controller.Edit(1) as ViewResult;
     Assert.IsNotNull(result);
     Assert.AreEqual(typeof(DataCenter), result.Model.GetType());
     Assert.AreEqual("Test1", ((DataCenter)result.Model).Name);
 }
 public void AjaxSeatList()
 {
     var db = new FakeDatabase();
     var st = new FakeSkyTap();
     db.AddSet(TestSeatTempData.SeatTemps);
     var controller = new ClassroomsController(db, st);
     controller.ControllerContext = new FakeControllerContext();
     DTParameters param = new DTParameters() {SessionId= "12345", Start = 2, Length = 3, Search = new DTSearch(), Order = new DTOrder[1] { new DTOrder() { Column = 1, Dir = DTOrderDir.ASC } } };
     JsonResult result = controller.AjaxSeat(param) as JsonResult;
     Assert.IsNotNull(result);
     Assert.AreEqual(3, ((List<SeatTemp>)((DTResult<SeatTemp>)result.Data).data).Count);
 }
예제 #4
0
        public void Register(string email, string password)
        {
            if (!email.Contains("@"))
                throw new Exception("Email is not an email!");

            var user = new User(email, password);
            var db = new FakeDatabase();
            db.Save(user);

            var smtpClient = new FakeSmtpClient();
            smtpClient.Send(new MailMessage("*****@*****.**", email) { Subject = "Hello fool!" });
        }
 public void DataCenterAjaxList()
 {
     var db = new FakeDatabase();
     db.AddSet(TestDataCenterData.DataCenters);
     var controller = new DataCentersController(db);
     controller.ControllerContext = new FakeControllerContext();
     DTParameters param = new DTParameters() { Start = 2, Length = 3, Search = new DTSearch(), Order = new DTOrder[1] { new DTOrder() { Column = 1, Dir = DTOrderDir.ASC } } };
     JsonResult result = controller.Ajax(param) as JsonResult;
     Assert.IsNotNull(result);
     Assert.AreEqual(3, ((List<DataCenter>)((DTResult<DataCenter>)result.Data).data).Count);
     Assert.AreEqual("Test2", ((List<DataCenter>)((DTResult<DataCenter>)result.Data).data)[0].Name);
 }
        public void CourseControllerIndexTest()
        {
            // Arrange
            var db = new FakeDatabase();
            var st = new FakeSkyTap();
            CoursesController controller = new CoursesController(db, st);

            // Act
            ViewResult result = controller.Index() as ViewResult;

            // Assert
            Assert.IsNotNull(result);
        }
        public void HomeControllerInitialIndexTest()
        {
            // Arrange
            var db = new FakeDatabase();
            db.AddSet(TestUserData.Users);
            HomeController controller = new HomeController(db);
            controller.ControllerContext = new FakeControllerContext();
            // Act
            ViewResult result = controller.Index() as ViewResult;

            // Assert
            Assert.IsNotNull(result);
        }
        public void UsersControllerInitialIndexTest()
        {
            // Arrange
            var db = new FakeDatabase();
            IAuth auth = new FakeFormAuthenticator();
            UsersController controller = new UsersController(db, auth);

            // Act
            ViewResult result = controller.Index() as ViewResult;

            // Assert
            Assert.IsNotNull(result);
        }
 public void MachineAjaxList()
 {
     var db = new FakeDatabase();
     var st = new FakeSkyTap();
     db.AddSet(TestCourseMachineTempData.CourseMachineTemps);
     var controller = new CoursesController(db, st);
     controller.ControllerContext = new FakeControllerContext();
     DTParameters param = new DTParameters() { Start = 2, Length = 5, Search = new DTSearch(), Order = new DTOrder[1] { new DTOrder() { Column = 1, Dir = DTOrderDir.ASC } }, Course = 1, SessionId = "12345" };
     JsonResult result = controller.MachineAjax(param) as JsonResult;
     Assert.IsNotNull(result);
     Assert.AreEqual(5, ((List<CourseMachineTemp>)((DTResult<CourseMachineTemp>)result.Data).data).Count);
     Assert.AreEqual("Test3", ((List<CourseMachineTemp>)((DTResult<CourseMachineTemp>)result.Data).data)[0].VMName);
 }
 public void EditStartNew()
 {
     var db = new FakeDatabase();
     db.AddSet(TestUserData.Users);
     db.AddSet(TestSeatData.Seats);
     db.AddSet(TestSeatTempData.SeatTemps);
     db.AddSet(TestDataCenterData.DataCenters);
     db.AddSet(TestCourseData.Courses);
     var st = new FakeSkyTap();
     var controller = new ClassroomsController(db, st);
     controller.ControllerContext = new FakeControllerContext();
     ViewResult result = controller.Edit(0) as ViewResult;
     Assert.IsNotNull(result);
     Assert.AreEqual(0, ((Classroom)result.Model).ClassroomId);
 }
 public void CourseEditNewStartTest()
 {
     var db = new FakeDatabase();
     var st = new FakeSkyTap();
     db.AddSet(TestCourseData.Courses);
     db.AddSet(TestCourseMachineTempData.CourseMachineTemps);
     st.AddSet(TestTemplateRESTData.templates);
     var controller = new CoursesController(db, st);
     controller.ControllerContext = new FakeControllerContext();
     ViewResult result = controller.Edit(0) as ViewResult;
     Assert.IsNotNull(result);
     Assert.AreEqual(11, ((List<Template>)((SelectList)result.ViewBag.Template).Items).Count);
     Assert.AreEqual(typeof(Course), result.Model.GetType());
     Assert.AreEqual("New", ((Course)result.Model).Name);
 }
예제 #12
0
        public void LogWriteTest()
        {
            // Arrange
            FakeDatabase db = new FakeDatabase();
            HttpContextBase cx = new FakeHttpContext();

            // Act
            Log.Write(db, cx, new Log() {Detail="TestMessage", Message=LogMessages.connected });

            // Assert
            Assert.AreEqual(1, db.LogAdded.Count);
            Assert.AreEqual(LogMessages.connected, ((Log)db.LogAdded[0]).Message);
            Assert.AreEqual("TestMessage", ((Log)db.LogAdded[0]).Detail);

        }
        public void UsersControllerEditExistingUserInitialTest()
        {
            var db = new FakeDatabase();
            IAuth auth = new FakeFormAuthenticator();
////            var st = new FakeSkyTap();
            db.AddSet(TestUserData.Users);
////            db.AddSet(TestCourseData.Courses);
////            db.AddSet(TestClassroomData.Classrooms);
////            st.AddSet(TestTemplateRESTData.templates);
            var controller = new UsersController(db, auth);
////            controller.ControllerContext = new FakeControllerContext();
            ViewResult result = controller.Edit(1) as ViewResult;
            Assert.IsNotNull(result);
            Assert.AreEqual(typeof(User), result.Model.GetType());
            Assert.AreEqual("*****@*****.**", ((User)result.Model).EmailAddress);
        }
 public void UsersControllerEditNewUserPostbackValidPasswordTest()
 {
     var db = new FakeDatabase();
     IAuth auth = new FakeFormAuthenticator();
     ////var st = new FakeSkyTap();
     db.AddSet(TestUserData.Users);
     ////db.AddSet(TestCourseData.Courses);
     ////db.AddSet(TestClassroomData.Classrooms);
     ////st.AddSet(TestTemplateRESTData.templates);
     UsersController controller = new UsersController(db, auth);
     controller.ControllerContext = new FakeControllerContext();
     User testUser = new User() { UserId = 0, EmailAddress = "TestNew", NewPassword1 = "TestPassword", NewPassword2 = "TestPassword" };
     var result = controller.Edit(testUser);
     Assert.IsNotNull(result);
     Assert.AreEqual(typeof(RedirectToRouteResult), result.GetType());
     Assert.AreEqual(1, db.Added.Count);
     Assert.AreEqual("TestNew", ((User)db.Added[0]).EmailAddress);
     Assert.AreEqual(true, PasswordHash.ValidatePassword("TestPassword", ((User)db.Added[0]).Password));
     Assert.AreEqual(1, db.LogAdded.Count);
     Assert.AreEqual(2, db.saved);
 }
예제 #15
0
 public UserServiceTests(ITestOutputHelper output)
 {
     _fakeDatabase = new FakeDatabase();
     _userService  = new UserService(l => output.WriteLine(l), _fakeDatabase);
 }
예제 #16
0
 public ReportServiceTest()
 {
     db = FakeDatabase.InitialDatabase();
 }
        protected override async ValueTask LeaseOrderItems(
            Lease lease, List <OrderItemContext <SessionOpportunity> > orderItemContexts, StoreBookingFlowContext flowContext, OrderStateContext stateContext, OrderTransaction databaseTransaction)
        {
            // Check that there are no conflicts between the supplied opportunities
            // Also take into account spaces requested across OrderItems against total spaces in each opportunity

            foreach (var ctxGroup in orderItemContexts.Where(ctx => !ctx.HasErrors).GroupBy(x => x.RequestBookableOpportunityOfferId))
            {
                // TODO: ENSURE THAT THIS IS CALLED EVERY TIME BY THE STOREBOOKINGENGINE, EVEN WITH ZERO ITEMS
                // This will ensure that items can be removed from the Order before the booking is confirmed if all items of that type have been removed from the lease

                // Step 1: Get existing lease from database

                // Step 2: Compare items in the existing lease to items in the request

                // Step 3: Add/remove lease items to match the request

                //Dictionary<long, int> existingLease = new Dictionary<long, int>();

                // Check that the Opportunity ID and type are as expected for the store
                if (ctxGroup.Key.OpportunityType != OpportunityType.ScheduledSession || !ctxGroup.Key.ScheduledSessionId.HasValue)
                {
                    foreach (var ctx in ctxGroup)
                    {
                        ctx.AddError(new OpportunityIntractableError(), "Opportunity ID and type are as not expected for the store. Likely a configuration issue with the Booking System.");
                    }
                }
                else
                {
                    //var existingOpportunities = existingLease[ctxGroup.Key.ScheduledSessionId.Value];

                    // Attempt to lease for those with the same IDs, which is atomic
                    var(result, capacityErrors, capacityLeaseErrors) = await FakeDatabase.LeaseOrderItemsForClassOccurrence(
                        databaseTransaction.FakeDatabaseTransaction,
                        flowContext.OrderId.ClientId,
                        flowContext.SellerId.SellerIdLong ?? null /* Hack to allow this to work in Single Seller mode too */,
                        flowContext.OrderId.uuid,
                        ctxGroup.Key.ScheduledSessionId.Value,
                        ctxGroup.Count());

                    switch (result)
                    {
                    case ReserveOrderItemsResult.Success:
                        // Do nothing, no errors to add
                        break;

                    case ReserveOrderItemsResult.SellerIdMismatch:
                        foreach (var ctx in ctxGroup)
                        {
                            ctx.AddError(new SellerMismatchError(), "An OrderItem SellerID did not match");
                        }
                        break;

                    case ReserveOrderItemsResult.OpportunityNotFound:
                        foreach (var ctx in ctxGroup)
                        {
                            ctx.AddError(new UnableToProcessOrderItemError(), "Opportunity not found");
                        }
                        break;

                    case ReserveOrderItemsResult.OpportunityOfferPairNotBookable:
                        foreach (var ctx in ctxGroup)
                        {
                            ctx.AddError(new OpportunityOfferPairNotBookableError(), "Opportunity not bookable");
                        }
                        break;

                    case ReserveOrderItemsResult.NotEnoughCapacity:
                        var contexts = ctxGroup.ToArray();
                        for (var i = contexts.Length - 1; i >= 0; i--)
                        {
                            var ctx = contexts[i];
                            if (capacityErrors > 0)
                            {
                                ctx.AddError(new OpportunityHasInsufficientCapacityError());
                                capacityErrors--;
                            }
                            else if (capacityLeaseErrors > 0)
                            {
                                ctx.AddError(new OpportunityCapacityIsReservedByLeaseError());
                                capacityLeaseErrors--;
                            }
                        }

                        break;

                    default:
                        foreach (var ctx in ctxGroup)
                        {
                            ctx.AddError(new OpportunityIntractableError(), "OrderItem could not be leased for unexpected reasons.");
                        }
                        break;
                    }
                }
            }
        }
예제 #18
0
		public static void Main (string[] args)
		{
			var db = new FakeDatabase ();

			var query1 = 
				from lecture in db.Lectures
				group lecture by lecture.TeacherId into grouped
				join teacher in db.Teachers on grouped.Key equals teacher.Id
				where teacher.LastName == "Williams"
				select new { 	TeacherId = grouped.Key, 
								Name = teacher.GivenName };  

			var query2 = 
				db.Lectures
				.GroupBy (lecture => lecture.TeacherId)
				.Join (db.Teachers, g => g.Key, t => t.Id,
					(g, t) => new { Grouped = g, Teacher = t})
				.Where (anon => anon.Teacher.LastName == "Williams")
				.Select (anon => new { 	TeacherId = anon.Grouped.Key,
										Name = anon.Teacher.GivenName  });
			
			Console.WriteLine ("Query syntax");
			foreach (var obj in query1) {
				Console.WriteLine (obj.TeacherId + " " + obj.Name);
			}

			#region Count
			Console.WriteLine (Environment.NewLine);
			Console.WriteLine ("Method syntax");
			foreach (var obj in query2) {
				Console.WriteLine (obj.TeacherId + " " + obj.Name);
			}
			#endregion

			#region Sum
			Console.Write (Environment.NewLine);
			var profesoresConL = db.Teachers.Count (p => p.GivenName.StartsWith ("L"));
			Console.Write ("Profesores con L : " + profesoresConL);

			Console.Write (Environment.NewLine);
			var menosDe30Total = db.Teachers
				.Where (t => t.Age < 30)
				.Sum (t => t.Age);

			var menosDe30Total1 = (from t in db.Teachers
			                       where t.Age < 30
			                       select t.Age).Sum ();
			Console.Write ("Suma de las edades de profesores menores a 30: " + menosDe30Total + " | " + menosDe30Total1);
			#endregion

			#region Min y Max
			Console.Write (Environment.NewLine);
			var edadMinSinEmail = (from t in db.Teachers
			                       where t.Email == ""
			                       select t).Min (t => t.Age);

			var edadMaxSinEmail = db.Teachers
				.Where (t => t.Email != "")
				.Max (t => t.Age);

			Console.WriteLine ("Edad mínima " + edadMinSinEmail + ", edad máxima " + edadMaxSinEmail);
			#endregion

			#region Average
			Console.Write (Environment.NewLine);
			var promedioEdadSMail = (from t in db.Teachers
			                         where t.Email == ""
			                         select t).Average (t => t.Age);

			var promedioEmailCMail = db.Teachers
				.Where (t => t.Email != "")
				.Average (t => t.Age);

			Console.WriteLine ("Edad promedio sin mail " + promedioEdadSMail + ", promedio edad con email " + promedioEmailCMail);
			#endregion

			#region All
			Console.Write (Environment.NewLine);
			bool todosMayores = db.Teachers.All (teacher => teacher.Age > 18);

			Console.WriteLine ((todosMayores ? "Todos " : "No todos ") + "los maestros son mayores");
			#endregion

			#region Any
			bool existeCosmeFulanito = db.Teachers.Any (teacher => teacher.GivenName == "Cosme"
			                           && teacher.LastName == "Fulanito");

			Console.WriteLine ((existeCosmeFulanito ? "Existe " : "No existe ") + "Cosme Fulanito");

			bool hayClases = db.Lectures.Any ();
			Console.WriteLine (hayClases ? "Hay clases, yay! " : "No hay clases :( :(");
			#endregion

			#region Order By

			var maestrosOrdenados1 = from t in db.Teachers
				orderby t.LastName.Length descending
			                         select t;

			Console.Write (Environment.NewLine);
			var maestrosOrdenados2 = db.Teachers
				.OrderBy (t => t.LastName.Length);

			Console.Write (Environment.NewLine);
			var maestrosOrdenados3 = db.Teachers
				.OrderBy (t => t.LastName.Length)
				.ThenByDescending (t => t.GivenName);

			Console.WriteLine ("Maestros ordenados 1: ");
			foreach (var teacher in maestrosOrdenados1) {
				Console.Write (teacher.GivenName + " ");
			}
			Console.WriteLine ();

			Console.WriteLine ("Maestros ordenados 2: ");
			foreach (var teacher in maestrosOrdenados2) {
				Console.Write (teacher.GivenName + " ");
			}
			Console.WriteLine ();

			Console.WriteLine ("Maestros ordenados 3: ");
			foreach (var teacher in maestrosOrdenados3) {
				Console.Write (teacher.GivenName + " ");
			}
			Console.WriteLine ();
			#endregion

			#region Partition
			var cincoMenores20 = (from t in db.Teachers
			                      where t.Age < 20
			                      orderby t.Age
			                      select t).Take (5);
			
			Console.WriteLine ("Maestros menores: ");
			foreach (var teacher in cincoMenores20) {
				Console.WriteLine (teacher.GivenName + " " + teacher.Age);
			}


			var otrosMaestros = db.Teachers
				.Where(t=> t.Age > 30)
				.OrderByDescending(t => t.Age)
				.Skip(4);
				

			Console.WriteLine ("Otros mayores: ");
			foreach (var teacher in otrosMaestros) {
				Console.WriteLine (teacher.GivenName + " " + teacher.Age);
			}
			#endregion

			Console.Read ();
		}
 public void InvalidPassword()
 {
     var db = new FakeDatabase();
     var auth = new FakeFormAuthenticator();
     db.AddSet(TestUserData.Users);
     var cx = new FakeControllerContext();
     var controller = new UsersController(db, auth);
     controller.ControllerContext = cx;
     var result = controller.Login(new LoginViewModel() { UserName = "******", Password = "******", ReturnUrl = "/" }) as ViewResult;
     Assert.IsNotNull(result);
     Assert.IsNotNull(result.ViewData.ModelState[""]);
     Assert.IsNotNull(result.ViewData.ModelState[""].Errors);
     Assert.IsTrue(result.ViewData.ModelState[""].Errors.Count == 1);
     Assert.AreEqual("The User Name or password provided is incorrect.", result.ViewData.ModelState[""].Errors[0].ErrorMessage);
     Assert.AreEqual(1, db.LogAdded.Count);
     Assert.AreEqual(LogMessages.incorrectlogon, ((Log)db.LogAdded[0]).Message);
 }
예제 #20
0
 private void Back_Click(object sender, RoutedEventArgs e)
 {
     FakeDatabase.update();
     Navigator.navigateBack();
 }
 public void EditWriteBackNew()
 {
     var db = new FakeDatabase();
     db.AddSet(TestClassroomData.Classrooms);
     db.AddSet(TestUserData.Users);
     db.AddSet(TestSeatData.Seats);
     db.AddSet(TestSeatTempData.SeatTemps);
     db.AddSet(TestDataCenterData.DataCenters);
     db.AddSet(TestCourseData.Courses);
     var st = new FakeSkyTap();
     var controller = new ClassroomsController(db, st);
     controller.ControllerContext = new FakeControllerContext();
     Classroom NewRoom = new Classroom() { ClassroomId = 0, CourseId = 1, DataCenterId = 1, Project = "ABCDE", Start = System.DateTime.Now, UserId = 1 };
     ActionResult result = controller.Edit(NewRoom, "12345");
     Assert.IsNotNull(result);
 }
 public void UsersControllerEditExistingUserPostbackUserInvalidPasswordChangeBadOldPasswordTest()
 {
     var db = new FakeDatabase();
     IAuth auth = new FakeFormAuthenticator();
     ////var st = new FakeSkyTap();
     db.AddSet(TestUserData.Users);
     ////st.AddSet(TestTemplateRESTData.templates);
     UsersController controller = new UsersController(db, auth);
     controller.ControllerContext = new FakeControllerContext();
     User testUser = new User() { UserId = 1, EmailAddress = "TestUpdate", OldPassword = "******", NewPassword1 = "NewPassword", NewPassword2 = "NewPassword" };
     var result = controller.Edit(testUser);
     Assert.IsNotNull(result);
     Assert.AreNotEqual(typeof(RedirectToRouteResult), result.GetType());
     Assert.AreEqual("Edit", ((ViewResult)result).ViewName);
     Assert.AreEqual(0, db.Added.Count);
 }
예제 #23
0
 private void Home_Click(object sender, RoutedEventArgs e)
 {
     FakeDatabase.update();
     Navigator.navigateAndClearStack(new MainScreen());
 }
 public void CourseDeleteStartTest()
 {
     var db = new FakeDatabase();
     var st = new FakeSkyTap();
     db.AddSet(TestCourseData.Courses);
     db.AddSet(TestCourseMachineData.CourseMachines);
     var controller = new CoursesController(db, st);
     controller.ControllerContext = new FakeControllerContext();
     var result = controller.Delete(1);
     Assert.IsNotNull(result);
 }
 public void UsersControllerEditNewUserPostbackInValidPasswordTest()
 {
     var db = new FakeDatabase();
     IAuth auth = new FakeFormAuthenticator();
     ////var st = new FakeSkyTap();
     db.AddSet(TestUserData.Users);
     ////db.AddSet(TestCourseData.Courses);
     ////db.AddSet(TestClassroomData.Classrooms);
     ////st.AddSet(TestTemplateRESTData.templates);
     UsersController controller = new UsersController(db, auth);
     controller.ControllerContext = new FakeControllerContext();
     User testUser = new User() { UserId = 0, EmailAddress = "TestNew", NewPassword1 = "TestPassword", NewPassword2 = "WrongPassword" };
     var result = controller.Edit(testUser);
     Assert.IsNotNull(result);
     Assert.AreNotEqual(typeof(RedirectToRouteResult), result.GetType());
     Assert.AreEqual("Edit", ((ViewResult)result).ViewName);
     Assert.AreEqual(0, db.Added.Count);
 }
 public HairLengthsContextTests()
 {
     _db = new FakeDatabase();
     _hairLengthsContext = new HairLengthsContext(_db.HairLengths);
 }
        //TODO: This should reuse code of LeaseOrderItem
        protected override async ValueTask BookOrderItems(List <OrderItemContext <SessionOpportunity> > orderItemContexts, StoreBookingFlowContext flowContext, OrderStateContext stateContext, OrderTransaction databaseTransaction)
        {
            // Check that there are no conflicts between the supplied opportunities
            // Also take into account spaces requested across OrderItems against total spaces in each opportunity

            // TODO: ENSURE THAT THIS IS CALLED EVERY TIME BY THE STOREBOOKINGENGINE, EVEN WITH ZERO ITEMS
            // This will ensure that items can be removed from the Order before the booking is confirmed if all items of that type have been removed from the lease

            // Step 1: Call lease to ensure items are already leased

            // Step 2: Set OrderItems to booked

            // Step 3: Write attendee and orderItemIntakeFormResponse to the OrderItem records, for inclusion in P later

            foreach (var ctxGroup in orderItemContexts.GroupBy(x => x.RequestBookableOpportunityOfferId))
            {
                // Check that the Opportunity ID and type are as expected for the store
                if (ctxGroup.Key.OpportunityType != OpportunityType.ScheduledSession || !ctxGroup.Key.ScheduledSessionId.HasValue)
                {
                    throw new OpenBookingException(new UnableToProcessOrderItemError(), "Opportunity ID and type are as not expected for the SessionStore, during booking");
                }

                // Attempt to book for those with the same IDs, which is atomic
                var(result, bookedOrderItemInfos) = await FakeDatabase.BookOrderItemsForClassOccurrence(
                    databaseTransaction.FakeDatabaseTransaction,
                    flowContext.OrderId.ClientId,
                    flowContext.SellerId.SellerIdLong ?? null /* Hack to allow this to work in Single Seller mode too */,
                    flowContext.OrderId.uuid,
                    ctxGroup.Key.ScheduledSessionId.Value,
                    RenderOpportunityId(ctxGroup.Key),
                    RenderOfferId(ctxGroup.Key),
                    ctxGroup.Count(),
                    false
                    );

                switch (result)
                {
                case ReserveOrderItemsResult.Success:
                    foreach (var(ctx, bookedOrderItemInfo) in ctxGroup.Zip(bookedOrderItemInfos, (ctx, bookedOrderItemInfo) => (ctx, bookedOrderItemInfo)))
                    {
                        // Set OrderItemId and access properties for each orderItemContext
                        ctx.SetOrderItemId(flowContext, bookedOrderItemInfo.OrderItemId);
                        BookedOrderItemHelper.AddPropertiesToBookedOrderItem(ctx, bookedOrderItemInfo);
                    }
                    break;

                case ReserveOrderItemsResult.SellerIdMismatch:
                    throw new OpenBookingException(new SellerMismatchError(), "An OrderItem SellerID did not match");

                case ReserveOrderItemsResult.OpportunityNotFound:
                    throw new OpenBookingException(new UnableToProcessOrderItemError(), "Opportunity not found");

                case ReserveOrderItemsResult.NotEnoughCapacity:
                    throw new OpenBookingException(new OpportunityHasInsufficientCapacityError());

                case ReserveOrderItemsResult.OpportunityOfferPairNotBookable:
                    throw new OpenBookingException(new UnableToProcessOrderItemError(), "Opportunity and offer pair were not bookable");

                default:
                    throw new OpenBookingException(new OrderCreationFailedError(), "Booking failed for an unexpected reason");
                }
            }
        }
예제 #28
0
 private BaseRepository <FooEntity> GivenABaseRepositoryWithDatabase(DataBase database)
 {
     return(new BaseRepository <FooEntity>(FakeDatabase.GivenAFactoryWithDatabase(database).Object));
 }
        public void RemoveSeatTestInvalidRequest()
        {
            var db = new FakeDatabase();
            var st = new FakeSkyTap();
            db.AddSet(TestSeatTempData.SeatTemps);
            var controller = new ClassroomsController(db, st);
            var httpRequest = new Mock<HttpRequestBase>();
            var stream = new MemoryStream(Encoding.Default.GetBytes("{'WrongParameter':50}"));
            httpRequest.Setup(r => r.InputStream).Returns(stream);

            var httpContext = new Mock<HttpContextBase>();
            httpContext.Setup(c => c.Request).Returns(httpRequest.Object);

            var routeData = new RouteData();
            controller.ControllerContext = // set mocked context
                 new ControllerContext(httpContext.Object, routeData, controller);
            var result = controller.RemoveSeat();
            dynamic jsonObject = result.Data;
            Assert.AreEqual("Done", jsonObject["Status"]);
            Assert.AreEqual(0, db.Removed.Count);
        }
 public void UsersControllerEditExistingUserPostbackAdminsitratorNoPasswordChangeTest()
 {
     var db = new FakeDatabase();
     IAuth auth = new FakeFormAuthenticator();
     ////var st = new FakeSkyTap();
     db.AddSet(TestUserData.Users);
     ////st.AddSet(TestTemplateRESTData.templates);
     UsersController controller = new UsersController(db, auth);
     controller.ControllerContext = new FakeControllerContext();
     User testUser = new User() { UserId = 1, EmailAddress = "TestUpdate" };
     var result = controller.Edit(testUser);
     Assert.IsNotNull(result);
     Assert.AreEqual(typeof(RedirectToRouteResult), result.GetType());
     Assert.AreEqual(0, db.Added.Count);
     Assert.AreEqual(1, db.Updated.Count);
     Assert.AreEqual("TestUpdate", ((User)db.Updated[0]).EmailAddress);
     Assert.AreEqual(1, db.LogAdded.Count);
     Assert.AreEqual(2, db.saved);
 }
        public void AddSeatTestInvalidClassroom()
        {
            var db = new FakeDatabase();
            var st = new FakeSkyTap();
            db.AddSet(TestSeatTempData.SeatTemps);
            db.AddSet(TestUserData.Users);
            var controller = new ClassroomsController(db, st);
            var httpRequest = new Mock<HttpRequestBase>();
            var stream = new MemoryStream(Encoding.Default.GetBytes("{'NewSeats':'[email protected]\[email protected]','Session':'12345','Classroom':'Invalid'}"));
            httpRequest.Setup(r => r.InputStream).Returns(stream);

            var httpContext = new Mock<HttpContextBase>();
            httpContext.Setup(c => c.Request).Returns(httpRequest.Object);

            var routeData = new RouteData();
            controller.ControllerContext = // set mocked context
                 new ControllerContext(httpContext.Object, routeData, controller);
            var result = controller.AddSeats();
            dynamic jsonObject = result.Data;
            Assert.AreEqual("Done", jsonObject["Status"]);
            Assert.AreEqual(0, db.Added.Count);
        }
 public void ValidUser()
 {
     var db = new FakeDatabase();
     var auth = new FakeFormAuthenticator();
     db.AddSet(TestUserData.Users);
     var controller = new UsersController(db, auth);
     controller.ControllerContext = new FakeControllerContext();
     var result = controller.Login(new LoginViewModel() { UserName = "******", Password = "******", ReturnUrl = "/" });
     Assert.AreEqual(typeof(RedirectResult), result.GetType());
     Assert.AreEqual(1, db.LogAdded.Count);
     Assert.AreEqual(LogMessages.logon, ((Log)db.LogAdded[0]).Message);
 }
 public void CourseEditNewWriteTest()
 {
     var db = new FakeDatabase();
     var st = new FakeSkyTap();
     db.AddSet(TestCourseData.Courses);
     db.AddSet(TestCourseMachineData.CourseMachines);
     db.AddSet(TestCourseMachineTempData.CourseMachineTemps);
     st.AddSet(TestTemplateRESTData.templates);
     var controller = new CoursesController(db, st);
     controller.ControllerContext = new FakeControllerContext();
     Course testCourse = new Course() { CourseId = 0, Name = "TestNew", Days = 5, Hours = 8, Template = "11111111" };
     var result = controller.Edit(testCourse, Guid.NewGuid().ToString());
     Assert.IsNotNull(result);
     Assert.AreEqual(typeof(RedirectToRouteResult), result.GetType());
     Assert.AreEqual(1, db.Added.Count);
     Assert.AreEqual("TestNew", ((Course)db.Added[0]).Name);
     Assert.AreEqual(3, db.saved);
 }
 public ActionResult Cancel()
 {
     FakeDatabase.SetUserHasAccepted(false);
     return(RedirectToAction("Home", "Home"));
 }
예제 #35
0
        protected override async ValueTask LeaseOrderItems(Lease lease, List <OrderItemContext <FacilityOpportunity> > orderItemContexts, StoreBookingFlowContext flowContext, OrderStateContext stateContext, OrderTransaction databaseTransaction)
        {
            // Check that there are no conflicts between the supplied opportunities
            // Also take into account spaces requested across OrderItems against total spaces in each opportunity

            foreach (var ctxGroup in orderItemContexts.Where(ctx => !ctx.HasErrors).GroupBy(x => x.RequestBookableOpportunityOfferId))
            {
                // Check that the Opportunity ID and type are as expected for the store
                if (ctxGroup.Key.OpportunityType != OpportunityType.FacilityUseSlot || !ctxGroup.Key.SlotId.HasValue)
                {
                    foreach (var ctx in ctxGroup)
                    {
                        ctx.AddError(new OpportunityIntractableError(), "Opportunity ID and type are as not expected for the store. Likely a configuration issue with the Booking System.");
                    }
                }
                else
                {
                    // Attempt to lease for those with the same IDs, which is atomic
                    var(result, capacityErrors, capacityLeaseErrors) = await FakeDatabase.LeaseOrderItemsForFacilitySlot(databaseTransaction.FakeDatabaseTransaction, flowContext.OrderId.ClientId, flowContext.SellerId.SellerIdLong ?? null /* Hack to allow this to work in Single Seller mode too */, flowContext.OrderId.uuid, ctxGroup.Key.SlotId.Value, ctxGroup.Count());

                    switch (result)
                    {
                    case ReserveOrderItemsResult.Success:
                        // Do nothing, no errors to add
                        break;

                    case ReserveOrderItemsResult.SellerIdMismatch:
                        foreach (var ctx in ctxGroup)
                        {
                            ctx.AddError(new SellerMismatchError(), "An OrderItem SellerID did not match");
                        }
                        break;

                    case ReserveOrderItemsResult.OpportunityNotFound:
                        foreach (var ctx in ctxGroup)
                        {
                            ctx.AddError(new UnableToProcessOrderItemError(), "Opportunity not found");
                        }
                        break;

                    case ReserveOrderItemsResult.OpportunityOfferPairNotBookable:
                        foreach (var ctx in ctxGroup)
                        {
                            ctx.AddError(new OpportunityOfferPairNotBookableError(), "Opportunity not bookable");
                        }
                        break;

                    case ReserveOrderItemsResult.NotEnoughCapacity:
                        var contexts = ctxGroup.ToArray();
                        for (var i = contexts.Length - 1; i >= 0; i--)
                        {
                            var ctx = contexts[i];
                            if (capacityErrors > 0)
                            {
                                ctx.AddError(new OpportunityHasInsufficientCapacityError());
                                capacityErrors--;
                            }
                            else if (capacityLeaseErrors > 0)
                            {
                                ctx.AddError(new OpportunityCapacityIsReservedByLeaseError());
                                capacityLeaseErrors--;
                            }
                        }

                        break;

                    default:
                        foreach (var ctx in ctxGroup)
                        {
                            ctx.AddError(new OpportunityIntractableError(), "OrderItem could not be leased for unexpected reasons.");
                        }
                        break;
                    }
                }
            }
        }
예제 #36
0
        private object ParseCommand()
        {
            if (Connection.State != ConnectionState.Open)
            {
                throw new Exception("Cmd001: Connection must be open before calling a command");
            }

            foreach (FakeParameter param in _parameterCollection)
            {
                CommandText = CommandText.Replace(param.ParameterName, param.Value.ToString());
            }

            FakeQuery operations = JsonConvert.DeserializeObject <FakeQuery>(CommandText);

            object result = null;

            {
                {
                    if (operations.Create != null)
                    {
                        if (operations.Create.Table == null)
                        {
                            throw new FakeException("Create:Table is not specified");
                        }

                        {
                            FakeDatabase db = JsonConvert.DeserializeObject <FakeDatabase>(File.ReadAllText(Connection.Database));
                            if (db == null)
                            {
                                db = new FakeDatabase()
                                {
                                    Name = Connection.Database
                                }
                            }
                            ;

                            if (db.Tables.Find(x => x.Name == operations.Create.Table.Name) != null)
                            {
                                throw new FakeException("Create:Table is already exists");
                            }

                            db.Tables.Add(operations.Create.Table);
                            File.WriteAllText(Connection.Database, JsonConvert.SerializeObject(db));
                        }
                        result = 1;
                    }
                    else if (operations.Insert != null)
                    {
                        int rowsAffected = 0;
                        {
                            FakeDatabase db    = JsonConvert.DeserializeObject <FakeDatabase>(File.ReadAllText(Connection.Database));
                            var          table = db.Tables.Find(x => x.Name == operations.Insert.Into);
                            if (table == null)
                            {
                                throw new FakeException("Insert:Table is not exists");
                            }

                            List <object> rows = new List <object>();
                            for (int i = 0; i < table.Headers.Count; i++)
                            {
                                rows.Add(new object());
                            }

                            for (int i = 0; i < operations.Insert.Values.Count; i++)
                            {
                                int index = i % operations.Insert.Headers.Count;

                                var header = table.Headers.Find(x => x.Name == operations.Insert.Headers[index]);
                                if (header.Attributes.Contains(FakeDbAttribute.NotNull) && operations.Insert.Values[i] == null)
                                {
                                    throw new FakeException($"Insert: Field {operations.Insert.Headers[index]} has NotNull attribute, but passed value is null");
                                }

                                rows[i] = operations.Insert.Values[i];

                                if (i % operations.Insert.Headers.Count == operations.Insert.Headers.Count - 1)
                                {
                                    table.Rows.Add(rows);
                                    rows = new List <object>(table.Headers.Count);
                                    rowsAffected++;
                                }
                            }

                            File.WriteAllText(Connection.Database, JsonConvert.SerializeObject(db));
                        }

                        result = rowsAffected;
                    }
                    else if (operations.Update != null)
                    {
                        int rowsAffected = 0;
                        {
                            FakeDatabase db    = JsonConvert.DeserializeObject <FakeDatabase>(File.ReadAllText(Connection.Database));
                            var          table = db.Tables.Find(x => x.Name == operations.Update.Table);

                            // Parse where
                            string[] words = operations.Update.Where.Split('=');
                            int      index = table.Headers.FindIndex(u => u.Name == words[0]);
                            foreach (var row in table.Rows.Where(u => u[index].ToString() == words[1].Trim()))
                            {
                                for (int i = 0; i < operations.Update.To.Count; i++)
                                {
                                    int idx = table.Headers.FindIndex(x => x.Name.ToLower() == operations.Update.To[i].Field.Trim().ToLower());
                                    row[idx] = operations.Update.To[i].Value;
                                }
                                rowsAffected++;
                            }

                            File.WriteAllText(Connection.Database, JsonConvert.SerializeObject(db));
                        }

                        result = rowsAffected;
                    }
                    else if (operations.Delete != null)
                    {
                        int rowsAffected = 0;
                        {
                            FakeDatabase db    = JsonConvert.DeserializeObject <FakeDatabase>(File.ReadAllText(Connection.Database));
                            var          table = db.Tables.Find(x => x.Name == operations.Delete.From);

                            // Parse where
                            string[] words = operations.Delete.Where.Split('=');
                            int      index = table.Headers.FindIndex(u => u.Name == words[0]);

                            var rowsToDelete = table.Rows.Where(u => u[index].ToString() == words[1].Trim()).ToList();

                            for (int i = 0; i < rowsToDelete.Count; i++)
                            {
                                table.Rows.Remove(rowsToDelete[i]);
                                rowsAffected++;
                            }

                            File.WriteAllText(Connection.Database, JsonConvert.SerializeObject(db));
                        }

                        result = rowsAffected;
                    }
                    else if (operations.Select != null)
                    {
                        {
                            FakeDatabase db    = JsonConvert.DeserializeObject <FakeDatabase>(File.ReadAllText(Connection.Database));
                            var          table = db.Tables.Find(x => x.Name == operations.Select.From);

                            List <List <object> > rowsToSelect;

                            if (operations.Select.Where != null)
                            {
                                // Where filter
                                string[] words = operations.Select.Where.Split('=');
                                int      index = table.Headers.FindIndex(u => u.Name == words[0]);
                                rowsToSelect = table.Rows.Where(u => u[index].ToString() == words[1].Trim()).ToList();
                            }
                            else
                            {
                                // Without where
                                rowsToSelect = table.Rows;
                            }
                            List <List <object> > tableResults = new List <List <object> >();
                            List <object>         headers      = new List <object>();
                            List <int>            indices      = new List <int>();
                            if (operations.Select.Fields != null && operations.Select.Fields.Count > 0)
                            {
                                // Fields filter
                                for (int i = 0; i < operations.Select.Fields.Count; i++)
                                {
                                    int indexOfHeader = table.Headers.FindIndex(u => u.Name == operations.Select.Fields[i]);
                                    if (indexOfHeader == -1)
                                    {
                                        throw new FakeException($"Select: Field {operations.Select.Fields[i]} is not exists");
                                    }
                                    headers.Add(operations.Select.Fields[i]);
                                    indices.Add(indexOfHeader);
                                }
                            }
                            else
                            {
                                // All fields
                                for (int i = 0; i < table.Headers.Count; i++)
                                {
                                    headers.Add(table.Headers[i].Name);
                                    indices.Add(i);
                                }
                            }
                            tableResults.Add(headers);

                            foreach (List <object> row in rowsToSelect)
                            {
                                List <object> fieldRow = new List <object>();
                                for (int i = 0; i < indices.Count; i++)
                                {
                                    fieldRow.Add(row[indices[i]]);
                                }
                                tableResults.Add(fieldRow);
                            }

                            result = tableResults;
                        }
                    }
                }
            }

            return(result);
        }
 public ProjectService(FakeDatabase fakeDatabase)
     : base(fakeDatabase)
 {
 }
예제 #38
0
 public UsersContextTests()
 {
     _db           = new FakeDatabase();
     _usersContext = new UsersContext(_db.Users);
 }
예제 #39
0
 private void Button_Click(object sender, RoutedEventArgs e)
 {
     video.toggleRecent();
     FakeDatabase.update();
     Navigator.navigate(new PlayScreen());
 }