mirror of
https://github.com/pnpm/pnpm.git
synced 2026-05-31 20:20:35 -04:00
154 lines
4.0 KiB
TypeScript
154 lines
4.0 KiB
TypeScript
import { describe, expect, test } from '@jest/globals'
|
|
|
|
import {
|
|
AuthBase64DecodeError,
|
|
AuthMissingSeparatorError,
|
|
type Creds,
|
|
parseCreds,
|
|
TokenHelperUnsupportedCharacterError,
|
|
} from '../src/parseCreds.js'
|
|
|
|
describe('parseCreds', () => {
|
|
test('empty object', () => {
|
|
expect(parseCreds({})).toBeUndefined()
|
|
})
|
|
|
|
test('authToken', () => {
|
|
expect(parseCreds({
|
|
authToken: 'example auth token',
|
|
})).toStrictEqual({
|
|
authToken: 'example auth token',
|
|
} as Creds)
|
|
})
|
|
|
|
test('empty authToken is treated as absent', () => {
|
|
// Reachable path via loadNpmrcFiles when an unresolved `${VAR}` placeholder
|
|
// is dropped to empty. Must not surface as a usable token.
|
|
expect(parseCreds({ authToken: '' })).toBeUndefined()
|
|
})
|
|
|
|
test('authPairBase64', () => {
|
|
expect(parseCreds({
|
|
authPairBase64: btoa('foo:bar'),
|
|
})).toStrictEqual({
|
|
basicAuth: {
|
|
username: 'foo',
|
|
password: 'bar',
|
|
},
|
|
} as Creds)
|
|
|
|
expect(parseCreds({
|
|
authPairBase64: btoa('foo:bar:baz'),
|
|
})).toStrictEqual({
|
|
basicAuth: {
|
|
username: 'foo',
|
|
password: 'bar:baz',
|
|
},
|
|
} as Creds)
|
|
})
|
|
|
|
test('authPairBase64 must have a separator', () => {
|
|
expect(() => parseCreds({
|
|
authPairBase64: btoa('foo'),
|
|
})).toThrow(new AuthMissingSeparatorError())
|
|
})
|
|
|
|
test('authPairBase64 allows redundant trailing padding', () => {
|
|
expect(parseCreds({
|
|
authPairBase64: `${btoa('foo:bar')}=`,
|
|
})).toStrictEqual({
|
|
basicAuth: {
|
|
username: 'foo',
|
|
password: 'bar',
|
|
},
|
|
} as Creds)
|
|
})
|
|
|
|
test('authPairBase64 must be base64', () => {
|
|
expect(() => parseCreds({
|
|
authPairBase64: 'foo*bar',
|
|
})).toThrow(new AuthBase64DecodeError('_auth'))
|
|
})
|
|
|
|
test('authUsername and authPassword', () => {
|
|
expect(parseCreds({
|
|
authUsername: 'foo',
|
|
authPassword: btoa('bar'),
|
|
})).toStrictEqual({
|
|
basicAuth: {
|
|
username: 'foo',
|
|
password: 'bar',
|
|
},
|
|
} as Creds)
|
|
|
|
expect(parseCreds({
|
|
authUsername: 'foo',
|
|
})).toBeUndefined()
|
|
|
|
expect(parseCreds({
|
|
authPassword: 'bar',
|
|
})).toBeUndefined()
|
|
})
|
|
|
|
test('authPassword allows redundant trailing padding', () => {
|
|
expect(parseCreds({
|
|
authUsername: 'foo',
|
|
authPassword: `${btoa('bar')}=`,
|
|
})).toStrictEqual({
|
|
basicAuth: {
|
|
username: 'foo',
|
|
password: 'bar',
|
|
},
|
|
} as Creds)
|
|
})
|
|
|
|
test('authPassword must be base64', () => {
|
|
expect(() => parseCreds({
|
|
authUsername: 'foo',
|
|
authPassword: 'bar*baz',
|
|
})).toThrow(new AuthBase64DecodeError('_password'))
|
|
})
|
|
|
|
test('tokenHelper', () => {
|
|
expect(parseCreds({
|
|
tokenHelper: 'example-token-helper --foo --bar baz',
|
|
})).toStrictEqual({
|
|
tokenHelper: ['example-token-helper', '--foo', '--bar', 'baz'],
|
|
} as Creds)
|
|
|
|
expect(parseCreds({
|
|
tokenHelper: './example-token-helper.sh --foo --bar baz',
|
|
})).toStrictEqual({
|
|
tokenHelper: ['./example-token-helper.sh', '--foo', '--bar', 'baz'],
|
|
} as Creds)
|
|
|
|
expect(parseCreds({
|
|
tokenHelper: 'node ./example-token-helper.js --foo --bar baz',
|
|
})).toStrictEqual({
|
|
tokenHelper: ['node', './example-token-helper.js', '--foo', '--bar', 'baz'],
|
|
} as Creds)
|
|
|
|
expect(parseCreds({
|
|
tokenHelper: './example-token-helper.sh',
|
|
})).toStrictEqual({
|
|
tokenHelper: ['./example-token-helper.sh'],
|
|
} as Creds)
|
|
})
|
|
|
|
test('tokenHelper does not support environment variable', () => {
|
|
expect(() => parseCreds({
|
|
tokenHelper: 'example-token-helper $MY_VAR',
|
|
})).toThrow(new TokenHelperUnsupportedCharacterError('$'))
|
|
})
|
|
|
|
test('tokenHelper does not support quotations', () => {
|
|
expect(() => parseCreds({
|
|
tokenHelper: 'example-token-helper "hello world"',
|
|
})).toThrow(new TokenHelperUnsupportedCharacterError('"'))
|
|
|
|
expect(() => parseCreds({
|
|
tokenHelper: "example-token-helper 'hello world'",
|
|
})).toThrow(new TokenHelperUnsupportedCharacterError("'"))
|
|
})
|
|
})
|