void OnProjectOpenButtonClick(Project project) { if (!ReflectProjectsManager.IsReadyForOpening(project)) { return; } var activeProject = m_ActiveProjectGetter.GetValue(); if (activeProject?.serverProjectId == project.serverProjectId) { Dispatcher.Dispatch(OpenDialogAction.From(OpenDialogAction.DialogType.None)); //if the project already opened, just close landing screen return; } Dispatcher.Dispatch(SetWalkEnableAction.From(false)); activeProject = project; if (activeProject != Project.Empty) { if (m_NavigationModeGetter.GetValue() != SetNavigationModeAction.NavigationMode.VR) { // switch to orbit mode var data = new SetForceNavigationModeAction.ForceNavigationModeTrigger((int)SetNavigationModeAction.NavigationMode.Orbit); Dispatcher.Dispatch(SetForceNavigationModeAction.From(data)); } // first close current Project if open Dispatcher.Dispatch(SetStatusMessage.From("Closing {UIStateManager.current.projectStateData.activeProject.name}...")); } Dispatcher.Dispatch(SetStatusMessage.From($"Opening {activeProject.name}...")); Dispatcher.Dispatch(CloseAllDialogsAction.From(null)); Dispatcher.Dispatch(SetIsOpenWithLinkSharingAction.From(false)); Dispatcher.Dispatch(SetCachedLinkTokenAction.From(string.Empty)); Dispatcher.Dispatch(OpenProjectActions <Project> .From(activeProject)); Dispatcher.Dispatch(ToggleMeasureToolAction.From(ToggleMeasureToolAction.ToggleMeasureToolData.defaultData)); }
public IEnumerator MeasureToolTests_OnOffFlowTest() { bool userLoggedIn = false; bool canBeToggledChanged; using (var canBeToggledGetter = UISelectorFactory.createSelector <bool>(UIStateContext.current, nameof(IToolBarDataProvider.toolbarsEnabled), (data) => canBeToggledChanged = true)) using (var isToolActiveGetter = UISelectorFactory.createSelector <bool>(MeasureToolContext.current, nameof(IMeasureToolDataProvider.toolState))) { //Reflect is just loaded and not logged in. Measure tool must be not active nor able to be activated Assert.IsFalse(canBeToggledGetter.GetValue()); Assert.IsFalse(isToolActiveGetter.GetValue()); try { yield return(GivenUserIsLoggedIn()); userLoggedIn = true; //Reflect is logged in. Measure tool must be not active nor able to be activated Assert.IsFalse(canBeToggledGetter.GetValue()); Assert.IsFalse(isToolActiveGetter.GetValue()); //Openning a project ProjectListState?listState = null; using (var projectListStateSelector = UISelectorFactory.createSelector <ProjectListState>(SessionStateContext <UnityUser, LinkPermission> .current, nameof(ISessionStateDataProvider <UnityUser, LinkPermission> .projectListState), (data) => listState = data)) { yield return(new WaitUntil(() => listState == ProjectListState.Ready)); } IProjectRoom room; using (var roomSelector = UISelectorFactory.createSelector <IProjectRoom[]>(SessionStateContext <UnityUser, LinkPermission> .current, nameof(ISessionStateDataProvider <UnityUser, LinkPermission> .rooms))) { room = roomSelector.GetValue().FirstOrDefault(r => (r is ProjectRoom pr) && pr.project != null); } if (room == null) { throw new InvalidOperationException("There must be a project room with a project available to continue the test"); } //When project is just opened measure tool must be available, but not selected Dispatcher.Dispatch(OpenProjectActions <Project> .From(((ProjectRoom)room).project)); canBeToggledChanged = false; yield return(new WaitWhile(() => !canBeToggledChanged)); //if state fails to update means test fails; timeout will stop the test Assert.IsTrue(canBeToggledGetter.GetValue()); Assert.IsFalse(isToolActiveGetter.GetValue()); Dispatcher.Dispatch(ToggleMeasureToolAction.From(true)); Assert.IsTrue(isToolActiveGetter.GetValue()); Assert.IsTrue(canBeToggledGetter.GetValue()); Dispatcher.Dispatch(ToggleMeasureToolAction.From(false)); Assert.IsFalse(isToolActiveGetter.GetValue()); Assert.IsTrue(canBeToggledGetter.GetValue()); //If project is closed, measure tool must be deactivated and not available Dispatcher.Dispatch(ToggleMeasureToolAction.From(true)); Dispatcher.Dispatch(CloseProjectActions <Project> .From(Project.Empty)); Assert.IsFalse(canBeToggledGetter.GetValue()); Assert.IsFalse(isToolActiveGetter.GetValue()); //If user logged out, measure tool must be deactivated and not available yield return(WhenUserLogout()); userLoggedIn = false; Assert.IsFalse(canBeToggledGetter.GetValue()); Assert.IsFalse(isToolActiveGetter.GetValue()); } finally { if (userLoggedIn) { var loginManager = GameObject.FindObjectOfType <LoginManager>(); loginManager.userLoggedOut.Invoke(); } } } }