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

https://github.com/ajadex/SharpDevelop · C# · 1379 lines · 1075 code · 280 blank · 24 comment · 0 complexity · d986383a3a66c110319f034147bc7ffa 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.Collections.ObjectModel;
  21. using System.ComponentModel;
  22. using System.Linq;
  23. using ICSharpCode.PackageManagement;
  24. using ICSharpCode.PackageManagement.Design;
  25. using NuGet;
  26. using NUnit.Framework;
  27. using PackageManagement.Tests.Helpers;
  28. namespace PackageManagement.Tests
  29. {
  30. [TestFixture]
  31. public class PackagesViewModelTests
  32. {
  33. TestablePackagesViewModel viewModel;
  34. FakeTaskFactory taskFactory;
  35. FakeRegisteredPackageRepositories registeredPackageRepositories;
  36. void CreateViewModel(FakeRegisteredPackageRepositories registeredPackageRepositories)
  37. {
  38. viewModel = new TestablePackagesViewModel(registeredPackageRepositories);
  39. this.registeredPackageRepositories = registeredPackageRepositories;
  40. taskFactory = viewModel.FakeTaskFactory;
  41. }
  42. void CreateViewModel()
  43. {
  44. CreateRegisteredRepositoriesService();
  45. CreateViewModel(registeredPackageRepositories);
  46. }
  47. void CreateRegisteredRepositoriesService()
  48. {
  49. registeredPackageRepositories = new FakeRegisteredPackageRepositories();
  50. }
  51. void CompleteReadPackagesTask()
  52. {
  53. taskFactory.ExecuteAllFakeTasks();
  54. }
  55. void ClearReadPackagesTasks()
  56. {
  57. taskFactory.ClearAllFakeTasks();
  58. }
  59. [Test]
  60. public void IsPaged_OnePackageAndPageSizeIsFive_ReturnsFalse()
  61. {
  62. CreateViewModel();
  63. viewModel.PageSize = 5;
  64. viewModel.AddOneFakePackage();
  65. viewModel.ReadPackages();
  66. CompleteReadPackagesTask();
  67. bool paged = viewModel.IsPaged;
  68. Assert.IsFalse(paged);
  69. }
  70. [Test]
  71. public void IsPaged_SixPackagesAndPageSizeIsFive_ReturnsTrue()
  72. {
  73. CreateViewModel();
  74. viewModel.PageSize = 5;
  75. viewModel.AddSixFakePackages();
  76. viewModel.ReadPackages();
  77. CompleteReadPackagesTask();
  78. bool paged = viewModel.IsPaged;
  79. Assert.IsTrue(paged);
  80. }
  81. [Test]
  82. public void SelectedPageNumber_ByDefault_ReturnsOne()
  83. {
  84. CreateViewModel();
  85. int pageNumber = viewModel.SelectedPageNumber;
  86. Assert.AreEqual(1, pageNumber);
  87. }
  88. [Test]
  89. public void HasPreviousPage_SixPackagesSelectedPageNumberIsOneAndPageSizeIsFive_ReturnsFalse()
  90. {
  91. CreateViewModel();
  92. viewModel.PageSize = 5;
  93. viewModel.AddSixFakePackages();
  94. viewModel.ReadPackages();
  95. CompleteReadPackagesTask();
  96. viewModel.SelectedPageNumber = 1;
  97. Assert.IsFalse(viewModel.HasPreviousPage);
  98. }
  99. [Test]
  100. public void HasPreviousPage_SixPackagesSelectedPageNumberIsTwoAndPageSizeIsFive_ReturnsTrue()
  101. {
  102. CreateViewModel();
  103. viewModel.PageSize = 5;
  104. viewModel.AddSixFakePackages();
  105. viewModel.ReadPackages();
  106. CompleteReadPackagesTask();
  107. viewModel.SelectedPageNumber = 2;
  108. Assert.IsTrue(viewModel.HasPreviousPage);
  109. }
  110. [Test]
  111. public void HasPreviousPage_SelectedPagesChangesFromFirstPageToSecond_PropertyChangedEventFiredForAllProperties()
  112. {
  113. CreateViewModel();
  114. viewModel.PageSize = 5;
  115. viewModel.AddSixFakePackages();
  116. viewModel.SelectedPageNumber = 1;
  117. viewModel.ReadPackages();
  118. CompleteReadPackagesTask();
  119. PropertyChangedEventArgs propertyChangedEvent = null;
  120. viewModel.PropertyChanged += (sender, e) => propertyChangedEvent = e;
  121. viewModel.SelectedPageNumber = 2;
  122. string propertyName = propertyChangedEvent.PropertyName;
  123. Assert.IsNull(propertyName);
  124. }
  125. [Test]
  126. public void HasNextPage_SixPackagesSelectedPageNumberIsOneAndPageSizeIsFive_ReturnsTrue()
  127. {
  128. CreateViewModel();
  129. viewModel.PageSize = 5;
  130. viewModel.AddSixFakePackages();
  131. viewModel.ReadPackages();
  132. CompleteReadPackagesTask();
  133. viewModel.SelectedPageNumber = 1;
  134. Assert.IsTrue(viewModel.HasNextPage);
  135. }
  136. [Test]
  137. public void HasNextPage_SixPackagesSelectedPageNumberIsTwoAndPageSizeIsFive_ReturnsFalse()
  138. {
  139. CreateViewModel();
  140. viewModel.PageSize = 5;
  141. viewModel.AddSixFakePackages();
  142. viewModel.ReadPackages();
  143. CompleteReadPackagesTask();
  144. viewModel.SelectedPageNumber = 2;
  145. Assert.IsFalse(viewModel.HasNextPage);
  146. }
  147. [Test]
  148. public void HasNextPage_SixPackagesSelectedPageNumberIsTwoAndPageSizeIsTwo_ReturnsTrue()
  149. {
  150. CreateViewModel();
  151. viewModel.PageSize = 2;
  152. viewModel.AddSixFakePackages();
  153. viewModel.ReadPackages();
  154. CompleteReadPackagesTask();
  155. viewModel.SelectedPageNumber = 2;
  156. Assert.IsTrue(viewModel.HasNextPage);
  157. }
  158. [Test]
  159. public void Pages_SixPackagesSelectedPageNumberIsTwoAndPageSizeIsFive_ReturnsTwoPagesWithSecondOneSelected()
  160. {
  161. CreateViewModel();
  162. viewModel.PageSize = 5;
  163. viewModel.AddSixFakePackages();
  164. viewModel.ReadPackages();
  165. CompleteReadPackagesTask();
  166. viewModel.SelectedPageNumber = 2;
  167. Page[] expectedPages = new Page[] {
  168. new Page() { Number = 1 },
  169. new Page() { Number = 2, IsSelected = true }
  170. };
  171. var actualPages = viewModel.Pages;
  172. PageCollectionAssert.AreEqual(expectedPages, actualPages);
  173. }
  174. [Test]
  175. public void Pages_SixPackagesSelectedPageNumberIsOneAndPageSizeIsFive_ReturnsTwoPagesWithFirstOneSelected()
  176. {
  177. CreateViewModel();
  178. viewModel.PageSize = 5;
  179. viewModel.AddSixFakePackages();
  180. viewModel.ReadPackages();
  181. CompleteReadPackagesTask();
  182. viewModel.SelectedPageNumber = 1;
  183. Page[] expectedPages = new Page[] {
  184. new Page() { Number = 1, IsSelected = true },
  185. new Page() { Number = 2 }
  186. };
  187. var actualPages = viewModel.Pages;
  188. PageCollectionAssert.AreEqual(expectedPages, actualPages);
  189. }
  190. [Test]
  191. public void Pages_SixPackagesSelectedPageNumberIsOneAndPageSizeIsTwo_ReturnsThreePagesWithFirstOneSelected()
  192. {
  193. CreateViewModel();
  194. viewModel.PageSize = 2;
  195. viewModel.AddSixFakePackages();
  196. viewModel.ReadPackages();
  197. CompleteReadPackagesTask();
  198. viewModel.SelectedPageNumber = 1;
  199. Page[] expectedPages = new Page[] {
  200. new Page() { Number = 1, IsSelected = true },
  201. new Page() { Number = 2 },
  202. new Page() { Number = 3 }
  203. };
  204. var actualPages = viewModel.Pages;
  205. PageCollectionAssert.AreEqual(expectedPages, actualPages);
  206. }
  207. [Test]
  208. public void Pages_SixPackagesSelectedPageNumberIsOneAndPageSizeIsTwoAndMaximumSelectablePagesIsTwo_ReturnsTwoPagesWithFirstOneSelected()
  209. {
  210. CreateViewModel();
  211. viewModel.PageSize = 2;
  212. viewModel.AddSixFakePackages();
  213. viewModel.ReadPackages();
  214. CompleteReadPackagesTask();
  215. viewModel.SelectedPageNumber = 1;
  216. viewModel.MaximumSelectablePages = 2;
  217. Page[] expectedPages = new Page[] {
  218. new Page() { Number = 1, IsSelected = true },
  219. new Page() { Number = 2 }
  220. };
  221. var actualPages = viewModel.Pages;
  222. PageCollectionAssert.AreEqual(expectedPages, actualPages);
  223. }
  224. [Test]
  225. public void Pages_SixPackagesSelectedPageNumberIsOneAndPageSizeIsFiveGetPagesTwice_ReturnsTwoPagesWithFirstOneSelected()
  226. {
  227. CreateViewModel();
  228. viewModel.PageSize = 5;
  229. viewModel.AddSixFakePackages();
  230. viewModel.ReadPackages();
  231. CompleteReadPackagesTask();
  232. viewModel.SelectedPageNumber = 1;
  233. Page[] expectedPages = new Page[] {
  234. new Page() { Number = 1, IsSelected = true },
  235. new Page() { Number = 2 }
  236. };
  237. var actualPages = viewModel.Pages;
  238. actualPages = viewModel.Pages;
  239. PageCollectionAssert.AreEqual(expectedPages, actualPages);
  240. }
  241. [Test]
  242. public void Pages_SixPackagesSelectedPageNumberIsThreeAndPageSizeIsTwoAndMaximumSelectablePagesIsTwo_ReturnsPagesTwoAndThreeWithPageThreeSelected()
  243. {
  244. CreateViewModel();
  245. viewModel.PageSize = 2;
  246. viewModel.AddSixFakePackages();
  247. viewModel.ReadPackages();
  248. CompleteReadPackagesTask();
  249. viewModel.SelectedPageNumber = 3;
  250. viewModel.MaximumSelectablePages = 2;
  251. Page[] expectedPages = new Page[] {
  252. new Page() { Number = 2 },
  253. new Page() { Number = 3, IsSelected = true }
  254. };
  255. var actualPages = viewModel.Pages;
  256. PageCollectionAssert.AreEqual(expectedPages, actualPages);
  257. }
  258. [Test]
  259. public void Pages_TenPackagesSelectedPageNumberIsFiveAndPageSizeIsTwoAndMaximumSelectablePagesIsThree_ReturnsPagesThreeAndFourAndFive()
  260. {
  261. CreateViewModel();
  262. viewModel.PageSize = 2;
  263. viewModel.AddTenFakePackages();
  264. viewModel.ReadPackages();
  265. CompleteReadPackagesTask();
  266. viewModel.SelectedPageNumber = 5;
  267. viewModel.MaximumSelectablePages = 3;
  268. Page[] expectedPages = new Page[] {
  269. new Page() { Number = 3 },
  270. new Page() { Number = 4 },
  271. new Page() { Number = 5, IsSelected = true }
  272. };
  273. var actualPages = viewModel.Pages;
  274. PageCollectionAssert.AreEqual(expectedPages, actualPages);
  275. }
  276. [Test]
  277. public void ReadPackages_SecondQueryFinishesBeforeFirst_PackagesInViewModelAreForSecondQuery()
  278. {
  279. CreateViewModel();
  280. viewModel.AddThreeFakePackages();
  281. FakePackage package = viewModel.AddFakePackage("MyTest");
  282. viewModel.ReadPackages();
  283. viewModel.SearchTerms = "MyTest";
  284. var expectedPackages = new FakePackage [] { package };
  285. viewModel.ReadPackages();
  286. taskFactory.ExecuteTask(1);
  287. taskFactory.ExecuteTask(0);
  288. ClearReadPackagesTasks();
  289. PackageCollectionAssert.AreEqual(expectedPackages, viewModel.PackageViewModels);
  290. }
  291. [Test]
  292. public void ReadPackages_RepositoryHasSixPackagesWhenSelectedPageIsOneAndPageSizeIsThree_ThreePackageViewModelsCreatedForFirstThreePackages()
  293. {
  294. CreateViewModel();
  295. viewModel.PageSize = 3;
  296. viewModel.SelectedPageNumber = 1;
  297. viewModel.AddSixFakePackages();
  298. viewModel.ReadPackages();
  299. CompleteReadPackagesTask();
  300. var expectedPackages = new List<FakePackage>();
  301. expectedPackages.Add(viewModel.FakePackages[0]);
  302. expectedPackages.Add(viewModel.FakePackages[1]);
  303. expectedPackages.Add(viewModel.FakePackages[2]);
  304. ClearReadPackagesTasks();
  305. viewModel.ReadPackages();
  306. CompleteReadPackagesTask();
  307. PackageCollectionAssert.AreEqual(expectedPackages, viewModel.PackageViewModels);
  308. }
  309. [Test]
  310. public void Pages_PageSizeChanged_PagesRecalcuatedBasedOnNewPageSize()
  311. {
  312. CreateViewModel();
  313. viewModel.PageSize = 10;
  314. viewModel.AddSixFakePackages();
  315. viewModel.ReadPackages();
  316. CompleteReadPackagesTask();
  317. int oldPageCount = viewModel.Pages.Count;
  318. viewModel.PageSize = 5;
  319. int newPageCount = viewModel.Pages.Count;
  320. Assert.AreEqual(2, newPageCount);
  321. Assert.AreEqual(1, oldPageCount);
  322. }
  323. [Test]
  324. public void Pages_SelectedPageNumberChanged_PagesRecalculatedBasedOnNewSelectedPage()
  325. {
  326. CreateViewModel();
  327. viewModel.PageSize = 3;
  328. viewModel.SelectedPageNumber = 1;
  329. viewModel.AddSixFakePackages();
  330. viewModel.ReadPackages();
  331. CompleteReadPackagesTask();
  332. ClearReadPackagesTasks();
  333. var oldPages = viewModel.Pages;
  334. viewModel.SelectedPageNumber = 2;
  335. CompleteReadPackagesTask();
  336. var newPages = viewModel.Pages;
  337. Page[] expectedPages = new Page[] {
  338. new Page() { Number = 1 },
  339. new Page() { Number = 2, IsSelected = true }
  340. };
  341. PageCollectionAssert.AreEqual(expectedPages, newPages);
  342. }
  343. [Test]
  344. public void ShowNextPageCommand_TwoPagesAndFirstPageSelectedWhenCommandExecuted_PageTwoIsSelected()
  345. {
  346. CreateViewModel();
  347. viewModel.PageSize = 3;
  348. viewModel.SelectedPageNumber = 1;
  349. viewModel.AddSixFakePackages();
  350. viewModel.ReadPackages();
  351. CompleteReadPackagesTask();
  352. viewModel.ShowNextPageCommand.Execute(null);
  353. int selectedPage = viewModel.SelectedPageNumber;
  354. Assert.AreEqual(2, selectedPage);
  355. }
  356. [Test]
  357. public void ShowNextPageCommand_TwoPagesAndFirstPageSelectedWhenCommandExecuted_SecondPageOfPackagesDisplayed()
  358. {
  359. CreateViewModel();
  360. viewModel.AddThreeFakePackages();
  361. viewModel.PageSize = 2;
  362. viewModel.SelectedPageNumber = 1;
  363. viewModel.ReadPackages();
  364. CompleteReadPackagesTask();
  365. ClearReadPackagesTasks();
  366. viewModel.ShowNextPageCommand.Execute(null);
  367. CompleteReadPackagesTask();
  368. var expectedPackages = new List<FakePackage>();
  369. expectedPackages.Add(viewModel.FakePackages[2]);
  370. PackageCollectionAssert.AreEqual(expectedPackages, viewModel.PackageViewModels);
  371. }
  372. [Test]
  373. public void ShowPreviousPageCommand_TwoPagesAndSecondPageSelectedWhenCommandExecuted_PageOneIsSelected()
  374. {
  375. CreateViewModel();
  376. viewModel.PageSize = 3;
  377. viewModel.AddSixFakePackages();
  378. viewModel.ReadPackages();
  379. CompleteReadPackagesTask();
  380. viewModel.SelectedPageNumber = 2;
  381. viewModel.ShowPreviousPageCommand.Execute(null);
  382. int selectedPage = viewModel.SelectedPageNumber;
  383. Assert.AreEqual(1, selectedPage);
  384. }
  385. [Test]
  386. public void ShowPreviousPageCommand_TwoPagesAndSecondPageSelectedWhenCommandExecuted_FirstPageOfPackagesDisplayed()
  387. {
  388. CreateViewModel();
  389. viewModel.AddThreeFakePackages();
  390. viewModel.PageSize = 2;
  391. viewModel.ReadPackages();
  392. CompleteReadPackagesTask();
  393. viewModel.SelectedPageNumber = 2;
  394. ClearReadPackagesTasks();
  395. viewModel.ShowPreviousPageCommand.Execute(null);
  396. CompleteReadPackagesTask();
  397. var expectedPackages = new List<FakePackage>();
  398. expectedPackages.Add(viewModel.FakePackages[0]);
  399. expectedPackages.Add(viewModel.FakePackages[1]);
  400. PackageCollectionAssert.AreEqual(expectedPackages, viewModel.PackageViewModels);
  401. }
  402. [Test]
  403. public void ShowPageCommand_PageNumberOneToBeShownWhenCurrentlySelectedPageIsTwo_PageOneIsSelected()
  404. {
  405. CreateViewModel();
  406. viewModel.PageSize = 2;
  407. viewModel.AddSixFakePackages();
  408. viewModel.ReadPackages();
  409. CompleteReadPackagesTask();
  410. viewModel.SelectedPageNumber = 2;
  411. int pageNumber = 1;
  412. viewModel.ShowPageCommand.Execute(pageNumber);
  413. int selectedPage = viewModel.SelectedPageNumber;
  414. Assert.AreEqual(1, selectedPage);
  415. }
  416. [Test]
  417. public void Pages_ReadPackagesAndIsPagedCalled_PackagesReadFromRepositoryOnlyOnce()
  418. {
  419. CreateViewModel();
  420. viewModel.AddSixFakePackages();
  421. viewModel.ReadPackages();
  422. CompleteReadPackagesTask();
  423. bool result = viewModel.IsPaged;
  424. int count = viewModel.Pages.Count;
  425. Assert.AreEqual(1, viewModel.GetAllPackagesCallCount);
  426. }
  427. [Test]
  428. public void ReadPackages_CalledThreeTimesAndThenSelectedPageChanged_ViewModelPropertiesChangedEventFiresOnceWhenSelectedPageChanged()
  429. {
  430. CreateViewModel();
  431. viewModel.PageSize = 3;
  432. viewModel.AddSixFakePackages();
  433. viewModel.ReadPackages();
  434. CompleteReadPackagesTask();
  435. viewModel.ReadPackages();
  436. CompleteReadPackagesTask();
  437. viewModel.ReadPackages();
  438. CompleteReadPackagesTask();
  439. int count = 0;
  440. viewModel.PropertyChanged += (sender, e) => count++;
  441. viewModel.SelectedPageNumber = 2;
  442. Assert.AreEqual(1, count);
  443. }
  444. [Test]
  445. public void IsSearchable_ByDefault_ReturnsFalse()
  446. {
  447. CreateViewModel();
  448. Assert.IsFalse(viewModel.IsSearchable);
  449. }
  450. [Test]
  451. public void SearchCommand_SearchTextEntered_PackageViewModelsFilteredBySearchCriteria()
  452. {
  453. CreateViewModel();
  454. viewModel.IsSearchable = true;
  455. viewModel.AddSixFakePackages();
  456. var package = new FakePackage() {
  457. Id = "SearchedForId",
  458. Description = "Test"
  459. };
  460. viewModel.FakePackages.Add(package);
  461. viewModel.ReadPackages();
  462. CompleteReadPackagesTask();
  463. ClearReadPackagesTasks();
  464. viewModel.SearchTerms = "SearchedForId";
  465. viewModel.SearchCommand.Execute(null);
  466. CompleteReadPackagesTask();
  467. var expectedPackages = new FakePackage[] {
  468. package
  469. };
  470. PackageCollectionAssert.AreEqual(expectedPackages, viewModel.PackageViewModels);
  471. }
  472. [Test]
  473. public void PackageExtensionsFind_TwoPackagesInCollection_FindsOnePackageId()
  474. {
  475. List<IPackage> packages = new List<IPackage>();
  476. var package1 = new FakePackage() {
  477. Id = "Test"
  478. };
  479. var package2 = new FakePackage() {
  480. Id = "Another"
  481. };
  482. packages.Add(package1);
  483. packages.Add(package2);
  484. IQueryable<IPackage> query = packages.AsQueryable();
  485. IQueryable<IPackage> filteredResults = query.Find("Test");
  486. IPackage foundPackage = filteredResults.First();
  487. Assert.AreEqual("Test", foundPackage.Id);
  488. }
  489. [Test]
  490. public void PackageExtensionsFind_TwoPackagesInCollectionAndQueryableResultsPutInBufferedEnumerable_OnePackageInBufferedEnumerable()
  491. {
  492. List<IPackage> packages = new List<IPackage>();
  493. // Need to add descriptiosn otherwise we get a null reference when enumerating results
  494. // in BufferedEnumerable
  495. var package1 = new FakePackage() {
  496. Id = "Test", Description = "b"
  497. };
  498. var package2 = new FakePackage() {
  499. Id = "Another", Description = "a"
  500. };
  501. packages.Add(package1);
  502. packages.Add(package2);
  503. IQueryable<IPackage> query = packages.AsQueryable();
  504. IQueryable<IPackage> filteredResults = query.Find("Test");
  505. var collection = new BufferedEnumerable<IPackage>(filteredResults, 10);
  506. IPackage foundPackage = collection.First();
  507. Assert.AreEqual("Test", foundPackage.Id);
  508. }
  509. [Test]
  510. public void Search_SearchTextChangedAndPackagesWerePagedBeforeSearch_PagesUpdatedAfterFilteringBySearchCriteria()
  511. {
  512. CreateViewModel();
  513. viewModel.IsSearchable = true;
  514. viewModel.PageSize = 2;
  515. viewModel.MaximumSelectablePages = 5;
  516. viewModel.AddSixFakePackages();
  517. var package = new FakePackage() {
  518. Id = "SearchedForId",
  519. Description = "Test"
  520. };
  521. viewModel.FakePackages.Add(package);
  522. viewModel.ReadPackages();
  523. CompleteReadPackagesTask();
  524. ObservableCollection<Page> pages = viewModel.Pages;
  525. ClearReadPackagesTasks();
  526. viewModel.SearchTerms = "SearchedForId";
  527. viewModel.Search();
  528. CompleteReadPackagesTask();
  529. var expectedPages = new Page[] {
  530. new Page() { Number = 1, IsSelected = true }
  531. };
  532. PageCollectionAssert.AreEqual(expectedPages, pages);
  533. }
  534. [Test]
  535. public void Pages_SixPackagesButPackagesNotRead_HasNoPages()
  536. {
  537. CreateViewModel();
  538. viewModel.PageSize = 2;
  539. viewModel.AddSixFakePackages();
  540. Assert.AreEqual(0, viewModel.Pages.Count);
  541. }
  542. [Test]
  543. public void HasPreviousPage_SixPackagesAndSecondPageSelectedButPackagesNotRead_ReturnsFalse()
  544. {
  545. CreateViewModel();
  546. viewModel.PageSize = 2;
  547. viewModel.SelectedPageNumber = 2;
  548. viewModel.AddSixFakePackages();
  549. Assert.IsFalse(viewModel.HasPreviousPage);
  550. }
  551. [Test]
  552. public void HasNextPage_SixPackagesAndFirstPageSelectedButPackagesNotRead_ReturnsFalse()
  553. {
  554. CreateViewModel();
  555. viewModel.PageSize = 2;
  556. viewModel.SelectedPageNumber = 1;
  557. viewModel.AddSixFakePackages();
  558. Assert.IsFalse(viewModel.HasNextPage);
  559. }
  560. [Test]
  561. public void IsPaged_SixPackagesAndFirstPageSelectedButPackagesNotRead_ReturnsFalse()
  562. {
  563. CreateViewModel();
  564. viewModel.PageSize = 2;
  565. viewModel.SelectedPageNumber = 1;
  566. viewModel.AddSixFakePackages();
  567. Assert.IsFalse(viewModel.IsPaged);
  568. }
  569. [Test]
  570. public void Search_SelectedPageInitiallyIsPageTwoAndThenUserSearches_SelectedPageNumberIsSetToPageOne()
  571. {
  572. CreateViewModel();
  573. viewModel.PageSize = 2;
  574. viewModel.AddSixFakePackages();
  575. var package = new FakePackage() {
  576. Id = "SearchedForId",
  577. Description = "Test"
  578. };
  579. viewModel.FakePackages.Add(package);
  580. viewModel.ReadPackages();
  581. CompleteReadPackagesTask();
  582. viewModel.SelectedPageNumber = 2;
  583. ClearReadPackagesTasks();
  584. viewModel.SearchTerms = "SearchedForId";
  585. viewModel.Search();
  586. CompleteReadPackagesTask();
  587. Assert.AreEqual(1, viewModel.SelectedPageNumber);
  588. }
  589. /// <summary>
  590. /// Ensures that the total number of packages is determined from all packages and not
  591. /// the filtered set. All packages will be retrieved from the repository
  592. /// if this is not done when we only want 30 retrieved in one go.
  593. /// </summary>
  594. [Test]
  595. public void ReadPackages_SixPackagesInRepository_TotalItemsSetBeforePackagesFiltered()
  596. {
  597. CreateViewModel();
  598. viewModel.PageSize = 2;
  599. viewModel.AddSixFakePackages();
  600. viewModel.ReadPackages();
  601. CompleteReadPackagesTask();
  602. int expectedTotal = 6;
  603. Assert.AreEqual(expectedTotal, viewModel.TotalItems);
  604. }
  605. [Test]
  606. public void Search_ThreePagesOfPackagesBeforeSearchReturnsNoPackages_IsPagedIsFalseWhenPropertyChangedEventFired()
  607. {
  608. CreateViewModel();
  609. viewModel.PageSize = 2;
  610. viewModel.AddSixFakePackages();
  611. viewModel.ReadPackages();
  612. CompleteReadPackagesTask();
  613. viewModel.SearchTerms = "SearchedForId";
  614. ClearReadPackagesTasks();
  615. bool paged = true;
  616. viewModel.PropertyChanged += (sender, e) => paged = viewModel.IsPaged;
  617. viewModel.Search();
  618. CompleteReadPackagesTask();
  619. Assert.IsFalse(paged);
  620. }
  621. [Test]
  622. public void Search_BeforeSearchFivePagesOfPackagesShownAndSearchReturnsTwoPages_TwoPagesShownAfterSearch()
  623. {
  624. CreateViewModel();
  625. viewModel.IsSearchable = true;
  626. viewModel.PageSize = 2;
  627. viewModel.MaximumSelectablePages = 5;
  628. viewModel.AddSixFakePackages();
  629. viewModel.FakePackages.Add(new FakePackage("SearchedForId1"));
  630. viewModel.FakePackages.Add(new FakePackage("SearchedForId2"));
  631. viewModel.FakePackages.Add(new FakePackage("SearchedForId3"));
  632. viewModel.ReadPackages();
  633. CompleteReadPackagesTask();
  634. ObservableCollection<Page> pages = viewModel.Pages;
  635. ClearReadPackagesTasks();
  636. viewModel.SearchTerms = "SearchedForId";
  637. viewModel.Search();
  638. CompleteReadPackagesTask();
  639. var expectedPages = new Page[] {
  640. new Page() { Number = 1, IsSelected = true },
  641. new Page() { Number = 2 }
  642. };
  643. PageCollectionAssert.AreEqual(expectedPages, pages);
  644. }
  645. [Test]
  646. public void ShowPackageSources_ByDefault_ReturnsFalse()
  647. {
  648. CreateViewModel();
  649. Assert.IsFalse(viewModel.ShowPackageSources);
  650. }
  651. [Test]
  652. public void ReadPackages_OnePackageInRepository_CreatesTask()
  653. {
  654. CreateViewModel();
  655. viewModel.AddOneFakePackage();
  656. viewModel.ReadPackages();
  657. Assert.IsTrue(taskFactory.IsCreateTaskCalled);
  658. }
  659. [Test]
  660. public void ReadPackages_OnePackageInRepository_TaskStartMethodCalled()
  661. {
  662. CreateViewModel();
  663. viewModel.AddOneFakePackage();
  664. viewModel.ReadPackages();
  665. Assert.IsTrue(taskFactory.FirstFakeTaskCreated.IsStartCalled);
  666. }
  667. [Test]
  668. public void IsReadingPackages_ReadPackagesNotCalled_ReturnsFalse()
  669. {
  670. CreateViewModel();
  671. Assert.IsFalse(viewModel.IsReadingPackages);
  672. }
  673. [Test]
  674. public void IsReadingPackages_ReadPackagesCalled_ReturnsTrue()
  675. {
  676. CreateViewModel();
  677. viewModel.ReadPackages();
  678. Assert.IsTrue(viewModel.IsReadingPackages);
  679. }
  680. [Test]
  681. public void ReadPackages_OnePackageInRepositoryWhenBackgroundTaskExecuted_ReadsOnePackage()
  682. {
  683. CreateViewModel();
  684. viewModel.AddOneFakePackage();
  685. viewModel.ReadPackages();
  686. PackagesForSelectedPageResult result = taskFactory.FirstFakeTaskCreated.ExecuteTaskButNotContinueWith();
  687. CollectionAssert.AreEqual(viewModel.FakePackages, result.Packages);
  688. }
  689. [Test]
  690. public void ReadPackages_OnePackageInRepositoryWhenFirstPartOfBackgroundTaskExecuted_PackageCountReadInBackgroundTask()
  691. {
  692. CreateViewModel();
  693. viewModel.AddOneFakePackage();
  694. viewModel.ReadPackages();
  695. PackagesForSelectedPageResult result = taskFactory.FirstFakeTaskCreated.ExecuteTaskButNotContinueWith();
  696. Assert.AreEqual(1, result.TotalPackagesOnPage);
  697. }
  698. [Test]
  699. public void ReadPackages_OnePackageInRepositoryWhenBackgroundTaskExecutedAndResultsReturned_PackagesUpdatedInViewModel()
  700. {
  701. CreateViewModel();
  702. viewModel.AddOneFakePackage();
  703. viewModel.ReadPackages();
  704. CompleteReadPackagesTask();
  705. PackageCollectionAssert.AreEqual(viewModel.FakePackages, viewModel.PackageViewModels);
  706. }
  707. [Test]
  708. public void IsReadingPackages_OnePackageInRepositoryWhenBackgroundTaskExecutedAndResultsReturned_SetToFalseAfterPackagesRead()
  709. {
  710. CreateViewModel();
  711. viewModel.AddOneFakePackage();
  712. viewModel.ReadPackages();
  713. CompleteReadPackagesTask();
  714. Assert.IsFalse(viewModel.IsReadingPackages);
  715. }
  716. [Test]
  717. public void IsReadingPackages_OnePackageInRepositoryWhenBackgroundTaskExecutedAndResultsReturned_NotifyPropertyChangedFiredAfterIsReadingPackagesSetToFalse()
  718. {
  719. CreateViewModel();
  720. viewModel.AddOneFakePackage();
  721. viewModel.ReadPackages();
  722. bool readingPackages = true;
  723. viewModel.PropertyChanged += (sender, e) => readingPackages = viewModel.IsReadingPackages;
  724. CompleteReadPackagesTask();
  725. Assert.IsFalse(readingPackages);
  726. }
  727. [Test]
  728. public void ReadPackages_SixPackagesInRepositoryAndPageSizeIsTwoWhenFirstPartOfBackgroundTaskExecuted_PackageCountReadInBackgroundTask()
  729. {
  730. CreateViewModel();
  731. viewModel.PageSize = 2;
  732. viewModel.AddSixFakePackages();
  733. viewModel.ReadPackages();
  734. PackagesForSelectedPageResult result = taskFactory.FirstFakeTaskCreated.ExecuteTaskButNotContinueWith();
  735. Assert.AreEqual(6, result.TotalPackages);
  736. }
  737. [Test]
  738. public void ReadPackages_SixPackagesInRepositoryAndPageSizeIsTwoWhenFirstPartOfBackgroundTaskExecuted_PageSizeNotChangedDuringBackgroundTaskExecution()
  739. {
  740. CreateViewModel();
  741. viewModel.PageSize = 2;
  742. viewModel.AddSixFakePackages();
  743. viewModel.ReadPackages();
  744. PackagesForSelectedPageResult result = taskFactory.FirstFakeTaskCreated.ExecuteTaskButNotContinueWith();
  745. Assert.IsFalse(viewModel.IsPaged);
  746. }
  747. [Test]
  748. public void ReadPackages_SixPackagesInRepositoryAndPageSizeIsTwoWhenBackgroundTaskExecutedAndResultsReturned_ResultsArePaged()
  749. {
  750. CreateViewModel();
  751. viewModel.PageSize = 2;
  752. viewModel.AddSixFakePackages();
  753. viewModel.ReadPackages();
  754. CompleteReadPackagesTask();
  755. Assert.IsTrue(viewModel.IsPaged);
  756. }
  757. [Test]
  758. public void ReadPackages_CalledSecondTimeBeforeFirstReadPackagesTaskCompletes_FirstReadPackagesTaskIsCancelled()
  759. {
  760. CreateViewModel();
  761. viewModel.AddOneFakePackage();
  762. viewModel.ReadPackages();
  763. viewModel.ReadPackages();
  764. Assert.IsTrue(taskFactory.FirstFakeTaskCreated.IsCancelCalled);
  765. }
  766. [Test]
  767. public void ReadPackages_FirstReadPackagesTaskCompletesAfterBeingCancelled_PackagesNotUpdated()
  768. {
  769. CreateViewModel();
  770. viewModel.AddOneFakePackage();
  771. viewModel.ReadPackages();
  772. taskFactory.FirstFakeTaskCreated.IsCancelled = true;
  773. viewModel.ReadPackages();
  774. taskFactory.FirstFakeTaskCreated.ExecuteTaskCompletely();
  775. Assert.AreEqual(0, viewModel.PackageViewModels.Count);
  776. }
  777. [Test]
  778. public void SelectedPage_ChangedTwoPageTwo_IsReadingPackagesReturnsTrue()
  779. {
  780. CreateViewModel();
  781. viewModel.AddSixFakePackages();
  782. viewModel.ReadPackages();
  783. CompleteReadPackagesTask();
  784. ClearReadPackagesTasks();
  785. viewModel.SelectedPageNumber = 2;
  786. Assert.IsTrue(viewModel.IsReadingPackages);
  787. }
  788. [Test]
  789. public void ReadPackages_SixPackagesDisplayedWhenReadPackagesCalledAgain_DisplayedPackagesAreRemoved()
  790. {
  791. CreateViewModel();
  792. viewModel.AddSixFakePackages();
  793. viewModel.ReadPackages();
  794. CompleteReadPackagesTask();
  795. viewModel.ReadPackages();
  796. Assert.AreEqual(0, viewModel.PackageViewModels.Count);
  797. }
  798. [Test]
  799. public void SelectedPage_ChangedTwoPageTwo_DisplayedPackagesAreRemoved()
  800. {
  801. CreateViewModel();
  802. viewModel.AddSixFakePackages();
  803. viewModel.ReadPackages();
  804. CompleteReadPackagesTask();
  805. ClearReadPackagesTasks();
  806. viewModel.SelectedPageNumber = 2;
  807. Assert.AreEqual(0, viewModel.PackageViewModels.Count);
  808. }
  809. [Test]
  810. public void HasError_BackgroundTaskHasExceptionWhenItFinishes_ReturnsTrue()
  811. {
  812. CreateViewModel();
  813. viewModel.ReadPackages();
  814. taskFactory.FirstFakeTaskCreated.IsFaulted = true;
  815. CompleteReadPackagesTask();
  816. Assert.IsTrue(viewModel.HasError);
  817. }
  818. [Test]
  819. public void HasError_ByDefault_ReturnsFalse()
  820. {
  821. CreateViewModel();
  822. Assert.IsFalse(viewModel.HasError);
  823. }
  824. [Test]
  825. public void IsReadingPackages_BackgroundTaskHasExceptionWhenItFinishes_ReturnsFalse()
  826. {
  827. CreateViewModel();
  828. viewModel.ReadPackages();
  829. taskFactory.FirstFakeTaskCreated.IsFaulted = true;
  830. CompleteReadPackagesTask();
  831. Assert.IsFalse(viewModel.IsReadingPackages);
  832. }
  833. [Test]
  834. public void PropertyChanged_BackgroundTaskHasExceptionWhenItFinishes_PropertyChangedEventFiredWhenTaskCompletes()
  835. {
  836. CreateViewModel();
  837. viewModel.ReadPackages();
  838. taskFactory.FirstFakeTaskCreated.IsFaulted = true;
  839. taskFactory.FirstFakeTaskCreated.ExecuteTaskButNotContinueWith();
  840. string propertyName = "Nothing";
  841. viewModel.PropertyChanged += (sender, e) => propertyName = e.PropertyName;
  842. taskFactory.FirstFakeTaskCreated.ExecuteContinueWith();
  843. Assert.IsNull(propertyName);
  844. }
  845. [Test]
  846. public void ReadPackages_BackgroundTaskHasExceptionWhenItFinishes_PackagesNotUpdated()
  847. {
  848. CreateViewModel();
  849. viewModel.AddSixFakePackages();
  850. viewModel.ReadPackages();
  851. var query = new PackagesForSelectedPageQuery(viewModel, null, null);
  852. taskFactory.FirstFakeTaskCreated.Result = new PackagesForSelectedPageResult(viewModel.FakePackages, query);
  853. taskFactory.FirstFakeTaskCreated.IsFaulted = true;
  854. CompleteReadPackagesTask();
  855. Assert.AreEqual(0, viewModel.PackageViewModels.Count);
  856. }
  857. [Test]
  858. public void ErrorMessage_BackgroundTaskHasExceptionWhenItFinishes_ErrorMessageTakenFromException()
  859. {
  860. CreateViewModel();
  861. viewModel.AddSixFakePackages();
  862. viewModel.ReadPackages();
  863. Exception ex = new Exception("Test");
  864. AggregateException aggregateEx = new AggregateException(ex);
  865. taskFactory.FirstFakeTaskCreated.Exception = aggregateEx;
  866. taskFactory.FirstFakeTaskCreated.IsFaulted = true;
  867. CompleteReadPackagesTask();
  868. Assert.AreEqual("Test", viewModel.ErrorMessage);
  869. }
  870. [Test]
  871. public void ErrorMessage_BackgroundTaskHasAggregateExceptionWithNestedInnerAggregateException_ErrorMessageTakenFromInnerException()
  872. {
  873. CreateViewModel();
  874. viewModel.AddSixFakePackages();
  875. viewModel.ReadPackages();
  876. Exception innerEx1 = new Exception("Test1");
  877. Exception innerEx2 = new Exception("Test2");
  878. AggregateException innerAggregateEx = new AggregateException(innerEx1, innerEx2);
  879. AggregateException aggregateEx = new AggregateException(innerAggregateEx);
  880. taskFactory.FirstFakeTaskCreated.Exception = aggregateEx;
  881. taskFactory.FirstFakeTaskCreated.IsFaulted = true;
  882. CompleteReadPackagesTask();
  883. string expectedErrorMessage =
  884. "Test1\r\n" +
  885. "Test2";
  886. Assert.AreEqual(expectedErrorMessage, viewModel.ErrorMessage);
  887. }
  888. [Test]
  889. public void ErrorMessage_BackgroundTaskHasAggregateExceptionWithTwoInnerExceptionsWhenItFinishes_ErrorMessageTakenFromAllInnerExceptions()
  890. {
  891. CreateViewModel();
  892. viewModel.AddSixFakePackages();
  893. viewModel.ReadPackages();
  894. Exception innerEx1 = new Exception("Test1");
  895. Exception innerEx2 = new Exception("Test2");
  896. Exception innerEx3 = new Exception("Test3");
  897. AggregateException aggregateEx = new AggregateException(innerEx1, innerEx2, innerEx3);
  898. taskFactory.FirstFakeTaskCreated.Exception = aggregateEx;
  899. taskFactory.FirstFakeTaskCreated.IsFaulted = true;
  900. CompleteReadPackagesTask();
  901. string expectedErrorMessage =
  902. "Test1\r\n" +
  903. "Test2\r\n" +
  904. "Test3";
  905. Assert.AreEqual(expectedErrorMessage, viewModel.ErrorMessage);
  906. }
  907. [Test]
  908. public void HasError_ErrorMessageDisplayedAndReadPackagesRetriedAfterFailure_ReturnsFalse()
  909. {
  910. CreateViewModel();
  911. viewModel.ReadPackages();
  912. taskFactory.FirstFakeTaskCreated.IsFaulted = true;
  913. CompleteReadPackagesTask();
  914. viewModel.ReadPackages();
  915. Assert.IsFalse(viewModel.HasError);
  916. }
  917. [Test]
  918. public void HasError_ErrorMessageDisplayedAndSelectedPageChangedAfterFailure_ReturnsFalse()
  919. {
  920. CreateViewModel();
  921. viewModel.PageSize = 2;
  922. viewModel.AddSixFakePackages();
  923. viewModel.ReadPackages();
  924. CompleteReadPackagesTask();
  925. ClearReadPackagesTasks();
  926. viewModel.SelectedPageNumber = 2;
  927. taskFactory.FirstFakeTaskCreated.IsFaulted = true;
  928. CompleteReadPackagesTask();
  929. viewModel.SelectedPageNumber = 3;
  930. Assert.IsFalse(viewModel.HasError);
  931. }
  932. [Test]
  933. public void ReadPackages_PackagesReturnedNotSortedFromRepository_PackagesDisplayedSortedById()
  934. {
  935. CreateViewModel();
  936. viewModel.AddFakePackage("Z");
  937. viewModel.AddFakePackage("C");
  938. viewModel.AddFakePackage("A");
  939. viewModel.AddFakePackage("B");
  940. viewModel.ReadPackages();
  941. CompleteReadPackagesTask();
  942. var expectedPackages = new FakePackage[] {
  943. viewModel.FakePackages[2],
  944. viewModel.FakePackages[3],
  945. viewModel.FakePackages[1],
  946. viewModel.FakePackages[0]
  947. };
  948. PackageCollectionAssert.AreEqual(expectedPackages, viewModel.PackageViewModels);
  949. }
  950. [Test]
  951. public void SelectedPageNumber_SixPackagesAndPageSizeIsFiveAndSelectedPageNumberIsChangedToTwo_OneReadPackagesTaskCreated()
  952. {
  953. CreateViewModel();
  954. viewModel.PageSize = 5;
  955. viewModel.AddSixFakePackages();
  956. viewModel.ReadPackages();
  957. CompleteReadPackagesTask();
  958. ClearReadPackagesTasks();
  959. viewModel.SelectedPageNumber = 2;
  960. Assert.AreEqual(1, taskFactory.FakeTasksCreated.Count);
  961. }
  962. [Test]
  963. public void SelectedPageNumber_SixPackagesAndSelectedPageNumberIsSetToPageOneButUnchanged_NoReadPackagesTaskCreated()
  964. {
  965. CreateViewModel();
  966. viewModel.PageSize = 5;
  967. viewModel.AddSixFakePackages();
  968. viewModel.ReadPackages();
  969. CompleteReadPackagesTask();
  970. ClearReadPackagesTasks();
  971. viewModel.SelectedPageNumber = 1;
  972. Assert.AreEqual(0, taskFactory.FakeTasksCreated.Count);
  973. }
  974. [Test]
  975. public void SelectedPageNumber_SixPackagesAndPageSizeIsFiveAndSelectedPageNumberIsChangedToTwo_PropertyChangedEventFiredAfterSelectedPageNumberChanged()
  976. {
  977. CreateViewModel();
  978. viewModel.PageSize = 5;
  979. viewModel.AddSixFakePackages();
  980. viewModel.ReadPackages();
  981. CompleteReadPackagesTask();
  982. ClearReadPackagesTasks();
  983. int selectedPageNumber = 0;
  984. viewModel.PropertyChanged += (source, e) => selectedPageNumber = viewModel.SelectedPageNumber;
  985. viewModel.SelectedPageNumber = 2;
  986. Assert.AreEqual(2, selectedPageNumber);
  987. }
  988. [Test]
  989. public void SelectedPageNumber_SixPackagesAndPageSizeIsFiveAndSelectedPageNumberIsChangedToTwo_SelectedPageNumberChangedBeforeReadPackagesTaskStarted()
  990. {
  991. CreateViewModel();
  992. viewModel.PageSize = 5;
  993. viewModel.AddSixFakePackages();
  994. viewModel.ReadPackages();
  995. CompleteReadPackagesTask();
  996. ClearReadPackagesTasks();
  997. taskFactory.RunTasksSynchronously = true;
  998. viewModel.SelectedPageNumber = 2;
  999. Assert.AreEqual(1, viewModel.PackageViewModels.Count);
  1000. }
  1001. [Test]
  1002. public void Search_RepositoryHasPackageWithIdOfEmptyString_SearchCriteriaUsedIsNull()
  1003. {
  1004. CreateViewModel();
  1005. viewModel.PageSize = 2;
  1006. viewModel.FakePackages.Add(new FakePackage() {
  1007. Id = "",
  1008. Description = "abc"
  1009. });
  1010. taskFactory.RunTasksSynchronously = true;
  1011. viewModel.ReadPackages();
  1012. ClearReadPackagesTasks();
  1013. viewModel.SearchTerms = "";
  1014. viewModel.Search();
  1015. Assert.IsNull(viewModel.SearchCriteriaPassedToFilterPackagesBySearchCriteria);
  1016. }
  1017. [Test]
  1018. public void Search_RepositoryHasPackageWithIdOfWhitespaceString_SearchCriteriaUsedIsNull()
  1019. {
  1020. CreateViewModel();
  1021. viewModel.PageSize = 2;
  1022. viewModel.FakePackages.Add(new FakePackage() {
  1023. Id = "",
  1024. Description = "abc"
  1025. });
  1026. taskFactory.RunTasksSynchronously = true;
  1027. viewModel.ReadPackages();
  1028. ClearReadPackagesTasks();
  1029. viewModel.SearchTerms = " ";
  1030. viewModel.Search();
  1031. Assert.IsNull(viewModel.SearchCriteriaPassedToFilterPackagesBySearchCriteria);
  1032. }
  1033. [Test]
  1034. public void IsDisposed_DisposeMethodCalled_ReturnsTrue()
  1035. {
  1036. CreateViewModel();
  1037. viewModel.Dispose();
  1038. Assert.IsTrue(viewModel.IsDisposed);
  1039. }
  1040. [Test]
  1041. public void IsDisposed_DisposeMethodNotCalled_ReturnsFalse()
  1042. {
  1043. CreateViewModel();
  1044. Assert.IsFalse(viewModel.IsDisposed);
  1045. }
  1046. [Test]
  1047. public void IncludePrerelease_ChangedToTrue_PackagesAreReadAgain()
  1048. {
  1049. CreateViewModel();
  1050. viewModel.IncludePrerelease = false;
  1051. viewModel.AddSixFakePackages();
  1052. viewModel.ReadPackages();
  1053. CompleteReadPackagesTask();
  1054. ClearReadPackagesTasks();
  1055. viewModel.IncludePrerelease = true;
  1056. Assert.IsTrue(viewModel.IsReadingPackages);
  1057. }
  1058. [Test]
  1059. public void IncludePrerelease_ChangedToFalse_PackagesAreReadAgain()
  1060. {
  1061. CreateViewModel();
  1062. viewModel.IncludePrerelease = true;
  1063. viewModel.AddSixFakePackages();
  1064. viewModel.ReadPackages();
  1065. CompleteReadPackagesTask();
  1066. ClearReadPackagesTasks();
  1067. viewModel.IncludePrerelease = false;
  1068. Assert.IsTrue(viewModel.IsReadingPackages);
  1069. }
  1070. [Test]
  1071. public void IncludePrerelease_ChangedToTrue_PropertyChangedEventIsFired()
  1072. {
  1073. CreateViewModel();
  1074. viewModel.IncludePrerelease = false;
  1075. viewModel.AddSixFakePackages();
  1076. viewModel.ReadPackages();
  1077. CompleteReadPackagesTask();
  1078. ClearReadPackagesTasks();
  1079. PropertyChangedEventArgs propertyChangedEvent = null;
  1080. viewModel.PropertyChanged += (sender, e) => propertyChangedEvent = e;
  1081. viewModel.IncludePrerelease = true;
  1082. Assert.IsNull(propertyChangedEvent.PropertyName);
  1083. }
  1084. [Test]
  1085. public void IncludePrerelease_SetToTrueWhenAlreadyTrue_PropertyChangedEventIsNotFired()
  1086. {
  1087. CreateViewModel();
  1088. viewModel.IncludePrerelease = true;
  1089. viewModel.AddSixFakePackages();
  1090. viewModel.ReadPackages();
  1091. CompleteReadPackagesTask();
  1092. ClearReadPackagesTasks();
  1093. bool fired = false;
  1094. viewModel.PropertyChanged += (sender, e) => fired = true;
  1095. viewModel.IncludePrerelease = true;
  1096. Assert.IsFalse(fired);
  1097. }
  1098. }
  1099. }