fix(registry): align OCI and RubyGems API behavior and improve npm search result ordering
This commit is contained in:
@@ -148,11 +148,16 @@ async function runGemCommand(
|
||||
cwd: string,
|
||||
includeAuth: boolean = true
|
||||
): Promise<{ stdout: string; stderr: string; exitCode: number }> {
|
||||
// When not including auth, use a temp HOME without credentials
|
||||
const effectiveHome = includeAuth ? gemHome : path.join(gemHome, 'noauth');
|
||||
if (!includeAuth) {
|
||||
fs.mkdirSync(effectiveHome, { recursive: true });
|
||||
}
|
||||
|
||||
// Prepare environment variables
|
||||
const envVars = [
|
||||
`HOME="${gemHome}"`,
|
||||
`HOME="${effectiveHome}"`,
|
||||
`GEM_HOME="${gemHome}"`,
|
||||
includeAuth ? '' : 'RUBYGEMS_API_KEY=""',
|
||||
].filter(Boolean).join(' ');
|
||||
|
||||
// Build command with cd to correct directory and environment variables
|
||||
@@ -360,31 +365,33 @@ tap.test('RubyGems CLI: should unyank a version', async () => {
|
||||
const gemName = 'test-gem-cli';
|
||||
const version = '1.0.0';
|
||||
|
||||
const result = await runGemCommand(
|
||||
`gem yank ${gemName} -v ${version} --undo --host ${registryUrl}/rubygems`,
|
||||
testDir
|
||||
// Use PUT /api/v1/gems/unyank via HTTP API (gem yank --undo removed in Ruby 4.0)
|
||||
const response = await fetch(
|
||||
`${registryUrl}/rubygems/api/v1/gems/unyank?gem_name=${gemName}&version=${version}`,
|
||||
{
|
||||
method: 'PUT',
|
||||
headers: {
|
||||
'Authorization': rubygemsToken,
|
||||
},
|
||||
}
|
||||
);
|
||||
console.log('gem unyank output:', result.stdout);
|
||||
console.log('gem unyank stderr:', result.stderr);
|
||||
console.log('gem unyank status:', response.status);
|
||||
|
||||
expect(result.exitCode).toEqual(0);
|
||||
expect(response.status).toEqual(200);
|
||||
|
||||
// Verify version is not yanked in /versions file
|
||||
const response = await fetch(`${registryUrl}/rubygems/versions`);
|
||||
const versionsData = await response.text();
|
||||
const versionsResponse = await fetch(`${registryUrl}/rubygems/versions`);
|
||||
const versionsData = await versionsResponse.text();
|
||||
console.log('Versions after unyank:', versionsData);
|
||||
|
||||
// Should not have '-' prefix anymore (or have both without prefix)
|
||||
// Check that we have the version without yank marker
|
||||
// Should not have '-' prefix anymore
|
||||
const lines = versionsData.trim().split('\n');
|
||||
const gemLine = lines.find(line => line.startsWith(gemName));
|
||||
|
||||
if (gemLine) {
|
||||
// Parse format: "gemname version[,version...] md5"
|
||||
const parts = gemLine.split(' ');
|
||||
const versions = parts[1];
|
||||
|
||||
// Should have 1.0.0 without '-' prefix
|
||||
expect(versions).toContain('1.0.0');
|
||||
expect(versions).not.toContain('-1.0.0');
|
||||
}
|
||||
|
||||
@@ -324,13 +324,9 @@ tap.test('RubyGems: should retrieve versions JSON (GET /rubygems/api/v1/versions
|
||||
expect(response.status).toEqual(200);
|
||||
expect(response.headers['Content-Type']).toEqual('application/json');
|
||||
const json = await streamToJson(response.body);
|
||||
expect(json).toBeTypeOf('object');
|
||||
|
||||
expect(json).toHaveProperty('name');
|
||||
expect(json.name).toEqual(testGemName);
|
||||
expect(json).toHaveProperty('versions');
|
||||
expect(json.versions).toBeTypeOf('object');
|
||||
expect(json.versions.length).toBeGreaterThan(0);
|
||||
expect(json).toBeInstanceOf(Array);
|
||||
expect(json.length).toBeGreaterThan(0);
|
||||
expect(json[0]).toHaveProperty('number');
|
||||
});
|
||||
|
||||
tap.test('RubyGems: should retrieve dependencies JSON (GET /rubygems/api/v1/dependencies)', async () => {
|
||||
|
||||
Reference in New Issue
Block a user