| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- // Copyright 2020 Google LLC
- //
- // Licensed under the Apache License, Version 2.0 (the "License");
- // you may not use this file except in compliance with the License.
- // You may obtain a copy of the License at
- //
- // http://www.apache.org/licenses/LICENSE-2.0
- //
- // Unless required by applicable law or agreed to in writing, software
- // distributed under the License is distributed on an "AS IS" BASIS,
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- // See the License for the specific language governing permissions and
- // limitations under the License.
- import Foundation
- #if SWIFT_PACKAGE
- import RemoteConfigFakeConsoleObjC
- #endif
- // Create a partial mock by subclassing the URLSessionDataTask.
- class URLSessionDataTaskMock: URLSessionDataTask {
- private let closure: () -> Void
- init(closure: @escaping () -> Void) {
- self.closure = closure
- }
- override func resume() {
- closure()
- }
- }
- class URLSessionMock: URLSession {
- typealias CompletionHandler = (Data?, URLResponse?, Error?) -> Void
- private let fakeConsole: FakeConsole
- init(with fakeConsole: FakeConsole) {
- self.fakeConsole = fakeConsole
- }
- // Properties to control what gets returned to the URLSession callback.
- // error could also be added here.
- var data: Data?
- var response: URLResponse?
- var etag = ""
- override func dataTask(with request: URLRequest,
- completionHandler: @escaping (Data?, URLResponse?, Error?) -> Void)
- -> URLSessionDataTask {
- let consoleValues = fakeConsole.get()
- if etag == "" || consoleValues["state"] as! String == RCNFetchResponseKeyStateUpdate {
- // Time string in microseconds to insure a different string from previous change.
- etag = String(NSDate().timeIntervalSince1970)
- }
- let jsonData = try! JSONSerialization.data(withJSONObject: consoleValues)
- let response = HTTPURLResponse(url: URL(fileURLWithPath: "fakeURL"),
- statusCode: 200,
- httpVersion: nil,
- headerFields: ["etag": etag])
- return URLSessionDataTaskMock {
- completionHandler(jsonData, response, nil)
- }
- }
- }
|