using System; using Microsoft.VisualStudio.TestTools.UnitTesting; using Moq; using Pinwheel.SCM; using TFS_Notification_Service; namespace Pinwheel.TFS_Notification_Service { [TestClass] public class TfsEventSubscriberTests { [TestMethod] public void IoC_error_does_not_blow_up_constructor() { // Empty constructor should try to get the engine from // the IoC Container, which should fail. // The constructor can not pass this on, but must log // the error and pretend like nothing happened. Assert.IsNotNull(new TestTfsEventSubscriber().Message); } [TestMethod] public void Error_in_notify_does_not_blow_up() { var service = new TestTfsEventSubscriber(null); service.Notify(null, null); Assert.IsNotNull(service.Message); } [TestMethod] public void Notify_saves_event_data() { OverrideTfsScmEventFactory(); var mockSubscriber = new Mock(new AwardsEngine()); mockSubscriber.Expect(s => s.SaveEventData("", "")).Verifiable(); var subscriber = mockSubscriber.Object; subscriber.Notify("", ""); mockSubscriber.VerifyAll(); } [TestMethod] public void Notify_executes_awards_engine() { OverrideTfsScmEventFactory(); var awardsEngine = new Mock(); var mockSubscriber = new Mock(awardsEngine.Object); awardsEngine.Expect(e => e.Register(It.IsAny())); awardsEngine.Expect(e => e.Execute(It.IsAny())); mockSubscriber.Expect(s => s.SaveEventData("", "")).Verifiable(); var subscriber = mockSubscriber.Object; subscriber.Notify("", ""); mockSubscriber.VerifyAll(); } private static void OverrideTfsScmEventFactory() { var awardContext = new Mock().Object; awardContext.AwardService = new Mock().Object; var eventFactory = new Mock(); eventFactory .Expect(f => f.GetContextFromXml(It.IsAny(), It.IsAny())) .Returns(new Mock().Object); TfsAwardContextFactory.Current = eventFactory.Object; } private class TestTfsEventSubscriber : TfsEventSubscriber { public TestTfsEventSubscriber() { } public TestTfsEventSubscriber(AwardsEngine engine) : base(engine) { } public string Message { get; set; } protected internal override void LogMessage(string message) { Message = message; } protected internal override void SaveEventData(string eventXml, string tfsIdentityXml) { } } } }