mirror of
https://github.com/RooVetGit/Roo-Code.git
synced 2026-09-07 08:26:51 +00:00
all package manager related tests passing together
This commit is contained in:
parent
c05d760747
commit
4c88e930e9
15 changed files with 78 additions and 79 deletions
13
esbuild.js
13
esbuild.js
|
|
@ -177,19 +177,6 @@ const extensionConfig = {
|
|||
build.onResolve({ filter: /^pkce-challenge$/ }, (args) => {
|
||||
return { path: require.resolve("pkce-challenge/dist/index.browser.js") }
|
||||
})
|
||||
|
||||
// Handle @package-manager barrel file
|
||||
build.onResolve({ filter: /^@package-manager$/ }, (args) => {
|
||||
const resolvedPath = path.resolve(__dirname, "src/services/package-manager/index.ts")
|
||||
return { path: resolvedPath }
|
||||
})
|
||||
|
||||
// Handle @package-manager/* paths
|
||||
build.onResolve({ filter: /^@package-manager\// }, (args) => {
|
||||
const modulePath = args.path.replace(/^@package-manager\//, "")
|
||||
const fullPath = path.resolve(__dirname, "src/services/package-manager", `${modulePath}.ts`)
|
||||
return { path: fullPath }
|
||||
})
|
||||
},
|
||||
},
|
||||
],
|
||||
|
|
|
|||
|
|
@ -9,8 +9,8 @@ import {
|
|||
PackageManagerSource,
|
||||
validateSources,
|
||||
ValidationError,
|
||||
} from "@package-manager"
|
||||
import { DEFAULT_PACKAGE_MANAGER_SOURCE } from "@package-manager/constants"
|
||||
} from "../../services/package-manager"
|
||||
import { DEFAULT_PACKAGE_MANAGER_SOURCE } from "../../services/package-manager/constants"
|
||||
import { GlobalState } from "../../schemas"
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -3,15 +3,10 @@ import * as path from "path"
|
|||
import * as fs from "fs/promises"
|
||||
import * as yaml from "js-yaml"
|
||||
import simpleGit, { SimpleGit } from "simple-git"
|
||||
import { MetadataScanner } from "@package-manager/MetadataScanner"
|
||||
import { validateAnyMetadata } from "@package-manager/schemas"
|
||||
import {
|
||||
LocalizationOptions,
|
||||
PackageManagerItem,
|
||||
PackageManagerRepository,
|
||||
RepositoryMetadata,
|
||||
} from "@package-manager/types"
|
||||
import { getUserLocale } from "@package-manager/utils"
|
||||
import { MetadataScanner } from "./MetadataScanner"
|
||||
import { validateAnyMetadata } from "./schemas"
|
||||
import { LocalizationOptions, PackageManagerItem, PackageManagerRepository, RepositoryMetadata } from "./types"
|
||||
import { getUserLocale } from "./utils"
|
||||
|
||||
/**
|
||||
* Handles fetching and caching package manager repositories
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ import * as fs from "fs/promises"
|
|||
import * as vscode from "vscode"
|
||||
import * as yaml from "js-yaml"
|
||||
import { SimpleGit } from "simple-git"
|
||||
import { validateAnyMetadata } from "@package-manager/schemas"
|
||||
import { validateAnyMetadata } from "./schemas"
|
||||
import {
|
||||
ComponentMetadata,
|
||||
ComponentType,
|
||||
|
|
@ -11,8 +11,8 @@ import {
|
|||
LocalizedMetadata,
|
||||
PackageManagerItem,
|
||||
PackageMetadata,
|
||||
} from "@package-manager/types"
|
||||
import { getUserLocale } from "@package-manager/utils"
|
||||
} from "./types"
|
||||
import { getUserLocale } from "./utils"
|
||||
|
||||
/**
|
||||
* Handles component discovery and metadata loading
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
import * as vscode from "vscode"
|
||||
import * as path from "path"
|
||||
import * as fs from "fs/promises"
|
||||
import { GitFetcher } from "@package-manager/GitFetcher"
|
||||
import { GitFetcher } from "./GitFetcher"
|
||||
import {
|
||||
PackageManagerItem,
|
||||
PackageManagerRepository,
|
||||
|
|
@ -9,8 +9,8 @@ import {
|
|||
ComponentType,
|
||||
ComponentMetadata,
|
||||
LocalizationOptions,
|
||||
} from "@package-manager/types"
|
||||
import { getUserLocale } from "@package-manager/utils"
|
||||
} from "./types"
|
||||
import { getUserLocale } from "./utils"
|
||||
|
||||
/**
|
||||
* Service for managing package manager data
|
||||
|
|
|
|||
|
|
@ -1,9 +1,9 @@
|
|||
import * as vscode from "vscode"
|
||||
import { GitFetcher } from "@package-manager/GitFetcher"
|
||||
import { GitFetcher } from "../GitFetcher"
|
||||
import * as fs from "fs/promises"
|
||||
import { Dirent, Stats } from "fs"
|
||||
import simpleGit, { SimpleGit } from "simple-git"
|
||||
import { MetadataScanner } from "@package-manager/MetadataScanner"
|
||||
import { MetadataScanner } from "../MetadataScanner"
|
||||
import { exec, ChildProcess } from "child_process"
|
||||
import { promisify } from "util"
|
||||
import { EventEmitter } from "events"
|
||||
|
|
|
|||
|
|
@ -1,9 +1,9 @@
|
|||
import * as path from "path"
|
||||
import * as fs from "fs/promises"
|
||||
import { Dirent } from "fs"
|
||||
import { MetadataScanner } from "@package-manager/MetadataScanner"
|
||||
import { MetadataScanner } from "../MetadataScanner"
|
||||
import { SimpleGit } from "simple-git"
|
||||
import { ComponentMetadata, LocalizationOptions, LocalizedMetadata, PackageMetadata } from "@package-manager/types"
|
||||
import { ComponentMetadata, LocalizationOptions, LocalizedMetadata, PackageMetadata } from "../types"
|
||||
|
||||
// Mock fs/promises
|
||||
jest.mock("fs/promises")
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
import { PackageManagerManager } from "@package-manager/PackageManagerManager"
|
||||
import { PackageManagerItem, PackageManagerSource, PackageManagerRepository } from "@package-manager/types"
|
||||
import { MetadataScanner } from "@package-manager/MetadataScanner"
|
||||
import { GitFetcher } from "@package-manager/GitFetcher"
|
||||
import { PackageManagerManager } from "../PackageManagerManager"
|
||||
import { PackageManagerItem, PackageManagerSource, PackageManagerRepository, ComponentType } from "../types"
|
||||
import { MetadataScanner } from "../MetadataScanner"
|
||||
import { GitFetcher } from "../GitFetcher"
|
||||
import * as path from "path"
|
||||
import * as vscode from "vscode"
|
||||
|
||||
|
|
@ -511,20 +511,49 @@ describe("Concurrency Control", () => {
|
|||
|
||||
let activeScans = 0
|
||||
let maxConcurrentScans = 0
|
||||
const scanPromises: Promise<void>[] = []
|
||||
|
||||
// Mock metadata scanner to track concurrent scans
|
||||
jest.spyOn(MetadataScanner.prototype, "scanDirectory").mockImplementation(async () => {
|
||||
// Create a mock MetadataScanner
|
||||
const mockScanner = new MetadataScanner()
|
||||
const scanDirectorySpy = jest.spyOn(mockScanner, "scanDirectory").mockImplementation(async () => {
|
||||
activeScans++
|
||||
maxConcurrentScans = Math.max(maxConcurrentScans, activeScans)
|
||||
await new Promise((resolve) => setTimeout(resolve, 50))
|
||||
const promise = new Promise<void>((resolve) => setTimeout(resolve, 50))
|
||||
scanPromises.push(promise)
|
||||
await promise
|
||||
activeScans--
|
||||
return []
|
||||
})
|
||||
|
||||
// Create a mock GitFetcher that uses our mock scanner
|
||||
const mockGitFetcher = new GitFetcher({
|
||||
globalStorageUri: { fsPath: "/test/path" },
|
||||
} as vscode.ExtensionContext)
|
||||
|
||||
// Replace GitFetcher's metadataScanner with our mock
|
||||
;(mockGitFetcher as any).metadataScanner = mockScanner
|
||||
|
||||
// Mock GitFetcher's fetchRepository to trigger metadata scanning
|
||||
jest.spyOn(mockGitFetcher, "fetchRepository").mockImplementation(async (repoUrl: string) => {
|
||||
// Call scanDirectory through our mock scanner
|
||||
await mockScanner.scanDirectory("/test/path", repoUrl)
|
||||
|
||||
return {
|
||||
metadata: { name: "test", description: "test", version: "1.0.0" },
|
||||
items: [],
|
||||
url: repoUrl,
|
||||
}
|
||||
})
|
||||
|
||||
// Replace the GitFetcher instance in the manager
|
||||
;(manager as any).gitFetcher = mockGitFetcher
|
||||
|
||||
// Process all sources
|
||||
await manager.getPackageManagerItems(sources)
|
||||
await Promise.all(scanPromises)
|
||||
|
||||
// Verify only one scan was active at a time
|
||||
// Verify scans were called and only one was active at a time
|
||||
expect(scanDirectorySpy).toHaveBeenCalledTimes(sources.length)
|
||||
expect(maxConcurrentScans).toBe(1)
|
||||
})
|
||||
})
|
||||
|
|
|
|||
|
|
@ -6,8 +6,8 @@ import {
|
|||
validateSource,
|
||||
validateSources,
|
||||
ValidationError,
|
||||
} from "@package-manager/PackageManagerSourceValidation"
|
||||
import { PackageManagerSource } from "@package-manager/types"
|
||||
} from "../PackageManagerSourceValidation"
|
||||
import { PackageManagerSource } from "../types"
|
||||
|
||||
describe("PackageManagerSourceValidation", () => {
|
||||
describe("isValidGitRepositoryUrl", () => {
|
||||
|
|
|
|||
|
|
@ -20,10 +20,7 @@
|
|||
"useDefineForClassFields": true,
|
||||
"useUnknownInCatchVariables": false,
|
||||
"baseUrl": ".",
|
||||
"paths": {
|
||||
"@package-manager": ["src/services/package-manager"],
|
||||
"@package-manager/*": ["src/services/package-manager/*"]
|
||||
}
|
||||
"paths": {}
|
||||
},
|
||||
"include": ["src/**/*", "scripts/**/*", ".changeset/**/*"],
|
||||
"exclude": ["node_modules", ".vscode-test", "webview-ui"]
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ import { PackageManagerSource } from "../../../../src/services/package-manager/t
|
|||
import { Command, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList } from "cmdk"
|
||||
import { isFilterActive as checkFilterActive } from "./selectors"
|
||||
import { PackageManagerItemCard } from "./components/PackageManagerItemCard"
|
||||
import { useStateManager } from "./state/useStateManager"
|
||||
import { useStateManager } from "./useStateManager"
|
||||
|
||||
interface PackageManagerViewProps {
|
||||
onDone?: () => void
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
import { PackageManagerItem, PackageManagerSource } from "@package-manager/types"
|
||||
import { vscode } from "@/utils/vscode"
|
||||
import { WebviewMessage } from "@shared/WebviewMessage"
|
||||
import { PackageManagerItem, PackageManagerSource } from "../../../../src/services/package-manager/types"
|
||||
import { vscode } from "../../utils/vscode"
|
||||
import { WebviewMessage } from "../../../../src/shared/WebviewMessage"
|
||||
|
||||
export interface ViewState {
|
||||
allItems: PackageManagerItem[]
|
||||
|
|
@ -219,8 +219,15 @@ export class PackageManagerViewStateManager {
|
|||
})
|
||||
|
||||
if (isActive) {
|
||||
// In test environment, execute filter immediately
|
||||
if (process.env.NODE_ENV === "test") {
|
||||
// Always use debounce
|
||||
if (this.filterTimeoutId) {
|
||||
console.log("Clearing existing filter timeout")
|
||||
clearTimeout(this.filterTimeoutId)
|
||||
}
|
||||
|
||||
console.log("Setting up new filter timeout")
|
||||
this.filterTimeoutId = setTimeout(() => {
|
||||
console.log("Filter timeout executed, sending message")
|
||||
vscode.postMessage({
|
||||
type: "filterPackageManagerItems",
|
||||
filters: {
|
||||
|
|
@ -229,27 +236,8 @@ export class PackageManagerViewStateManager {
|
|||
tags: this.state.filters.tags.length > 0 ? this.state.filters.tags : undefined,
|
||||
},
|
||||
} as WebviewMessage)
|
||||
} else {
|
||||
// In production, use debounce
|
||||
if (this.filterTimeoutId) {
|
||||
console.log("Clearing existing filter timeout")
|
||||
clearTimeout(this.filterTimeoutId)
|
||||
}
|
||||
|
||||
console.log("Setting up new filter timeout")
|
||||
this.filterTimeoutId = setTimeout(() => {
|
||||
console.log("Filter timeout executed, sending message")
|
||||
vscode.postMessage({
|
||||
type: "filterPackageManagerItems",
|
||||
filters: {
|
||||
type: this.state.filters.type || undefined,
|
||||
search: this.state.filters.search || undefined,
|
||||
tags: this.state.filters.tags.length > 0 ? this.state.filters.tags : undefined,
|
||||
},
|
||||
} as WebviewMessage)
|
||||
this.filterTimeoutId = undefined
|
||||
}, this.FILTER_DEBOUNCE)
|
||||
}
|
||||
this.filterTimeoutId = undefined
|
||||
}, this.FILTER_DEBOUNCE)
|
||||
}
|
||||
console.log("=== UPDATE_FILTERS Finished ===")
|
||||
break
|
||||
|
|
@ -1,6 +1,10 @@
|
|||
import { PackageManagerViewStateManager } from "../PackageManagerViewStateManager"
|
||||
import { vscode } from "@/utils/vscode"
|
||||
import { ComponentType, PackageManagerItem, PackageManagerSource } from "@package-manager/types"
|
||||
import { vscode } from "../../../utils/vscode"
|
||||
import {
|
||||
ComponentType,
|
||||
PackageManagerItem,
|
||||
PackageManagerSource,
|
||||
} from "../../../../../src/services/package-manager/types"
|
||||
|
||||
const createTestItem = (overrides = {}): PackageManagerItem => ({
|
||||
name: "test",
|
||||
|
|
@ -22,7 +26,7 @@ const createTestSources = (): PackageManagerSource[] => [
|
|||
]
|
||||
|
||||
// Mock vscode.postMessage
|
||||
jest.mock("@/utils/vscode", () => ({
|
||||
jest.mock("../../../utils/vscode", () => ({
|
||||
vscode: {
|
||||
postMessage: jest.fn(),
|
||||
},
|
||||
|
|
@ -18,7 +18,6 @@
|
|||
"baseUrl": ".",
|
||||
"paths": {
|
||||
"@/*": ["./src/*"],
|
||||
"@package-manager/*": ["../src/services/package-manager/*"],
|
||||
"@shared/*": ["../src/shared/*"]
|
||||
}
|
||||
},
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue