@@ -843,6 +843,52 @@ public async Task WillReturnConflictIfCommittingPackageReturnsConflict()
843843 controller . MockEntitiesContext . VerifyCommitted ( Times . Never ( ) ) ;
844844 }
845845
846+ [ Fact ]
847+ public async Task WillReturnConflictIfGeneratePackageThrowsPackageAlreadyExistsException ( )
848+ {
849+ // Arrange
850+ var packageId = "theId" ;
851+ var nuGetPackage = TestPackage . CreateTestPackageStream ( packageId , "1.0.42" ) ;
852+
853+ var currentUser = new User ( "currentUser" ) { Key = 1 , EmailAddress = "[email protected] " } ; 854+ var controller = new TestableApiController ( GetConfigurationService ( ) ) ;
855+ controller . SetCurrentUser ( currentUser ) ;
856+ controller . SetupPackageFromInputStream ( nuGetPackage ) ;
857+
858+ var owner = new User ( "owner" ) { Key = 2 , EmailAddress = "[email protected] " } ; 859+
860+ Expression < Func < IApiScopeEvaluator , ApiScopeEvaluationResult > > evaluateApiScope =
861+ x => x . Evaluate (
862+ currentUser ,
863+ It . IsAny < IEnumerable < Scope > > ( ) ,
864+ ActionsRequiringPermissions . UploadNewPackageId ,
865+ It . Is < ActionOnNewPackageContext > ( ( context ) => context . PackageId == packageId ) ,
866+ NuGetScopes . PackagePush ) ;
867+
868+ controller . MockApiScopeEvaluator
869+ . Setup ( evaluateApiScope )
870+ . Returns ( new ApiScopeEvaluationResult ( owner , PermissionsCheckResult . Allowed , scopesAreValid : true ) ) ;
871+ controller
872+ . MockPackageUploadService
873+ . Setup ( x => x . GeneratePackageAsync ( It . IsAny < string > ( ) ,
874+ It . IsAny < PackageArchiveReader > ( ) ,
875+ It . IsAny < PackageStreamMetadata > ( ) ,
876+ It . IsAny < User > ( ) ,
877+ It . IsAny < User > ( ) ) )
878+ . Throws ( new PackageAlreadyExistsException ( "Package exists" ) ) ;
879+
880+ // Act
881+ var result = await controller . CreatePackagePut ( ) ;
882+
883+ // Assert
884+ ResultAssert . IsStatusCode ( result , HttpStatusCode . Conflict ) ;
885+ controller . MockPackageUploadService . Verify ( x => x . GeneratePackageAsync ( It . IsAny < string > ( ) ,
886+ It . IsAny < PackageArchiveReader > ( ) ,
887+ It . IsAny < PackageStreamMetadata > ( ) ,
888+ It . IsAny < User > ( ) ,
889+ It . IsAny < User > ( ) ) , Times . Once ) ;
890+ }
891+
846892 [ Fact ]
847893 public async Task WillReturnValidationWarnings ( )
848894 {
0 commit comments