public void TeamCityBot_BuildFailedTwoTimesWithDifferentReasons_TwoMessagesPosted()
        {
            builds.Add(new Build()
            {
                Id = "1", Number = "1", Status = "FAILED", StatusText = "Tests failed: 25"
            });
            builds.Add(new Build()
            {
                Id = "2", Number = "2", Status = "FAILED", StatusText = "Build failed"
            });
            var changes = Substitute.For <IChanges>();
            var change  = new Change {
                Username = "******"
            };

            changes.ByLocator(null).ReturnsForAnyArgs(new List <Change> {
                change
            });
            tc.Changes.Returns(changes);
            var checker = new TeamCityBuildChecker(new BuildLocator(), tc, "dev", new TimeConfig {
                StillBrokenDelay = TimeSpan.FromMilliseconds(10)
            });
            var now = new DateTime();

            DateTimeProvider.SetFunc(() => now);

            checker.CheckBuild(_sendMessageAction);
            now = now.AddMilliseconds(5);
            checker.CheckBuild(_sendMessageAction);

            Assert.AreEqual(2, _sendMessages.Count);
            Assert.True(_sendMessages[1].Contains("is still broken"));
        }
        public void TeamCityBot_BuildFailedThenFixed_MessageIsPostedImmediately()
        {
            builds.Add(new Build()
            {
                Id = "1", Number = "1", Status = "FAILED", StatusText = "Tests failed: 25"
            });
            builds.Add(new Build()
            {
                Id = "2", Number = "2", Status = "SUCCESS"
            });
            var changes = Substitute.For <IChanges>();
            var change  = new Change {
                Username = "******"
            };

            changes.ByLocator(null).ReturnsForAnyArgs(new List <Change> {
                change
            });
            tc.Changes.Returns(changes);
            var checker = new TeamCityBuildChecker(new BuildLocator(), tc, "dev", new TimeConfig {
                StillBrokenDelay = TimeSpan.FromMilliseconds(10)
            });

            checker.CheckBuild(_sendMessageAction);
            Assert.AreEqual(1, _sendMessages.Count);
            Assert.True(_sendMessages[0].Contains("is broken"));
            checker.CheckBuild(_sendMessageAction);
            Assert.AreEqual(2, _sendMessages.Count);
            Assert.True(_sendMessages[1].Contains("fixed"));
        }