@@ -108,6 +108,27 @@ public void ReturnsAllAvailableVersionsInReverseVersionOrder()
108108
109109 public class TheDeprecateMethod : TestContainer
110110 {
111+ [ Fact ]
112+ public async Task ReturnsBadRequestIfOtherAndNoCustomMessage ( )
113+ {
114+ // Arrange
115+ var controller = GetController < ManageDeprecationJsonApiController > ( ) ;
116+
117+ // Act
118+ var result = await controller . Deprecate (
119+ id : "id" ,
120+ versions : null ,
121+ isLegacy : false ,
122+ hasCriticalBugs : false ,
123+ isOther : true ,
124+ alternatePackageId : null ,
125+ alternatePackageVersion : null ,
126+ customMessage : null ) ;
127+
128+ // Assert
129+ AssertErrorResponse ( controller , result , HttpStatusCode . BadRequest , Strings . DeprecatePackage_CustomMessageRequired ) ;
130+ }
131+
111132 [ Fact ]
112133 public async Task ReturnsForbiddenIfFeatureFlagDisabled ( )
113134 {
@@ -125,7 +146,14 @@ public async Task ReturnsForbiddenIfFeatureFlagDisabled()
125146
126147 // Act
127148 var result = await controller . Deprecate (
128- "id" , null , false , false , false , null , null , null ) ;
149+ id : "id" ,
150+ versions : null ,
151+ isLegacy : false ,
152+ hasCriticalBugs : false ,
153+ isOther : false ,
154+ alternatePackageId : null ,
155+ alternatePackageVersion : null ,
156+ customMessage : null ) ;
129157
130158 // Assert
131159 AssertErrorResponse ( controller , result , HttpStatusCode . Forbidden , Strings . DeprecatePackage_Forbidden ) ;
@@ -153,7 +181,14 @@ public async Task ReturnsBadRequestIfNoVersions(IEnumerable<string> versions)
153181
154182 // Act
155183 var result = await controller . Deprecate (
156- "id" , versions , false , false , false , null , null , null ) ;
184+ id : "id" ,
185+ versions : versions ,
186+ isLegacy : false ,
187+ hasCriticalBugs : false ,
188+ isOther : false ,
189+ alternatePackageId : null ,
190+ alternatePackageVersion : null ,
191+ customMessage : null ) ;
157192
158193 // Assert
159194 AssertErrorResponse ( controller , result , HttpStatusCode . BadRequest , Strings . DeprecatePackage_NoVersions ) ;
@@ -196,7 +231,14 @@ public async Task ReturnsNotFoundIfNoPackagesOrRegistrationMissing(IEnumerable<P
196231
197232 // Act
198233 var result = await controller . Deprecate (
199- id , new [ ] { "1.0.0" } , false , false , false , null , null , null ) ;
234+ id : id ,
235+ versions : new [ ] { "1.0.0" } ,
236+ isLegacy : false ,
237+ hasCriticalBugs : false ,
238+ isOther : false ,
239+ alternatePackageId : null ,
240+ alternatePackageVersion : null ,
241+ customMessage : null ) ;
200242
201243 // Assert
202244 AssertErrorResponse ( controller , result , HttpStatusCode . NotFound , string . Format ( Strings . DeprecatePackage_MissingRegistration , id ) ) ;
@@ -258,7 +300,14 @@ public async Task ReturnsForbiddenIfNotOwner(User currentUser, User owner)
258300
259301 // Act
260302 var result = await controller . Deprecate (
261- id , new [ ] { "1.0.0" } , false , false , false , null , null , null ) ;
303+ id : id ,
304+ versions : new [ ] { "1.0.0" } ,
305+ isLegacy : false ,
306+ hasCriticalBugs : false ,
307+ isOther : false ,
308+ alternatePackageId : null ,
309+ alternatePackageVersion : null ,
310+ customMessage : null ) ;
262311
263312 // Assert
264313 AssertErrorResponse ( controller , result , HttpStatusCode . Forbidden , Strings . DeprecatePackage_Forbidden ) ;
@@ -333,7 +382,14 @@ public async Task ReturnsForbiddenIfLocked(User currentUser, User owner)
333382
334383 // Act
335384 var result = await controller . Deprecate (
336- id , new [ ] { "1.0.0" } , false , false , false , null , null , null ) ;
385+ id : id ,
386+ versions : new [ ] { "1.0.0" } ,
387+ isLegacy : false ,
388+ hasCriticalBugs : false ,
389+ isOther : false ,
390+ alternatePackageId : null ,
391+ alternatePackageVersion : null ,
392+ customMessage : null ) ;
337393
338394 // Assert
339395 AssertErrorResponse (
@@ -387,7 +443,14 @@ public async Task ReturnsNotFoundIfAlternatePackageRegistrationMissing(User curr
387443
388444 // Act
389445 var result = await controller . Deprecate (
390- id , new [ ] { "1.0.0" } , false , false , false , alternatePackageId , null , null ) ;
446+ id : id ,
447+ versions : new [ ] { "1.0.0" } ,
448+ isLegacy : false ,
449+ hasCriticalBugs : false ,
450+ isOther : false ,
451+ alternatePackageId : alternatePackageId ,
452+ alternatePackageVersion : null ,
453+ customMessage : null ) ;
391454
392455 // Assert
393456 AssertErrorResponse (
@@ -442,7 +505,14 @@ public async Task ReturnsNotFoundIfAlternatePackageVersionMissing(User currentUs
442505
443506 // Act
444507 var result = await controller . Deprecate (
445- id , new [ ] { "1.0.0" } , false , false , false , alternatePackageId , alternatePackageVersion , null ) ;
508+ id : id ,
509+ versions : new [ ] { "1.0.0" } ,
510+ isLegacy : false ,
511+ hasCriticalBugs : false ,
512+ isOther : false ,
513+ alternatePackageId : alternatePackageId ,
514+ alternatePackageVersion : alternatePackageVersion ,
515+ customMessage : null ) ;
446516
447517 // Assert
448518 AssertErrorResponse (
@@ -491,7 +561,14 @@ public async Task ReturnsNotFoundIfVersionMissing(User currentUser, User owner)
491561
492562 // Act
493563 var result = await controller . Deprecate (
494- id , new [ ] { "1.0.0" } , false , false , false , null , null , null ) ;
564+ id : id ,
565+ versions : new [ ] { "1.0.0" } ,
566+ isLegacy : false ,
567+ hasCriticalBugs : false ,
568+ isOther : false ,
569+ alternatePackageId : null ,
570+ alternatePackageVersion : null ,
571+ customMessage : null ) ;
495572
496573 // Assert
497574 AssertErrorResponse (
@@ -540,7 +617,14 @@ public async Task ReturnsNotFoundIfSomeVersionMissing(User currentUser, User own
540617
541618 // Act
542619 var result = await controller . Deprecate (
543- id , new [ ] { package . NormalizedVersion , "1.0.0" } , false , false , false , null , null , null ) ;
620+ id : id ,
621+ versions : new [ ] { "1.0.0" } ,
622+ isLegacy : false ,
623+ hasCriticalBugs : false ,
624+ isOther : false ,
625+ alternatePackageId : null ,
626+ alternatePackageVersion : null ,
627+ customMessage : null ) ;
544628
545629 // Assert
546630 AssertErrorResponse (
@@ -600,20 +684,67 @@ public enum ReturnsSuccessful_AlternatePackage_State
600684 MemberDataHelper . Combine (
601685 Owner_Data ,
602686 PackageDeprecationStates_Data ,
603- MemberDataHelper . EnumDataSet < ReturnsSuccessful_AlternatePackage_State > ( ) ,
604- MemberDataHelper . BooleanDataSet ( ) ) . ToList ( ) ;
687+ MemberDataHelper . EnumDataSet < ReturnsSuccessful_AlternatePackage_State > ( ) ) . ToList ( ) ;
605688
606689 [ Theory ]
607690 [ MemberData ( nameof ( ReturnsSuccessful_Data ) ) ]
608- public async Task ReturnsSuccessful (
691+ public Task ReturnsSuccessfulWithCustomMessage (
692+ User currentUser ,
693+ User owner ,
694+ bool isLegacy ,
695+ bool hasCriticalBugs ,
696+ bool isOther ,
697+ PackageDeprecationStatus expectedStatus ,
698+ ReturnsSuccessful_AlternatePackage_State alternatePackageState )
699+ {
700+ return AssertSuccessful (
701+ currentUser ,
702+ owner ,
703+ isLegacy ,
704+ hasCriticalBugs ,
705+ isOther ,
706+ expectedStatus ,
707+ alternatePackageState ,
708+ true ) ;
709+ }
710+
711+ /// <remarks>
712+ /// Deprecations where the only reason is "other" must have a custom message.
713+ /// </remarks>
714+ public static IEnumerable < object [ ] > ReturnsSuccessfulWithoutCustomMessage_Data =
715+ ReturnsSuccessful_Data . Where ( x => ! ( bool ) x [ 4 ] ) ;
716+
717+ [ Theory ]
718+ [ MemberData ( nameof ( ReturnsSuccessfulWithoutCustomMessage_Data ) ) ]
719+ public Task ReturnsSuccessfulWithoutCustomMessage (
720+ User currentUser ,
721+ User owner ,
722+ bool isLegacy ,
723+ bool hasCriticalBugs ,
724+ bool isOther ,
725+ PackageDeprecationStatus expectedStatus ,
726+ ReturnsSuccessful_AlternatePackage_State alternatePackageState )
727+ {
728+ return AssertSuccessful (
729+ currentUser ,
730+ owner ,
731+ isLegacy ,
732+ hasCriticalBugs ,
733+ isOther ,
734+ expectedStatus ,
735+ alternatePackageState ,
736+ false ) ;
737+ }
738+
739+ private async Task AssertSuccessful (
609740 User currentUser ,
610741 User owner ,
611742 bool isLegacy ,
612743 bool hasCriticalBugs ,
613744 bool isOther ,
614745 PackageDeprecationStatus expectedStatus ,
615746 ReturnsSuccessful_AlternatePackage_State alternatePackageState ,
616- bool hasAdditionalData )
747+ bool hasCustomMessage )
617748 {
618749 // Arrange
619750 var id = "id" ;
@@ -686,7 +817,7 @@ public async Task ReturnsSuccessful(
686817
687818 var deprecationService = GetMock < IPackageDeprecationService > ( ) ;
688819
689- var customMessage = hasAdditionalData ? "message" : null ;
820+ var customMessage = hasCustomMessage ? "message" : null ;
690821
691822 deprecationService
692823 . Setup ( x => x . UpdateDeprecation (
0 commit comments