Emcee
75 строк · 2.3 Кб
1import DateProviderTestHelpers
2import EmceeLogging
3import Kibana
4import SocketModels
5import TestHelpers
6import URLSessionTestHelpers
7import XCTest
8
9final class HttpKibanaClientTests: XCTestCase {
10lazy var client = assertDoesNotThrow {
11try HttpKibanaClient(
12dateProvider: dateProvider,
13endpoints: [.http(SocketAddress(host: "example.com", port: 42))],
14indexPattern: "index-pattern-thing",
15urlSession: urlSession
16)
17}
18lazy var dateProvider = DateProviderFixture(Date(timeIntervalSince1970: 100))
19lazy var urlSession = FakeURLSession()
20
21func test() throws {
22let dateComponents = DateComponents(
23calendar: Calendar(identifier: .gregorian),
24timeZone: TimeZone(secondsFromGMT: 3600),
25year: 1975,
26month: 11,
27day: 20,
28hour: 10,
29minute: 0,
30second: 42
31)
32dateProvider.result = assertNotNil { dateComponents.date }
33
34try client.send(
35level: "level",
36message: "message",
37metadata: [
38"one": "thing"
39]
40) { _ in }
41
42let urlTask = urlSession.providedDataTasks[0]
43let request = urlTask.originalTask.originalRequest
44
45XCTAssertEqual(request?.httpMethod, "POST")
46XCTAssertEqual(request?.url?.absoluteString, "http://example.com:42/index-pattern-thing/_doc")
47
48let bodyPayload = try JSONDecoder().decode([String: String].self, from: assertNotNil { request?.httpBody })
49
50assert {
51bodyPayload
52} equals: {
53[
54"message": "message",
55"level": "level",
56"@timestamp": "1975-11-20T09:00:42.000Z",
57"one": "thing",
58]
59}
60}
61
62func test___completion_is_called() throws {
63let completionCalled = XCTestExpectation(description: "completion called")
64
65try client.send(
66level: "level",
67message: "message",
68metadata: [:]
69) { _ in completionCalled.fulfill() }
70
71urlSession.providedDataTasks[0].completionHandler(nil, nil, nil)
72
73wait(for: [completionCalled], timeout: 0)
74}
75}
76
77