/src/AddIns/Misc/PackageManagement/Test/Src/RecentPackageRepositoryTests.cs

https://github.com/ajadex/SharpDevelop · C# · 288 lines · 208 code · 63 blank · 17 comment · 0 complexity · 4b093a3a0c3743a40aace16ec3169f08 MD5 · raw file

  1. // Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team
  2. //
  3. // Permission is hereby granted, free of charge, to any person obtaining a copy of this
  4. // software and associated documentation files (the "Software"), to deal in the Software
  5. // without restriction, including without limitation the rights to use, copy, modify, merge,
  6. // publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons
  7. // to whom the Software is furnished to do so, subject to the following conditions:
  8. //
  9. // The above copyright notice and this permission notice shall be included in all copies or
  10. // substantial portions of the Software.
  11. //
  12. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
  13. // INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
  14. // PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
  15. // FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
  16. // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  17. // DEALINGS IN THE SOFTWARE.
  18. using System;
  19. using System.Collections.Generic;
  20. using System.Linq;
  21. using ICSharpCode.Core;
  22. using ICSharpCode.PackageManagement;
  23. using ICSharpCode.PackageManagement.Design;
  24. using NuGet;
  25. using NUnit.Framework;
  26. using PackageManagement.Tests.Helpers;
  27. namespace PackageManagement.Tests
  28. {
  29. [TestFixture]
  30. public class RecentPackageRepositoryTests
  31. {
  32. RecentPackageRepository repository;
  33. FakePackageRepository aggregateRepository;
  34. PackageManagementEvents packageManagementEvents;
  35. List<RecentPackageInfo> recentPackages;
  36. void CreateRepository()
  37. {
  38. CreateRecentPackages();
  39. CreateRepository(recentPackages);
  40. }
  41. void CreateRecentPackages()
  42. {
  43. recentPackages = new List<RecentPackageInfo>();
  44. aggregateRepository = new FakePackageRepository();
  45. }
  46. void CreateRepository(IList<RecentPackageInfo> recentPackages)
  47. {
  48. packageManagementEvents = new PackageManagementEvents();
  49. repository = new RecentPackageRepository(recentPackages, aggregateRepository, packageManagementEvents);
  50. }
  51. FakePackage AddOnePackageToRepository(string id)
  52. {
  53. var package = new FakePackage(id);
  54. repository.AddPackage(package);
  55. return package;
  56. }
  57. IEnumerable<IPackage> AddTwoDifferentPackagesToRepository()
  58. {
  59. yield return AddOnePackageToRepository("Test.Package.1");
  60. yield return AddOnePackageToRepository("Test.Package.2");
  61. }
  62. IEnumerable<IPackage> AddFourDifferentPackagesToRepository()
  63. {
  64. yield return AddOnePackageToRepository("Test.Package.1");
  65. yield return AddOnePackageToRepository("Test.Package.2");
  66. yield return AddOnePackageToRepository("Test.Package.3");
  67. yield return AddOnePackageToRepository("Test.Package.4");
  68. }
  69. FakePackage CreateRepositoryWithOneRecentPackageSavedInOptions()
  70. {
  71. CreateRecentPackages();
  72. var package = new FakePackage("Test");
  73. aggregateRepository.FakePackages.Add(package);
  74. recentPackages.Add(new RecentPackageInfo(package));
  75. CreateRepository(recentPackages);
  76. return package;
  77. }
  78. [Test]
  79. public void Source_NewRecentRepositoryCreated_IsRecentPackages()
  80. {
  81. CreateRepository();
  82. Assert.AreEqual("RecentPackages", repository.Source);
  83. }
  84. [Test]
  85. public void GetPackages_RepositoryIsEmptyAndOnePackageAdded_ReturnsPackageAdded()
  86. {
  87. CreateRepository();
  88. var package = AddOnePackageToRepository("Test.Package");
  89. var packages = repository.GetPackages();
  90. var expectedPackages = new FakePackage[] {
  91. package
  92. };
  93. PackageCollectionAssert.AreEqual(expectedPackages, packages);
  94. }
  95. [Test]
  96. public void GetPackages_RepositoryIsEmptyAndTwoDifferentPackagesAdded_ReturnsPackagesInReverseOrderWithLastAddedFirst()
  97. {
  98. CreateRepository();
  99. var packagesAdded = AddTwoDifferentPackagesToRepository();
  100. var packages = repository.GetPackages();
  101. var expectedPackages = packagesAdded.Reverse();
  102. PackageCollectionAssert.AreEqual(expectedPackages, packages);
  103. }
  104. [Test]
  105. public void GetPackages_RepositoryCanHoldThreePackagesAndFourPackagesAdded_ReturnsLastThreePackagesAddedInReverseOrder()
  106. {
  107. CreateRepository();
  108. repository.MaximumPackagesCount = 3;
  109. var packagesAdded = AddFourDifferentPackagesToRepository();
  110. var packages = repository.GetPackages();
  111. var expectedPackages = packagesAdded.Reverse().Take(3);
  112. PackageCollectionAssert.AreEqual(expectedPackages, packages);
  113. }
  114. [Test]
  115. public void GetPackages_RepositoryIsEmptyAndSamePackageIsAddedTwice_OnePackageReturned()
  116. {
  117. CreateRepository();
  118. AddOnePackageToRepository("Test");
  119. var package = AddOnePackageToRepository("Test");
  120. var packages = repository.GetPackages();
  121. var expectedPackages = new FakePackage[] {
  122. package
  123. };
  124. PackageCollectionAssert.AreEqual(expectedPackages, packages);
  125. }
  126. [Test]
  127. public void AddPackage_RepositoryIsEmptyAndOnePackageAdded_RecentPackageAddedToOptions()
  128. {
  129. CreateRepository();
  130. var package = AddOnePackageToRepository("Test");
  131. var expectedPackages = new RecentPackageInfo[] {
  132. new RecentPackageInfo(package)
  133. };
  134. RecentPackageInfoCollectionAssert.AreEqual(expectedPackages, recentPackages);
  135. }
  136. [Test]
  137. public void AddPackage_RepositoryIsEmptyAndTwoPackagesAddedFromDifferentSources_BothRecentPackagesAddedToOptions()
  138. {
  139. CreateRepository();
  140. var package1 = AddOnePackageToRepository("Test1");
  141. var package2 = AddOnePackageToRepository("Test2");
  142. var expectedPackages = new RecentPackageInfo[] {
  143. new RecentPackageInfo(package2),
  144. new RecentPackageInfo(package1)
  145. };
  146. RecentPackageInfoCollectionAssert.AreEqual(expectedPackages, recentPackages);
  147. }
  148. [Test]
  149. public void GetPackages_SavedOptionsHasOneRecentPackage_ContainsPackageTakenFromAggregateRepositoryMatchingSavedRecentPackageInfo()
  150. {
  151. var package = CreateRepositoryWithOneRecentPackageSavedInOptions();
  152. var recentPackages = repository.GetPackages();
  153. var expectedPackages = new FakePackage[] {
  154. package
  155. };
  156. PackageCollectionAssert.AreEqual(expectedPackages, recentPackages);
  157. }
  158. [Test]
  159. public void GetPackages_SavedOptionsHasOneRecentPackageAndGetPackagesCalledTwice_OnePackageReturned()
  160. {
  161. var package = CreateRepositoryWithOneRecentPackageSavedInOptions();
  162. repository.GetPackages();
  163. var recentPackages = repository.GetPackages();
  164. var expectedPackages = new FakePackage[] {
  165. package
  166. };
  167. PackageCollectionAssert.AreEqual(expectedPackages, recentPackages);
  168. }
  169. [Test]
  170. public void GetPackages_OneRecentPackageAndAggregrateRepositoryHasTwoPackagesWithSameIdButDifferentVersions_OnePackageReturnedWithMatchingVersion()
  171. {
  172. var package1 = CreateRepositoryWithOneRecentPackageSavedInOptions();
  173. var package2 = new FakePackage(package1.Id);
  174. package2.Version = new SemanticVersion(2, 0, 0, 0);
  175. aggregateRepository.FakePackages.Add(package2);
  176. var recentPackages = repository.GetPackages();
  177. var expectedPackages = new FakePackage[] {
  178. package1
  179. };
  180. PackageCollectionAssert.AreEqual(expectedPackages, recentPackages);
  181. }
  182. [Test]
  183. public void ParentPackageInstalled_EventFires_PackageAddedToRecentPackages()
  184. {
  185. CreateRepository();
  186. var package = new FakePackage("Test");
  187. packageManagementEvents.OnParentPackageInstalled(package);
  188. var recentPackages = repository.GetPackages();
  189. var expectedPackages = new FakePackage[] {
  190. package
  191. };
  192. PackageCollectionAssert.AreEqual(expectedPackages, recentPackages);
  193. }
  194. public void Clear_OneRecentPackage_PackagesRemoved()
  195. {
  196. CreateRepository();
  197. AddOnePackageToRepository("Test1");
  198. repository.Clear();
  199. int count = repository.GetPackages().Count();
  200. Assert.AreEqual(0, count);
  201. }
  202. [Test]
  203. public void Clear_OneRecentPackageInOptions_RecentPackagesAreRemovedFromOptions()
  204. {
  205. CreateRepositoryWithOneRecentPackageSavedInOptions();
  206. repository.Clear();
  207. int count = recentPackages.Count;
  208. Assert.AreEqual(0, count);
  209. }
  210. [Test]
  211. public void HasRecentPackages_NoSavedRecentPackages_ReturnsFalse()
  212. {
  213. CreateRepository();
  214. bool hasRecentPackages = repository.HasRecentPackages;
  215. Assert.IsFalse(hasRecentPackages);
  216. }
  217. [Test]
  218. public void HasRecentPackages_OneSavedRecentPackages_ReturnsTrue()
  219. {
  220. CreateRepositoryWithOneRecentPackageSavedInOptions();
  221. bool hasRecentPackages = repository.HasRecentPackages;
  222. Assert.IsTrue(hasRecentPackages);
  223. }
  224. }
  225. }