@@ -12,6 +12,12 @@ namespace NuGet.Server.Tests
1212{
1313 public class ServerPackageStoreTest
1414 {
15+ private const string PackageId = "NuGet.Versioning" ;
16+ private const string PackageVersionString = "3.5.0" ;
17+ private const string CacheFileName = "store.json" ;
18+ private const string SemVer2VersionString = "3.5.0-rc.1+githash" ;
19+ private static readonly SemanticVersion SemVer2Version = new SemanticVersion ( SemVer2VersionString ) ;
20+
1521 [ Theory ]
1622 [ InlineData ( "[" ) ]
1723 [ InlineData ( "]" ) ]
@@ -20,6 +26,7 @@ public class ServerPackageStoreTest
2026 [ InlineData ( "[{" ) ]
2127 [ InlineData ( "[{}" ) ]
2228 [ InlineData ( "[]" ) ]
29+ [ InlineData ( "\0 " ) ]
2330 [ InlineData ( "[{\" foo\" : \" bar\" }]" ) ]
2431 [ InlineData ( "{\" SchemaVersion\" :null,\" Packages\" :[]}" ) ]
2532 [ InlineData ( "{\" SchemaVersion\" :\" 1.0.0\" ,\" Packages\" :null}" ) ]
@@ -29,44 +36,95 @@ public class ServerPackageStoreTest
2936 public void Constructor_IgnoresAndDeletesInvalidCacheFile ( string content )
3037 {
3138 // Arrange
32- var fileName = "store.json" ;
3339 var fileSystem = new Mock < IFileSystem > ( ) ;
3440 fileSystem
35- . Setup ( x => x . FileExists ( fileName ) )
41+ . Setup ( x => x . FileExists ( CacheFileName ) )
3642 . Returns ( true ) ;
3743 fileSystem
38- . Setup ( x => x . OpenFile ( fileName ) )
44+ . Setup ( x => x . OpenFile ( CacheFileName ) )
3945 . Returns ( ( ) => new MemoryStream ( Encoding . UTF8 . GetBytes ( content ) ) ) ;
4046
4147 // Act
42- var actual = new ServerPackageStore ( fileSystem . Object , fileName ) ;
48+ var actual = new ServerPackageStore ( fileSystem . Object , CacheFileName ) ;
4349
4450 // Assert
4551 Assert . Empty ( actual . GetAll ( ) ) ;
46- fileSystem . Verify ( x => x . DeleteFile ( fileName ) , Times . Once ) ;
52+ fileSystem . Verify ( x => x . DeleteFile ( CacheFileName ) , Times . Once ) ;
4753 }
4854
4955 [ Theory ]
5056 [ InlineData ( "{\" SchemaVersion\" :\" 2.0.0\" ,\" Packages\" :[]}" , 0 ) ]
51- [ InlineData ( "{\" SchemaVersion\" :\" 2.0.0\" ,\" Packages\" :[{\" Id\" :\" NuGet.Versioning \" ,\" Version\" :\" 3.5.0 \" }]}" , 1 ) ]
57+ [ InlineData ( "{\" SchemaVersion\" :\" 2.0.0\" ,\" Packages\" :[{\" Id\" :\" " + PackageId + " \" ,\" Version\" :\" " + PackageVersionString + " \" }]}", 1 ) ]
5258 public void Constructor_LeavesValidCacheFile ( string content , int count )
5359 {
5460 // Arrange
55- var fileName = "store.json" ;
5661 var fileSystem = new Mock < IFileSystem > ( ) ;
5762 fileSystem
58- . Setup ( x => x . FileExists ( fileName ) )
63+ . Setup ( x => x . FileExists ( CacheFileName ) )
5964 . Returns ( true ) ;
6065 fileSystem
61- . Setup ( x => x . OpenFile ( fileName ) )
66+ . Setup ( x => x . OpenFile ( CacheFileName ) )
6267 . Returns ( ( ) => new MemoryStream ( Encoding . UTF8 . GetBytes ( content ) ) ) ;
6368
6469 // Act
65- var actual = new ServerPackageStore ( fileSystem . Object , fileName ) ;
70+ var actual = new ServerPackageStore ( fileSystem . Object , CacheFileName ) ;
6671
6772 // Assert
6873 Assert . Equal ( count , actual . GetAll ( ) . Count ( ) ) ;
6974 fileSystem . Verify ( x => x . DeleteFile ( It . IsAny < string > ( ) ) , Times . Never ) ;
7075 }
76+
77+ [ Fact ]
78+ public void Constructor_DeserializesSemVer2Version ( )
79+ {
80+ // Arrange
81+ var cacheFile = "{\" SchemaVersion\" :\" 2.0.0\" ,\" Packages\" :[{\" Id\" :\" " + PackageId + "\" ,\" Version\" :\" " + SemVer2VersionString + "\" }]}" ;
82+ var fileSystem = new Mock < IFileSystem > ( ) ;
83+ fileSystem
84+ . Setup ( x => x . FileExists ( CacheFileName ) )
85+ . Returns ( true ) ;
86+ fileSystem
87+ . Setup ( x => x . OpenFile ( CacheFileName ) )
88+ . Returns ( ( ) => new MemoryStream ( Encoding . UTF8 . GetBytes ( cacheFile ) ) ) ;
89+
90+ // Act
91+ var actual = new ServerPackageStore ( fileSystem . Object , CacheFileName ) ;
92+
93+ // Assert
94+ Assert . Equal ( 1 , actual . GetAll ( ) . Count ( ) ) ;
95+ var package = actual . GetAll ( ) . First ( ) ;
96+ Assert . Equal ( SemVer2Version . ToOriginalString ( ) , package . Version . ToOriginalString ( ) ) ;
97+ Assert . Equal ( SemVer2Version . ToFullString ( ) , package . Version . ToFullString ( ) ) ;
98+ Assert . Equal ( SemVer2Version . ToNormalizedString ( ) , package . Version . ToNormalizedString ( ) ) ;
99+ }
100+
101+ [ Fact ]
102+ public void Persist_RetainsSemVer2Version ( )
103+ {
104+ // Arrange
105+ var fileSystem = new Mock < IFileSystem > ( ) ;
106+ fileSystem
107+ . Setup ( x => x . FileExists ( CacheFileName ) )
108+ . Returns ( false ) ;
109+
110+ var memoryStream = new MemoryStream ( ) ;
111+ fileSystem
112+ . Setup ( x => x . CreateFile ( CacheFileName ) )
113+ . Returns ( memoryStream ) ;
114+
115+ var actual = new ServerPackageStore ( fileSystem . Object , CacheFileName ) ;
116+ actual . Store ( new ServerPackage
117+ {
118+ Id = PackageId ,
119+ Version = SemVer2Version
120+ } ) ;
121+
122+ // Act
123+ actual . Persist ( ) ;
124+
125+ // Assert
126+ var content = Encoding . UTF8 . GetString ( memoryStream . ToArray ( ) ) ;
127+ Assert . Contains ( SemVer2VersionString , content ) ;
128+ }
71129 }
72130}
0 commit comments