mirror of
https://github.com/openclaw/openclaw.git
synced 2026-08-04 20:11:37 +00:00
177 lines
5.9 KiB
Swift
177 lines
5.9 KiB
Swift
import OpenClawChatUI
|
|
import OpenClawProtocol
|
|
import Testing
|
|
|
|
struct MacSessionObserverDigestTests {
|
|
@Test func `native chat sidebar accepts only the server reported run`() {
|
|
let session = OpenClawChatSessionEntry(
|
|
key: "agent:main:work",
|
|
kind: nil,
|
|
displayName: nil,
|
|
surface: nil,
|
|
subject: nil,
|
|
room: nil,
|
|
space: nil,
|
|
updatedAt: 100,
|
|
sessionId: nil,
|
|
systemSent: nil,
|
|
abortedLastRun: nil,
|
|
thinkingLevel: nil,
|
|
verboseLevel: nil,
|
|
inputTokens: nil,
|
|
outputTokens: nil,
|
|
totalTokens: nil,
|
|
modelProvider: nil,
|
|
model: nil,
|
|
contextTokens: nil,
|
|
status: "running",
|
|
hasActiveRun: true,
|
|
activeRunIds: ["run-1"])
|
|
let wrongRun = SessionObserverDigest(
|
|
sessionkey: session.key,
|
|
runid: "run-old",
|
|
revision: 5,
|
|
updatedat: 500,
|
|
headline: "Wrong run",
|
|
health: .stuck)
|
|
let accepted = SessionObserverDigest(
|
|
sessionkey: session.key,
|
|
runid: "run-1",
|
|
revision: 1,
|
|
updatedat: 600,
|
|
headline: "On track",
|
|
health: .onTrack)
|
|
|
|
let rejected = ChatSessionSidebarModel.applying(observerDigest: wrongRun, to: [session])
|
|
let updated = ChatSessionSidebarModel.applying(observerDigest: accepted, to: rejected)
|
|
|
|
#expect(rejected[0].observerDigest == nil)
|
|
#expect(updated[0].observerDigest?.headline == "On track")
|
|
#expect(ChatSessionSidebarModel.subtitle(for: updated[0], workSubtitle: "Work") == "On track")
|
|
}
|
|
|
|
@Test func `native chat sidebar rejects another agent global digest`() {
|
|
let session = OpenClawChatSessionEntry(
|
|
key: "global",
|
|
kind: "global",
|
|
displayName: nil,
|
|
surface: nil,
|
|
subject: nil,
|
|
room: nil,
|
|
space: nil,
|
|
updatedAt: 100,
|
|
sessionId: nil,
|
|
systemSent: nil,
|
|
abortedLastRun: nil,
|
|
thinkingLevel: nil,
|
|
verboseLevel: nil,
|
|
inputTokens: nil,
|
|
outputTokens: nil,
|
|
totalTokens: nil,
|
|
modelProvider: nil,
|
|
model: nil,
|
|
contextTokens: nil,
|
|
status: "running",
|
|
hasActiveRun: true,
|
|
activeRunIds: ["run-work"])
|
|
let other = SessionObserverDigest(
|
|
sessionkey: "global",
|
|
agentid: "main",
|
|
runid: "run-work",
|
|
revision: 1,
|
|
updatedat: 200,
|
|
headline: "Wrong owner",
|
|
health: .stuck)
|
|
let selected = SessionObserverDigest(
|
|
sessionkey: "global",
|
|
agentid: "work",
|
|
runid: "run-work",
|
|
revision: 1,
|
|
updatedat: 200,
|
|
headline: "Selected owner",
|
|
health: .onTrack)
|
|
let ownerless = SessionObserverDigest(
|
|
sessionkey: "global",
|
|
runid: "run-work",
|
|
revision: 1,
|
|
updatedat: 200,
|
|
headline: "Missing owner",
|
|
health: .stuck)
|
|
|
|
let rejected = ChatSessionSidebarModel.applying(
|
|
observerDigest: other,
|
|
to: [session],
|
|
activeAgentId: "work")
|
|
let rejectedOwnerless = ChatSessionSidebarModel.applying(
|
|
observerDigest: ownerless,
|
|
to: rejected,
|
|
activeAgentId: "work")
|
|
let accepted = ChatSessionSidebarModel.applying(
|
|
observerDigest: selected,
|
|
to: rejectedOwnerless,
|
|
activeAgentId: "work")
|
|
|
|
#expect(rejected[0].observerDigest == nil)
|
|
#expect(rejectedOwnerless[0].observerDigest == nil)
|
|
#expect(accepted[0].observerDigest?.headline == "Selected owner")
|
|
}
|
|
|
|
@Test func `changing the selected agent clears the previous global digest`() {
|
|
var session = OpenClawChatSessionEntry(
|
|
key: "global",
|
|
kind: "global",
|
|
displayName: nil,
|
|
surface: nil,
|
|
subject: nil,
|
|
room: nil,
|
|
space: nil,
|
|
updatedAt: 100,
|
|
sessionId: nil,
|
|
systemSent: nil,
|
|
abortedLastRun: nil,
|
|
thinkingLevel: nil,
|
|
verboseLevel: nil,
|
|
inputTokens: nil,
|
|
outputTokens: nil,
|
|
totalTokens: nil,
|
|
modelProvider: nil,
|
|
model: nil,
|
|
contextTokens: nil,
|
|
status: "running",
|
|
hasActiveRun: true,
|
|
activeRunIds: ["run-main"])
|
|
session.observerDigest = OpenClawChatSessionObserverDigest(
|
|
agentId: "main",
|
|
runId: "run-main",
|
|
revision: 4,
|
|
updatedAt: 400,
|
|
headline: "Main owner",
|
|
health: "on-track")
|
|
|
|
let disconnected = ChatSessionSidebarModel.clearingForeignGlobalObserverDigest(
|
|
in: [session],
|
|
activeAgentId: nil)
|
|
let switched = ChatSessionSidebarModel.clearingForeignGlobalObserverDigest(
|
|
in: [session],
|
|
activeAgentId: "work")
|
|
|
|
#expect(disconnected[0].observerDigest?.headline == "Main owner")
|
|
#expect(switched[0].observerDigest == nil)
|
|
|
|
session.observerDigest = OpenClawChatSessionObserverDigest(
|
|
runId: "run-work",
|
|
revision: 1,
|
|
updatedAt: 500,
|
|
headline: "Legacy selected owner",
|
|
health: "on-track")
|
|
let clearedLegacy = ChatSessionSidebarModel.clearingForeignGlobalObserverDigest(
|
|
in: [session],
|
|
activeAgentId: "work")
|
|
let adopted = ChatSessionSidebarModel.reconcilingGlobalObserverDigestOwner(
|
|
in: [session],
|
|
activeAgentId: "work")
|
|
#expect(clearedLegacy[0].observerDigest == nil)
|
|
#expect(adopted[0].observerDigest?.agentId == "work")
|
|
}
|
|
}
|