mirror of
https://github.com/anomalyco/opencode.git
synced 2026-08-07 07:03:20 +00:00
Co-authored-by: Luke Parker <10430890+Hona@users.noreply.github.com> Co-authored-by: opencode-agent[bot] <219766164+opencode-agent[bot]@users.noreply.github.com> Co-authored-by: Aarav Sareen <96787824+arvsrn@users.noreply.github.com> Co-authored-by: Brendan Allan <14191578+Brendonovich@users.noreply.github.com> Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com> Co-authored-by: Aiden Cline <rekram1-node@users.noreply.github.com> Co-authored-by: opencode <opencode@sst.dev> Co-authored-by: Jay <53023+jayair@users.noreply.github.com> Co-authored-by: David Hill <1879069+iamdavidhill@users.noreply.github.com> Co-authored-by: BB84 <110078428+BB-84C@users.noreply.github.com> Co-authored-by: Aiden Cline <aidenpcline@gmail.com> Co-authored-by: Dax <mail@thdxr.com> Co-authored-by: Brendan Allan <git@brendonovich.dev> Co-authored-by: Jay V <air@live.ca> Co-authored-by: Adam <2363879+adamdotdevin@users.noreply.github.com> Co-authored-by: Aiden Cline <63023139+rekram1-node@users.noreply.github.com> Co-authored-by: Dustin Deus <deusdustin@gmail.com> Co-authored-by: Frank <frank@anoma.ly> Co-authored-by: usrnk1 <7547651+usrnk1@users.noreply.github.com> Co-authored-by: Jack <jack@anoma.ly> Co-authored-by: Sebastian <hasta84@gmail.com> Co-authored-by: Jérôme Benoit <jerome.benoit@sap.com> Co-authored-by: Test User <test@test.com> Co-authored-by: Simon Klee <hello@simonklee.dk> Co-authored-by: Rahul A Mistry <149420892+ProdigyRahul@users.noreply.github.com> Co-authored-by: Qiping Li <liqiping1991@gmail.com> Co-authored-by: liqiping <liqiping@msh.team> Co-authored-by: OpeOginni <107570612+OpeOginni@users.noreply.github.com> Co-authored-by: Matthias Reso <13337103+mreso@users.noreply.github.com> Co-authored-by: tobwen <1864057+tobwen@users.noreply.github.com> Co-authored-by: Daniel Polito <danielbpolito@gmail.com> Co-authored-by: opencode <noreply@opencode.ai> Co-authored-by: Devin R Leopold <devin.leopold@gmail.com> Co-authored-by: Zach Bruggeman <mail@bruggie.com> Co-authored-by: Zach Bruggeman <zbruggeman@ramp.com> Co-authored-by: Kit Langton <kit.langton@gmail.com> Co-authored-by: David Siewert <david1gruppenplan@gmail.com> Co-authored-by: Andrei Dziahel <develop7@develop7.info> Co-authored-by: adityachaudhary99 <adityaachaudhary2003@gmail.com> Co-authored-by: Vladimir Glafirov <vglafirov@gitlab.com> Co-authored-by: Matt Carey <mcarey@cloudflare.com>
78 lines
2.7 KiB
TypeScript
78 lines
2.7 KiB
TypeScript
import { describe, expect, test } from "bun:test"
|
|
import type { Project } from "@opencode-ai/sdk/v2/client"
|
|
import type { SessionInfo } from "@opencode-ai/client/promise"
|
|
import { createRoot } from "solid-js"
|
|
import { createServerSessionEntries } from "@/components/command-palette"
|
|
import type { LocalProject } from "@/context/layout"
|
|
import { ServerConnection } from "@/context/server"
|
|
import { getProjectAvatarSource } from "@/pages/layout/helpers"
|
|
|
|
const stored: Project = {
|
|
id: "project-1",
|
|
name: "Palette project",
|
|
worktree: "/workspace/project",
|
|
sandboxes: [],
|
|
time: { created: 1, updated: 1 },
|
|
}
|
|
|
|
const session: SessionInfo = {
|
|
id: "session-1",
|
|
projectID: stored.id,
|
|
agent: "build",
|
|
model: { id: "model-1", providerID: "provider-1" },
|
|
cost: 0,
|
|
tokens: { input: 0, output: 0, reasoning: 0, cache: { read: 0, write: 0 } },
|
|
location: { directory: stored.worktree },
|
|
title: "Palette session",
|
|
time: { created: 1, updated: 2 },
|
|
}
|
|
|
|
describe("command palette sessions", () => {
|
|
test("uses the home project avatar and cancels superseded searches", async () => {
|
|
const server = ServerConnection.Key.make("selected-server")
|
|
const opened: LocalProject = {
|
|
...stored,
|
|
icon: { override: "home-project-avatar" },
|
|
expanded: true,
|
|
}
|
|
const searches: string[] = []
|
|
const result = await new Promise<Awaited<ReturnType<ReturnType<typeof createServerSessionEntries>>>>(
|
|
(resolve, reject) => {
|
|
createRoot((dispose) => {
|
|
const search = createServerSessionEntries({
|
|
server,
|
|
opened: () => [opened],
|
|
stored: () => [{ ...stored, icon: { url: "stored-project-avatar" } }],
|
|
load: async (text) => {
|
|
searches.push(text)
|
|
return {
|
|
data: [session, { ...session, id: "archived-session", time: { ...session.time, archived: 3 } }],
|
|
}
|
|
},
|
|
untitled: () => "Untitled",
|
|
category: () => "Sessions",
|
|
})
|
|
const first = search("palette")
|
|
const second = search("palette session")
|
|
Promise.all([first, second])
|
|
.then(([cancelled, entries]) => {
|
|
expect(cancelled).toEqual([])
|
|
resolve(entries)
|
|
})
|
|
.catch(reject)
|
|
.finally(dispose)
|
|
})
|
|
},
|
|
)
|
|
|
|
expect(searches).toEqual(["palette session"])
|
|
expect(result).toHaveLength(1)
|
|
expect(getProjectAvatarSource(result[0]?.project?.id, result[0]?.project?.icon)).toBe("home-project-avatar")
|
|
expect(result[0]).toMatchObject({
|
|
server,
|
|
sessionID: session.id,
|
|
description: stored.name,
|
|
project: { id: stored.id, icon: opened.icon },
|
|
})
|
|
})
|
|
})
|