public void UpdateTargetCollectionData_CollectionOrderChangedAndElementRemoved_UpdatesCollectionInCorrectOrder() { // Setup var currentCollection = new[] { new TestItem("Item one"), new TestItem("Item two"), new TestItem("Item three") }; var collection = new TestUniqueItemCollection(); collection.AddRange(currentCollection, sourceFilePath); var importedItems = new[] { new TestItem("Item three"), new TestItem("Item one") }; TestUpdateDataStrategy strategy = CreateDefaultTestStrategy(collection); // Call strategy.ConcreteUpdateData(importedItems, sourceFilePath); // Assert CollectionAssert.AreEqual(importedItems, collection); }
public void UpdateTargetCollectionData_CollectionNotEmptyAndImportedDataHasDuplicateDefinitions_ThrowsUpdateDataException() { // Setup const string name = "Double Defined Name"; var currentCollection = new[] { new TestItem(name) }; var collection = new TestUniqueItemCollection(); collection.AddRange(currentCollection, sourceFilePath); var importedItems = new[] { new TestItem(name), new TestItem(name) }; TestUpdateDataStrategy strategy = CreateDefaultTestStrategy(collection); // Call void Call() => strategy.ConcreteUpdateData(importedItems, sourceFilePath); // Assert var exception = Assert.Throws <UpdateDataException>(Call); Assert.AreEqual("Geïmporteerde data moet unieke elementen bevatten.", exception.Message); }
public void UpdateTargetCollectionData_ImportedDataContainsDuplicateData_ThrowsUpdateDataException() { // Setup var collection = new TestUniqueItemCollection(); var testItem = new TestItem("I am an expected item"); collection.AddRange(new[] { testItem }, sourceFilePath); const string duplicateName = "Duplicate Name"; var importedCollection = new[] { new TestItem(duplicateName), new TestItem(duplicateName) }; TestUpdateDataStrategy strategy = CreateDefaultTestStrategy(collection); // Call void Call() => strategy.ConcreteUpdateData(importedCollection, sourceFilePath); // Assert var exception = Assert.Throws <UpdateDataException>(Call); const string message = "Geïmporteerde data moet unieke elementen bevatten."; Assert.AreEqual(message, exception.Message); CollectionAssert.AreEqual(new[] { testItem }, collection); }
public void UpdateTargetCollectionData_WithEmptyCollectionAndImportedDataCollectionNotEmpty_AddsNewItems() { // Setup var collection = new TestUniqueItemCollection(); var importedItems = new[] { new TestItem("Name A"), new TestItem("Name B") }; TestUpdateDataStrategy strategy = CreateDefaultTestStrategy(collection); // Call IEnumerable <IObservable> affectedObjects = strategy.ConcreteUpdateData(importedItems, sourceFilePath); // Assert Assert.IsFalse(strategy.IsUpdateDataCalled); Assert.IsFalse(strategy.IsRemoveObjectAndDependentDataCalled); CollectionAssert.IsEmpty(strategy.UpdateDataCallArguments); CollectionAssert.IsEmpty(strategy.RemoveDataCallArguments); CollectionAssert.AreEqual(importedItems, collection); CollectionAssert.AreEquivalent(new[] { collection }, affectedObjects); }
public void UpdateTargetCollectionData_ImportedDataCollectionNull_ThrowsArgumentNullException() { // Setup TestUpdateDataStrategy strategy = CreateDefaultTestStrategy(new TestUniqueItemCollection()); // Call void Call() => strategy.ConcreteUpdateData(null, string.Empty); // Assert string paramName = Assert.Throws <ArgumentNullException>(Call).ParamName; Assert.AreEqual("importedDataCollection", paramName); }
public void UpdateTargetCollectionData_SourceFilePathNull_ThrowsArgumentNullException() { // Setup var collection = new TestUniqueItemCollection(); TestUpdateDataStrategy strategy = CreateDefaultTestStrategy(collection); // Call void Call() => strategy.ConcreteUpdateData(Enumerable.Empty <TestItem>(), null); // Assert string paramName = Assert.Throws <ArgumentNullException>(Call).ParamName; Assert.AreEqual("sourceFilePath", paramName); }
public void UpdateTargetCollectionData_CollectionNotEmptyAndImportedDataDoesNotOverlap_UpdatesCollection() { // Setup var currentCollection = new[] { new TestItem("Item one"), new TestItem("Item two") }; var collection = new TestUniqueItemCollection(); collection.AddRange(currentCollection, sourceFilePath); var importedItems = new[] { new TestItem("Item three"), new TestItem("Item four") }; TestUpdateDataStrategy strategy = CreateDefaultTestStrategy(collection); strategy.ItemsToRemove = currentCollection; // Call IEnumerable <IObservable> affectedObjects = strategy.ConcreteUpdateData(importedItems, sourceFilePath); // Assert Assert.IsFalse(strategy.IsUpdateDataCalled); Assert.IsTrue(strategy.IsRemoveObjectAndDependentDataCalled); CollectionAssert.AreEqual(importedItems, collection); IEnumerable <IObservable> expectedAffectedObjects = currentCollection.Concat(new IObservable[] { collection }); CollectionAssert.AreEquivalent(expectedAffectedObjects, affectedObjects); CollectionAssert.IsEmpty(strategy.UpdateDataCallArguments); int nrOfExpectedRemoveCalls = currentCollection.Length; List <Tuple <TestItem> > removeDataCallArguments = strategy.RemoveDataCallArguments; Assert.AreEqual(nrOfExpectedRemoveCalls, removeDataCallArguments.Count); for (var i = 0; i < nrOfExpectedRemoveCalls; i++) { Assert.AreSame(currentCollection[i], removeDataCallArguments[i].Item1); } }
public void UpdateTargetCollectionData_CollectionNotEmptyAndImportedDataFullyOverlaps_UpdatesCollection() { // Setup const string itemOneName = "Item one"; const string itemTwoName = "Item Two"; var currentCollection = new[] { new TestItem(itemOneName), new TestItem(itemTwoName) }; var collection = new TestUniqueItemCollection(); collection.AddRange(currentCollection, sourceFilePath); TestItem[] importedItems = { currentCollection[0].DeepClone(), currentCollection[1].DeepClone() }; TestUpdateDataStrategy strategy = CreateDefaultTestStrategy(collection); strategy.ItemsToUpdate = currentCollection; // Call IEnumerable <IObservable> affectedObjects = strategy.ConcreteUpdateData(importedItems, sourceFilePath); // Assert Assert.IsFalse(strategy.IsUpdateDataCalled); Assert.IsFalse(strategy.IsRemoveObjectAndDependentDataCalled); const int expectedNrOfUpdateCalls = 0; List <Tuple <TestItem, TestItem> > updateArgumentCalls = strategy.UpdateDataCallArguments; Assert.AreEqual(expectedNrOfUpdateCalls, updateArgumentCalls.Count); CollectionAssert.IsEmpty(strategy.RemoveDataCallArguments); CollectionAssert.AreEqual(currentCollection, collection); CollectionAssert.AreEqual(new IObservable[] { collection }, affectedObjects); }
public void UpdateTargetCollectionData_WithNonEmptyCollectionAndImportedDataEmpty_ClearsTargetCollection() { // Setup var collection = new TestUniqueItemCollection(); const string filePath = "path"; var itemsRemoved = new[] { new TestItem("Name A"), new TestItem("Name B") }; collection.AddRange(itemsRemoved, filePath); TestUpdateDataStrategy strategy = CreateDefaultTestStrategy(collection); strategy.ItemsToRemove = itemsRemoved; // Call IEnumerable <IObservable> affectedObjects = strategy.ConcreteUpdateData(Enumerable.Empty <TestItem>(), filePath); // Assert Assert.IsFalse(strategy.IsUpdateDataCalled); Assert.IsTrue(strategy.IsRemoveObjectAndDependentDataCalled); CollectionAssert.IsEmpty(strategy.UpdateDataCallArguments); int nrOfExpectedRemovedDataCalls = itemsRemoved.Length; List <Tuple <TestItem> > removeDataCallArguments = strategy.RemoveDataCallArguments; Assert.AreEqual(nrOfExpectedRemovedDataCalls, removeDataCallArguments.Count); for (var i = 0; i < nrOfExpectedRemovedDataCalls; i++) { Assert.AreSame(itemsRemoved[i], removeDataCallArguments[i].Item1); } IEnumerable <IObservable> expectedAffectedObjects = itemsRemoved.Concat(new IObservable[] { collection }); CollectionAssert.AreEquivalent(expectedAffectedObjects, affectedObjects); CollectionAssert.IsEmpty(collection); Assert.AreEqual(filePath, collection.SourcePath); }
public void UpdateTargetCollectionData_WithEmptyCollectionAndImportedData_SetsSourcePath() { // Setup var collection = new TestUniqueItemCollection(); const string filePath = "path"; TestUpdateDataStrategy strategy = CreateDefaultTestStrategy(collection); // Call IEnumerable <IObservable> affectedObjects = strategy.ConcreteUpdateData(Enumerable.Empty <TestItem>(), filePath); // Assert Assert.IsFalse(strategy.IsUpdateDataCalled); Assert.IsFalse(strategy.IsRemoveObjectAndDependentDataCalled); CollectionAssert.IsEmpty(affectedObjects); CollectionAssert.IsEmpty(collection); Assert.AreEqual(filePath, collection.SourcePath); }
public void UpdateTargetCollectionData_CollectionNotEmptyAndNoPathAndImportedDataFullyOverlaps_UpdatesCollectionAndFilePath() { // Setup const string itemOneName = "Item one"; const string itemTwoName = "Item Two"; var currentCollection = new[] { new TestItem(itemOneName), new TestItem(itemTwoName) }; var collection = new TestUniqueItemCollection(); collection.AddRange(currentCollection, "Onbekend"); TestItem[] importedItems = { currentCollection[0].DeepClone(), currentCollection[1].DeepClone() }; TestUpdateDataStrategy strategy = CreateDefaultTestStrategy(collection); strategy.ItemsToUpdate = currentCollection; const string newSourceFilePath = "Something/Different/From/Onbekend"; // Call IEnumerable <IObservable> affectedObjects = strategy.ConcreteUpdateData(importedItems, newSourceFilePath); // Assert Assert.IsFalse(strategy.IsUpdateDataCalled); Assert.IsFalse(strategy.IsRemoveObjectAndDependentDataCalled); Assert.AreEqual(newSourceFilePath, collection.SourcePath); CollectionAssert.AreEqual(currentCollection, collection); CollectionAssert.AreEqual(new IObservable[] { collection }, affectedObjects); }
public void UpdateTargetCollectionData_SameObjectAddedToAffectedObjects_ReturnsOnlyDistinctObjects() { // Setup var itemOne = new TestItem(1); var itemTwo = new TestItem(2); TestItem[] currentCollection = { itemOne }; var collection = new TestUniqueItemCollection(); collection.AddRange(currentCollection, "path"); TestItem[] importedItems = { itemTwo }; TestUpdateDataStrategy strategy = CreateDefaultTestStrategy(collection); strategy.ItemsToUpdate = currentCollection; strategy.ItemsToUpdateFrom = importedItems; strategy.AddObjectToUpdateToAffectedItems = true; // Call IEnumerable <IObservable> affectedObjects = strategy.ConcreteUpdateData(importedItems, "path"); IEnumerable <IObservable> expectedAffectedObjects = new IObservable[] { collection, itemOne, itemTwo }; CollectionAssert.AreEqual(expectedAffectedObjects, affectedObjects); }
public void UpdateTargetCollectionData_CollectionNotEmptyAndImportedDataPartiallyOverlaps_UpdatesCollection() { // Setup var itemToUpdate = new TestItem("Item one"); var itemToRemove = new TestItem("Item Two"); var collection = new TestUniqueItemCollection(); collection.AddRange(new[] { itemToUpdate, itemToRemove }, sourceFilePath); var itemToAdd = new TestItem("Item Four"); TestItem[] importedItems = { itemToUpdate.DeepClone(), itemToAdd }; TestUpdateDataStrategy strategy = CreateDefaultTestStrategy(collection); strategy.ItemsToUpdate = new[] { itemToUpdate }; strategy.ItemsToRemove = new[] { itemToRemove }; // Call IEnumerable <IObservable> affectedObjects = strategy.ConcreteUpdateData(importedItems, sourceFilePath); // Assert Assert.IsFalse(strategy.IsUpdateDataCalled); Assert.IsTrue(strategy.IsRemoveObjectAndDependentDataCalled); const int expectedNrOfUpdateCalls = 0; List <Tuple <TestItem, TestItem> > updateDataCallArguments = strategy.UpdateDataCallArguments; Assert.AreEqual(expectedNrOfUpdateCalls, updateDataCallArguments.Count); List <Tuple <TestItem> > removeDataCallArguments = strategy.RemoveDataCallArguments; Assert.AreEqual(1, removeDataCallArguments.Count); Assert.AreSame(itemToRemove, removeDataCallArguments[0].Item1); TestItem[] expectedCollection = { itemToUpdate, itemToAdd }; CollectionAssert.AreEqual(expectedCollection, collection); CollectionAssert.AreEquivalent(new IObservable[] { itemToRemove, collection }, affectedObjects); }