public void PostsUpdateWhenTrackedTeamcityBuildChangesState() { var teamcityBuildApi = new Mock <ITeamcityBuildApi>(); var teamcityBuild1 = new TeamcityBuildStatus("12345", "build name", BuildState.Running); var teamcityBuild2 = new TeamcityBuildStatus("12345", "build name", BuildState.Succeeded); var persistence = new InMemoryKeyValueStore(); teamcityBuildApi.Setup(x => x.GetBuild("12345")).ReturnsAsync(teamcityBuild1); var teamcityTracker = new TeamcityBuildTracker(CommandParser.For("track build#12345"), persistence, teamcityBuildApi.Object); teamcityTracker.ProcessMessage(new Message("a-channel", "a-user", "scbot track build#12345")); CollectionAssert.IsEmpty(teamcityTracker.ProcessTimerTick().Responses); teamcityBuildApi.Setup(x => x.GetBuild("12345")).ReturnsAsync(teamcityBuild2); var ping = teamcityTracker.ProcessTimerTick().Responses.Single(); Assert.AreEqual("a-channel", ping.Channel); Assert.AreEqual("<http://teamcity/viewLog.html?buildId=12345|Build 12345> (build name) updated: build finished", ping.Message); // subsequent ticks should use updated values CollectionAssert.IsEmpty(teamcityTracker.ProcessTimerTick().Responses); }
public void ComplainsIfBuildNotFound() { var teamcityBuildApi = new Mock <ITeamcityBuildApi>(); var unknown = TeamcityBuildStatus.Unknown; var persistence = new InMemoryKeyValueStore(); teamcityBuildApi.Setup(x => x.GetBuild("12345")).ReturnsAsync(unknown); var teamcityTracker = new TeamcityBuildTracker(CommandParser.For("track build#12345"), persistence, teamcityBuildApi.Object); var result = teamcityTracker.ProcessMessage(new Message("a-channel", "a-user", "scbot track build#12345")); // TODO: better message Assert.AreEqual("Could not find build#12345. It might not have started, or might not be tracked by the api", result.Responses.Single().Message); }