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

https://github.com/ajadex/SharpDevelop · C# · 653 lines · 514 code · 122 blank · 17 comment · 0 complexity · b2ceef047446b6e1b07971035e7bd5ec 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.PackageManagement;
  22. using ICSharpCode.PackageManagement.Design;
  23. using NuGet;
  24. using NUnit.Framework;
  25. using PackageManagement.Tests.Helpers;
  26. namespace PackageManagement.Tests
  27. {
  28. [TestFixture]
  29. public class AvailablePackagesViewModelTests
  30. {
  31. AvailablePackagesViewModel viewModel;
  32. PackageManagementEvents packageManagementEvents;
  33. FakeRegisteredPackageRepositories registeredPackageRepositories;
  34. ExceptionThrowingRegisteredPackageRepositories exceptionThrowingRegisteredPackageRepositories;
  35. FakeTaskFactory taskFactory;
  36. void CreateViewModel()
  37. {
  38. CreateRegisteredPackageRepositories();
  39. CreateViewModel(registeredPackageRepositories);
  40. }
  41. void CreateRegisteredPackageRepositories()
  42. {
  43. registeredPackageRepositories = new FakeRegisteredPackageRepositories();
  44. }
  45. void CreateViewModel(FakeRegisteredPackageRepositories registeredPackageRepositories)
  46. {
  47. taskFactory = new FakeTaskFactory();
  48. var packageViewModelFactory = new FakePackageViewModelFactory();
  49. packageManagementEvents = new PackageManagementEvents();
  50. viewModel = new AvailablePackagesViewModel(
  51. new FakePackageManagementSolution(),
  52. packageManagementEvents,
  53. registeredPackageRepositories,
  54. packageViewModelFactory,
  55. taskFactory);
  56. }
  57. void CreateExceptionThrowingRegisteredPackageRepositories()
  58. {
  59. exceptionThrowingRegisteredPackageRepositories = new ExceptionThrowingRegisteredPackageRepositories();
  60. }
  61. void CompleteReadPackagesTask()
  62. {
  63. taskFactory.ExecuteAllFakeTasks();
  64. }
  65. void ClearReadPackagesTasks()
  66. {
  67. taskFactory.ClearAllFakeTasks();
  68. }
  69. void AddOnePackageSourceToRegisteredSources()
  70. {
  71. registeredPackageRepositories.ClearPackageSources();
  72. registeredPackageRepositories.AddOnePackageSource();
  73. registeredPackageRepositories.HasMultiplePackageSources = false;
  74. }
  75. void AddTwoPackageSourcesToRegisteredSources()
  76. {
  77. var expectedPackageSources = new PackageSource[] {
  78. new PackageSource("http://first.com", "First"),
  79. new PackageSource("http://second.com", "Second")
  80. };
  81. AddPackageSourcesToRegisteredSources(expectedPackageSources);
  82. registeredPackageRepositories.HasMultiplePackageSources = true;
  83. }
  84. void AddPackageSourcesToRegisteredSources(PackageSource[] sources)
  85. {
  86. registeredPackageRepositories.ClearPackageSources();
  87. registeredPackageRepositories.AddPackageSources(sources);
  88. }
  89. PackageSource AddTwoPackageSourcesToRegisteredSourcesWithFirstOneDisabled()
  90. {
  91. var expectedPackageSources = new PackageSource[] {
  92. new PackageSource("http://first.com", "First") { IsEnabled = false },
  93. new PackageSource("http://second.com", "Second") { IsEnabled = true }
  94. };
  95. AddPackageSourcesToRegisteredSources(expectedPackageSources);
  96. registeredPackageRepositories.HasMultiplePackageSources = true;
  97. return expectedPackageSources[0];
  98. }
  99. void CreateNewActiveRepositoryWithDifferentPackages()
  100. {
  101. var package = new FakePackage("NewRepositoryPackageId");
  102. var newRepository = new FakePackageRepository();
  103. newRepository.FakePackages.Add(package);
  104. registeredPackageRepositories.FakeActiveRepository = newRepository;
  105. }
  106. void SetUpTwoPackageSourcesAndViewModelHasReadPackages()
  107. {
  108. CreateRegisteredPackageRepositories();
  109. AddTwoPackageSourcesToRegisteredSources();
  110. CreateViewModel(registeredPackageRepositories);
  111. registeredPackageRepositories.ActivePackageSource = registeredPackageRepositories.PackageSources[0];
  112. viewModel.ReadPackages();
  113. CompleteReadPackagesTask();
  114. CreateNewActiveRepositoryWithDifferentPackages();
  115. }
  116. void ChangeSelectedPackageSourceToSecondSource()
  117. {
  118. var secondPackageSource = registeredPackageRepositories.PackageSources[1];
  119. viewModel.SelectedPackageSource = secondPackageSource;
  120. }
  121. void ChangeSelectedPackageSourceToFirstSource()
  122. {
  123. var firstPackageSource = registeredPackageRepositories.PackageSources[0];
  124. viewModel.SelectedPackageSource = firstPackageSource;
  125. }
  126. [Test]
  127. public void ReadPackages_RepositoryHasThreePackagesWithSameIdButDifferentVersions_HasLatestPackageVersionOnly()
  128. {
  129. CreateViewModel();
  130. var package1 = new FakePackage("Test", "0.1.0.0");
  131. var package2 = new FakePackage("Test", "0.2.0.0");
  132. var package3 = new FakePackage("Test", "0.3.0.0");
  133. var packages = new FakePackage[] {
  134. package1, package2, package3
  135. };
  136. registeredPackageRepositories.FakeActiveRepository.FakePackages.AddRange(packages);
  137. viewModel.ReadPackages();
  138. CompleteReadPackagesTask();
  139. var expectedPackages = new FakePackage[] {
  140. package3
  141. };
  142. PackageCollectionAssert.AreEqual(expectedPackages, viewModel.PackageViewModels);
  143. }
  144. [Test]
  145. public void IsSearchable_ByDefault_ReturnsTrue()
  146. {
  147. CreateViewModel();
  148. Assert.IsTrue(viewModel.IsSearchable);
  149. }
  150. [Test]
  151. public void Search_RepositoryHasThreePackagesWithSameIdButSearchTermsMatchNoPackageIds_ReturnsNoPackages()
  152. {
  153. CreateViewModel();
  154. var package1 = new FakePackage("Test", "0.1.0.0");
  155. var package2 = new FakePackage("Test", "0.2.0.0");
  156. var package3 = new FakePackage("Test", "0.3.0.0");
  157. var packages = new FakePackage[] {
  158. package1, package2, package3
  159. };
  160. registeredPackageRepositories.FakeActiveRepository.FakePackages.AddRange(packages);
  161. viewModel.ReadPackages();
  162. CompleteReadPackagesTask();
  163. ClearReadPackagesTasks();
  164. viewModel.SearchTerms = "NotAMatch";
  165. viewModel.Search();
  166. CompleteReadPackagesTask();
  167. Assert.AreEqual(0, viewModel.PackageViewModels.Count);
  168. }
  169. [Test]
  170. public void ShowNextPage_TwoObjectsWatchingForPagesCollectionChangedEventAndUserMovesToPageTwoAndFilteredPackagesReturnsLessThanExpectedPackagesDueToMatchingVersions_InvalidOperationExceptionNotThrownWhen()
  171. {
  172. CreateViewModel();
  173. viewModel.PageSize = 2;
  174. var package1 = new FakePackage("First", "0.1.0.0");
  175. var package2 = new FakePackage("Second", "0.2.0.0");
  176. var package3 = new FakePackage("Test", "0.3.0.0");
  177. var package4 = new FakePackage("Test", "0.4.0.0");
  178. var packages = new FakePackage[] {
  179. package1, package2, package3, package4
  180. };
  181. registeredPackageRepositories.FakeActiveRepository.FakePackages.AddRange(packages);
  182. viewModel.ReadPackages();
  183. CompleteReadPackagesTask();
  184. ClearReadPackagesTasks();
  185. bool collectionChangedEventFired = false;
  186. viewModel.Pages.CollectionChanged += (sender, e) => collectionChangedEventFired = true;
  187. viewModel.ShowNextPage();
  188. CompleteReadPackagesTask();
  189. var expectedPackages = new FakePackage[] {
  190. package4
  191. };
  192. PackageCollectionAssert.AreEqual(expectedPackages, viewModel.PackageViewModels);
  193. Assert.IsTrue(collectionChangedEventFired);
  194. }
  195. [Test]
  196. public void ShowSources_TwoPackageSources_ReturnsTrue()
  197. {
  198. CreateRegisteredPackageRepositories();
  199. AddTwoPackageSourcesToRegisteredSources();
  200. CreateViewModel(registeredPackageRepositories);
  201. Assert.IsTrue(viewModel.ShowPackageSources);
  202. }
  203. [Test]
  204. public void ShowPackageSources_OnePackageSources_ReturnsTrue()
  205. {
  206. CreateRegisteredPackageRepositories();
  207. AddOnePackageSourceToRegisteredSources();
  208. CreateViewModel(registeredPackageRepositories);
  209. Assert.IsTrue(viewModel.ShowPackageSources);
  210. }
  211. [Test]
  212. public void PackageSources_TwoPackageSourcesInOptions_ReturnsTwoPackageSourcesPlusAggregatePackageSource()
  213. {
  214. CreateRegisteredPackageRepositories();
  215. AddTwoPackageSourcesToRegisteredSources();
  216. CreateViewModel(registeredPackageRepositories);
  217. var expectedPackageSources = new List<PackageSource>(registeredPackageRepositories.PackageSources);
  218. expectedPackageSources.Add(RegisteredPackageSourceSettings.AggregatePackageSource);
  219. PackageSourceCollectionAssert.AreEqual(expectedPackageSources, viewModel.PackageSources);
  220. }
  221. [Test]
  222. public void PackageSources_OnePackageSourceInOptions_ReturnsOnePackageSource()
  223. {
  224. CreateRegisteredPackageRepositories();
  225. AddOnePackageSourceToRegisteredSources();
  226. CreateViewModel(registeredPackageRepositories);
  227. var expectedPackageSources = new List<PackageSource>(registeredPackageRepositories.PackageSources);
  228. PackageSourceCollectionAssert.AreEqual(expectedPackageSources, viewModel.PackageSources);
  229. }
  230. [Test]
  231. public void SelectedPackageSource_TwoPackageSourcesInOptionsAndActivePackageSourceIsFirstSource_IsFirstPackageSource()
  232. {
  233. CreateRegisteredPackageRepositories();
  234. AddTwoPackageSourcesToRegisteredSources();
  235. CreateViewModel(registeredPackageRepositories);
  236. var expectedPackageSource = registeredPackageRepositories.PackageSources[0];
  237. registeredPackageRepositories.ActivePackageSource = expectedPackageSource;
  238. Assert.AreEqual(expectedPackageSource, viewModel.SelectedPackageSource);
  239. }
  240. [Test]
  241. public void SelectedPackageSource_TwoPackageSourcesInOptionsAndActivePackageSourceIsSecondSource_IsSecondPackageSource()
  242. {
  243. CreateRegisteredPackageRepositories();
  244. AddTwoPackageSourcesToRegisteredSources();
  245. CreateViewModel(registeredPackageRepositories);
  246. var expectedPackageSource = registeredPackageRepositories.PackageSources[1];
  247. registeredPackageRepositories.ActivePackageSource = expectedPackageSource;
  248. Assert.AreEqual(expectedPackageSource, viewModel.SelectedPackageSource);
  249. }
  250. [Test]
  251. public void SelectedPackageSource_Changed_ActivePackageSourceChanged()
  252. {
  253. CreateRegisteredPackageRepositories();
  254. AddTwoPackageSourcesToRegisteredSources();
  255. CreateViewModel(registeredPackageRepositories);
  256. registeredPackageRepositories.ActivePackageSource = registeredPackageRepositories.PackageSources[0];
  257. var expectedPackageSource = registeredPackageRepositories.PackageSources[1];
  258. viewModel.SelectedPackageSource = expectedPackageSource;
  259. Assert.AreEqual(expectedPackageSource, registeredPackageRepositories.ActivePackageSource);
  260. }
  261. [Test]
  262. public void SelectedPackageSource_PackageSourceChangedAfterReadingPackages_PackagesReadFromNewPackageSourceAndDisplayed()
  263. {
  264. SetUpTwoPackageSourcesAndViewModelHasReadPackages();
  265. ClearReadPackagesTasks();
  266. ChangeSelectedPackageSourceToSecondSource();
  267. CompleteReadPackagesTask();
  268. var expectedPackages = registeredPackageRepositories.FakeActiveRepository.FakePackages;
  269. PackageCollectionAssert.AreEqual(expectedPackages, viewModel.PackageViewModels);
  270. }
  271. [Test]
  272. public void SelectedPackageSource_PackageSourceChangedAfterReadingPackages_PropertyChangedEventFiredAfterPackagesAreRead()
  273. {
  274. SetUpTwoPackageSourcesAndViewModelHasReadPackages();
  275. int packageCountWhenPropertyChangedEventFired = -1;
  276. viewModel.PropertyChanged += (sender, e) => packageCountWhenPropertyChangedEventFired = viewModel.PackageViewModels.Count;
  277. ClearReadPackagesTasks();
  278. ChangeSelectedPackageSourceToSecondSource();
  279. CompleteReadPackagesTask();
  280. Assert.AreEqual(1, packageCountWhenPropertyChangedEventFired);
  281. }
  282. [Test]
  283. public void SelectedPackageSource_PackageSourceChangedButToSameSelectedPackageSource_PackagesAreNotRead()
  284. {
  285. SetUpTwoPackageSourcesAndViewModelHasReadPackages();
  286. ChangeSelectedPackageSourceToFirstSource();
  287. Assert.AreEqual(0, viewModel.PackageViewModels.Count);
  288. }
  289. [Test]
  290. public void SelectedPackageSource_PackageSourceChangedButToSameSelectedPackageSource_PropertyChangedEventNotFired()
  291. {
  292. SetUpTwoPackageSourcesAndViewModelHasReadPackages();
  293. bool fired = false;
  294. viewModel.PropertyChanged += (sender, e) => fired = true;
  295. ChangeSelectedPackageSourceToFirstSource();
  296. Assert.IsFalse(fired);
  297. }
  298. [Test]
  299. public void GetAllPackages_OnePackageInRepository_RepositoryNotCreatedByBackgroundThread()
  300. {
  301. CreateRegisteredPackageRepositories();
  302. AddOnePackageSourceToRegisteredSources();
  303. registeredPackageRepositories.FakeActiveRepository.FakePackages.Add(new FakePackage());
  304. CreateViewModel(registeredPackageRepositories);
  305. viewModel.ReadPackages();
  306. registeredPackageRepositories.FakeActiveRepository = null;
  307. CompleteReadPackagesTask();
  308. Assert.AreEqual(1, viewModel.PackageViewModels.Count);
  309. }
  310. [Test]
  311. public void ReadPackages_ExceptionThrownWhenAccessingActiveRepository_ErrorMessageFromExceptionNotOverriddenByReadPackagesCall()
  312. {
  313. CreateExceptionThrowingRegisteredPackageRepositories();
  314. exceptionThrowingRegisteredPackageRepositories.ExceptionToThrowWhenActiveRepositoryAccessed =
  315. new Exception("Test");
  316. CreateViewModel(exceptionThrowingRegisteredPackageRepositories);
  317. viewModel.ReadPackages();
  318. ApplicationException ex = Assert.Throws<ApplicationException>(CompleteReadPackagesTask);
  319. Assert.AreEqual("Test", ex.Message);
  320. }
  321. [Test]
  322. public void ReadPackages_RepositoryHasPrereleaseAndReleasePackage_HasReleasePackageOnly()
  323. {
  324. CreateViewModel();
  325. var releasePackage = new FakePackage("Test", "1.1.0.0");
  326. var prereleasePackage = new FakePackage("Test", "1.1.0-alpha");
  327. var packages = new FakePackage[] {
  328. releasePackage, prereleasePackage
  329. };
  330. registeredPackageRepositories.FakeActiveRepository.FakePackages.AddRange(packages);
  331. viewModel.ReadPackages();
  332. CompleteReadPackagesTask();
  333. var expectedPackages = new FakePackage[] {
  334. releasePackage
  335. };
  336. PackageCollectionAssert.AreEqual(expectedPackages, viewModel.PackageViewModels);
  337. }
  338. [Test]
  339. public void ReadPackages_TwoPackagesWithDifferentDownloadCounts_HighestDownloadCountShownFirst()
  340. {
  341. CreateViewModel();
  342. var package1 = new FakePackage("A", "0.1.0.0") { DownloadCount = 1 };
  343. var package2 = new FakePackage("Z", "0.1.0.0") { DownloadCount = 1000 };
  344. var packages = new FakePackage[] {
  345. package1, package2
  346. };
  347. registeredPackageRepositories.FakeActiveRepository.FakePackages.AddRange(packages);
  348. viewModel.ReadPackages();
  349. CompleteReadPackagesTask();
  350. var expectedPackages = new FakePackage[] {
  351. package2, package1
  352. };
  353. PackageCollectionAssert.AreEqual(expectedPackages, viewModel.PackageViewModels);
  354. }
  355. [Test]
  356. public void GetPackagesFromPackageSource_RepositoryHasThreePackagesWithSameIdButDifferentVersions_LatestPackageVersionOnlyRequestedFromPackageSource()
  357. {
  358. CreateViewModel();
  359. var package1 = new FakePackage("Test", "0.1.0.0") { IsLatestVersion = false };
  360. var package2 = new FakePackage("Test", "0.2.0.0") { IsLatestVersion = false };
  361. var package3 = new FakePackage("Test", "0.3.0.0") { IsLatestVersion = true };
  362. var packages = new FakePackage[] {
  363. package1, package2, package3
  364. };
  365. registeredPackageRepositories.FakeActiveRepository.FakePackages.AddRange(packages);
  366. viewModel.ReadPackages();
  367. IList<IPackage> allPackages = viewModel.GetPackagesFromPackageSource().ToList();
  368. var expectedPackages = new FakePackage[] {
  369. package3
  370. };
  371. PackageCollectionAssert.AreEqual(expectedPackages, allPackages);
  372. }
  373. [Test]
  374. public void PackageSources_TwoPackageSourcesButFirstIsDisabled_DoesNotReturnDisabledPackageSource()
  375. {
  376. CreateRegisteredPackageRepositories();
  377. AddTwoPackageSourcesToRegisteredSourcesWithFirstOneDisabled();
  378. CreateViewModel(registeredPackageRepositories);
  379. IEnumerable<PackageSource> packageSources = viewModel.PackageSources;
  380. bool containsDisabledPackageSource = packageSources.Contains(registeredPackageRepositories.PackageSources[0]);
  381. bool containsEnabledPackageSource = packageSources.Contains(registeredPackageRepositories.PackageSources[1]);
  382. Assert.IsFalse(containsDisabledPackageSource);
  383. Assert.IsTrue(containsEnabledPackageSource);
  384. }
  385. [Test]
  386. public void IsInstallAllPackagesEnabled_RepositoryHasTwoPackages_ReturnsFalse()
  387. {
  388. CreateViewModel();
  389. var package1 = new FakePackage("Test", "0.1.0.0");
  390. var package2 = new FakePackage("Test", "0.2.0.0");
  391. var packages = new FakePackage[] {
  392. package1, package2
  393. };
  394. registeredPackageRepositories.FakeActiveRepository.FakePackages.AddRange(packages);
  395. viewModel.ReadPackages();
  396. CompleteReadPackagesTask();
  397. bool enabled = viewModel.IsUpdateAllPackagesEnabled;
  398. Assert.IsFalse(enabled);
  399. }
  400. [Test]
  401. public void ShowPrerelease_ByDefault_ReturnsTrue()
  402. {
  403. CreateViewModel();
  404. bool show = viewModel.ShowPrerelease;
  405. Assert.IsTrue(show);
  406. }
  407. [Test]
  408. public void ReadPackages_RepositoryHasPrereleasePackageAndIncludePrereleaseIsTrue_HasPrereleasePackageInList()
  409. {
  410. CreateViewModel();
  411. viewModel.IncludePrerelease = true;
  412. var prereleasePackage = new FakePackage("Test", "1.1.0-alpha") { IsLatestVersion = false };
  413. var expectedPackages = new FakePackage[] { prereleasePackage };
  414. registeredPackageRepositories.FakeActiveRepository.FakePackages.AddRange(expectedPackages);
  415. viewModel.ReadPackages();
  416. CompleteReadPackagesTask();
  417. PackageCollectionAssert.AreEqual(expectedPackages, viewModel.PackageViewModels);
  418. }
  419. [Test]
  420. public void ReadPackages_RepositoryHasThreePrereleasePackagesWithSameIdButDifferentVersionsAndIncludePrereleaseIsTrue_HasLatestPreleasePackageVersionOnly()
  421. {
  422. CreateViewModel();
  423. viewModel.IncludePrerelease = true;
  424. var package1 = new FakePackage("Test", "0.1.0.0-alpha") { IsLatestVersion = false };
  425. var package2 = new FakePackage("Test", "0.2.0.0-alpha") { IsLatestVersion = false };
  426. var package3 = new FakePackage("Test", "0.3.0.0-alpha") { IsLatestVersion = false };
  427. var packages = new FakePackage[] {
  428. package1, package2, package3
  429. };
  430. registeredPackageRepositories.FakeActiveRepository.FakePackages.AddRange(packages);
  431. viewModel.ReadPackages();
  432. CompleteReadPackagesTask();
  433. var expectedPackages = new FakePackage[] {
  434. package3
  435. };
  436. PackageCollectionAssert.AreEqual(expectedPackages, viewModel.PackageViewModels);
  437. }
  438. [Test]
  439. public void PackageViewModels_GetParentOfPackageViewModel_ReturnsAvailablePackagesViewModel()
  440. {
  441. CreateViewModel();
  442. var package1 = new FakePackage("Test", "0.1.0.0");
  443. var package2 = new FakePackage("Test", "0.2.0.0");
  444. var packages = new FakePackage[] {
  445. package1, package2
  446. };
  447. registeredPackageRepositories.FakeActiveRepository.FakePackages.AddRange(packages);
  448. viewModel.ReadPackages();
  449. CompleteReadPackagesTask();
  450. PackageViewModel childViewModel = viewModel.PackageViewModels.First();
  451. IPackageViewModelParent parent = childViewModel.GetParent();
  452. Assert.AreEqual(viewModel, parent);
  453. }
  454. [Test]
  455. public void GetPackagesFromPackageSource_RepositoryIsServiceBasedRepository_ServiceBasedRepositorySearchUsed()
  456. {
  457. CreateViewModel();
  458. var package = FakePackage.CreatePackageWithVersion("Test", "0.1.0.0");
  459. var packages = new FakePackage[] { package };
  460. var repository = new FakeServiceBasedRepository();
  461. repository.PackagesToReturnForSearch("id:test", false, packages);
  462. registeredPackageRepositories.FakeActiveRepository = repository;
  463. viewModel.SearchTerms = "id:test";
  464. viewModel.IncludePrerelease = false;
  465. viewModel.ReadPackages();
  466. IList<IPackage> allPackages = viewModel.GetPackagesFromPackageSource().ToList();
  467. var expectedPackages = new FakePackage[] { package };
  468. PackageCollectionAssert.AreEqual(expectedPackages, allPackages);
  469. }
  470. [Test]
  471. public void GetPackagesFromPackageSource_RepositoryIsServiceBasedRepositoryAndPrereleaseIncluded_ServiceBasedRepositorySearchUsed()
  472. {
  473. CreateViewModel();
  474. var package = FakePackage.CreatePackageWithVersion("Test", "0.1.0.0");
  475. var packages = new FakePackage[] { package };
  476. var repository = new FakeServiceBasedRepository();
  477. repository.PackagesToReturnForSearch("id:test", true, packages);
  478. registeredPackageRepositories.FakeActiveRepository = repository;
  479. viewModel.SearchTerms = "id:test";
  480. viewModel.IncludePrerelease = true;
  481. viewModel.ReadPackages();
  482. IList<IPackage> allPackages = viewModel.GetPackagesFromPackageSource().ToList();
  483. var expectedPackages = new FakePackage[] { package };
  484. PackageCollectionAssert.AreEqual(expectedPackages, allPackages);
  485. }
  486. [Test]
  487. public void GetPackagesFromPackageSource_RepositoryHasThreePackagesWithSameIdButDifferentVersionsAndSearchIncludesPrerelease_AbsoluteLatestPackageVersionOnlyRequestedFromPackageSource()
  488. {
  489. CreateViewModel();
  490. var package1 = new FakePackage("Test", "0.1.0.0") { IsAbsoluteLatestVersion = false };
  491. var package2 = new FakePackage("Test", "0.2.0.0") { IsAbsoluteLatestVersion = false };
  492. var package3 = new FakePackage("Test", "0.3.0.0") { IsAbsoluteLatestVersion = true };
  493. var packages = new FakePackage[] {
  494. package1, package2, package3
  495. };
  496. registeredPackageRepositories.FakeActiveRepository.FakePackages.AddRange(packages);
  497. viewModel.IncludePrerelease = true;
  498. viewModel.ReadPackages();
  499. IList<IPackage> allPackages = viewModel.GetPackagesFromPackageSource().ToList();
  500. var expectedPackages = new FakePackage[] {
  501. package3
  502. };
  503. PackageCollectionAssert.AreEqual(expectedPackages, allPackages);
  504. }
  505. [Test]
  506. public void ReadPackages_ActiveRepositoryChangedWhichUsesInvalidUrl_InvalidUrlExceptionIsShownAsErrorMessage()
  507. {
  508. CreateExceptionThrowingRegisteredPackageRepositories();
  509. CreateViewModel(exceptionThrowingRegisteredPackageRepositories);
  510. var package = new FakePackage("Test", "0.1.0.0");
  511. exceptionThrowingRegisteredPackageRepositories
  512. .FakeActiveRepository
  513. .FakePackages
  514. .Add(package);
  515. viewModel.ReadPackages();
  516. CompleteReadPackagesTask();
  517. taskFactory.ClearAllFakeTasks();
  518. exceptionThrowingRegisteredPackageRepositories.ExceptionToThrowWhenActiveRepositoryAccessed =
  519. new Exception("Invalid url");
  520. viewModel.ReadPackages();
  521. FakeTask<PackagesForSelectedPageResult> task = taskFactory.FirstFakeTaskCreated;
  522. ApplicationException ex = Assert.Throws<ApplicationException>(() => task.ExecuteTaskButNotContinueWith());
  523. task.Exception = new AggregateException(ex);
  524. task.IsFaulted = true;
  525. task.ExecuteContinueWith();
  526. Assert.AreEqual("Invalid url", ex.Message);
  527. Assert.IsTrue(viewModel.HasError);
  528. Assert.AreEqual("Invalid url", viewModel.ErrorMessage);
  529. }
  530. }
  531. }