project-name.test.js 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. import assert from 'node:assert/strict';
  2. import { describe, it } from 'node:test';
  3. import { projectName } from '../dist/index.js';
  4. import { setup } from './utils.js';
  5. describe('project name', async () => {
  6. const fixture = setup();
  7. it('pass in name', async () => {
  8. const context = { projectName: '', cwd: './foo/bar/baz', prompt: () => {} };
  9. await projectName(context);
  10. assert.equal(context.cwd, './foo/bar/baz');
  11. assert.equal(context.projectName, 'baz');
  12. });
  13. it('dot', async () => {
  14. const context = { projectName: '', cwd: '.', prompt: () => ({ name: 'foobar' }) };
  15. await projectName(context);
  16. assert.ok(fixture.hasMessage('"." is not empty!'));
  17. assert.equal(context.projectName, 'foobar');
  18. });
  19. it('dot slash', async () => {
  20. const context = { projectName: '', cwd: './', prompt: () => ({ name: 'foobar' }) };
  21. await projectName(context);
  22. assert.ok(fixture.hasMessage('"./" is not empty!'));
  23. assert.equal(context.projectName, 'foobar');
  24. });
  25. it('empty', async () => {
  26. const context = {
  27. projectName: '',
  28. cwd: './test/fixtures/empty',
  29. prompt: () => ({ name: 'foobar' }),
  30. };
  31. await projectName(context);
  32. assert.ok(!fixture.hasMessage('"./test/fixtures/empty" is not empty!'));
  33. assert.equal(context.projectName, 'empty');
  34. });
  35. it('not empty', async () => {
  36. const context = {
  37. projectName: '',
  38. cwd: './test/fixtures/not-empty',
  39. prompt: () => ({ name: 'foobar' }),
  40. };
  41. await projectName(context);
  42. assert.ok(fixture.hasMessage('"./test/fixtures/not-empty" is not empty!'));
  43. assert.equal(context.projectName, 'foobar');
  44. });
  45. it('basic', async () => {
  46. const context = { projectName: '', cwd: '', prompt: () => ({ name: 'foobar' }) };
  47. await projectName(context);
  48. assert.equal(context.cwd, 'foobar');
  49. assert.equal(context.projectName, 'foobar');
  50. });
  51. it('blank space', async () => {
  52. const context = { projectName: '', cwd: '', prompt: () => ({ name: 'foobar' }) };
  53. await projectName(context);
  54. assert.equal(context.cwd, 'foobar');
  55. assert.equal(context.projectName, 'foobar');
  56. });
  57. it('normalize', async () => {
  58. const context = { projectName: '', cwd: '', prompt: () => ({ name: 'Invalid Name' }) };
  59. await projectName(context);
  60. assert.equal(context.cwd, 'Invalid Name');
  61. assert.equal(context.projectName, 'invalid-name');
  62. });
  63. it('remove leading/trailing dashes', async () => {
  64. const context = { projectName: '', cwd: '', prompt: () => ({ name: '(invalid)' }) };
  65. await projectName(context);
  66. assert.equal(context.projectName, 'invalid');
  67. });
  68. it('handles scoped packages', async () => {
  69. const context = { projectName: '', cwd: '', prompt: () => ({ name: '@astro/site' }) };
  70. await projectName(context);
  71. assert.equal(context.cwd, '@astro/site');
  72. assert.equal(context.projectName, '@astro/site');
  73. });
  74. it('--yes', async () => {
  75. const context = { projectName: '', cwd: './foo/bar/baz', yes: true, prompt: () => {} };
  76. await projectName(context);
  77. assert.equal(context.projectName, 'baz');
  78. });
  79. it('dry run with name', async () => {
  80. const context = {
  81. projectName: '',
  82. cwd: './foo/bar/baz',
  83. dryRun: true,
  84. prompt: () => {},
  85. };
  86. await projectName(context);
  87. assert.equal(context.projectName, 'baz');
  88. });
  89. it('dry run with dot', async () => {
  90. const context = {
  91. projectName: '',
  92. cwd: '.',
  93. dryRun: true,
  94. prompt: () => ({ name: 'foobar' }),
  95. };
  96. await projectName(context);
  97. assert.equal(context.projectName, 'foobar');
  98. });
  99. it('dry run with empty', async () => {
  100. const context = {
  101. projectName: '',
  102. cwd: './test/fixtures/empty',
  103. dryRun: true,
  104. prompt: () => ({ name: 'foobar' }),
  105. };
  106. await projectName(context);
  107. assert.equal(context.projectName, 'empty');
  108. });
  109. });