Example #1
0
        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));
        }
Example #2
0
        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();
                        }
                    }
                }
        }