@@ -750,12 +750,14 @@ public void Should_Return_Valid_Comment_Threads()
750
750
comment11 . Content . ShouldBe ( "Hello" ) ;
751
751
comment11 . IsDeleted . ShouldBe ( false ) ;
752
752
comment11 . CommentType . ShouldBe ( AzureDevOpsCommentType . CodeChange ) ;
753
+ ( ( int ) comment11 . Id ) . ShouldBeGreaterThan ( 0 ) ;
753
754
754
755
AzureDevOpsComment comment12 = thread1 . Comments . Last ( ) ;
755
756
comment12 . ShouldNotBeNull ( ) ;
756
757
comment12 . Content . ShouldBe ( "Goodbye" ) ;
757
758
comment12 . IsDeleted . ShouldBe ( true ) ;
758
759
comment12 . CommentType . ShouldBe ( AzureDevOpsCommentType . Text ) ;
760
+ ( ( int ) comment12 . Id ) . ShouldBeGreaterThan ( 0 ) ;
759
761
760
762
AzureDevOpsPullRequestCommentThread thread2 = threads . Last ( ) ;
761
763
thread2 . Id . ShouldBe ( 22 ) ;
@@ -826,6 +828,279 @@ public void Should_Create_Valid_Thread_With_One_Comment()
826
828
}
827
829
}
828
830
831
+ public sealed class TheCreateCommentWithFileMethod
832
+ {
833
+ [ Theory ]
834
+ [ InlineData ( ( string ) null , typeof ( ArgumentNullException ) ) ]
835
+ [ InlineData ( "" , typeof ( ArgumentOutOfRangeException ) ) ]
836
+ [ InlineData ( " " , typeof ( ArgumentOutOfRangeException ) ) ]
837
+ public void Should_Throw_If_Comment_Is_Null_Or_Empty_Or_Whitespace ( string comment , Type expectedExceptionType )
838
+ {
839
+ // Given
840
+ var fixture = new PullRequestFixture ( BasePullRequestFixture . ValidAzureDevOpsServerUrl , 100 ) ;
841
+ var pullRequest = new AzureDevOpsPullRequest ( fixture . Log , fixture . Settings , fixture . GitClientFactory ) ;
842
+
843
+ // When
844
+ var result = Record . Exception ( ( ) => pullRequest . CreateComment ( comment , new FilePath ( "text.txt" ) , 0 , 0 ) ) as ArgumentException ;
845
+
846
+ // Then
847
+ result . ShouldNotBeNull ( ) ;
848
+ result . IsArgumentException ( expectedExceptionType , "comment" ) ;
849
+ }
850
+
851
+ [ Theory ]
852
+ [ InlineData ( ( string ) null , typeof ( ArgumentNullException ) ) ]
853
+ [ InlineData ( "" , typeof ( ArgumentOutOfRangeException ) ) ]
854
+ [ InlineData ( " " , typeof ( ArgumentOutOfRangeException ) ) ]
855
+ public void Should_Throw_If_FilePath_Is_Null_Or_Empty_Or_Whitespace ( string filePath , Type expectedExceptionType )
856
+ {
857
+ // Given
858
+ var fixture = new PullRequestFixture ( BasePullRequestFixture . ValidAzureDevOpsServerUrl , 100 ) ;
859
+ var pullRequest = new AzureDevOpsPullRequest ( fixture . Log , fixture . Settings , fixture . GitClientFactory ) ;
860
+
861
+ // When
862
+ var result = Record . Exception ( ( ) => pullRequest . CreateComment ( "test" , filePath == null ? null : new FilePath ( filePath ) , 0 , 0 ) ) as ArgumentException ;
863
+
864
+ // Then
865
+ result . ShouldNotBeNull ( ) ;
866
+ result . IsArgumentException ( expectedExceptionType , "filePath" ) ;
867
+ }
868
+
869
+ [ Theory ]
870
+ [ InlineData ( 0 , typeof ( ArgumentOutOfRangeException ) ) ]
871
+ [ InlineData ( - 1 , typeof ( ArgumentOutOfRangeException ) ) ]
872
+ [ InlineData ( - 50 , typeof ( ArgumentOutOfRangeException ) ) ]
873
+ public void Should_Throw_If_LineNumber_Is_Negative_Or_Zeror ( int lineNumber , Type expectedExceptionType )
874
+ {
875
+ // Given
876
+ var fixture = new PullRequestFixture ( BasePullRequestFixture . ValidAzureDevOpsServerUrl , 100 ) ;
877
+ var pullRequest = new AzureDevOpsPullRequest ( fixture . Log , fixture . Settings , fixture . GitClientFactory ) ;
878
+
879
+ // When
880
+ var result = Record . Exception ( ( ) => pullRequest . CreateComment ( "test" , new FilePath ( "test.txt" ) , lineNumber , 0 ) ) as ArgumentException ;
881
+
882
+ // Then
883
+ result . ShouldNotBeNull ( ) ;
884
+ result . IsArgumentException ( expectedExceptionType , "lineNumber" ) ;
885
+ }
886
+
887
+ [ Theory ]
888
+ [ InlineData ( - 1 , typeof ( ArgumentOutOfRangeException ) ) ]
889
+ [ InlineData ( - 50 , typeof ( ArgumentOutOfRangeException ) ) ]
890
+ public void Should_Throw_If_Offset_Is_Negative ( int offset , Type expectedExceptionType )
891
+ {
892
+ // Given
893
+ var fixture = new PullRequestFixture ( BasePullRequestFixture . ValidAzureDevOpsServerUrl , 100 ) ;
894
+ var pullRequest = new AzureDevOpsPullRequest ( fixture . Log , fixture . Settings , fixture . GitClientFactory ) ;
895
+
896
+ // When
897
+ var result = Record . Exception ( ( ) => pullRequest . CreateComment ( "test" , new FilePath ( "test.txt" ) , 1 , offset ) ) as ArgumentException ;
898
+
899
+ // Then
900
+ result . ShouldNotBeNull ( ) ;
901
+ result . IsArgumentException ( expectedExceptionType , "offset" ) ;
902
+ }
903
+
904
+ [ Fact ]
905
+ public void Should_Return_Null_If_Null_Is_Returned_From_Git_Client ( )
906
+ {
907
+ // Given
908
+ var fixture = new PullRequestFixture ( BasePullRequestFixture . ValidAzureDevOpsServerUrl , 100 )
909
+ {
910
+ GitClientFactory = new FakeNullForMethodsGitClientFactory ( ) ,
911
+ } ;
912
+ var pullRequest = new AzureDevOpsPullRequest ( fixture . Log , fixture . Settings , fixture . GitClientFactory ) ;
913
+
914
+ // When
915
+ var thread = pullRequest . CreateComment ( "Foo" , new FilePath ( "test.txt" ) , 10 , 50 ) ;
916
+
917
+ // Then
918
+ thread . ShouldBeNull ( ) ;
919
+ }
920
+
921
+ [ Fact ]
922
+ public void Should_Create_Valid_Thread_With_One_Comment ( )
923
+ {
924
+ // Given
925
+ var fixture = new PullRequestFixture ( BasePullRequestFixture . ValidAzureDevOpsServerUrl , 100 ) ;
926
+ var pullRequest = new AzureDevOpsPullRequest ( fixture . Log , fixture . Settings , fixture . GitClientFactory ) ;
927
+
928
+ // When
929
+ var thread = pullRequest . CreateComment ( "Valid" , new FilePath ( "src/test.txt" ) , 10 , 50 ) ;
930
+
931
+ // Then
932
+ thread . ShouldNotBeNull ( ) ;
933
+ thread . Status . ShouldBe ( AzureDevOpsCommentThreadStatus . Active ) ;
934
+ thread . FilePath . FullPath . ShouldBe ( "src/test.txt" ) ;
935
+ thread . LineNumber . ShouldBe ( 10 ) ;
936
+ thread . Offset . ShouldBe ( 50 ) ;
937
+
938
+ thread . Comments . ShouldNotBeNull ( ) ;
939
+ thread . Comments . Count ( ) . ShouldBe ( 1 ) ;
940
+
941
+ var comment = thread . Comments . First ( ) ;
942
+ comment . CommentType . ShouldBe ( AzureDevOpsCommentType . System ) ;
943
+ comment . IsDeleted . ShouldBeFalse ( ) ;
944
+ comment . Content . ShouldBe ( "Valid" ) ;
945
+ }
946
+ }
947
+
948
+ public sealed class TheDeleteCommentMethod
949
+ {
950
+ [ Theory ]
951
+ [ InlineData ( 0 , typeof ( ArgumentOutOfRangeException ) ) ]
952
+ [ InlineData ( - 1 , typeof ( ArgumentOutOfRangeException ) ) ]
953
+ [ InlineData ( - 55 , typeof ( ArgumentOutOfRangeException ) ) ]
954
+ public void Should_Throw_If_ThreadId_Is_Zero_Or_Below ( int threadId , Type expectedExceptionType )
955
+ {
956
+ // Given
957
+ var fixture = new PullRequestFixture ( BasePullRequestFixture . ValidAzureDevOpsServerUrl , 100 ) ;
958
+ var pullRequest = new AzureDevOpsPullRequest ( fixture . Log , fixture . Settings , fixture . GitClientFactory ) ;
959
+
960
+ // When
961
+ var result = Record . Exception ( ( ) => pullRequest . DeleteComment ( threadId , 5 ) ) as ArgumentException ;
962
+
963
+ // Then
964
+ result . ShouldNotBeNull ( ) ;
965
+ result . IsArgumentException ( expectedExceptionType , "threadId" ) ;
966
+ }
967
+
968
+ [ Theory ]
969
+ [ InlineData ( 0 , typeof ( ArgumentOutOfRangeException ) ) ]
970
+ [ InlineData ( - 1 , typeof ( ArgumentOutOfRangeException ) ) ]
971
+ [ InlineData ( - 55 , typeof ( ArgumentOutOfRangeException ) ) ]
972
+ public void Should_Throw_If_CommentId_Is_Zero_Or_Below ( int commentId , Type expectedExceptionType )
973
+ {
974
+ // Given
975
+ var fixture = new PullRequestFixture ( BasePullRequestFixture . ValidAzureDevOpsServerUrl , 100 ) ;
976
+ var pullRequest = new AzureDevOpsPullRequest ( fixture . Log , fixture . Settings , fixture . GitClientFactory ) ;
977
+
978
+ // When
979
+ var result = Record . Exception ( ( ) => pullRequest . DeleteComment ( 5 , commentId ) ) as ArgumentException ;
980
+
981
+ // Then
982
+ result . ShouldNotBeNull ( ) ;
983
+ result . IsArgumentException ( expectedExceptionType , "commentId" ) ;
984
+ }
985
+
986
+ [ Fact ]
987
+ public void Should_Delete_Comment ( )
988
+ {
989
+ // Given
990
+ var fixture = new PullRequestFixture ( BasePullRequestFixture . ValidAzureDevOpsServerUrl , 100 ) ;
991
+ var pullRequest = new AzureDevOpsPullRequest ( fixture . Log , fixture . Settings , fixture . GitClientFactory ) ;
992
+
993
+ // When
994
+ pullRequest . DeleteComment ( 5 , 1 ) ;
995
+
996
+ // Then
997
+ // ?? Nothing to validate here since the method returns void
998
+ }
999
+
1000
+ [ Fact ]
1001
+ public void Should_Throw_If_Comment_Is_Null ( )
1002
+ {
1003
+ // Given
1004
+ var fixture = new PullRequestFixture ( BasePullRequestFixture . ValidAzureDevOpsServerUrl , 100 ) ;
1005
+ var pullRequest = new AzureDevOpsPullRequest ( fixture . Log , fixture . Settings , fixture . GitClientFactory ) ;
1006
+
1007
+ // When
1008
+ var result = Record . Exception ( ( ) => pullRequest . DeleteComment ( null ) ) as ArgumentException ;
1009
+
1010
+ // Then
1011
+ result . ShouldNotBeNull ( ) ;
1012
+ result . IsArgumentNullException ( "comment" ) ;
1013
+ }
1014
+
1015
+ [ Fact ]
1016
+ public void Should_Delete_Comment_By_Comment_Properties ( )
1017
+ {
1018
+ // Given
1019
+ var fixture = new PullRequestFixture ( BasePullRequestFixture . ValidAzureDevOpsServerUrl , 100 ) ;
1020
+ var pullRequest = new AzureDevOpsPullRequest ( fixture . Log , fixture . Settings , fixture . GitClientFactory ) ;
1021
+ var inComment = new AzureDevOpsComment ( new Microsoft . TeamFoundation . SourceControl . WebApi . Comment { Id = 1 } , 5 ) ;
1022
+ inComment . Content = "new Content" ;
1023
+
1024
+ // When
1025
+ pullRequest . DeleteComment ( inComment ) ;
1026
+
1027
+ // Then
1028
+ // ?? Nothing to validate here since the method returns void
1029
+ }
1030
+ }
1031
+
1032
+ public sealed class TheUpdateCommentMethod
1033
+ {
1034
+ [ Fact ]
1035
+ public void Should_Throw_If_Comment_Is_Null ( )
1036
+ {
1037
+ // Given
1038
+ var fixture = new PullRequestFixture ( BasePullRequestFixture . ValidAzureDevOpsServerUrl , 100 ) ;
1039
+ var pullRequest = new AzureDevOpsPullRequest ( fixture . Log , fixture . Settings , fixture . GitClientFactory ) ;
1040
+
1041
+ // When
1042
+ var result = Record . Exception ( ( ) => pullRequest . UpdateComment ( null ) ) as ArgumentException ;
1043
+
1044
+ // Then
1045
+ result . ShouldNotBeNull ( ) ;
1046
+ result . IsArgumentNullException ( "comment" ) ;
1047
+ }
1048
+
1049
+ [ Fact ]
1050
+ public void Should_Return_Null_If_Pull_Request_Is_Invalid ( )
1051
+ {
1052
+ // Given
1053
+ var fixture = new PullRequestFixture ( BasePullRequestFixture . ValidAzureDevOpsServerUrl , 100 )
1054
+ {
1055
+ GitClientFactory = new FakeNullGitClientFactory ( ) ,
1056
+ } ;
1057
+ fixture . Settings . ThrowExceptionIfPullRequestCouldNotBeFound = false ;
1058
+
1059
+ var pullRequest = new AzureDevOpsPullRequest ( fixture . Log , fixture . Settings , fixture . GitClientFactory ) ;
1060
+
1061
+ // When
1062
+ var outThread = pullRequest . UpdateComment ( new AzureDevOpsComment ( ) ) ;
1063
+
1064
+ // Then
1065
+ outThread . ShouldBeNull ( ) ;
1066
+ }
1067
+
1068
+ [ Fact ]
1069
+ public void Should_Return_Null_If_Null_Is_Returned_From_Git_Client ( )
1070
+ {
1071
+ // Given
1072
+ var fixture = new PullRequestFixture ( BasePullRequestFixture . ValidAzureDevOpsServerUrl , 100 )
1073
+ {
1074
+ GitClientFactory = new FakeNullForMethodsGitClientFactory ( ) ,
1075
+ } ;
1076
+
1077
+ var pullRequest = new AzureDevOpsPullRequest ( fixture . Log , fixture . Settings , fixture . GitClientFactory ) ;
1078
+
1079
+ // When
1080
+ var outThread = pullRequest . UpdateComment ( new AzureDevOpsComment ( ) ) ;
1081
+
1082
+ // Then
1083
+ outThread . ShouldBeNull ( ) ;
1084
+ }
1085
+
1086
+ [ Fact ]
1087
+ public void Should_Return_Updated_Comment ( )
1088
+ {
1089
+ // Given
1090
+ var fixture = new PullRequestFixture ( BasePullRequestFixture . ValidAzureDevOpsUrl , 200 ) ;
1091
+ var pullRequest = new AzureDevOpsPullRequest ( fixture . Log , fixture . Settings , fixture . GitClientFactory ) ;
1092
+ var inComment = new AzureDevOpsComment ( new Microsoft . TeamFoundation . SourceControl . WebApi . Comment { Id = 1 } , 5 ) ;
1093
+ inComment . Content = "new Content" ;
1094
+
1095
+ // When
1096
+ var outComment = pullRequest . UpdateComment ( inComment ) ;
1097
+
1098
+ // Then
1099
+ outComment . Id . ShouldBe ( inComment . Id ) ;
1100
+ outComment . Content . ShouldBe ( inComment . Content ) ;
1101
+ }
1102
+ }
1103
+
829
1104
public sealed class TheCreateCommentThreadMethod
830
1105
{
831
1106
[ Fact ]
0 commit comments