@@ -1150,6 +1150,64 @@ class ParseFileTests: XCTestCase { // swiftlint:disable:this type_body_length
11501150 #endif
11511151 }
11521152
1153+ func testFetchFileWithDirInName( ) throws {
1154+ // swiftlint:disable:next line_length
1155+ guard let parseFileURL = URL ( string: " http://localhost:1337/1/files/applicationId/d3a37aed0672a024595b766f97133615_logo.svg " ) else {
1156+ XCTFail ( " Should create URL " )
1157+ return
1158+ }
1159+ var parseFile = ParseFile ( name: " myFolder/d3a37aed0672a024595b766f97133615_logo.svg " , cloudURL: parseFileURL)
1160+ parseFile. url = parseFileURL
1161+
1162+ let response = FileUploadResponse ( name: " myFolder/d3a37aed0672a024595b766f97133615_logo.svg " ,
1163+ url: parseFileURL)
1164+ let encoded : Data !
1165+ do {
1166+ encoded = try ParseCoding . jsonEncoder ( ) . encode ( response)
1167+ } catch {
1168+ XCTFail ( " Should encode/decode. Error \( error) " )
1169+ return
1170+ }
1171+ MockURLProtocol . mockRequests { _ in
1172+ return MockURLResponse ( data: encoded, statusCode: 200 , delay: 0.0 )
1173+ }
1174+
1175+ let fetchedFile = try parseFile. fetch ( )
1176+ XCTAssertEqual ( fetchedFile. name, response. name)
1177+ XCTAssertEqual ( fetchedFile. url, response. url)
1178+ guard let localURL = fetchedFile. localURL else {
1179+ XCTFail ( " Should have unwrapped " )
1180+ return
1181+ }
1182+ XCTAssertFalse ( localURL. pathComponents. contains ( " myFolder " ) )
1183+
1184+ // Cache policy flakey on older Swift versions
1185+ #if compiler(>=5.5.0)
1186+ // Remove URL mocker so we can check cache
1187+ MockURLProtocol . removeAll ( )
1188+
1189+ let fetchedFile2 = try parseFile. fetch ( options: [ . cachePolicy( . returnCacheDataDontLoad) ] )
1190+ XCTAssertEqual ( fetchedFile2. name, fetchedFile. name)
1191+ XCTAssertEqual ( fetchedFile2. url, fetchedFile. url)
1192+ XCTAssertNotNil ( fetchedFile2. localURL)
1193+
1194+ // More cache tests
1195+ guard let currentMemoryUsage = URLSession . parse. configuration. urlCache? . currentMemoryUsage,
1196+ let currentDiskUsage = URLSession . parse. configuration. urlCache? . currentDiskUsage else {
1197+ XCTFail ( " Should have unwrapped " )
1198+ return
1199+ }
1200+ XCTAssertGreaterThan ( currentMemoryUsage, 0 )
1201+ XCTAssertGreaterThan ( currentDiskUsage, 0 )
1202+ ParseSwift . clearCache ( )
1203+ guard let updatedMemoryUsage = URLSession . parse. configuration. urlCache? . currentMemoryUsage else {
1204+ XCTFail ( " Should have unwrapped " )
1205+ return
1206+ }
1207+ XCTAssertLessThan ( updatedMemoryUsage, currentMemoryUsage)
1208+ #endif
1209+ }
1210+
11531211 func testFetchFileProgress( ) throws {
11541212 // swiftlint:disable:next line_length
11551213 guard let parseFileURL = URL ( string: " http://localhost:1337/1/files/applicationId/d3a37aed0672a024595b766f97133615_logo.svg " ) else {
0 commit comments