Fix decoding statuses on GtS with empty strings for urls
Closes #373 See #129
This commit is contained in:
parent
91d6430815
commit
8f6a012538
|
@ -51,8 +51,12 @@ public final class Status: StatusProtocol, Decodable, Sendable {
|
||||||
do {
|
do {
|
||||||
self.url = try container.decodeIfPresent(WebURL.self, forKey: .url)
|
self.url = try container.decodeIfPresent(WebURL.self, forKey: .url)
|
||||||
} catch {
|
} catch {
|
||||||
let s = (try? container.decode(String.self, forKey: .url)) ?? "<failed to decode string>"
|
let s = try? container.decode(String.self, forKey: .url)
|
||||||
throw DecodingError.dataCorruptedError(forKey: .url, in: container, debugDescription: "Could not decode URL '\(s)', reason: \(String(describing: error))")
|
if s == "" {
|
||||||
|
self.url = nil
|
||||||
|
} else {
|
||||||
|
throw DecodingError.dataCorrupted(.init(codingPath: container.codingPath + [CodingKeys.url], debugDescription: "Could not decode URL '\(s ?? "<failed to decode string>")'", underlyingError: error))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
self.account = try container.decode(Account.self, forKey: .account)
|
self.account = try container.decode(Account.self, forKey: .account)
|
||||||
self.inReplyToID = try container.decodeIfPresent(String.self, forKey: .inReplyToID)
|
self.inReplyToID = try container.decodeIfPresent(String.self, forKey: .inReplyToID)
|
||||||
|
|
|
@ -0,0 +1,53 @@
|
||||||
|
//
|
||||||
|
// StatusTests.swift
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// Created by Shadowfacts on 5/8/23.
|
||||||
|
//
|
||||||
|
|
||||||
|
import XCTest
|
||||||
|
@testable import Pachyderm
|
||||||
|
|
||||||
|
final class StatusTests: XCTestCase {
|
||||||
|
|
||||||
|
func testDecode() {
|
||||||
|
let data = """
|
||||||
|
{
|
||||||
|
"id": "1",
|
||||||
|
"uri": "https://example.com/a/1",
|
||||||
|
"url": "",
|
||||||
|
"account": {
|
||||||
|
"id": "2",
|
||||||
|
"username": "a",
|
||||||
|
"acct": "a",
|
||||||
|
"display_name": "",
|
||||||
|
"locked": false,
|
||||||
|
"created_at": 0,
|
||||||
|
"followers_count": 0,
|
||||||
|
"following_count": 0,
|
||||||
|
"statuses_count": 0,
|
||||||
|
"note": "",
|
||||||
|
"url": "https://example.com/a"
|
||||||
|
},
|
||||||
|
"content": "",
|
||||||
|
"created_at": 0,
|
||||||
|
"emojis": [],
|
||||||
|
"reblogs_count": 0,
|
||||||
|
"favourites_count": 0,
|
||||||
|
"sensitive": false,
|
||||||
|
"spoiler_text": "",
|
||||||
|
"visibility": "public",
|
||||||
|
"media_attachments": [],
|
||||||
|
"mentions": [],
|
||||||
|
"tags": []
|
||||||
|
}
|
||||||
|
""".data(using: .utf8)!
|
||||||
|
do {
|
||||||
|
_ = try JSONDecoder().decode(Status.self, from: data)
|
||||||
|
} catch {
|
||||||
|
print(error)
|
||||||
|
XCTFail()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue