public void UnpinBuildCalled_WithComment_BuildPinnedWithComment()
        {
            // Arrange
            var teamCityClientMock = A.Fake <ITeamCityApiClient>();

            var pinningService = new BuildPinningService(teamCityClientMock);

            // Act
            pinningService.UnPin(123, "some comment");

            // Assert
            A.CallTo(() => teamCityClientMock.Delete("builds/123/pin/", "some comment")).MustHaveHappened();
        }
        public void PinBuildCalled_WithoutComment_BuildPinned()
        {
            // Arrange
            var teamCityClientMock = A.Fake <ITeamCityApiClient>();

            var pinningService = new BuildPinningService(teamCityClientMock);

            // Act
            pinningService.Pin(123);

            // Assert
            A.CallTo(() => teamCityClientMock.Put <string>("builds/123/pin/", null)).MustHaveHappened();
        }
        public void UnpinBuildCalled_InvalidBuildId_ExceptionThrown()
        {
            // Arrange
            var teamCityClientMock = A.Fake <ITeamCityApiClient>();

            A.CallTo(() => teamCityClientMock.Delete <string>("builds/123/pin/", null))
            .Throws(new HttpException(HttpStatusCode.NotFound));

            var pinningService = new BuildPinningService(teamCityClientMock);

            // Act
            Action action = () => pinningService.UnPin(123);

            // Assert
            action.ShouldThrow <HttpException>().Which.StatusCode.Should().Be(HttpStatusCode.NotFound);
        }
        public void IsPinnedCalled_BuildNotPinned_FalseReturned()
        {
            // Arrange
            var teamCityClientMock = A.Fake <ITeamCityApiClient>();

            A.CallTo(() => teamCityClientMock.Get <string>("builds/123/pin/"))
            .Returns("false");

            var pinningService = new BuildPinningService(teamCityClientMock);

            // Act
            var isPinned = pinningService.IsPinned(123);

            // Assert
            isPinned.Should().BeFalse();
        }
        public void IsPinnedCalled_TeamCityReturnsUnexpectedResult_ExceptionThrown()
        {
            // Arrange
            var teamCityClientMock = A.Fake <ITeamCityApiClient>();

            A.CallTo(() => teamCityClientMock.Get <string>("builds/123/pin/"))
            .Returns("someUnexptectedString");

            var pinningService = new BuildPinningService(teamCityClientMock);

            // Act
            Action action = () => pinningService.IsPinned(123);

            // Assert
            action.ShouldThrow <UnexpectedApiResponseException>()
            .Which.Message.Should().Contain("TeamCity API response was \"someUnexptectedString\", exptected it to be \"true\"/\"false\"");
        }