2026-06-04 02:29:23 -07:00
|
|
|
@testable import ForgejoKit
|
2026-02-28 11:10:51 -08:00
|
|
|
import Foundation
|
|
|
|
|
import Testing
|
|
|
|
|
|
|
|
|
|
struct FileContentTests {
|
|
|
|
|
private func makeFileContent(content: String?, encoding: String?) -> FileContent {
|
|
|
|
|
FileContent(
|
|
|
|
|
name: "test.txt",
|
|
|
|
|
path: "test.txt",
|
|
|
|
|
sha: "abc",
|
|
|
|
|
size: 100,
|
|
|
|
|
url: "https://example.com",
|
|
|
|
|
htmlUrl: "https://example.com",
|
|
|
|
|
gitUrl: "https://example.com",
|
|
|
|
|
downloadUrl: nil,
|
|
|
|
|
type: "file",
|
|
|
|
|
content: content,
|
2026-06-04 02:29:23 -07:00
|
|
|
encoding: encoding,
|
2026-02-28 11:10:51 -08:00
|
|
|
)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// MARK: - Base64 decoding
|
|
|
|
|
|
|
|
|
|
@Test func decodesBase64Content() {
|
|
|
|
|
let original = "Hello, World!"
|
|
|
|
|
let base64 = Data(original.utf8).base64EncodedString()
|
|
|
|
|
let file = makeFileContent(content: base64, encoding: "base64")
|
|
|
|
|
#expect(file.decodedContent == "Hello, World!")
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Test func decodesBase64WithNewlines() {
|
|
|
|
|
let original = "Line one\nLine two\nLine three"
|
|
|
|
|
let base64 = Data(original.utf8).base64EncodedString()
|
|
|
|
|
let wrappedBase64 = String(base64.prefix(20)) + "\n" + String(base64.dropFirst(20))
|
|
|
|
|
let file = makeFileContent(content: wrappedBase64, encoding: "base64")
|
|
|
|
|
#expect(file.decodedContent == original)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Test func returnsNilContentWhenContentIsNil() {
|
|
|
|
|
let file = makeFileContent(content: nil, encoding: "base64")
|
|
|
|
|
#expect(file.decodedContent == nil)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Test func returnsRawContentWhenEncodingIsNil() {
|
|
|
|
|
let file = makeFileContent(content: "raw text", encoding: nil)
|
|
|
|
|
#expect(file.decodedContent == "raw text")
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Test func returnsRawContentWhenEncodingIsNotBase64() {
|
|
|
|
|
let file = makeFileContent(content: "raw text", encoding: "utf-8")
|
|
|
|
|
#expect(file.decodedContent == "raw text")
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Test func returnsNilForInvalidBase64() {
|
|
|
|
|
let file = makeFileContent(content: "!!!not-base64!!!", encoding: "base64")
|
|
|
|
|
#expect(file.decodedContent == nil)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// MARK: - JSON decoding
|
|
|
|
|
|
|
|
|
|
@Test func decodesFileContentFromJSON() throws {
|
|
|
|
|
let json = """
|
|
|
|
|
{
|
|
|
|
|
"name": "readme.md",
|
|
|
|
|
"path": "readme.md",
|
|
|
|
|
"sha": "xyz789",
|
|
|
|
|
"size": 50,
|
|
|
|
|
"url": "https://example.com/api",
|
|
|
|
|
"html_url": "https://example.com/html",
|
|
|
|
|
"git_url": "https://example.com/git",
|
|
|
|
|
"type": "file",
|
|
|
|
|
"content": "SGVsbG8=",
|
|
|
|
|
"encoding": "base64"
|
|
|
|
|
}
|
|
|
|
|
"""
|
|
|
|
|
let file = try JSONDecoder().decode(FileContent.self, from: Data(json.utf8))
|
|
|
|
|
#expect(file.name == "readme.md")
|
|
|
|
|
#expect(file.decodedContent == "Hello")
|
|
|
|
|
}
|
|
|
|
|
}
|