PageRenderTime 48ms CodeModel.GetById 21ms RepoModel.GetById 0ms app.codeStats 0ms

/V2/trunk/RI/Desktop/StockTraderRI.Modules.News.Tests/Controllers/NewsControllerFixture.cs

#
C# | 152 lines | 112 code | 24 blank | 16 comment | 0 complexity | b9c9190f60887aa67b9124192758bc14 MD5 | raw file
  1. //===================================================================================
  2. // Microsoft patterns & practices
  3. // Composite Application Guidance for Windows Presentation Foundation and Silverlight
  4. //===================================================================================
  5. // Copyright (c) Microsoft Corporation. All rights reserved.
  6. // THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY
  7. // OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT
  8. // LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
  9. // FITNESS FOR A PARTICULAR PURPOSE.
  10. //===================================================================================
  11. // The example companies, organizations, products, domain names,
  12. // e-mail addresses, logos, people, places, and events depicted
  13. // herein are fictitious. No association with any real company,
  14. // organization, product, domain name, email address, logo, person,
  15. // places, or events is intended or should be inferred.
  16. //===================================================================================
  17. using System;
  18. using Microsoft.Practices.Composite.Events;
  19. using Microsoft.Practices.Composite.Presentation.Events;
  20. using Microsoft.VisualStudio.TestTools.UnitTesting;
  21. using StockTraderRI.Infrastructure;
  22. using StockTraderRI.Infrastructure.Models;
  23. using StockTraderRI.Modules.News.Article;
  24. using StockTraderRI.Modules.News.Controllers;
  25. using StockTraderRI.Modules.News.Tests.Mocks;
  26. using Microsoft.Practices.Composite.Regions;
  27. namespace StockTraderRI.Modules.News.Tests.Controllers
  28. {
  29. [TestClass]
  30. public class NewsControllerFixture
  31. {
  32. [TestMethod]
  33. public void ShowNewsResolvesPresenterAndCallsSetTickerSymbolOnItAndAddsNamedViewToRegion()
  34. {
  35. var presenter = new MockArticlePresentationModel();
  36. var eventAggregator = new MockEventAggregator();
  37. eventAggregator.AddMapping<TickerSymbolSelectedEvent>(new MockTickerSymbolSelectedEvent());
  38. var controller = new NewsController(CreateRegionManager(), presenter, eventAggregator, new MockNewsReaderPresenter());
  39. controller.ShowNews("Test");
  40. Assert.IsNotNull(presenter.SetTickerSymbolArgumentCompanySymbol);
  41. Assert.AreEqual("Test", presenter.SetTickerSymbolArgumentCompanySymbol);
  42. }
  43. [TestMethod]
  44. public void ControllerShowNewsWhenRasingGlobalEvent()
  45. {
  46. var presenter = new MockArticlePresentationModel();
  47. var eventAggregator = new MockEventAggregator();
  48. var tickerSymbolSelectedEvent = new MockTickerSymbolSelectedEvent();
  49. eventAggregator.AddMapping<TickerSymbolSelectedEvent>(tickerSymbolSelectedEvent);
  50. var controller = new NewsController(CreateRegionManager(), presenter, eventAggregator, new MockNewsReaderPresenter());
  51. controller.Run();
  52. Assert.IsNotNull(tickerSymbolSelectedEvent.SubscribeArgumentAction);
  53. tickerSymbolSelectedEvent.SubscribeArgumentAction("TEST_SYMBOL");
  54. Assert.AreEqual("TEST_SYMBOL", presenter.SetTickerSymbolArgumentCompanySymbol);
  55. }
  56. [TestMethod]
  57. public void ShouldNotifyReaderWhenCurrentNewsArticleChanges()
  58. {
  59. var presenter = new MockArticlePresentationModel();
  60. var eventAggregator = new MockEventAggregator();
  61. eventAggregator.AddMapping<TickerSymbolSelectedEvent>(new MockTickerSymbolSelectedEvent());
  62. var newsReaderPresenter = new MockNewsReaderPresenter();
  63. var controller = new NewsController(CreateRegionManager(), presenter, eventAggregator, newsReaderPresenter);
  64. controller.CurrentNewsArticleChanged(new NewsArticle() { Title = "SomeTitle", Body = "Newsbody" });
  65. Assert.IsTrue(newsReaderPresenter.SetNewsArticleCalled);
  66. }
  67. [TestMethod]
  68. public void ControllerShowNewsViewWhenArticlePresenterReceivesEvent()
  69. {
  70. var articlePresentationModel = new MockArticlePresentationModel();
  71. var eventAggregator = new MockEventAggregator();
  72. eventAggregator.AddMapping<TickerSymbolSelectedEvent>(new MockTickerSymbolSelectedEvent());
  73. var newsReaderPresenter = new MockNewsReaderPresenter();
  74. var regionManager = CreateRegionManager();
  75. var shellRegion = (MockRegion)regionManager.Regions["SecondaryRegion"];
  76. var controller = new NewsController(regionManager, articlePresentationModel, eventAggregator, newsReaderPresenter);
  77. controller.ShowNewsReader();
  78. Assert.IsTrue(shellRegion.ActivateCalled);
  79. Assert.AreEqual(newsReaderPresenter.View, shellRegion.ActivateArg);
  80. }
  81. private MockRegionManager CreateRegionManager()
  82. {
  83. var regionManager = new MockRegionManager();
  84. regionManager.Regions.Add("SecondaryRegion", new MockRegion());
  85. regionManager.Regions.Add("NewsRegion", new MockRegion());
  86. regionManager.Regions.Add("ResearchRegion", new MockRegion());
  87. return regionManager;
  88. }
  89. internal class MockArticlePresentationModel : IArticlePresentationModel
  90. {
  91. public MockArticleView MockArticleView = new MockArticleView();
  92. public string SetTickerSymbolArgumentCompanySymbol;
  93. public void SetTickerSymbol(string companySymbol)
  94. {
  95. SetTickerSymbolArgumentCompanySymbol = companySymbol;
  96. }
  97. public IArticleView View
  98. {
  99. get { return MockArticleView; }
  100. }
  101. public INewsController Controller { get; set; }
  102. }
  103. internal class MockTickerSymbolSelectedEvent : TickerSymbolSelectedEvent
  104. {
  105. public Action<string> SubscribeArgumentAction;
  106. public Predicate<string> SubscribeArgumentFilter;
  107. public override SubscriptionToken Subscribe(Action<string> action, ThreadOption threadOption, bool keepSubscriberReferenceAlive, Predicate<string> filter)
  108. {
  109. SubscribeArgumentAction = action;
  110. SubscribeArgumentFilter = filter;
  111. return null;
  112. }
  113. }
  114. }
  115. internal class MockNewsReaderPresenter : INewsReaderPresenter
  116. {
  117. public bool SetNewsArticleCalled { get; set; }
  118. public INewsReaderView View { get; set; }
  119. public MockNewsReaderPresenter()
  120. {
  121. View = new MockNewsReaderView();
  122. }
  123. public void SetNewsArticle(NewsArticle article)
  124. {
  125. SetNewsArticleCalled = true;
  126. }
  127. }
  128. }