feat(core): refactor project copies for v2 (#31943)
This commit is contained in:
@@ -34,7 +34,7 @@ function json<T>(response: HttpClientResponse.HttpClientResponse) {
|
||||
}
|
||||
|
||||
describe("project directories and copies endpoints", () => {
|
||||
type ProjectDirectory = { directory: string; type: "main" | "root" | "git_worktree" }
|
||||
type ProjectDirectory = { directory: string; strategy?: string }
|
||||
|
||||
it.instance(
|
||||
"lists directories and manages git worktree copies",
|
||||
@@ -44,7 +44,7 @@ describe("project directories and copies endpoints", () => {
|
||||
const current = yield* request(test.directory, "/project/current")
|
||||
const projectID = (yield* json<{ id: string }>(current)).id
|
||||
const base = `/project/${projectID}`
|
||||
const copies = `/experimental/project/${projectID}/copy`
|
||||
const copies = `/experimental/project/${projectID}/copy?location%5Bdirectory%5D=${encodeURIComponent(test.directory)}`
|
||||
const createdParent = path.join(test.directory, "..", path.basename(test.directory) + "-http-copy")
|
||||
const createdDirectory = path.join(createdParent, "copy")
|
||||
yield* Effect.addFinalizer(() =>
|
||||
@@ -53,7 +53,15 @@ describe("project directories and copies endpoints", () => {
|
||||
|
||||
const initial = yield* request(test.directory, `${base}/directories`)
|
||||
expect(initial.status).toBe(200)
|
||||
expect(yield* json<ProjectDirectory[]>(initial)).toEqual([{ directory: test.directory, type: "main" }])
|
||||
expect(yield* json<ProjectDirectory[]>(initial)).toEqual([{ directory: test.directory }])
|
||||
|
||||
const generated = yield* request(test.directory, `/experimental/project/${projectID}/copy/generate-name`, {
|
||||
method: "POST",
|
||||
headers: { "content-type": "application/json" },
|
||||
body: JSON.stringify({ context: undefined }),
|
||||
})
|
||||
expect(generated.status).toBe(200)
|
||||
expect((yield* json<{ name: string }>(generated)).name).toBeString()
|
||||
|
||||
const create = yield* request(test.directory, copies, {
|
||||
method: "POST",
|
||||
@@ -67,7 +75,7 @@ describe("project directories and copies endpoints", () => {
|
||||
const listed = yield* request(test.directory, `${base}/directories`)
|
||||
expect(yield* json<ProjectDirectory[]>(listed)).toContainEqual({
|
||||
directory: created.directory,
|
||||
type: "git_worktree",
|
||||
strategy: "git_worktree",
|
||||
})
|
||||
|
||||
yield* Effect.promise(() => Bun.write(path.join(created.directory, "dirty.txt"), "dirty"))
|
||||
@@ -94,14 +102,18 @@ describe("project directories and copies endpoints", () => {
|
||||
Effect.promise(() => fs.rm(externalDirectory, { recursive: true, force: true })).pipe(Effect.ignore),
|
||||
)
|
||||
yield* Effect.promise(() => $`git worktree add --detach ${externalDirectory} HEAD`.cwd(test.directory).quiet())
|
||||
const refresh = yield* request(test.directory, `${copies}/refresh`, {
|
||||
const refresh = yield* request(
|
||||
test.directory,
|
||||
`/experimental/project/${projectID}/copy/refresh?location%5Bdirectory%5D=${encodeURIComponent(test.directory)}`,
|
||||
{
|
||||
method: "POST",
|
||||
})
|
||||
},
|
||||
)
|
||||
expect(refresh.status).toBe(204)
|
||||
const refreshed = yield* request(test.directory, `${base}/directories`)
|
||||
expect(yield* json<ProjectDirectory[]>(refreshed)).toEqual([
|
||||
{ directory: externalDirectory, type: "git_worktree" },
|
||||
{ directory: test.directory, type: "main" },
|
||||
{ directory: externalDirectory, strategy: "git_worktree" },
|
||||
{ directory: test.directory },
|
||||
])
|
||||
}),
|
||||
{ git: true },
|
||||
|
||||
Reference in New Issue
Block a user