CLI for Oblique Strategies.
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.

89 lines
2.1 KiB

  1. import * as obliqueStrategiesCore from '@theoryofnekomata/oblique-strategies-core';
  2. import {
  3. afterAll, afterEach,
  4. beforeAll, beforeEach,
  5. describe,
  6. expect,
  7. it, vi,
  8. } from 'vitest';
  9. import * as file from '../readers/file';
  10. import * as text from '../readers/text';
  11. import * as http from '../readers/http';
  12. import * as https from '../readers/https';
  13. import { main } from '../app';
  14. import * as presenters from '../presenters';
  15. vi.mock('@theoryofnekomata/oblique-strategies-core');
  16. vi.mock('chalk');
  17. vi.mock('wrap-ansi');
  18. vi.mock('../readers/file');
  19. vi.mock('../readers/http');
  20. vi.mock('../readers/https');
  21. vi.mock('../readers/text');
  22. vi.mock('../presenters');
  23. describe('readers', () => {
  24. let defaultConsole: typeof console;
  25. beforeAll(() => {
  26. defaultConsole = console;
  27. global.console = {
  28. log: () => {
  29. // noop
  30. },
  31. } as unknown as typeof console;
  32. });
  33. afterAll(() => {
  34. global.console = defaultConsole;
  35. });
  36. beforeAll(() => {
  37. vi.mocked(presenters.plain).mockReturnValue(vi.fn());
  38. });
  39. afterAll(() => {
  40. vi.mocked(presenters.plain).mockReset();
  41. });
  42. describe('default reader', () => {
  43. it('reads from default source', async () => {
  44. await main({
  45. cards: ['default'],
  46. formatted: false,
  47. presentation: 'plain',
  48. });
  49. expect(obliqueStrategiesCore.getDefaultCards).toBeCalled();
  50. });
  51. });
  52. describe.each([
  53. { type: 'file', prefix: 'file:///', reader: file },
  54. { type: 'text', prefix: 'text:', reader: text },
  55. { type: 'http', prefix: 'http://', reader: http },
  56. { type: 'https', prefix: 'https://', reader: https },
  57. ])('%s', ({ reader, prefix }) => {
  58. it('reads from source', async () => {
  59. await main({
  60. cards: [`${prefix}foo`],
  61. formatted: false,
  62. presentation: 'plain',
  63. });
  64. expect(reader.read).toBeCalled();
  65. });
  66. });
  67. describe('unknown reader', () => {
  68. it('throws an error', async () => {
  69. await expect(() => main({
  70. cards: ['unknown'],
  71. formatted: false,
  72. presentation: 'plain',
  73. }))
  74. .rejects
  75. .toThrowError();
  76. });
  77. });
  78. });