private Excel.Worksheet InsertOKToModifyItemData(AddinRibbonController ribbon, string itemName, bool getSecondInstance)
        {
            //Login
            if (!getSecondInstance)
            {
                AddinTestUtility.LoginExpectSuccess(ribbon, AddinTestUtility.LoginEmail, AddinTestUtility.LoginPsw);
            }

            //Insert item
            ribbon.InvokeButton(AddinRibbonButton.InsertItem);

            var itemDlg = InsertItemDriver.FindFromParent(ribbon.ExcelElement);

            itemDlg.SelectedItem = itemName;
            itemDlg.AllowPublish = true;
            itemDlg.SelectInsertVerifySuccess();

            //Wait for item to be inserted in item-named worksheet
            var sheetName = itemName;

            if (getSecondInstance)
            {
                sheetName += " 1";
            }
            var ws = ExcelAutoUtility.GetWorkSheetWithTimeout(_wb.Wb, sheetName, AddinTestUtility.WebServiceResponsePopulateTimeout);

            //Wait for access to worksheet to be stable
            ExcelAutoUtility.WaitForNewWorksheetToBeAccessible(ws);

            return(ws);
        }
        public void LoginDialog_RememberMeSelectedLogout_EmailOnlyRemembered()
        {
            var ribbon = AddinRibbonController.Initialize(_app);

            //Login with Remember Me selected
            var loginDlg = AddinTestUtility.OpenLoginDialog(ribbon);

            loginDlg.Email      = AddinTestUtility.LoginEmail;
            loginDlg.Password   = AddinTestUtility.LoginPsw;
            loginDlg.RememberMe = true;
            loginDlg.SelectOkVerifySuccess();

            //Logout
            ribbon.InvokeButton(AddinRibbonButton.Logout);
            ribbon.ValidateSingleButtonState(AddinRibbonButton.Logout, RibbonButtonState.NonVisible);

            //Open login and expect only email is remembered
            ribbon.Refresh();
            ribbon.InvokeButton(AddinRibbonButton.Login);

            loginDlg = AddinTestUtility.OpenLoginDialog(ribbon);
            Assert.AreEqual(AddinTestUtility.LoginEmail, loginDlg.Email);
            Assert.AreEqual(string.Empty, loginDlg.Password);
            Assert.IsTrue(loginDlg.RememberMe);

            //End test logged-out / remember-me deselected
            loginDlg.Password   = AddinTestUtility.LoginPsw;
            loginDlg.RememberMe = false;
            loginDlg.SelectOkVerifySuccess();

            ribbon.InvokeButton(AddinRibbonButton.Logout);
            ribbon.ValidateSingleButtonState(AddinRibbonButton.Logout, RibbonButtonState.NonVisible);
        }
        public void LoginDialog_RememberMeSelectedLogout_RememberEmailOnlyOnStartup()
        {
            var ribbon = AddinRibbonController.Initialize(_app);

            //Login and select Remember Me
            var loginDlg = AddinTestUtility.OpenLoginDialog(ribbon);

            loginDlg.Email      = AddinTestUtility.LoginEmail;
            loginDlg.Password   = AddinTestUtility.LoginPsw;
            loginDlg.RememberMe = true;
            loginDlg.SelectOkVerifySuccess();

            //Logout
            ribbon.InvokeButton(AddinRibbonButton.Logout);
            ribbon.ValidateSingleButtonState(AddinRibbonButton.Logout, RibbonButtonState.NonVisible);

            //Close excel
            _wb.Dispose();
            _app.Dispose();

            //Re-open excel
            _app = ExcelAutoUtility.OpenAndInstallAddin("TheAddIn", out _facade);
            _wb  = new ExcelWorkbookWrapper(_app.App.Workbooks.Add());

            ribbon = AddinRibbonController.Initialize(_app);

            //Validate not auto-logged-in, but email addr remembered
            loginDlg = AddinTestUtility.OpenLoginDialog(ribbon);

            Assert.AreEqual(AddinTestUtility.LoginEmail, loginDlg.Email);
            Assert.AreEqual(string.Empty, loginDlg.Password);

            //Close dialog
            loginDlg.SelectCancelVerifySuccess();
        }
        public void LoginDialog_RememberMeDeselected_NotLoggedInOnStartup()
        {
            var ribbon = AddinRibbonController.Initialize(_app);

            //Login and select Remember Me
            var loginDlg = AddinTestUtility.OpenLoginDialog(ribbon);

            loginDlg.Email      = AddinTestUtility.LoginEmail;
            loginDlg.Password   = AddinTestUtility.LoginPsw;
            loginDlg.RememberMe = false;
            loginDlg.SelectOkVerifySuccess();

            //Close excel
            _wb.Dispose();
            _app.Dispose();

            //Re-open excel
            _app = ExcelAutoUtility.OpenAndInstallAddin("TheAddIn", out _facade);
            _wb  = new ExcelWorkbookWrapper(_app.App.Workbooks.Add());

            //Validate not auto-logged-in
            ribbon = AddinRibbonController.Initialize(_app);

            Assert.AreEqual(RibbonButtonState.Enabled, ribbon.GetButtonState(AddinRibbonButton.Login));
        }
        public void InsertItemDialog_InsertViaOK_Success()
        {
            var ribbon = AddinRibbonController.Initialize(_app);

            //Login
            AddinTestUtility.LoginExpectSuccess(ribbon, AddinTestUtility.LoginEmail, AddinTestUtility.LoginPsw);

            //Insert item
            ribbon.InvokeButton(AddinRibbonButton.InsertItem);

            var itemDlg = InsertItemDriver.FindFromParent(ribbon.ExcelElement);

            itemDlg.SelectedItem = AddinTestUtility.ReadonlyItemName;
            itemDlg.SelectInsertVerifySuccess();

            //Wait for item to be inserted in item-named worksheet
            var newlyCreatedItemSheet = ExcelAutoUtility.GetWorkSheetWithTimeout(_wb.Wb, AddinTestUtility.ReadonlyItemName, AddinTestUtility.WebServiceResponsePopulateTimeout);

            ribbon.Refresh();
            Assert.AreEqual(string.Empty, ribbon.ValidateExpectedButtonStates(ExpectedButtonStates.OnNonPublishableItemCell));

            //Validate cell content from inserted item
            Assert.AreEqual("Sumlev", ExcelAutoUtility.GetCellValue(newlyCreatedItemSheet, 1, 1));
            Assert.AreEqual(-10.42333312, ExcelAutoUtility.GetCellValue(newlyCreatedItemSheet, 58, 46));
        }
        public void HistoryDialog_Select_BrowserPageLaunched()
        {
            var ribbon = AddinRibbonController.Initialize(_app);

            //Login
            AddinTestUtility.LoginExpectSuccess(ribbon, AddinTestUtility.LoginEmail, AddinTestUtility.LoginPsw);

            //Insert item
            ribbon.InvokeButton(AddinRibbonButton.InsertItem);

            var itemDlg = InsertItemDriver.FindFromParent(ribbon.ExcelElement);

            itemDlg.SelectedItem = AddinTestUtility.ReadonlyItemName;
            itemDlg.SelectInsertVerifySuccess();

            //Buttons including History now enabled
            //Open History link

            //Get ribbon tab automation element again to get its newly-enabled instances of descendant buttons
            ribbon.Refresh();

            ribbon.InvokeButton(AddinRibbonButton.History);

            Thread.Sleep(AddinTestUtility.WaitForSelectedWebLinkDelay);
        }
        private void CreateItemDialogCreateSimpleItem(AddinRibbonController ribbon, string newItemName, string newItemDescr)
        {
            //Login
            AddinTestUtility.LoginExpectSuccess(ribbon, AddinTestUtility.LoginEmail, AddinTestUtility.LoginPsw);

            //Create a data range from which to create item
            var sheet = _wb.Wb.ActiveSheet as Excel.Worksheet;

            ExcelAutoUtility.SetCellValue(sheet, 1, 1, "colA");
            ExcelAutoUtility.SetCellValue(sheet, 1, 2, "colB");
            ExcelAutoUtility.SetCellValue(sheet, 2, 1, 1);
            ExcelAutoUtility.SetCellValue(sheet, 2, 2, 2);
            ExcelAutoUtility.SetCellValue(sheet, 3, 1, 3);
            ExcelAutoUtility.SetCellValue(sheet, 3, 2, 4);

            var range = sheet.get_Range("A1", "B3");

            range.Select();

            //Create item
            ribbon.InvokeButton(AddinRibbonButton.Create);

            var createItemDlg = CreateItemDriver.FindFromParent(ribbon.ExcelElement);

            createItemDlg.Name = newItemName;
            createItemDlg.Desc = newItemDescr;

            createItemDlg.SelectCreateVerifySuccess();
        }
        public void CreateItemDialog_CreateSimpleItem_Success()
        {
            var ribbon = AddinRibbonController.Initialize(_app);

            var newItemName  = "uitest" + AddinTestUtility.GetUniqueSuffix();
            var newItemDescr = "sample description";

            CreateItemDialogCreateSimpleItem(ribbon, newItemName, newItemDescr);

            ribbon.Refresh();
            Assert.AreEqual(string.Empty, ribbon.ValidateExpectedButtonStates(ExpectedButtonStates.OnPublishableItemCell));

            //Validate item got created by finding in Manage Items

            //Get ribbon control again after enabled states changed from above
            ribbon.Refresh();

            ribbon.InvokeButton(AddinRibbonButton.ManageItems);

            var manageItemsDlg = ManageItemsDriver.FindFromParent(ribbon.ExcelElement);

            manageItemsDlg.SelectedItem = newItemName; //no ex means success

            manageItemsDlg.SelectCloseButtonVerifySuccess();
        }
        public static void ClassInitialize(TestContext context)
        {
            AddinTestUtility.SetEnvironmentVars(AddinTestUtility.DemoUrl);

            if (Debugger.IsAttached) //use excel-per-instance only when running from VS - blows up running automated from console
            {
                _app = ExcelAutoUtility.OpenAndInstallAddin("TheAddIn", out _facade);
            }
        }
        public void RibbonBar_StartupLoggedIn_SelectedItemButtonsEnabled()
        {
            var ribbon = AddinRibbonController.Initialize(_app);

            //Login
            AddinTestUtility.LoginExpectSuccess(ribbon, AddinTestUtility.LoginEmail, AddinTestUtility.LoginPsw);

            ribbon.Refresh();
            Assert.AreEqual(string.Empty, ribbon.ValidateExpectedButtonStates(ExpectedButtonStates.LoggedInButtonStates));
        }
        public void CreateItemDialog_CreateSecondItemSameSheet_Success()
        {
            var ribbon = AddinRibbonController.Initialize(_app);

            //Login
            AddinTestUtility.LoginExpectSuccess(ribbon, AddinTestUtility.LoginEmail, AddinTestUtility.LoginPsw);

            //Insert item
            ribbon.InvokeButton(AddinRibbonButton.InsertItem);

            var itemDlg = InsertItemDriver.FindFromParent(ribbon.ExcelElement);

            itemDlg.SelectedItem = AddinTestUtility.ReadonlyItemName;
            itemDlg.AllowPublish = true;
            itemDlg.SelectInsertVerifySuccess();

            //Wait for item to be inserted in item-named worksheet
            var newlyCreatedItemSheet = ExcelAutoUtility.GetWorkSheetWithTimeout(_wb.Wb, AddinTestUtility.ReadonlyItemName, AddinTestUtility.WebServiceResponsePopulateTimeout);

            ribbon.Refresh();
            Assert.AreEqual(string.Empty, ribbon.ValidateExpectedButtonStates(ExpectedButtonStates.OnPublishableItemCell));

            ExcelAutoUtility.SetCellValue(newlyCreatedItemSheet, 2, 48, "singleCellValue");
            var range = newlyCreatedItemSheet.get_Range("AV2", "AV2");

            range.Select();

            //Force ribbon refresh in this special case of selecting range programmatically via excel automation
            //which does not result in ribbon refresh
            ribbon.ForceRibbonRefresh();

            Assert.AreEqual(string.Empty, ribbon.ValidateExpectedButtonStates(ExpectedButtonStates.OnExistingAllowPublishItemSheetOffItemCell));

            //Create the second item
            var newItemName  = "uitest" + AddinTestUtility.GetUniqueSuffix();
            var newItemDescr = "sample description #2";

            ribbon.Refresh();
            ribbon.InvokeButton(AddinRibbonButton.Create);

            var createItemDlg = CreateItemDriver.FindFromParent(ribbon.ExcelElement);

            createItemDlg.Name = newItemName;
            createItemDlg.Desc = newItemDescr;

            createItemDlg.SelectCreateVerifySuccess();

            ribbon.Refresh();
            Assert.AreEqual(string.Empty, ribbon.ValidateExpectedButtonStates(ExpectedButtonStates.OnPublishableItemCell));
        }
        public void LoginDialog_InvalidCredentials_ExpectedError()
        {
            var ribbon = AddinRibbonController.Initialize(_app);

            //Attempt login with invalid credential
            var loginDlg = AddinTestUtility.OpenLoginDialog(ribbon);

            loginDlg.Email      = AddinTestUtility.KnownInvalidLoginEmail;
            loginDlg.Password   = AddinTestUtility.KnownInvalidLoginPassword;
            loginDlg.RememberMe = false;
            loginDlg.SelectOkVerifyFailure(LoginDriver.ErrorMessageType.Credentials);

            //Attempt login with valid credential (after the failed attempt above)
            loginDlg.Email      = AddinTestUtility.LoginEmail;
            loginDlg.Password   = AddinTestUtility.LoginPsw;
            loginDlg.RememberMe = false;
            loginDlg.SelectOkVerifySuccess();
        }
        public void LoginDialog_RememberMeSelected_LoggedInOnStartup()
        {
            var ribbon = AddinRibbonController.Initialize(_app);

            //Login and select Remember Me
            var loginDlg = AddinTestUtility.OpenLoginDialog(ribbon);

            loginDlg.Email      = AddinTestUtility.LoginEmail;
            loginDlg.Password   = AddinTestUtility.LoginPsw;
            loginDlg.RememberMe = true;
            loginDlg.SelectOkVerifySuccess();

            //Close excel
            _wb.Dispose();
            _app.Dispose();

            //Re-open excel
            _app = ExcelAutoUtility.OpenAndInstallAddin("TheAddIn", out _facade);
            _wb  = new ExcelWorkbookWrapper(_app.App.Workbooks.Add());

            //Validate auto-logged-in
            ribbon = AddinRibbonController.Initialize(_app,
                                                      true); //disableWaitForRibbonReady

            ribbon.PostInitializeSpecialCaseAutologgedIn();

            ribbon.ValidateSingleButtonState(AddinRibbonButton.Logout, RibbonButtonState.Enabled, AddinTestUtility.AuthenticationTimeout);

            //Leave test in a logged-out / non-remember-me state
            ribbon.InvokeButton(AddinRibbonButton.Logout);
            ribbon.ValidateSingleButtonState(AddinRibbonButton.Logout, RibbonButtonState.NonVisible);

            loginDlg            = AddinTestUtility.OpenLoginDialog(ribbon);
            loginDlg.Email      = AddinTestUtility.LoginEmail;
            loginDlg.Password   = AddinTestUtility.LoginPsw;
            loginDlg.RememberMe = false;
            loginDlg.SelectOkVerifySuccess();

            ribbon.InvokeButton(AddinRibbonButton.Logout);
            ribbon.ValidateSingleButtonState(AddinRibbonButton.Logout, RibbonButtonState.NonVisible);
        }
        public void CreateAccountDialog_CreateUnconfirmedAccount_FailsLogin()
        {
            var ribbon = AddinRibbonController.Initialize(_app);

            //Open Login dialog
            var loginDialog = AddinTestUtility.OpenLoginDialog(ribbon);

            //Open Create Account dialog and create a unique one
            var createAccountDialog = loginDialog.SelectCreateAccount();

            createAccountDialog.Name = "non unique test account name";
            var uniqueAccountName = "testacct" + AddinTestUtility.GetUniqueSuffix() + "@testdomain.com";

            createAccountDialog.Email = uniqueAccountName;
            var accountPassword = "******";

            createAccountDialog.Password = accountPassword;

            //Ensure terms is required
            Assert.IsFalse(createAccountDialog.RegisterEnabled);

            //Accept terms then register
            createAccountDialog.Terms = true;

            var messageBoxDialog = createAccountDialog.SelectRegister();

            messageBoxDialog.SelectOKVerifySuccess();

            //Attempt to login with above unconfirmed account, expect failure
            loginDialog          = LoginDriver.FindFromParent(ribbon.ExcelElement);
            loginDialog.Email    = uniqueAccountName;
            loginDialog.Password = accountPassword;

            loginDialog.SelectOkVerifyFailure(LoginDriver.ErrorMessageType.Credentials);

            //Close login dialog
            loginDialog.SelectCancelVerifySuccess();
        }