@@ -55,32 +55,65 @@ final class MockBundle {
5555 os_log ( " Request %@ not found on disk. Expected file name: %@ " , log: MockDuck . log, type: . debug, " \( request) " , fileName)
5656 }
5757
58- if
59- let targetURL = targetURL,
60- let targetLoadingURL = targetLoadingURL
61- {
62- let decoder = JSONDecoder ( )
63-
64- do {
65- let data = try Data ( contentsOf: targetURL)
66-
67- let loaded = try decoder. decode ( MockRequestResponse . self, from: data)
68- requestResponse. responseWrapper = loaded. responseWrapper
58+ if let loadedResponse = loadResponseFile ( targetURL: targetURL) {
59+ requestResponse. responseWrapper = loadedResponse. responseWrapper
60+ requestResponse. responseData = loadedResponse. responseData
61+ }
6962
70- // Load the response data if the format is supported.
71- // This should be the same filename with a different extension.
72- if let dataFileName = requestResponse. fileName ( for: . responseData) {
73- let dataURL = targetLoadingURL. appendingPathComponent ( dataFileName)
74- requestResponse. responseData = try Data ( contentsOf: dataURL)
63+ return false
64+ }
65+
66+ func loadResponseFile( targetURL: URL ? ) -> MockRequestResponse ? {
67+ guard let targetURL = targetURL else { return nil }
68+ let decoder = JSONDecoder ( )
69+
70+ do {
71+ let data = try Data ( contentsOf: targetURL)
72+
73+ var response = try decoder. decode ( MockRequestResponse . self, from: data)
74+
75+ // Load the response data if the format is supported.
76+ // This should be the same fil ename with a different extension.
77+ if let dataFileName = response. fileName ( for: . responseData) {
78+ let dataURL = targetURL. deletingLastPathComponent ( ) . appendingPathComponent ( dataFileName)
79+ response. responseData = try ? Data ( contentsOf: dataURL)
80+ }
81+
82+ return response
83+ } catch {
84+ os_log ( " Error decoding JSON: %@ " , log: MockDuck . log, type: . error, " \( error) " )
85+ }
86+ return nil
87+ }
88+
89+ func getResponses( for hostname: String ) -> [ MockRequestResponse ] {
90+ guard let baseURL = recordingURL else { return [ ] }
91+
92+ var responses = [ MockRequestResponse] ( )
93+ let targetURL = baseURL. appendingPathComponent ( hostname)
94+
95+ let results = FileManager . default. enumerator (
96+ at: targetURL,
97+ includingPropertiesForKeys: [ . isDirectoryKey] ,
98+ options: [ ] )
99+ if let results = results {
100+ for item in results {
101+ var isDir = ObjCBool ( false )
102+ if
103+ let item = item as? URL ,
104+ let attributes = try ? FileManager . default. fileExists (
105+ atPath: item. path,
106+ isDirectory: & isDir) ,
107+ !isDir. boolValue,
108+ !item. lastPathComponent. contains ( " -response " ) ,
109+ let response = loadResponseFile ( targetURL: item)
110+ {
111+ responses. append ( response)
75112 }
76-
77- return true
78- } catch {
79- os_log ( " Error decoding JSON: %@ " , log: MockDuck . log, type: . error, " \( error) " )
80113 }
81114 }
82-
83- return false
115+
116+ return responses
84117 }
85118
86119 /// If recording is enabled, this method saves the request to the filesystem. If the request
0 commit comments