Backend template with Core SDK and Web API.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

65 lines
1.9 KiB

  1. import { describe, it, expect, vi, beforeAll } from 'vitest';
  2. import { Cli, createCli } from '../src/cli';
  3. import { addCommands } from '../src/commands';
  4. import { AdderServiceImpl, InvalidArgumentTypeError, ArgumentOutOfRangeError } from '../src/modules/adder';
  5. vi.mock('process');
  6. describe('blah', () => {
  7. let cli: Cli;
  8. beforeAll(() => {
  9. cli = createCli();
  10. addCommands(cli);
  11. });
  12. it('returns result when successful', async () => {
  13. const response = await cli.test().run(['add', '1', '2']);
  14. expect(response.exitCode).toBe(0);
  15. });
  16. it('returns error when given invalid inputs', async () => {
  17. vi.spyOn(AdderServiceImpl.prototype, 'addNumbers').mockImplementationOnce(() => {
  18. throw new InvalidArgumentTypeError('Invalid input');
  19. });
  20. const response = await cli.test().run(['add', '1', '2']);
  21. expect(response.exitCode).toBe(-1);
  22. });
  23. it('returns error when given out-of-range inputs', async () => {
  24. vi.spyOn(AdderServiceImpl.prototype, 'addNumbers').mockImplementationOnce(() => {
  25. throw new ArgumentOutOfRangeError('Out of range');
  26. });
  27. const response = await cli.test().run(['add', '1', '2']);
  28. expect(response.exitCode).toBe(-2);
  29. });
  30. it('returns error when an unexpected error occurs', async () => {
  31. vi.spyOn(AdderServiceImpl.prototype, 'addNumbers').mockImplementationOnce(() => {
  32. throw new Error('Unexpected error');
  33. });
  34. const response = await cli.test().run(['add', '1', '2']);
  35. expect(response.exitCode).toBe(-3);
  36. });
  37. it('returns error when given insufficient arguments', async () => {
  38. const response = await cli.test().run(['add', '1']);
  39. expect(response.exitCode).toBe(-1);
  40. });
  41. describe('on interactive mode', () => {
  42. it('prompts values for insufficient arguments', async () => {
  43. const response = await cli
  44. .test()
  45. .promptValue({
  46. a: '1',
  47. b: '2',
  48. })
  49. .run(['add', '-i']);
  50. expect(response.exitCode).not.toBe(-1);
  51. });
  52. });
  53. });