1616using Moq ;
1717using NuGet . Packaging ;
1818using NuGet . Services . Entities ;
19+ using NuGet . Services . Licenses ;
1920using NuGet . Services . Messaging . Email ;
2021using NuGet . Services . Validation ;
2122using NuGet . Services . Validation . Issues ;
@@ -67,7 +68,8 @@ private static PackagesController CreateController(
6768 Mock < IContentObjectService > contentObjectService = null ,
6869 Mock < ISymbolPackageUploadService > symbolPackageUploadService = null ,
6970 Mock < IFlatContainerService > flatContainerService = null ,
70- Mock < ICoreLicenseFileService > coreLicenseFileService = null )
71+ Mock < ICoreLicenseFileService > coreLicenseFileService = null ,
72+ Mock < ILicenseExpressionSplitter > licenseExpressionSplitter = null )
7173 {
7274 packageService = packageService ?? new Mock < IPackageService > ( ) ;
7375 if ( uploadFileService == null )
@@ -185,6 +187,8 @@ private static PackagesController CreateController(
185187 . ReturnsAsync ( ( ) => new MemoryStream ( ) ) ;
186188 }
187189
190+ licenseExpressionSplitter = licenseExpressionSplitter ?? new Mock < ILicenseExpressionSplitter > ( ) ;
191+
188192 var diagnosticsService = new Mock < IDiagnosticsService > ( ) ;
189193 var controller = new Mock < PackagesController > (
190194 packageService . Object ,
@@ -211,7 +215,8 @@ private static PackagesController CreateController(
211215 symbolPackageUploadService . Object ,
212216 diagnosticsService . Object ,
213217 flatContainerService . Object ,
214- coreLicenseFileService . Object ) ;
218+ coreLicenseFileService . Object ,
219+ licenseExpressionSplitter . Object ) ;
215220
216221 controller . CallBase = true ;
217222 controller . Object . SetOwinContextOverride ( Fakes . CreateOwinContext ( ) ) ;
@@ -838,6 +843,58 @@ public async Task GetsValidationIssues()
838843 Assert . Equal ( model . PackageValidationIssues , expectedIssues ) ;
839844 }
840845
846+ [ Fact ]
847+ public async Task SplitsLicenseExpressionWhenProvided ( )
848+ {
849+ const string expression = "some expression" ;
850+ var splitterMock = new Mock < ILicenseExpressionSplitter > ( ) ;
851+ var packageService = new Mock < IPackageService > ( ) ;
852+ var indexingService = new Mock < IIndexingService > ( ) ;
853+
854+ var segments = new List < CompositeLicenseExpressionSegment > ( ) ;
855+ splitterMock
856+ . Setup ( les => les . SplitExpression ( expression ) )
857+ . Returns ( segments ) ;
858+
859+ var package = new Package ( )
860+ {
861+ PackageRegistration = new PackageRegistration ( )
862+ {
863+ Id = "Foo" ,
864+ Owners = new List < User > ( )
865+ } ,
866+ Version = "01.1.01" ,
867+ NormalizedVersion = "1.1.1" ,
868+ Title = "A test package!" ,
869+ LicenseExpression = expression ,
870+ } ;
871+
872+ packageService . Setup ( p => p . FindPackageByIdAndVersion (
873+ It . Is < string > ( s => s == "Foo" ) ,
874+ It . Is < string > ( s => s == null ) ,
875+ It . Is < int > ( i => i == SemVerLevelKey . SemVer2 ) ,
876+ It . Is < bool > ( b => b == true ) ) )
877+ . Returns ( package ) ;
878+
879+ indexingService . Setup ( i => i . GetLastWriteTime ( ) ) . Returns ( Task . FromResult ( ( DateTime ? ) DateTime . UtcNow ) ) ;
880+
881+ var controller = CreateController (
882+ GetConfigurationService ( ) ,
883+ packageService : packageService ,
884+ indexingService : indexingService ,
885+ licenseExpressionSplitter : splitterMock ) ;
886+
887+ var result = await controller . DisplayPackage ( id : "Foo" , version : null ) ;
888+
889+ splitterMock
890+ . Verify ( les => les . SplitExpression ( expression ) , Times . Once ) ;
891+ splitterMock
892+ . Verify ( les => les . SplitExpression ( It . IsAny < string > ( ) ) , Times . Once ) ;
893+
894+ var model = ResultAssert . IsView < DisplayPackageViewModel > ( result ) ;
895+ Assert . Same ( segments , model . LicenseExpressionSegments ) ;
896+ }
897+
841898 private class TestIssue : ValidationIssue
842899 {
843900 private readonly string _message ;
0 commit comments