1const t = require('tap')
2const { load: loadMockNpm } = require('../../fixtures/mock-npm.js')
3const MockRegistry = require('@npmcli/mock-registry')
4
5const pkgName = '@npmcli/test-package'
6const authToken = 'test-auth-token'
7const username = 'test-user'
8const auth = { '//registry.npmjs.org/:_authToken': authToken }
9
10t.test('no args', async t => {
11  const { npm } = await loadMockNpm(t)
12  await t.rejects(
13    npm.exec('unstar', []),
14    { code: 'EUSAGE' },
15    'should throw usage error'
16  )
17})
18
19t.test('unstar a package unicode:false', async t => {
20  const { npm, joinedOutput } = await loadMockNpm(t, {
21    config: { unicode: false, ...auth },
22  })
23  const registry = new MockRegistry({
24    tap: t,
25    registry: npm.config.get('registry'),
26    authorization: authToken,
27  })
28  const manifest = registry.manifest({ name: pkgName, users: { [username]: true } })
29  await registry.package({ manifest, query: { write: true } })
30  registry.whoami({ username })
31  registry.star(manifest, {})
32
33  await npm.exec('unstar', [pkgName])
34  t.equal(
35    joinedOutput(),
36    '( ) @npmcli/test-package',
37    'should output unstarred package msg'
38  )
39})
40
41t.test('unstar a package unicode:true', async t => {
42  const { npm, joinedOutput } = await loadMockNpm(t, {
43    config: { unicode: true, ...auth },
44  })
45
46  const registry = new MockRegistry({
47    tap: t,
48    registry: npm.config.get('registry'),
49    authorization: authToken,
50  })
51  const manifest = registry.manifest({ name: pkgName, users: { [username]: true } })
52  await registry.package({ manifest, query: { write: true } })
53  registry.whoami({ username })
54  registry.star(manifest, {})
55
56  await npm.exec('unstar', [pkgName])
57  t.equal(
58    joinedOutput(),
59    '☆  @npmcli/test-package',
60    'should output unstarred package msg'
61  )
62})
63