private void ValidateConnectionSwitch(Action connectionSwitchAction)
        {
            OctaneConfiguration.Url = Guid.NewGuid().ToString();

            CollectionAssert.AreEqual(new List <string>(), WorkspaceSessionPersistanceManager.History, "Invalid initial history");

            WorkspaceSessionPersistanceManager.UpdateHistory("1");
            var defect = new Defect(111)
            {
                SubType = WorkItem.SUBTYPE_DEFECT
            };

            WorkspaceSessionPersistanceManager.SetActiveEntity(defect);

            connectionSwitchAction();

            CollectionAssert.AreEqual(new List <string>(), WorkspaceSessionPersistanceManager.History, "Mismatched history after reset");
            ValidateActiveEntity(null);

            WorkspaceSessionPersistanceManager.UpdateHistory("2");
            WorkspaceSessionPersistanceManager.SetActiveEntity(defect);

            CollectionAssert.AreEqual(new List <string> {
                "2"
            }, WorkspaceSessionPersistanceManager.History, "Mismatched history");
            ValidateActiveEntity(defect);
        }
        protected override void TestCleanupInternal()
        {
            OctaneConfiguration.Url           = _url;
            OctaneConfiguration.SharedSpaceId = _ssid;
            OctaneConfiguration.WorkSpaceId   = _wsid;
            OctaneConfiguration.Username      = _username;
            OctaneConfiguration.Password      = _password;

            WorkspaceSessionPersistanceManager.ClearActiveEntity();
        }
        protected override void TestInitializeInternal()
        {
            _url      = OctaneConfiguration.Url;
            _ssid     = OctaneConfiguration.SharedSpaceId;
            _wsid     = OctaneConfiguration.WorkSpaceId;
            _username = OctaneConfiguration.Username;
            _password = OctaneConfiguration.Password;

            WorkspaceSessionPersistanceManager.ClearActiveEntity();
        }
Example #4
0
        /// <summary>
        /// Clear the current active item
        /// </summary>
        public static void ClearActiveItem()
        {
            if (CurrentActiveItem != null)
            {
                CurrentActiveItem.IsActiveWorkItem = false;
            }

            CurrentActiveItem = null;
            WorkspaceSessionPersistanceManager.ClearActiveEntity();
        }
Example #5
0
        private void SearchInternal(object parameter)
        {
            if (string.IsNullOrEmpty(SearchFilter) || string.IsNullOrEmpty(SearchFilter.Trim()))
            {
                return;
            }

            SearchFilter = SearchFilter.Trim();

            WorkspaceSessionPersistanceManager.UpdateHistory(SearchFilter);
            NotifyPropertyChanged("SearchHistory");

            PluginWindowManager.ShowSearchWindow(MainWindow.PluginPackage, SearchFilter);
        }
        public void WorkspaceSessionPersistanceManagerTests_SetActiveEntity_ValidEntity_Success()
        {
            ValidateActiveEntity(null);

            var story = new Story(123)
            {
                SubType = WorkItem.SUBTYPE_STORY
            };

            WorkspaceSessionPersistanceManager.SetActiveEntity(story);
            ValidateActiveEntity(story);

            WorkspaceSessionPersistanceManager.ClearActiveEntity();
            ValidateActiveEntity(null);
        }
        private void ValidateActiveEntity(BaseEntity expectedEntity)
        {
            if (expectedEntity == null)
            {
                Assert.IsNull(WorkspaceSessionPersistanceManager.GetActiveEntity(), "There shouldn't be any active entity");
                return;
            }
            var activeEntity = WorkspaceSessionPersistanceManager.GetActiveEntity();

            Assert.AreEqual(expectedEntity.Id, activeEntity.Id, "Mismatched entity ids");
            Assert.AreEqual(VisualStudio.Common.Utility.GetConcreteEntityType(expectedEntity),
                            VisualStudio.Common.Utility.GetConcreteEntityType(activeEntity),
                            "Mismatched entity types");

            Assert.IsTrue(WorkspaceSessionPersistanceManager.IsActiveEntity(expectedEntity), "Entity isn't the active entity");
        }
Example #8
0
        /// <summary>
        /// Set the given item as the current active item
        /// </summary>
        public static void SetActiveItem(OctaneItemViewModel octaneItem)
        {
            if (octaneItem == null)
            {
                return;
            }

            if (CurrentActiveItem != null)
            {
                CurrentActiveItem.IsActiveWorkItem = false;
            }

            CurrentActiveItem = octaneItem;

            CurrentActiveItem.IsActiveWorkItem = true;
            WorkspaceSessionPersistanceManager.SetActiveEntity(CurrentActiveItem.Entity);
        }
        public void WorkspaceSessionPersistanceManagerTests_UpdateHistory_EmptyFilter_Success()
        {
            OctaneConfiguration.Url = Guid.NewGuid().ToString();

            CollectionAssert.AreEqual(new List <string>(), WorkspaceSessionPersistanceManager.History, "Invalid initial history");

            WorkspaceSessionPersistanceManager.UpdateHistory("a");
            WorkspaceSessionPersistanceManager.UpdateHistory("b");
            var expectedHistory = new List <string> {
                "b", "a"
            };

            CollectionAssert.AreEqual(expectedHistory, WorkspaceSessionPersistanceManager.History, "Mismatched history");

            WorkspaceSessionPersistanceManager.UpdateHistory(string.Empty);

            CollectionAssert.AreEqual(expectedHistory, WorkspaceSessionPersistanceManager.History, "Mismatched history after trying to add empty string");
        }
        public void WorkspaceSessionPersistanceManagerTests_UpdateHistory_SaveExactlyMaxElements_Success()
        {
            OctaneConfiguration.Url = Guid.NewGuid().ToString();

            CollectionAssert.AreEqual(new List <string>(), WorkspaceSessionPersistanceManager.History, "Invalid initial history");

            var expectedHistory = new List <string>();

            for (var i = 0; i < WorkspaceSessionPersistanceManager.MaxSearchHistorySize; i++)
            {
                expectedHistory.Add(i.ToString());
                WorkspaceSessionPersistanceManager.UpdateHistory(i.ToString());
            }

            expectedHistory.Reverse();

            CollectionAssert.AreEqual(expectedHistory, WorkspaceSessionPersistanceManager.History, "Mismatched history");
        }
        public void WorkspaceSessionPersistanceManagerTests_SetActiveEntity_ChangeActiveEntity_Success()
        {
            ValidateActiveEntity(null);

            var story = new Story(123)
            {
                SubType = WorkItem.SUBTYPE_STORY
            };

            WorkspaceSessionPersistanceManager.SetActiveEntity(story);
            ValidateActiveEntity(story);

            var defect = new Defect(456)
            {
                SubType = WorkItem.SUBTYPE_DEFECT
            };

            WorkspaceSessionPersistanceManager.SetActiveEntity(defect);
            ValidateActiveEntity(defect);
        }
        public void WorkspaceSessionPersistanceManagerTests_UpdateHistory_ResetApplication_Success()
        {
            OctaneConfiguration.Url = Guid.NewGuid().ToString();

            CollectionAssert.AreEqual(new List <string>(), WorkspaceSessionPersistanceManager.History, "Invalid initial history");

            WorkspaceSessionPersistanceManager.UpdateHistory("1");

            var exposedHistoryManager = ExposedClass.From(typeof(WorkspaceSessionPersistanceManager));

            exposedHistoryManager._metadata = null;

            CollectionAssert.AreEqual(new List <string> {
                "1"
            }, WorkspaceSessionPersistanceManager.History, "Mismatched history after reset");

            WorkspaceSessionPersistanceManager.UpdateHistory("2");

            CollectionAssert.AreEqual(new List <string> {
                "2", "1"
            }, WorkspaceSessionPersistanceManager.History, "Mismatched history");
        }
Example #13
0
        /// <summary>
        /// Update active item button in toolbar with the current active item's information
        /// </summary>
        public void UpdateActiveItemInToolbar()
        {
            try
            {
                var activeEntity = WorkspaceSessionPersistanceManager.GetActiveEntity();

                if (activeEntity != null)
                {
                    _activeItemMenuCommand.Text       = EntityTypeRegistry.GetEntityTypeInformation(activeEntity).ShortLabel + " " + activeEntity.Id;
                    _activeItemMenuCommand.Enabled    = true;
                    _copyCommitMessageCommand.Enabled = true;
                    _stopWorkCommand.Enabled          = true;
                }
                else
                {
                    DisableActiveItemToolbar();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Unable to update active item in Octane toolbar.\n\n" + "Failed with message: " + ex.Message,
                                ToolWindowHelper.AppName, MessageBoxButton.OK, MessageBoxImage.Error);
            }
        }
Example #14
0
        private static void OpenActiveItemInDetailsWindowCallback(object caller, EventArgs args)
        {
            try
            {
                var command = caller as OleMenuCommand;
                if (command == null)
                {
                    return;
                }

                var activeEntity = WorkspaceSessionPersistanceManager.GetActiveEntity();
                if (activeEntity == null)
                {
                    return;
                }

                PluginWindowManager.ShowDetailsWindow(MainWindow.PluginPackage, activeEntity);
            }
            catch (Exception ex)
            {
                MessageBox.Show("Unable to open details window for active item.\n\n" + "Failed with message: " + ex.Message,
                                ToolWindowHelper.AppName, MessageBoxButton.OK, MessageBoxImage.Error);
            }
        }
Example #15
0
        /// <summary>
        /// Retrieve all the entities related to the current user
        /// </summary>
        internal async System.Threading.Tasks.Task LoadMyItemsAsync()
        {
            if (string.IsNullOrEmpty(OctaneConfiguration.Url))
            {
                // No URL which means it's the first time use.
                Mode = MainWindowMode.FirstTime;
                return;
            }

            // If we already loading wait for the runnung load to complete.
            if (Mode == MainWindowMode.LoadingItems)
            {
                return;
            }

            Mode = MainWindowMode.LoadingItems;

            try
            {
                OctaneServices octaneService;
                try
                {
                    octaneService = OctaneServices.GetInstance();
                } catch (Exception e)
                {
                    if (e.GetBaseException().Message.Equals("Object not created"))
                    {
                        OctaneServices.Create(OctaneConfiguration.Url,
                                              OctaneConfiguration.SharedSpaceId,
                                              OctaneConfiguration.WorkSpaceId);
                    }
                    octaneService = OctaneServices.GetInstance();
                    await octaneService.Connect();
                }

                _myItems.Clear();
                _totalItems = 0;

                bool foundActiveItem           = false;
                IEnumerable <BaseEntity> items = await octaneService.GetMyItems();

                // when a user story is converted to feature it might still be in the list of my work items,
                // the plugins do not support features in my work, so we just remove those entities
                items = items.Where(entity => !WorkItem.SUBTYPE_FEATURE.Equals(entity.GetStringValue(CommonFields.SubType)));

                if (sublistsMap == null)
                {
                    sublistsMap = createMyWorkItemsSublistsMap();
                }
                else
                {
                    cleanSubListsMap(sublistsMap);
                }

                foreach (BaseEntity entity in items)
                {
                    var octaneItem = new OctaneItemViewModel(entity);
                    _totalItems++;
                    if (WorkspaceSessionPersistanceManager.IsActiveEntity(entity))
                    {
                        foundActiveItem = true;
                        OctaneItemViewModel.SetActiveItem(octaneItem);
                    }
                    MyWorkItemsSublist itemSublist;

                    string concreteEntityType = Utility.GetConcreteEntityType(entity);
                    if (sublistsMap.TryGetValue(concreteEntityType, out itemSublist))
                    {
                        itemSublist.Items.Add(octaneItem);
                    }
                }

                myWorkItemSublists = sublistsMap.Values.ToList();

                if (!foundActiveItem)
                {
                    OctaneItemViewModel.ClearActiveItem();
                    MainWindowCommand.Instance?.DisableActiveItemToolbar();
                }

                IList <BaseEntity> comments = await octaneService.GetMyCommentItems();

                foreach (BaseEntity comment in comments)
                {
                    _totalItems++;
                    MyWorkItemsSublist itemSublist;
                    if (sublistsMap.TryGetValue("comment", out itemSublist))
                    {
                        itemSublist.Items.Add(new CommentViewModel(comment));
                    }
                }

                myWorkItemSublists.ForEach(ms =>
                {
                    if (ms.IsSelected)
                    {
                        foreach (var myWorkItem in ms.Items)
                        {
                            _myItems.Add(myWorkItem);
                        }
                    }
                });

                Mode = MainWindowMode.ItemsLoaded;

                SearchFilter = "";
                MainWindowCommand.Instance?.UpdateActiveItemInToolbar();
                NotifyPropertyChanged();
            }
            catch (Exception ex)
            {
                MainWindowCommand.Instance?.DisableActiveItemToolbar();
                Mode = MainWindowMode.FailToLoad;
                if (ex is NotConnectedException)
                {
                    LastExceptionMessage = "Failed to load \"My Work\"";
                }
                else
                {
                    LastExceptionMessage = ex.Message;
                }
            }
        }
 public void WorkspaceSessionPersistanceManagerTests_IsActiveEntity_Null_Success()
 {
     Assert.IsFalse(WorkspaceSessionPersistanceManager.IsActiveEntity(null));
 }