diff --git a/packages/arg-parser/src/arg-mapper.spec.ts b/packages/arg-parser/src/arg-mapper.spec.ts index 7aa593b55c..342ad9d245 100644 --- a/packages/arg-parser/src/arg-mapper.spec.ts +++ b/packages/arg-parser/src/arg-mapper.spec.ts @@ -77,8 +77,8 @@ describe('arg-mapper.mapCliToDriver', () => { context('when cli args have password', () => { it('maps to auth object', () => { - expect(optionsTest({ password: 'aphextwin' })).to.deep.equal({ - cs: 'mongodb://:aphextwin@localhost/' + expect(optionsTest({ password: 'aphextwin', username: 'x' })).to.deep.equal({ + cs: 'mongodb://x:aphextwin@localhost/' }); }); }); @@ -340,4 +340,21 @@ describe('arg-mapper.mapCliToDriver', () => { }); }); }); + + context('when password is provided without username', () => { + const cliOptions: CliOptions = { password: '1234' }; + + it('throws a helpful error', () => { + expect(() => optionsTest(cliOptions)).to.throw( + "[COMMON-10001] Invalid connection information: Password specified but no username provided (did you mean '--port' instead of '-p'?)"); + }); + }); + context('when password is provided without username and --port is already specified', () => { + const cliOptions: CliOptions = { password: '1234', port: '12345' }; + + it('throws a helpful error', () => { + expect(() => optionsTest(cliOptions)).to.throw( + '[COMMON-10001] Invalid connection information: Password specified but no username provided'); + }); + }); }); diff --git a/packages/arg-parser/src/arg-mapper.ts b/packages/arg-parser/src/arg-mapper.ts index 463987dcbf..fc2b95908b 100644 --- a/packages/arg-parser/src/arg-mapper.ts +++ b/packages/arg-parser/src/arg-mapper.ts @@ -1,3 +1,4 @@ +import { CommonErrors, MongoshInvalidInputError } from '@mongosh/errors'; import type { CliOptions, ConnectionInfo } from './'; import type { DevtoolsConnectOptions } from '@mongodb-js/devtools-connect'; import { ConnectionString, CommaAndColonSeparatedRecord } from 'mongodb-connection-string-url'; @@ -152,6 +153,8 @@ export function mapCliToDriver(options: Readonly, i: Readonly