public void First_visit_should_create_same_pages_and_widgets_as_the_template_user() { var profile = default(UserProfile); UserSetup userVisitModel = null; var facade = default(Facade); var anonUserName = default(string); var anonTabs = default(List<Tab>); "Given anonymous user who has never visited the site before".Context(() => { profile = MembershipHelper.CreateNewAnonUser(); facade = new Facade(new AppContext(string.Empty, profile.UserName)); // Load the anonymous user pages and widgets anonUserName = facade.GetUserSettingTemplate().AnonUserSettingTemplate.UserName; anonTabs = facade.GetTabsOfUser(facade.GetUserGuidFromUserName(anonUserName)); }); "When the user visits for the first time".Do(() => { userVisitModel = facade.FirstVisitHomeTab(profile.UserName, string.Empty, true, false); }); "It creates widgets on the newly created page at exact columns and positions as the anon user's pages".Assert(() => { anonTabs.Each(anonTab => { var userTab = userVisitModel.UserTabs.First(page => page.Title == anonTab.Title && page.OrderNo == anonTab.OrderNo && page.PageType == anonTab.PageType); facade.GetColumnsInTab(anonTab.ID).Each(anonColumn => { var userColumns = facade.GetColumnsInTab(userTab.ID); var userColumn = userColumns.First(column => column.ColumnNo == anonColumn.ColumnNo); var anonColumnWidgets = facade.GetWidgetInstancesInZoneWithWidget(anonColumn.WidgetZone.ID); var userColumnWidgets = facade.GetWidgetInstancesInZoneWithWidget(userColumn.WidgetZone.ID); // Ensure the widgets from the anonymous user template's columns are // in the same column and row. anonColumnWidgets.Each(anonWidget => Assert.True(userColumnWidgets.Where(userWidget => userWidget.Title == anonWidget.Title && userWidget.Expanded == anonWidget.Expanded && userWidget.State == anonWidget.State && userWidget.Resized == anonWidget.Resized && userWidget.Height == anonWidget.Height && userWidget.OrderNo == anonWidget.OrderNo).Count() == 1)); }); }); facade.Dispose(); }); }
public void MoveTab(int pageId, int orderNo) { AspectF.Define.HowLong(Services.Get<ILogger>(), "Begin: MoveTab {0} {1}".FormatWith(pageId, orderNo), "End: MoveTab {0}") .Do(() => { using (var facade = new Facade(AppContext.GetContext(Context))) { facade.MoveTab(pageId, orderNo); } }); }
public void ChangePageLayout(int newLayout) { AspectF.Define.HowLong(Services.Get<ILogger>(), "Begin: ChangePageLayout {0}".FormatWith(newLayout), "End: ChangePageLayout {0}") .Do(() => { using (var facade = new Facade(AppContext.GetContext(Context))) { facade.ModifyTabLayout(newLayout); } }); }
public static void UsingNewAnonSetup_ByFacade(string userName, Action<UserSetup> callback) { // Create default page setup which is expected to populate all three columns with widgets using(var facade = new Facade(new AppContext(string.Empty, userName))) { var response = facade.FirstVisitHomeTab(userName, string.Empty, true, false); Assert.NotNull(response.CurrentTab); Assert.NotEqual(0, response.UserTabs.Count()); Assert.NotNull(response.UserSetting); try { callback(response); } finally { // TODO: Clear the setup } } }
public static void UsingNewAnonSetup(string userName, Action<UserSetup> callback) { // Create default page setup which is expected to populate all three columns with widgets //var response = WorkflowTest.Run<FirstVisitWorkflow, UserVisitWorkflowRequest, UserVisitWorkflowResponse>( // new UserVisitWorkflowRequest { IsAnonymous = true, TabName = "", UserName = userName } // ); var response = new Facade(new AppContext(Guid.NewGuid().ToString(), userName)).FirstVisitHomeTab(userName, string.Empty, true, false); Assert.NotNull(response.CurrentTab); Assert.NotEqual(0, response.UserTabs.Count()); Assert.NotNull(response.UserSetting); try { callback(response); } finally { // TODO: Clear the setup } }
public void Layout_Change_Should_Move_Widgets_To_Last_Available_Column_ByFacade() { const int ColumnsBeforeChange = 3; const int ColumnsAfterChange = 2; const int LayoutType = 2; Facade.BootStrap(); MembershipHelper.UsingNewAnonUser((profile) => SetupHelper.UsingNewAnonSetup_ByFacade(profile.UserName, (setup) => { using (var facade = new Facade(new AppContext(string.Empty, profile.UserName))) { int originalLayoutType = setup.CurrentPage.LayoutType; // Ensure there's widgets on the last column WidgetZone lastZone = DatabaseHelper.GetSingle<WidgetZone, int, int>(DatabaseHelper.SubsystemEnum.WidgetZone, setup.CurrentPage.ID, ColumnsBeforeChange - 1, LinqQueries.CompiledQuery_GetWidgetZoneByPageId_ColumnNo); List<WidgetInstance> widgetsOnLastZone = DatabaseHelper.GetList<WidgetInstance, int>(DatabaseHelper.SubsystemEnum.WidgetInstance, lastZone.ID, LinqQueries.CompiledQuery_GetWidgetInstancesByWidgetZoneId); Assert.AreNotEqual(0, widgetsOnLastZone.Count, "No widget found on last column to move"); // Change to 25%, 75% two column layout facade.ModifyPageLayout(LayoutType); // Get the page setup again to ensure the number of columns are changed var userSetup = facade.RepeatVisitHomePage(profile.UserName, string.Empty, true, DateTime.Now, false); Assert.AreEqual(ColumnsAfterChange, userSetup.CurrentPage.ColumnCount, "Number of columns did not change"); // Get the columns to verify the column number are same and each column has the expected width set List<Column> columns = DatabaseHelper.GetList<Column, int>(DatabaseHelper.SubsystemEnum.Column, userSetup.CurrentPage.ID, LinqQueries.CompiledQuery_GetColumnsByPageId); Assert.AreEqual(ColumnsAfterChange, columns.Count, "There are still more columns in database"); int[] columnWidths = Page.GetColumnWidths(LayoutType); foreach (Column col in columns) Assert.AreEqual(columnWidths[col.ColumnNo], col.ColumnWidth, "Column width is not as expected for Column No: " + col.ColumnNo); // Ensure the last column does not have any widgets List<WidgetInstance> remainingWidgetsOnLastZone = DatabaseHelper.GetList<WidgetInstance, int>(DatabaseHelper.SubsystemEnum.WidgetInstance, lastZone.ID, LinqQueries.CompiledQuery_GetWidgetInstancesByWidgetZoneId); Assert.AreEqual(0, remainingWidgetsOnLastZone.Count, "Widgets are still in the last column. {0}".FormatWith(lastZone.ID)); // Now change back to 3 column layout and ensure the last column is added facade.ModifyPageLayout(originalLayoutType); List<Column> originalColumns = DatabaseHelper.GetList<Column, int>(DatabaseHelper.SubsystemEnum.Column, setup.CurrentPage.ID, LinqQueries.CompiledQuery_GetColumnsByPageId); Assert.AreEqual(ColumnsBeforeChange, originalColumns.Count, "There are still more columns in database"); // and the column width distribution must have changed as well int[] originalColumnWidths = Page.GetColumnWidths(originalLayoutType); foreach (Column col in originalColumns) Assert.AreEqual(originalColumnWidths[col.ColumnNo], col.ColumnWidth, "Column width is not as expected for Column No: " + col.ColumnNo); } }) ); }
public void Very_First_Vist_With_Empty_Database_Should_Setup_Default_Pages_ByFacade() { Facade.BootStrap(); // Initialize database to empty state so that we can test the first time initalization process using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings[1].ConnectionString)) using (SqlCommand cmd = new SqlCommand("EXEC Resurrection", con)) { con.Open(); cmd.ExecuteNonQuery(); } // Prepare the database for use using (var facade = new Facade(new AppContext(string.Empty, string.Empty))) { facade.SetupDefaultSetting(); } // Do the first visit test First_Visit_Should_Return_Pages_And_Settings_ByFacade(); }
public void Revisit_should_load_the_pages_and_widgets_exactly_the_same() { var profile = default(UserProfile); UserSetup userVisitModel = null; UserSetup userRevisitModel = null; var facade = default(Facade); "Given an anonymous user who visited first".Context(() => { profile = MembershipHelper.CreateNewAnonUser(); facade = new Facade(new AppContext(string.Empty, profile.UserName)); userVisitModel = facade.FirstVisitHomeTab(profile.UserName, string.Empty, true, false); }); "When the same user visits again".Do(() => { userRevisitModel = facade.RepeatVisitHomeTab(profile.UserName, string.Empty, true, false); }); "It should load the exact same pages, column and widgets as the first visit produced".Assert(() => { userVisitModel.UserTabs.Each(firstVisitTab => { Assert.True(userRevisitModel.UserTabs.Exists(page => page.ID == firstVisitTab.ID)); var revisitTab = userRevisitModel.UserTabs.First(page => page.ID == firstVisitTab.ID); var revisitTabColumns = facade.GetColumnsInTab(revisitTab.ID); facade.GetColumnsInTab(firstVisitTab.ID).Each(firstVisitColumn => { var revisitColumn = revisitTabColumns.First(column => column.ID == firstVisitColumn.ID); var firstVisitWidgets = facade.GetWidgetInstancesInZoneWithWidget(firstVisitColumn.WidgetZone.ID); var revisitWidgets = facade.GetWidgetInstancesInZoneWithWidget(revisitColumn.WidgetZone.ID); firstVisitWidgets.Each(firstVisitWidget => Assert.True(revisitWidgets.Where(revisitWidget => revisitWidget.Id == firstVisitWidget.Id).Count() == 1)); }); }); facade.Dispose(); }); }
public void User_can_visit_a_page_directly_and_that_page_becomes_the_default() { var user = default(UserProfile); var facade = default(Facade); var userSetup = default(UserSetup); var anotherTab = default(Tab); "Given a user who has more than one tabs".Context(() => { user = MembershipHelper.CreateNewAnonUser(); facade = new Facade(new AppContext(user.UserName, user.UserName)); userSetup = facade.FirstVisitHomeTab(user.UserName, string.Empty, true, false); }); "When the user visits another tab directly".Do(() => { anotherTab = userSetup.UserTabs.Where(p => p.ID != userSetup.CurrentTab.ID).FirstOrDefault(); if (null == anotherTab) { anotherTab = facade.CreateTab("Test Tab", 0); facade.SetCurrentTab(facade.GetUserGuidFromUserName(user.UserName), userSetup.CurrentTab.ID); } facade.RepeatVisitHomeTab(user.UserName, anotherTab.UserTabName, true, false); }); "It becomes the default tab".Assert(() => { var revisit = facade.RepeatVisitHomeTab(user.UserName, string.Empty, true, false); Assert.Equal(anotherTab.ID, revisit.CurrentTab.ID); }); }