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);
                    }
                })
            );
        }
Exemple #7
0
        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);
                });
        }