diff --git a/packages/pg-v5/commands/credentials/create.js b/packages/pg-v5/commands/credentials/create.js index e3a45fa429..b49db1dc7c 100644 --- a/packages/pg-v5/commands/credentials/create.js +++ b/packages/pg-v5/commands/credentials/create.js @@ -10,7 +10,7 @@ async function run(context, heroku) { const {app, args, flags} = context let db = await fetcher.addon(app, args.database) - if (util.essentialPlan(db)) throw new Error('You can’t perform this operation on Essential-tier databases.') + if (util.essentialPlan(db)) throw new Error("You can't create a custom credential on Essential-tier databases.") let data = { name: flags.name, diff --git a/packages/pg-v5/commands/credentials/destroy.js b/packages/pg-v5/commands/credentials/destroy.js index da6d4f88ec..e0c1ba38fd 100644 --- a/packages/pg-v5/commands/credentials/destroy.js +++ b/packages/pg-v5/commands/credentials/destroy.js @@ -16,7 +16,7 @@ async function run(context, heroku) { let db = await fetcher.addon(app, args.database) if (util.essentialPlan(db)) { - throw new Error('Essential-tier databases support only one default credential.') + throw new Error("You can't destroy the default credential on Essential-tier databases.") } let attachments = await heroku.get(`/addons/${db.name}/addon-attachments`) diff --git a/packages/pg-v5/commands/credentials/rotate.js b/packages/pg-v5/commands/credentials/rotate.js index cf08a244d2..d33f803e7c 100644 --- a/packages/pg-v5/commands/credentials/rotate.js +++ b/packages/pg-v5/commands/credentials/rotate.js @@ -16,8 +16,8 @@ async function run(context, heroku) { throw new Error('cannot pass both --all and --name') } - if (util.essentialPlan(db) && cred !== 'default') { - throw new Error('Essential-tier databases support only one default credential.') + if (util.essentialNumPlan(db) || (util.legacyEssentialPlan(db) && cred !== 'default')) { + throw new Error("You can't rotate credentials on Essential-tier databases.") } if (all && flags.force) { diff --git a/packages/pg-v5/commands/credentials/url.js b/packages/pg-v5/commands/credentials/url.js index 85f158a489..43c6c17ac5 100644 --- a/packages/pg-v5/commands/credentials/url.js +++ b/packages/pg-v5/commands/credentials/url.js @@ -12,8 +12,8 @@ async function run(context, heroku) { let db = await fetcher.addon(app, args.database) let cred = flags.name || 'default' - if (util.essentialPlan(db) && cred !== 'default') { - throw new Error('Essential-tier databases support only one default credential.') + if (util.essentialNumPlan(db) || (util.legacyEssentialPlan(db) && cred !== 'default')) { + throw new Error("You can't view credentials on Essential-tier databases.") } let credInfo = await heroku.get(`/postgres/v0/databases/${db.name}/credentials/${encodeURIComponent(cred)}`, diff --git a/packages/pg-v5/test/unit/commands/credentials/create.unit.test.js b/packages/pg-v5/test/unit/commands/credentials/create.unit.test.js index 03aed0a1ba..f00b751513 100644 --- a/packages/pg-v5/test/unit/commands/credentials/create.unit.test.js +++ b/packages/pg-v5/test/unit/commands/credentials/create.unit.test.js @@ -55,10 +55,31 @@ Please define the new grants for the credential within Postgres: heroku pg:psql .then(() => expect(cli.stderr).to.equal('Creating credential credname... done\n')) }) + it('throws an error when the db is numbered essential plan', () => { + const essentialAddon = { + name: 'postgres-1', + plan: {name: 'heroku-postgresql:essential-0'}, + } + + const fetcher = () => { + return { + database: () => db, + addon: () => essentialAddon, + } + } + + const cmd = proxyquire('../../../../commands/credentials/create', { + '../../lib/fetcher': fetcher, + }) + + const err = "You can't create a custom credential on Essential-tier databases." + return expect(cmd.run({app: 'myapp', args: {}, flags: {name: 'jeff'}})).to.be.rejectedWith(Error, err) + }) + it('throws an error when the db is essential plan', () => { const hobbyAddon = { name: 'postgres-1', - plan: {name: 'heroku-postgresql:hobby-dev'}, + plan: {name: 'heroku-postgresql:mini'}, } const fetcher = () => { @@ -72,7 +93,7 @@ Please define the new grants for the credential within Postgres: heroku pg:psql '../../lib/fetcher': fetcher, }) - const err = 'You can’t perform this operation on Essential-tier databases.' + const err = "You can't create a custom credential on Essential-tier databases." return expect(cmd.run({app: 'myapp', args: {}, flags: {name: 'jeff'}})).to.be.rejectedWith(Error, err) }) }) diff --git a/packages/pg-v5/test/unit/commands/credentials/destroy.unit.test.js b/packages/pg-v5/test/unit/commands/credentials/destroy.unit.test.js index ac5be5d4af..fa6e404a05 100644 --- a/packages/pg-v5/test/unit/commands/credentials/destroy.unit.test.js +++ b/packages/pg-v5/test/unit/commands/credentials/destroy.unit.test.js @@ -79,7 +79,28 @@ Database objects owned by credname will be assigned to the default credential. '../../lib/fetcher': fetcher, }) - const err = 'Essential-tier databases support only one default credential.' + const err = "You can't destroy the default credential on Essential-tier databases." + return expect(cmd.run({app: 'myapp', args: {}, flags: {name: 'jeff'}})).to.be.rejectedWith(Error, err) + }) + + it('throws an error when the db is numbered essential plan', () => { + const essentialAddon = { + name: 'postgres-1', + plan: {name: 'heroku-postgresql:essential-0'}, + } + + const fetcher = () => { + return { + database: () => db, + addon: () => essentialAddon, + } + } + + const cmd = proxyquire('../../../../commands/credentials/destroy', { + '../../lib/fetcher': fetcher, + }) + + const err = "You can't destroy the default credential on Essential-tier databases." return expect(cmd.run({app: 'myapp', args: {}, flags: {name: 'jeff'}})).to.be.rejectedWith(Error, err) }) diff --git a/packages/pg-v5/test/unit/commands/credentials/rotate.unit.test.js b/packages/pg-v5/test/unit/commands/credentials/rotate.unit.test.js index 6d8b474fa7..2a5e2f1eba 100644 --- a/packages/pg-v5/test/unit/commands/credentials/rotate.unit.test.js +++ b/packages/pg-v5/test/unit/commands/credentials/rotate.unit.test.js @@ -105,10 +105,10 @@ describe('pg:credentials:rotate', () => { return expect(cmd.run({app: 'myapp', args: {}, flags: {all: true, name: 'my_role', confirm: 'myapp'}})).to.be.rejectedWith(Error, err) }) - it('throws an error when the db is starter plan but the name is specified', () => { + it('throws an error when the db is essential plan but the name is specified', () => { const hobbyAddon = { name: 'postgres-1', - plan: {name: 'heroku-postgresql:hobby-dev'}, + plan: {name: 'heroku-postgresql:mini'}, } const fetcher = () => { @@ -122,7 +122,28 @@ describe('pg:credentials:rotate', () => { '../../lib/fetcher': fetcher, }) - const err = 'Essential-tier databases support only one default credential.' + const err = "You can't rotate credentials on Essential-tier databases." + return expect(cmd.run({app: 'myapp', args: {}, flags: {name: 'jeff'}})).to.be.rejectedWith(Error, err) + }) + + it('throws an error when the db is numbered essential plan', () => { + const essentialAddon = { + name: 'postgres-1', + plan: {name: 'heroku-postgresql:essential-0'}, + } + + const fetcher = () => { + return { + database: () => db, + addon: () => essentialAddon, + } + } + + const cmd = proxyquire('../../../../commands/credentials/rotate', { + '../../lib/fetcher': fetcher, + }) + + const err = "You can't rotate credentials on Essential-tier databases." return expect(cmd.run({app: 'myapp', args: {}, flags: {name: 'jeff'}})).to.be.rejectedWith(Error, err) }) diff --git a/packages/pg-v5/test/unit/commands/credentials/url.unit.test.js b/packages/pg-v5/test/unit/commands/credentials/url.unit.test.js index 2c7a858f52..7439555169 100644 --- a/packages/pg-v5/test/unit/commands/credentials/url.unit.test.js +++ b/packages/pg-v5/test/unit/commands/credentials/url.unit.test.js @@ -95,7 +95,28 @@ Connection URL: '../../lib/fetcher': fetcher, }) - const err = 'Essential-tier databases support only one default credential.' + const err = "You can't view credentials on Essential-tier databases." + return expect(cmd.run({app: 'myapp', args: {}, flags: {name: 'jeff'}})).to.be.rejectedWith(Error, err) + }) + + it('throws an error when the db is numbered essential plan', () => { + const essentialAddon = { + name: 'postgres-1', + plan: {name: 'heroku-postgresql:essential-0'}, + } + + const fetcher = () => { + return { + database: () => db, + addon: () => essentialAddon, + } + } + + const cmd = proxyquire('../../../../commands/credentials/url', { + '../../lib/fetcher': fetcher, + }) + + const err = "You can't view credentials on Essential-tier databases." return expect(cmd.run({app: 'myapp', args: {}, flags: {name: 'jeff'}})).to.be.rejectedWith(Error, err) })