import CodeGen from '../../../../src';
import { ResultDir } from '@ali/lowcode-types';

describe('public/publisher/disk/disk', () => {
  it('should works', async () => {
    const disk = CodeGen.publishers.disk({
      outputPath: 'demo-output',
      projectSlug: 'example-project',
    });

    const demoProject: ResultDir = {
      name: 'demo',
      dirs: [],
      files: [
        {
          name: 'package',
          ext: 'json',
          content: '{ "name": "demo", "version": "1.0.0" }',
        },
      ],
    };

    expect(disk.getOutputPath()).toMatchInlineSnapshot(`"demo-output"`);

    disk.setProject(demoProject);
    expect(disk.getProject()).toBeTruthy();

    expect(disk.getOutputPath()).toMatchInlineSnapshot(`"demo-output"`);
    expect(disk.setOutputPath('output')).toBe(undefined);
    expect(disk.getOutputPath()).toMatchInlineSnapshot(`"output"`);

    const publishRes = await disk.publish({
      project: demoProject,
    });

    expect(publishRes.success).toBeTruthy();
    expect(publishRes.payload).toBeTruthy();
  });

  it('should throws Error when project is missing', async () => {
    const disk = CodeGen.publishers.disk({});
    expect(disk.publish()).rejects.toBeTruthy();

    expect(() => {
      return disk.getProject();
    }).toThrowError(/MissingProject/);
  });
});
