public void UpdatingSelectedSortOptionTwiceOnlyAddsDescriptionOnce() { // Arrange var builder = new DocumentMetadataManagerBuilder(); var manager = builder.CreateDocumentMetadataManager(); builder.UserPreferences.SelectedProjectSortOption = Mock.Of <ISortOption>(s => s.HasSortDescription == false); // Act builder.UserPreferences.SelectedDocumentSortOption = new TestingSortOption( "Display Name", "PropertyName", ListSortDirection.Descending, ProjectItemType.Document); builder.UserPreferences.SelectedDocumentSortOption = new TestingSortOption( "Display Name 2", "PropertyName", ListSortDirection.Descending, ProjectItemType.Document); // Assert var sortOptionCount = manager.ActiveDocumentMetadata.SortDescriptions.Count; Assert.That(sortOptionCount, Is.EqualTo(1)); }
public void UpdatingPathSegmentCountUpdatesDisplayName() { // Arrange var info = new DocumentMetadataInfo { FullName = @"C:\Folder\Document.txt" }; var builder = new DocumentMetadataManagerBuilder(); builder.UserPreferencesBuilder.StoredSettingsRepositoryMock .Setup(s => s.GetPathSegmentCount()) .Returns(1); var manager = builder.CreateDocumentMetadataManager(); manager.Add(info); // Act builder.UserPreferences.PathSegmentCount = 3; // Assert var collection = (IList <DocumentMetadata>)manager.ActiveDocumentMetadata.SourceCollection; Assert.That(collection.Count, Is.EqualTo(1)); Assert.That(collection[0].DisplayName, Is.EqualTo(info.FullName)); }
public void SortDescriptionsAreSetOnManagerInitialization() { // Arrange const string propertyName = "PropertyName"; const ListSortDirection sortDirection = ListSortDirection.Descending; var builder = new DocumentMetadataManagerBuilder(); var sortOptionsServiceMock = new Mock <ISortOptionsService>(); sortOptionsServiceMock .Setup(s => s.EvaluateAppliedSortDescriptions(It.IsAny <IUserPreferences>())) .Returns(new[] { new SortDescription(propertyName, sortDirection) }); builder.SortOptionsService = sortOptionsServiceMock.Object; // Act var manager = builder.CreateDocumentMetadataManager(); // Assert var addedSortOption = manager.ActiveDocumentMetadata.SortDescriptions .Single(s => s.PropertyName == propertyName && s.Direction == sortDirection); Assert.That(addedSortOption, Is.Not.Null); }
public void SynchronizeAddsDocumentsMissingInTarget() { // Arrange const string document1Name = "Document1Name"; const string document2Name = "Document2Name"; var documentMockList = new List <Document> { CreateDocument(document1Name), CreateDocument(document2Name) }; var documents = CreateDocuments(documentMockList); var builder = new DocumentMetadataManagerBuilder(); var manager = builder.CreateDocumentMetadataManager(); // Act manager.Synchronize(documents, false); // Assert var collection = (IList <DocumentMetadata>)manager.ActiveDocumentMetadata.SourceCollection; Assert.That(collection.Count, Is.EqualTo(2)); var document1 = collection.SingleOrDefault(m => m.FullName == document1Name); var document2 = collection.SingleOrDefault(m => m.FullName == document2Name); Assert.That(document1, Is.Not.Null); Assert.That(document2, Is.Not.Null); }
public void DocumentsAddedBySynchronizeSetActivatedAt() { // Arrange var activatedAt = DateTime.UtcNow; var documentMockList = new List <Document> { CreateDocument(string.Empty) }; var builder = new DocumentMetadataManagerBuilder(); builder.TimeProviderMock.Setup(t => t.UtcNow) .Returns(activatedAt); var manager = builder.CreateDocumentMetadataManager(); var documents = CreateDocuments(documentMockList); // Act manager.Synchronize(documents, false); // Assert var collection = (IList <DocumentMetadata>)manager.ActiveDocumentMetadata.SourceCollection; var document = collection.Single(); Assert.That(document.ActivatedAt, Is.EqualTo(activatedAt)); }
public void AddDoesNotAppendDocumentMetadataToListIfFullPathAlreadyExist() { // Arrange var info = new DocumentMetadataInfo { FullName = "FullName" }; var builder = new DocumentMetadataManagerBuilder(); var manager = builder.CreateDocumentMetadataManager(); // Act manager.Add(info); manager.Add(info); // Assert var collection = (IList <DocumentMetadata>)manager.ActiveDocumentMetadata.SourceCollection; Assert.That(collection.Count, Is.EqualTo(1)); Assert.That(collection[0].FullName, Is.EqualTo(info.FullName)); }
public void SynchronizeUsesNormalizedUsageOrderService(bool setUsageOrder) { // Arrange var setUsageOrderInvoked = false; var builder = new DocumentMetadataManagerBuilder(); builder.NormalizedUsageOrderServiceMock .Setup(n => n.SetUsageOrder( It.IsAny <IList <DocumentMetadata> >(), It.IsAny <IUserPreferences>())) .Callback(() => setUsageOrderInvoked = true); builder.UpdateReactionMapping = new TestingUpdateReactionMapping( new Dictionary <string, IEnumerable <IUpdateReaction> >()); var manager = builder.CreateDocumentMetadataManager(); var documentsMock = new Mock <Documents> { DefaultValue = DefaultValue.Mock }; // Act manager.Synchronize(documentsMock.Object, setUsageOrder); // Assert Assert.That(setUsageOrderInvoked, Is.EqualTo(setUsageOrder)); }
public void UpdatingSelectedSortAddsToDocumentMetadataSortDescriptions() { // Arrange const string propertyName = "PropertyName"; const ListSortDirection sortDirection = ListSortDirection.Descending; var builder = new DocumentMetadataManagerBuilder(); var manager = builder.CreateDocumentMetadataManager(); // Act builder.UserPreferences.SelectedDocumentSortOption = new TestingSortOption( "Display Name", propertyName, sortDirection, ProjectItemType.Document); // Assert var addedSortOption = manager.ActiveDocumentMetadata.SortDescriptions .Single(s => s.PropertyName == propertyName && s.Direction == sortDirection); Assert.That(addedSortOption, Is.Not.Null); }
public void AddUsesDocumentMetadataFactory() { // Arrange var info = new DocumentMetadataInfo { FullName = "FullName", ProjectDisplayName = "ProjectDisplayName", ProjectFullName = "ProjectFullName" }; var factoryMock = new Mock <IDocumentMetadataFactory>(); factoryMock .Setup(f => f.Create(info)) .Returns(new DocumentMetadata(info, string.Empty, null)); var builder = new DocumentMetadataManagerBuilder { DocumentMetadataFactory = factoryMock.Object }; var manager = builder.CreateDocumentMetadataManager(); // Act manager.Add(info); // Assert factoryMock.Verify(p => p.Create(info)); }
public void ActivateOnlySetsActivatedTimeForMetadataWithMatchingPath() { // Arrange const string document1Name = "Document1Name"; const string document2Name = "Document2Name"; var utcNow = DateTime.UtcNow; var documentMockList = new List <Document> { CreateDocument(document1Name), CreateDocument(document2Name) }; var documents = CreateDocuments(documentMockList); var builder = new DocumentMetadataManagerBuilder(); var manager = builder.CreateDocumentMetadataManager(); builder.TimeProviderMock.Setup(t => t.UtcNow) .Returns(() => { // Simulate time passing utcNow = utcNow + TimeSpan.FromSeconds(1); return(utcNow); }); manager.Synchronize(documents, false); var collection = (IList <DocumentMetadata>)manager.ActiveDocumentMetadata.SourceCollection; var document1 = collection.Single(m => m.FullName == document1Name); var document2 = collection.Single(m => m.FullName == document2Name); var document1InitialActivationTime = document1.ActivatedAt; var document2InitialActivationTime = document2.ActivatedAt; // Act manager.Activate(document1Name); // Assert // Three times: twice during setup, once on update builder.TimeProviderMock.Verify(t => t.UtcNow, Times.Exactly(3)); Assert.That( document1.ActivatedAt, Is.GreaterThan(document1InitialActivationTime)); Assert.That( document2.ActivatedAt, Is.EqualTo(document2InitialActivationTime)); }
public void ActivateAssignsUsageOrder() { // Arrange const string documentName = "DocumentName"; IList metadataCollection = null; var documentMockList = new List <Document> { CreateDocument(documentName) }; var documents = CreateDocuments(documentMockList); var collectionViewMock = new Mock <ICollectionView> { DefaultValue = DefaultValue.Mock }; var generatorMock = new Mock <ICollectionViewGenerator>(); generatorMock .Setup(c => c.CreateView(It.IsAny <IList>())) .Callback <IList>(mc => metadataCollection = mc) .Returns(collectionViewMock.Object); var mappingTable = new Dictionary <string, IEnumerable <IUpdateReaction> >(); var mapping = new TestingUpdateReactionMapping(mappingTable); var builder = new DocumentMetadataManagerBuilder { CollectionViewGenerator = generatorMock.Object, UpdateReactionMapping = mapping }; var manager = builder.CreateDocumentMetadataManager(); manager.Synchronize(documents, false); // Act manager.Activate(documentName); // Assert Assert.That(metadataCollection, Is.Not.Null); builder.NormalizedUsageOrderServiceMock .Verify(n => n.SetUsageOrder( (IList <DocumentMetadata>)metadataCollection, It.IsAny <IUserPreferences>())); }
public void UpdateFullNameDoesNotThrowExceptionIfOldNameDoesNotExist() { // Arrange var builder = new DocumentMetadataManagerBuilder(); var manager = builder.CreateDocumentMetadataManager(); // Assert Assert.DoesNotThrow(() => manager.UpdateFullName( "NewDocumentName", "OldDocumentName")); }
public void UpdateFullNameUpdatesSpecifiedDocumentOnly() { // Arrange const string document1OldName = "Document1OldName"; const string document1NewName = "Document1NewName"; const string document2Name = "Document2Name"; var documentMockList = new List <Document> { CreateDocument(document1OldName), CreateDocument(document2Name) }; var documents = CreateDocuments(documentMockList); var builder = new DocumentMetadataManagerBuilder(); var manager = builder.CreateDocumentMetadataManager(); builder.TimeProviderMock.Setup(t => t.UtcNow) .Returns(() => DateTime.UtcNow); manager.Synchronize(documents, false); var collection = (IList <DocumentMetadata>)manager.ActiveDocumentMetadata.SourceCollection; var document2 = collection.Single(m => m.FullName == document2Name); // Act manager.UpdateFullName(document1NewName, document1OldName); // Assert Assert.That( collection.SingleOrDefault(m => m.FullName == document1OldName), Is.Null); Assert.That( collection.SingleOrDefault(m => m.FullName == document1NewName), Is.Not.Null); Assert.That( collection.SingleOrDefault(m => m.FullName == document2Name), Is.Not.Null); Assert.That( document2.FullName, Is.EqualTo(document2Name)); }
public void ActivateDoesNotThrowExceptionIfFullNameDoesNotExist() { // Arrange var builder = new DocumentMetadataManagerBuilder(); var manager = builder.CreateDocumentMetadataManager(); builder.TimeProviderMock.Setup(t => t.UtcNow) .Returns(() => DateTime.UtcNow); // Assert Assert.DoesNotThrow(() => manager.Activate("Document")); }
public void SynchronizeRemovesDocumentMissingInSource() { // Arrange const string documentToRemove = "DocumentToRemove"; const string documentToRetain = "DocumentToRetain"; var documentMockList = new List <Document> { CreateDocument(documentToRemove), CreateDocument(documentToRetain) }; var documents = CreateDocuments(documentMockList); var builder = new DocumentMetadataManagerBuilder(); var manager = builder.CreateDocumentMetadataManager(); // Synchronize to set two items in the document metadata service // metadata list manager.Synchronize(documents, false); var updatedDocumentMockList = new List <Document> { CreateDocument(documentToRetain) }; // Synchronizing with the updated list should remove one item var updatedDocuments = CreateDocuments(updatedDocumentMockList); // Act manager.Synchronize(updatedDocuments, false); // Assert var collection = (IList <DocumentMetadata>)manager.ActiveDocumentMetadata.SourceCollection; Assert.That(collection.Count, Is.EqualTo(1)); var remove = collection.SingleOrDefault(m => m.FullName == documentToRemove); var retain = collection.SingleOrDefault(m => m.FullName == documentToRetain); Assert.That(remove, Is.Null); Assert.That(retain, Is.Not.Null); }
public void AlreadyActiveDocumentIsNotReactivated() { // Arrange const string document1Name = "Document1"; var utcNow = DateTime.UtcNow; var documentMockList = new List <Document> { CreateDocument(document1Name) }; var documents = CreateDocuments(documentMockList); var builder = new DocumentMetadataManagerBuilder(); builder.TimeProviderMock.Setup(t => t.UtcNow) .Returns(() => { // Simulate time passing utcNow = utcNow + TimeSpan.FromSeconds(1); return(utcNow); }); var manager = builder.CreateDocumentMetadataManager(); manager.Synchronize(documents, false); manager.Activate(document1Name); var firstActivationTime = utcNow; // Act manager.Activate(document1Name); // Assert builder.NormalizedUsageOrderServiceMock.Verify(n => n .SetUsageOrder( It.IsAny <IList <DocumentMetadata> >(), It.IsAny <IUserPreferences>()), Times.Once); var collection = (IList <DocumentMetadata>)manager.ActiveDocumentMetadata.SourceCollection; Assert.That(collection.Count, Is.EqualTo(1)); Assert.That(collection[0].ActivatedAt, Is.EqualTo(firstActivationTime)); }
public void UpdateFullNameMatchesOldNameWithCorrectedFullName() { // Arrange const string oldName = "OldName"; const string newName = "NewName"; const string correctedOldName = "CorrectedOldName"; var metadataFactoryBuilder = new DocumentMetadataFactoryBuilder(); metadataFactoryBuilder.PathCasingRestorerMock .Setup(p => p.RestoreCasing(It.IsAny <string>())) .Returns(correctedOldName); var factory = metadataFactoryBuilder.CreateDocumentMetadataFactory(false); var metadataManagerBuilder = new DocumentMetadataManagerBuilder { DocumentMetadataFactory = factory }; metadataManagerBuilder.TimeProviderMock.Setup(t => t.UtcNow) .Returns(() => DateTime.UtcNow); var manager = metadataManagerBuilder.CreateDocumentMetadataManager(); var documentMockList = new List <Document> { CreateDocument(oldName) }; var documents = CreateDocuments(documentMockList); manager.Synchronize(documents, false); // Act manager.UpdateFullName(newName, correctedOldName); // Assert var collection = (IList <DocumentMetadata>)manager.ActiveDocumentMetadata.SourceCollection; Assert.That(collection.Count, Is.EqualTo(1)); Assert.That(collection[0].FullName, Is.EqualTo(newName)); }
public void UpdateFullNameDoesNotAlterActivatedAtTime() { // Arrange const string documentOldName = "DocumentOldName"; const string documentNewName = "DocumentNewName"; var runTime = DateTime.UtcNow; var documentMockList = new List <Document> { CreateDocument(documentOldName) }; var documents = CreateDocuments(documentMockList); var builder = new DocumentMetadataManagerBuilder(); var manager = builder.CreateDocumentMetadataManager(); builder.TimeProviderMock.Setup(t => t.UtcNow) .Returns(() => { var simulatedTime = runTime + TimeSpan.FromSeconds(1); runTime = simulatedTime; return(simulatedTime); }); manager.Synchronize(documents, false); var collection = (IList <DocumentMetadata>)manager.ActiveDocumentMetadata.SourceCollection; var document = collection.Single(m => m.FullName == documentOldName); var document1InitialActivationTime = document.ActivatedAt; // Act manager.UpdateFullName(documentNewName, documentOldName); // Assert document = collection.Single(m => m.FullName == documentNewName); Assert.That( document.ActivatedAt, Is.EqualTo(document1InitialActivationTime)); }
public void ActivateRefreshesDocumentMetadataView() { // Arrange const string documentName = "DocumentName"; var documentMockList = new List <Document> { CreateDocument(documentName) }; var documents = CreateDocuments(documentMockList); var collectionViewMock = new Mock <ICollectionView> { DefaultValue = DefaultValue.Mock }; var generatorMock = new Mock <ICollectionViewGenerator>(); generatorMock .Setup(c => c.CreateView(It.IsAny <IList>())) .Returns(collectionViewMock.Object); var mappingTable = new Dictionary <string, IEnumerable <IUpdateReaction> >(); var mapping = new TestingUpdateReactionMapping(mappingTable); var builder = new DocumentMetadataManagerBuilder { CollectionViewGenerator = generatorMock.Object, UpdateReactionMapping = mapping }; var manager = builder.CreateDocumentMetadataManager(); manager.Synchronize(documents, false); // Act manager.Activate(documentName); // Assert collectionViewMock.Verify(c => c.Refresh()); }
public void ActivateSetsSpecifiedDocumentExclusivelyActive() { // Arrange const string document1Name = "Document1"; const string document2Name = "Document2"; const string document3Name = "Document3"; var documentMockList = new List <Document> { CreateDocument(document1Name), CreateDocument(document2Name), CreateDocument(document3Name) }; var documents = CreateDocuments(documentMockList); var builder = new DocumentMetadataManagerBuilder(); var manager = builder.CreateDocumentMetadataManager(); manager.Synchronize(documents, false); var collection = (IList <DocumentMetadata>)manager.ActiveDocumentMetadata.SourceCollection; var document1 = collection.Single(m => m.FullName == document1Name); document1.IsActive = true; // Act manager.Activate(document3Name); // Assert Assert.IsFalse(document1.IsActive); var document2 = collection.Single(m => m.FullName == document2Name); Assert.IsFalse(document2.IsActive); var document3 = collection.Single(m => m.FullName == document3Name); Assert.IsTrue(document3.IsActive); }
public void SynchronizeHandlesComException() { // Arrange var documentsMock = new Mock <Documents>(); // COMException is thrown in Synchronize when a project is closed // in Visual Studio documentsMock.Setup(d => d.GetEnumerator()) .Callback(() => { throw new COMException(); }); var builder = new DocumentMetadataManagerBuilder(); var manager = builder.CreateDocumentMetadataManager(); // Assert Assert.DoesNotThrow(() => manager.Synchronize(documentsMock.Object, false)); }
public void SynchronizeUsesDocumentMetadataFactory() { // Arrange var info = new DocumentMetadataInfo { FullName = "FullName", ProjectDisplayName = "ProjectDisplayName", ProjectFullName = "ProjectFullName" }; var documentMockList = new List <Document> { CreateDocumentWithInfo(info) }; var documents = CreateDocuments(documentMockList); var factoryMock = new Mock <IDocumentMetadataFactory>(); factoryMock .Setup(f => f.Create(It.IsAny <DocumentMetadataInfo>())) .Returns(new DocumentMetadata( info, "CorrectedFullName", null)); var builder = new DocumentMetadataManagerBuilder { DocumentMetadataFactory = factoryMock.Object }; var manager = builder.CreateDocumentMetadataManager(); // Act manager.Synchronize(documents, false); // Assert factoryMock.Verify(p => p.Create(info)); }
public void UpdateFullNameSetsUsageOrder() { // Arrange const string oldName = "OldName"; var metadataFactoryBuilder = new DocumentMetadataFactoryBuilder(); var factory = metadataFactoryBuilder.CreateDocumentMetadataFactory(true); var metadataManagerBuilder = new DocumentMetadataManagerBuilder { DocumentMetadataFactory = factory }; metadataManagerBuilder.TimeProviderMock.Setup(t => t.UtcNow) .Returns(() => DateTime.UtcNow); var manager = metadataManagerBuilder.CreateDocumentMetadataManager(); var documentMockList = new List <Document> { CreateDocument(oldName) }; var documents = CreateDocuments(documentMockList); manager.Synchronize(documents, false); // Act manager.UpdateFullName("NewName", oldName); // Assert metadataManagerBuilder.NormalizedUsageOrderServiceMock .Verify(n => n.SetUsageOrder( It.IsAny <IList <DocumentMetadata> >(), It.IsAny <IUserPreferences>())); }
public void SynchronizeDoesNotAddDocumentIfActiveWindowIsNull() { // Arrange const string documentName = "DocumentName"; var documentMockList = new List <Document> { CreateDocument(documentName, true) }; var builder = new DocumentMetadataManagerBuilder(); var manager = builder.CreateDocumentMetadataManager(); var documents = CreateDocuments(documentMockList); // Act manager.Synchronize(documents, false); // Assert Assert.That(manager.ActiveDocumentMetadata.IsEmpty); }
public void SynchronizeComparesAllDocumentMetadataInfoPropertiesWhenSynchronizing() { // Arrange const string document1Name = "Document1Name"; const string document2Name = "Document2Name"; const string originalProjectDisplayName = "OriginalProjectDisplayName"; const string originalProjectFullName = "OriginalProjectFullName"; const string updatedProjectDisplayName = "UpdatedProjectDisplayName"; const string updatedProjectFullName = "UpdatedProjectFullName"; var info1 = new DocumentMetadataInfo { FullName = document1Name, ProjectDisplayName = originalProjectDisplayName, ProjectFullName = originalProjectFullName }; var documentMockList = new List <Document> { CreateDocumentWithInfo(info1), CreateDocumentWithInfo(new DocumentMetadataInfo { FullName = document2Name, ProjectDisplayName = originalProjectDisplayName, ProjectFullName = originalProjectFullName }) }; var documents = CreateDocuments(documentMockList); var builder = new DocumentMetadataManagerBuilder(); var manager = builder.CreateDocumentMetadataManager(); // Synchronize to set two items in the document metadata service // metadata list manager.Synchronize(documents, false); var updatedDocumentMockList = new List <Document> { CreateDocumentWithInfo(info1), CreateDocumentWithInfo(new DocumentMetadataInfo { FullName = document2Name, ProjectDisplayName = updatedProjectDisplayName, ProjectFullName = updatedProjectFullName }) }; // Synchronizing with the updated list should update project // properties of second document metadata var updatedDocuments = CreateDocuments(updatedDocumentMockList); // Act manager.Synchronize(updatedDocuments, false); // Assert var collection = (IList <DocumentMetadata>)manager.ActiveDocumentMetadata.SourceCollection; Assert.That(collection.Count, Is.EqualTo(2)); var document1 = collection.SingleOrDefault(m => m.FullName == document1Name && m.ProjectNames.DisplayName == originalProjectDisplayName && m.ProjectNames.FullName == originalProjectFullName); var document2OriginalProject = collection.SingleOrDefault(m => m.FullName == document2Name && m.ProjectNames.DisplayName == originalProjectDisplayName && m.ProjectNames.FullName == originalProjectFullName); var document2UpdatedProject = collection.SingleOrDefault(m => m.FullName == document2Name && m.ProjectNames.DisplayName == updatedProjectDisplayName && m.ProjectNames.FullName == updatedProjectFullName); Assert.That(document1, Is.Not.Null); Assert.That(document2UpdatedProject, Is.Not.Null); Assert.That(document2OriginalProject, Is.Null); }