/// <summary>
 /// Initializes a new instance of the <see cref="ProjectTrigger"/> class.
 /// </summary>
 /// <param name="factory">The factory.</param>
 public ProjectTrigger(ICruiseServerClientFactory factory)
 {
     this.factory          = factory;
     this.ServerUri        = DefaultServerUri;
     this.TriggerStatus    = IntegrationStatus.Success;
     this.InnerTrigger     = ProjectTrigger.NewIntervalTrigger();
     this.TriggerFirstTime = false;
 }
        public void ShouldNotTriggerOnFirstIntegration()
        {
            var innerTriggerMock = this.InitialiseTriggerMock(1);
            var clientMock = InitialiseClientMock(true, NewProjectStatus("project", IntegrationStatus.Success, now));
            var factoryMock = this.InitialiseFactoryMock(clientMock);
            var trigger = new ProjectTrigger(factoryMock)
                {
                    Project = "project",
                    InnerTrigger = innerTriggerMock
                };

            this.mocks.ReplayAll();
            var actual = trigger.Fire();

            this.mocks.VerifyAll();
            Assert.IsNull(actual);
        }
        public void ShouldNotTriggerOnFirstIntegrationIfDependentProjectBuildFailedAndTriggerFirstTimeIsSet()
        {
            var innerTriggerMock = this.InitialiseTriggerMock(1);
            var clientMock = InitialiseClientMock(true, NewProjectStatus("project", IntegrationStatus.Failure, now));
            var factoryMock = this.InitialiseFactoryMock(clientMock);
            var trigger = new ProjectTrigger(factoryMock)
                {
                    Project = "project",
                    InnerTrigger = innerTriggerMock,
                    TriggerFirstTime = true
                };

            this.mocks.ReplayAll();
            var actual = trigger.Fire();

            this.mocks.VerifyAll();
            Assert.IsNull(actual);
        }
        public void ShouldTriggerOnFirstIntegrationIfDependentProjectBuildSucceededAndTriggerFirstTimeIsSet()
        {
            var innerTriggerMock = this.InitialiseTriggerMock(1);
            var clientMock = InitialiseClientMock(
                true,
                NewProjectStatus("project", IntegrationStatus.Success, now));
            var factoryMock = this.InitialiseFactoryMock(clientMock);
            var trigger = new ProjectTrigger(factoryMock)
                {
                    Project = "project",
                    InnerTrigger = innerTriggerMock,
                    TriggerFirstTime = true
                };

            this.mocks.ReplayAll();
            var actual = trigger.Fire();

            this.mocks.VerifyAll();
            var expected = ModificationExistRequest();
            Assert.AreEqual(expected, actual);
        }
 public void PopulateFromConfiguration()
 {
     string xml = @"<projectTrigger>
     <serverUri>http://fooserver:12342/CruiseManager.rem</serverUri>
     <project>Foo</project>
     <triggerStatus>Failure</triggerStatus>
     <triggerFirstTime>True</triggerFirstTime>
     <innerTrigger type=""intervalTrigger"">
     <buildCondition>ForceBuild</buildCondition>
     <seconds>10</seconds>
     </innerTrigger>
     </projectTrigger>";
     trigger = (ProjectTrigger) NetReflector.Read(xml);
     Assert.AreEqual("http://fooserver:12342/CruiseManager.rem", trigger.ServerUri);
     Assert.AreEqual("Foo", trigger.Project);
     Assert.IsNotNull(trigger.InnerTrigger);
     Assert.AreEqual(IntegrationStatus.Failure, trigger.TriggerStatus);
     Assert.IsTrue(trigger.TriggerFirstTime);
 }
 protected void SetUp()
 {
     now = DateTime.Now;
     later = now.AddHours(1);
     mockCruiseManager = new DynamicMock(typeof (ICruiseManager));
     mockFactory = new DynamicMock(typeof (ICruiseManagerFactory));
     mockInnerTrigger = new DynamicMock(typeof (ITrigger));
     trigger = new ProjectTrigger((ICruiseManagerFactory) mockFactory.MockInstance);
     trigger.Project = "project";
     trigger.InnerTrigger = (ITrigger) mockInnerTrigger.MockInstance;
 }
 public void PopulateFromMinimalConfiguration()
 {
     string xml = @"<projectTrigger><project>Foo</project></projectTrigger>";
     trigger = (ProjectTrigger) NetReflector.Read(xml);
     Assert.AreEqual("tcp://localhost:21234/CruiseManager.rem", trigger.ServerUri);
     Assert.AreEqual("Foo", trigger.Project);
     Assert.IsNotNull(trigger.InnerTrigger);
     Assert.AreEqual(IntegrationStatus.Success, trigger.TriggerStatus);
     Assert.IsFalse(trigger.TriggerFirstTime);
 }
        public void TriggerWhenDependentProjectBuildsSuccessfully()
        {
            var innerTriggerMock = this.InitialiseTriggerMock(2);
            var clientMocks = new[] 
                {
                    InitialiseClientMock(true, NewProjectStatus("project", IntegrationStatus.Success, now)),
                    InitialiseClientMock(true, NewProjectStatus("project", IntegrationStatus.Success, later))
                };
            var factoryMock = this.InitialiseFactoryMock(clientMocks);
            var trigger = new ProjectTrigger(factoryMock)
                {
                    Project = "project",
                    InnerTrigger = innerTriggerMock
                };

            this.mocks.ReplayAll();
            trigger.Fire();
            var actual = trigger.Fire();

            this.mocks.VerifyAll();
            var expected = ModificationExistRequest();
            Assert.AreEqual(expected, actual);
        }
        public void FirePassesInLoginCredentialsAndHandlesFailure()
        {
            var credentials = new[] 
                {
                    new NameValuePair("user", "me")
                };
            var innerTriggerMock = this.InitialiseTriggerMock(1);
            var clientMock = InitialiseClientMock(
                false,
                NewProjectStatus("project", IntegrationStatus.Success, now));
            Expect.Call(clientMock.Login(new List<NameValuePair>(credentials))).Return(false);
            var factoryMock = this.InitialiseFactoryMock(clientMock);
            var trigger = new ProjectTrigger(factoryMock)
            {
                Project = "project",
                InnerTrigger = innerTriggerMock,
                TriggerFirstTime = true,
                SecurityCredentials = credentials
            };

            this.mocks.ReplayAll();
            var actual = trigger.Fire();

            this.mocks.VerifyAll();
            var expected = ModificationExistRequest();
            Assert.AreEqual(expected, actual);
        }
        public void HandleSocketError()
        {
            var innerTriggerMock = this.InitialiseTriggerMock(1);
            var clientMock = this.mocks.StrictMock<CruiseServerClientBase>();
            var factoryMock = this.InitialiseFactoryMock(clientMock);
            Expect.Call(clientMock.SessionToken).SetPropertyAndIgnoreArgument();
            Expect.Call(clientMock.GetProjectStatus())
                .Throw(new SocketException());
            var trigger = new ProjectTrigger(factoryMock)
            {
                Project = "project",
                InnerTrigger = innerTriggerMock
            };

            this.mocks.ReplayAll();
            var actual = trigger.Fire();

            this.mocks.VerifyAll();
            Assert.IsNull(actual);
        }
        public void HandleExceptionInProjectLocator()
        {
            var innerTriggerMock = this.InitialiseTriggerMock(1);
            var clientMock = this.InitialiseClientMock(true, NewProjectStatus("wrong", IntegrationStatus.Failure, now));
            var factoryMock = this.InitialiseFactoryMock(clientMock);
            var trigger = new ProjectTrigger(factoryMock)
            {
                Project = "project",
                InnerTrigger = innerTriggerMock
            };

            this.mocks.ReplayAll();
            Assert.Throws<NoSuchProjectException>(() => trigger.Fire());

            this.mocks.VerifyAll();
        }
        public void NextBuildShouldReturnInnerTriggerNextBuildIfUnknown()
        {
            var innerTriggerMock = this.mocks.StrictMock<ITrigger>();
            Expect.Call(innerTriggerMock.NextBuild).Return(now);
            var trigger = new ProjectTrigger
                {
                    InnerTrigger = innerTriggerMock
                };
            mocks.ReplayAll();
            var actual = trigger.NextBuild;

            mocks.VerifyAll();
            Assert.AreEqual(now, actual);
        }
 public void IntegrationCompletedShouldDelegateToInnerTrigger()
 {
     var innerTriggerMock = this.mocks.StrictMock<ITrigger>();
     Expect.Call(() => innerTriggerMock.IntegrationCompleted());
     var trigger = new ProjectTrigger
         {
             InnerTrigger = innerTriggerMock
         };
     mocks.ReplayAll();
     trigger.IntegrationCompleted();
     mocks.VerifyAll();
 }
        public void DoNotTriggerIfProjectHasNotBuiltSinceLastPoll()
        {
            var innerTriggerMock = this.InitialiseTriggerMock(2);
            var clientMocks = new[] 
                {
                    InitialiseClientMock(true, NewProjectStatus("project", IntegrationStatus.Success, now)),
                    InitialiseClientMock(true, NewProjectStatus("project", IntegrationStatus.Success, now))
                };
            var factoryMock = this.InitialiseFactoryMock(clientMocks);
            var trigger = new ProjectTrigger(factoryMock)
            {
                Project = "project",
                InnerTrigger = innerTriggerMock
            };

            this.mocks.ReplayAll();
            trigger.Fire();
            var actual = trigger.Fire();

            this.mocks.VerifyAll();
            Assert.IsNull(actual);
        }
        public void DoNotTriggerWhenInnerTriggerReturnsNoBuild()
        {
            var innerTriggerMock = this.mocks.StrictMock<ITrigger>();
            Expect.Call(innerTriggerMock.Fire()).Return(null);
            var factoryMock = this.mocks.StrictMock<ICruiseServerClientFactory>();
            var trigger = new ProjectTrigger(factoryMock)
            {
                Project = "project",
                InnerTrigger = innerTriggerMock
            };

            this.mocks.ReplayAll();
            var actual = trigger.Fire();

            this.mocks.VerifyAll();
            Assert.IsNull(actual);
        }