@@ -886,8 +886,37 @@ struct ErrorSimulator {
886886 let serverId = " server-test-suite "
887887 var statusCode : Int = 401
888888 var shouldPerformRequest : Bool = false
889-
890- mutating func stubResponse( _ url: URL ) -> HTTPURLResponse ? {
889+ let stubData : Data ?
890+
891+ init ( value: Int , description: String , statusCode: Int , shouldPerformRequest: Bool , stubData: Data ? ) {
892+ self . value = value
893+ self . description = description
894+ self . statusCode = statusCode
895+ self . shouldPerformRequest = shouldPerformRequest
896+ self . stubData = stubData
897+ }
898+
899+ init ( value: Int , description: String , statusCode: Int , shouldPerformRequest: Bool , stubDataDict: [ String : Any ] ? = nil ) {
900+ self . value = value
901+ self . description = description
902+ self . statusCode = statusCode
903+ self . shouldPerformRequest = shouldPerformRequest
904+ if let stubDataDict {
905+ self . stubData = stubDataDict. data ( )
906+ } else {
907+ let jsonObject : [ String : Any ] = [
908+ " error " : [
909+ " statusCode " : self . statusCode,
910+ " code " : self . value,
911+ " message " : self . description,
912+ " serverId " : self . serverId,
913+ ]
914+ ]
915+ self . stubData = jsonObject. data ( )
916+ }
917+ }
918+
919+ func stubResponse( _ url: URL ) -> HTTPURLResponse ? {
891920 return HTTPURLResponse ( url: url, statusCode: statusCode, httpVersion: " HTTP/1.1 " , headerFields: [
892921 " Content-Length " : String ( stubData? . count ?? 0 ) ,
893922 " Content-Type " : " application/json " ,
@@ -897,17 +926,12 @@ struct ErrorSimulator {
897926 ]
898927 )
899928 }
929+ }
900930
901- lazy var stubData : Data ? = {
902- let jsonObject : [ String : Any ] = [ " error " : [
903- " statusCode " : modf ( Float ( self . value) / 100 ) . 0 , //whole number part
904- " code " : self . value,
905- " message " : self . description,
906- " serverId " : self . serverId,
907- ] as [ String : Any ]
908- ]
909- return try ? JSONSerialization . data ( withJSONObject: jsonObject, options: JSONSerialization . WritingOptions. init ( rawValue: 0 ) )
910- } ( )
931+ extension [ String : Any ] {
932+ func data( ) -> Data ? {
933+ try ? JSONSerialization . data ( withJSONObject: self , options: JSONSerialization . WritingOptions. init ( rawValue: 0 ) )
934+ }
911935}
912936
913937class MockHTTPExecutor : NSObject , ARTHTTPExecutor {
@@ -1015,7 +1039,7 @@ class TestProxyHTTPExecutor: NSObject, ARTHTTPExecutor {
10151039 }
10161040 }
10171041
1018- if var simulatedError = errorSimulator, let requestURL = request. url {
1042+ if let simulatedError = errorSimulator, let requestURL = request. url {
10191043 defer {
10201044 errorSimulator = nil
10211045 }
@@ -1058,9 +1082,9 @@ class TestProxyHTTPExecutor: NSObject, ARTHTTPExecutor {
10581082 return task
10591083 }
10601084
1061- func simulateIncomingServerErrorOnNextRequest( _ errorValue: Int , description: String ) {
1085+ func simulateIncomingServerErrorOnNextRequest( _ errorValue: Int , statusCode : Int = 401 , description: String , data : [ String : Any ] ? = nil ) {
10621086 http. queue. sync {
1063- errorSimulator = ErrorSimulator ( value: errorValue, description: description, statusCode: 401 , shouldPerformRequest: false , stubData : nil )
1087+ errorSimulator = ErrorSimulator ( value: errorValue, description: description, statusCode: statusCode , shouldPerformRequest: false , stubDataDict : data )
10641088 }
10651089 }
10661090
@@ -1075,7 +1099,6 @@ class TestProxyHTTPExecutor: NSObject, ARTHTTPExecutor {
10751099 errorSimulator = ErrorSimulator ( value: 0 , description: " " , statusCode: 200 , shouldPerformRequest: false , stubData: data)
10761100 }
10771101 }
1078-
10791102}
10801103
10811104/// Records each message for test purpose.
0 commit comments