mirror of
https://github.com/wu736139669/hapi.git
synced 2026-10-14 20:26:05 +00:00
41 lines
2.0 KiB
Swift
41 lines
2.0 KiB
Swift
import Foundation
|
|
import HapiClient
|
|
import HapiProtocol
|
|
import Testing
|
|
|
|
struct RequestUserInputTests {
|
|
private func question(_ fields: String) throws -> RequestUserInputQuestion {
|
|
let input = try JSONDecoder().decode(JSONValue.self, from: Data("{\"questions\":[{\"id\":\"choice\",\(fields)}]}".utf8))
|
|
return try #require(parseRequestUserInputQuestions(input).first)
|
|
}
|
|
|
|
@Test func otherRequiresExplicitBooleanAndNonemptyOptions() throws {
|
|
for flag in ["true", "false", "null", "\"true\""] {
|
|
let question = try question("\"isOther\":\(flag),\"options\":[{\"label\":\"A\"}]")
|
|
#expect(question.isOther == (flag == "true"))
|
|
#expect(question.options.map(\.label) == ["A"])
|
|
#expect(question.answerOptions.map(\.label) == (flag == "true" ? ["A", "None of the above"] : ["A"]))
|
|
#expect(!question.isOtherOption(at: 0))
|
|
#expect(question.isOtherOption(at: 1) == (flag == "true"))
|
|
}
|
|
let missing = try question(#""options":[{"label":"A"}]"#)
|
|
#expect(!missing.isOther)
|
|
#expect(missing.answerOptions == missing.options)
|
|
let text = try question(#""isOther":true,"options":[]"#)
|
|
#expect(text.answerOptions.isEmpty)
|
|
#expect(!text.isOtherOption(at: 0))
|
|
#expect(!isRequestUserInputAnswered(text, selected: [], note: ""))
|
|
}
|
|
|
|
@Test func optionalNoteKeepsCanonicalOtherValue() throws {
|
|
let question = try question(#""isOther":true,"options":[{"label":"A"}]"#)
|
|
#expect(isRequestUserInputAnswered(question, selected: [requestUserInputOtherAnswer], note: ""))
|
|
#expect(!isRequestUserInputAnswered(question, selected: [], note: "custom answer"))
|
|
for note in ["", " \n ", " 自定义\n说明 "] {
|
|
let trimmed = note.trimmingCharacters(in: .whitespacesAndNewlines)
|
|
#expect(requestUserInputAnswerValues(selected: [requestUserInputOtherAnswer], note: note)
|
|
== ["None of the above"] + (trimmed.isEmpty ? [] : ["user_note: \(trimmed)"]))
|
|
}
|
|
}
|
|
}
|