@@ -132,3 +132,77 @@ pub async fn download_indirect_dependency(
132
132
133
133
Ok ( ( ) )
134
134
}
135
+
136
+ #[ cfg( test) ]
137
+ mod tests {
138
+ use std:: path:: PathBuf ;
139
+
140
+ use super :: * ;
141
+
142
+ fn create_folders ( ) -> PathBuf {
143
+ let id = Uuid :: new_v4 ( ) ;
144
+ let parent_folder = env:: temp_dir ( ) . join ( id. to_string ( ) ) ;
145
+ fs:: create_dir_all ( parent_folder. join ( "store" ) ) . expect ( "failed to create folder" ) ;
146
+ fs:: create_dir_all ( parent_folder. join ( "node_modules" ) ) . expect ( "failed to create folder" ) ;
147
+ parent_folder
148
+ }
149
+
150
+ #[ tokio:: test]
151
+ async fn ensure_organization_packages_work_as_indirect_dependency ( ) {
152
+ let parent_folder = create_folders ( ) ;
153
+ let store_path = parent_folder. join ( "store" ) ;
154
+ let node_modules_path = parent_folder. join ( "node_modules" ) ;
155
+ let symlink_path = node_modules_path. join ( "@fastify/error" ) ;
156
+
157
+ download_indirect_dependency (
158
+ "@fastify/error" ,
159
+ "3.3.0" ,
160
+ "https://registry.npmjs.org/@fastify/error/-/error-3.3.0.tgz" ,
161
+ & store_path. to_path_buf ( ) ,
162
+ & symlink_path. to_path_buf ( ) ,
163
+ )
164
+ . await
165
+ . unwrap ( ) ;
166
+
167
+ // Validate if we delete the tar.gz file
168
+ assert ! ( !store_path. join( format!( "@fastify+error@3.3.0.tar.gz" ) ) . exists( ) ) ;
169
+ // Make sure we create store path with normalized name
170
+ assert ! ( store_path. join( "@fastify+error@3.3.0" ) . is_dir( ) ) ;
171
+ // Make sure we create a symlink on node_modules folder
172
+ assert ! ( symlink_path. exists( ) ) ;
173
+ assert ! ( symlink_path. is_symlink( ) ) ;
174
+ //Make sure we create a @fastify folder inside node_modules
175
+ assert ! ( node_modules_path. join( "@fastify" ) . is_dir( ) ) ;
176
+
177
+ fs:: remove_dir_all ( & parent_folder) . unwrap ( ) ;
178
+ }
179
+
180
+ #[ tokio:: test]
181
+ async fn do_not_download_existing_indirect_dependency ( ) {
182
+ let parent_folder = create_folders ( ) ;
183
+ let store_path = parent_folder. join ( "store" ) ;
184
+ let node_modules_path = parent_folder. join ( "node_modules" ) ;
185
+ let symlink_path = node_modules_path. join ( "@fastify/error" ) ;
186
+
187
+ // Create a folder to check if we don't download
188
+ fs:: create_dir_all ( store_path. join ( "@fastify+error@3.3.0" ) ) . unwrap ( ) ;
189
+
190
+ // Deliberately put an invalid URL which fails when trying to download.
191
+ download_indirect_dependency (
192
+ "@fastify/error" ,
193
+ "3.3.0" ,
194
+ "https://!!!" ,
195
+ & store_path. to_path_buf ( ) ,
196
+ & symlink_path. to_path_buf ( ) ,
197
+ )
198
+ . await
199
+ . unwrap ( ) ;
200
+
201
+ // Make sure we create a symlink on node_modules folder
202
+ assert ! ( symlink_path. is_symlink( ) ) ;
203
+ //Make sure we create a @fastify folder inside node_modules
204
+ assert ! ( node_modules_path. join( "@fastify" ) . is_dir( ) ) ;
205
+
206
+ fs:: remove_dir_all ( & parent_folder) . unwrap ( ) ;
207
+ }
208
+ }
0 commit comments