|
13 | 13 | // limitations under the License.
|
14 | 14 |
|
15 | 15 | import FirebaseRemoteConfig
|
| 16 | +import FirebaseSharedSwift |
16 | 17 |
|
17 | 18 | import XCTest
|
18 | 19 |
|
@@ -206,4 +207,35 @@ class CodableTests: APITestBase {
|
206 | 207 | XCTAssertEqual(readDefaults.arrayValue, ["foo", "bar", "baz"])
|
207 | 208 | XCTAssertEqual(readDefaults.arrayIntValue, [1, 2, 0, 3])
|
208 | 209 | }
|
| 210 | + |
| 211 | + // MARK: - Test using injected encoder/decoder. |
| 212 | + |
| 213 | + func testDateEncodingAndDecodingWithNonDefaultCoders() throws { |
| 214 | + // Given |
| 215 | + struct DateDefaults: Codable { |
| 216 | + let date: Date |
| 217 | + } |
| 218 | + |
| 219 | + let defaults = DateDefaults(date: Date()) |
| 220 | + |
| 221 | + // When |
| 222 | + let encoder = FirebaseDataEncoder() |
| 223 | + encoder.dateEncodingStrategy = .iso8601 |
| 224 | + try config.setDefaults(from: defaults, encoder: encoder) |
| 225 | + |
| 226 | + // - Uses default decoder that won't decode ISO8601 format. |
| 227 | + let improperlyDecodedDefaults: DateDefaults = try config.decoded() |
| 228 | + XCTAssertNotEqual(improperlyDecodedDefaults.date, defaults.date) |
| 229 | + |
| 230 | + // Then |
| 231 | + let decoder = FirebaseDataDecoder() |
| 232 | + decoder.dateDecodingStrategy = .iso8601 |
| 233 | + |
| 234 | + let decodedDefaults: DateDefaults = try config.decoded(decoder: decoder) |
| 235 | + XCTAssert(Calendar.current.isDate( |
| 236 | + decodedDefaults.date, |
| 237 | + equalTo: defaults.date, |
| 238 | + toGranularity: .second |
| 239 | + )) |
| 240 | + } |
209 | 241 | }
|
0 commit comments