Initial implementation
This commit is contained in:
parent
cc603d35fe
commit
be1e9583f8
1 changed files with 4304 additions and 884 deletions
89
Tests/MCPTests/NotificationTests.swift
Normal file
89
Tests/MCPTests/NotificationTests.swift
Normal file
|
|
@ -0,0 +1,89 @@
|
|||
import Testing
|
||||
|
||||
import class Foundation.JSONDecoder
|
||||
import class Foundation.JSONEncoder
|
||||
|
||||
@testable import MCP
|
||||
|
||||
@Suite("Notification Tests")
|
||||
struct NotificationTests {
|
||||
struct TestNotification: Notification {
|
||||
struct Parameters: Codable, Hashable, Sendable {
|
||||
let event: String
|
||||
}
|
||||
static let name = "test.notification"
|
||||
}
|
||||
|
||||
struct InitializedNotification: Notification {
|
||||
static let name = "notifications/initialized"
|
||||
}
|
||||
|
||||
@Test("Notification initialization with parameters")
|
||||
func testNotificationWithParameters() throws {
|
||||
let params = TestNotification.Parameters(event: "test-event")
|
||||
let notification = TestNotification.message(params)
|
||||
|
||||
#expect(notification.method == TestNotification.name)
|
||||
#expect(notification.params.event == "test-event")
|
||||
|
||||
let encoder = JSONEncoder()
|
||||
let decoder = JSONDecoder()
|
||||
|
||||
let data = try encoder.encode(notification)
|
||||
let decoded = try decoder.decode(Message<TestNotification>.self, from: data)
|
||||
|
||||
#expect(decoded.method == notification.method)
|
||||
#expect(decoded.params.event == notification.params.event)
|
||||
}
|
||||
|
||||
@Test("Empty parameters notification")
|
||||
func testEmptyParametersNotification() throws {
|
||||
struct EmptyNotification: Notification {
|
||||
static let name = "empty.notification"
|
||||
}
|
||||
|
||||
let notification = EmptyNotification.message()
|
||||
|
||||
let encoder = JSONEncoder()
|
||||
let decoder = JSONDecoder()
|
||||
|
||||
let data = try encoder.encode(notification)
|
||||
let decoded = try decoder.decode(Message<EmptyNotification>.self, from: data)
|
||||
|
||||
#expect(decoded.method == notification.method)
|
||||
}
|
||||
|
||||
@Test("Initialized notification encoding")
|
||||
func testInitializedNotificationEncoding() throws {
|
||||
let notification = InitializedNotification.message()
|
||||
|
||||
let encoder = JSONEncoder()
|
||||
let decoder = JSONDecoder()
|
||||
|
||||
let data = try encoder.encode(notification)
|
||||
|
||||
// Verify the exact JSON structure
|
||||
let json = try JSONDecoder().decode([String: Value].self, from: data)
|
||||
#expect(json["jsonrpc"] == "2.0")
|
||||
#expect(json["method"] == "notifications/initialized")
|
||||
#expect(json.count == 2, "Should only contain jsonrpc and method fields")
|
||||
|
||||
// Verify we can decode it back
|
||||
let decoded = try decoder.decode(Message<InitializedNotification>.self, from: data)
|
||||
#expect(decoded.method == InitializedNotification.name)
|
||||
}
|
||||
|
||||
@Test("Initialized notification decoding")
|
||||
func testInitializedNotificationDecoding() throws {
|
||||
// Create a minimal JSON string
|
||||
let jsonString = """
|
||||
{"jsonrpc":"2.0","method":"notifications/initialized"}
|
||||
"""
|
||||
let data = jsonString.data(using: .utf8)!
|
||||
|
||||
let decoder = JSONDecoder()
|
||||
let decoded = try decoder.decode(Message<InitializedNotification>.self, from: data)
|
||||
|
||||
#expect(decoded.method == InitializedNotification.name)
|
||||
}
|
||||
}
|
||||
Loading…
Reference in a new issue