apps.factory.ts 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. import { faker } from '@faker-js/faker';
  2. import { AppCategoriesEnum, AppInfo, AppStatusEnum, FieldTypes } from '../apps.types';
  3. import config from '../../../config';
  4. import App from '../app.entity';
  5. interface IProps {
  6. installed?: boolean;
  7. status?: AppStatusEnum;
  8. requiredPort?: number;
  9. randomField?: boolean;
  10. }
  11. const createApp = async (props: IProps) => {
  12. const { installed = false, status = AppStatusEnum.RUNNING, requiredPort, randomField = false } = props;
  13. const categories = Object.values(AppCategoriesEnum);
  14. const appInfo: AppInfo = {
  15. id: faker.random.word().toLowerCase().trim(),
  16. port: faker.datatype.number({ min: 3000, max: 5000 }),
  17. available: true,
  18. form_fields: [
  19. {
  20. type: FieldTypes.text,
  21. label: faker.random.word(),
  22. required: true,
  23. env_variable: 'TEST_FIELD',
  24. },
  25. ],
  26. name: faker.random.word(),
  27. description: faker.random.words(),
  28. tipi_version: faker.datatype.number({ min: 1, max: 10 }),
  29. short_desc: faker.random.words(),
  30. author: faker.name.firstName(),
  31. source: faker.internet.url(),
  32. categories: [categories[faker.datatype.number({ min: 0, max: categories.length - 1 })]],
  33. };
  34. if (randomField) {
  35. appInfo.form_fields?.push({
  36. type: FieldTypes.random,
  37. label: faker.random.word(),
  38. env_variable: 'RANDOM_FIELD',
  39. });
  40. }
  41. if (requiredPort) {
  42. appInfo.requirements = {
  43. ports: [requiredPort],
  44. };
  45. }
  46. let MockFiles: any = {};
  47. MockFiles[`${config.ROOT_FOLDER}/.env`] = 'TEST=test';
  48. MockFiles[`${config.ROOT_FOLDER}/repos/repo-id`] = '';
  49. MockFiles[`${config.ROOT_FOLDER}/repos/repo-id/apps/${appInfo.id}/config.json`] = JSON.stringify(appInfo);
  50. MockFiles[`${config.ROOT_FOLDER}/repos/repo-id/apps/${appInfo.id}/docker-compose.yml`] = 'compose';
  51. MockFiles[`${config.ROOT_FOLDER}/repos/repo-id/apps/${appInfo.id}/metadata/description.md`] = 'md desc';
  52. let appEntity = new App();
  53. if (installed) {
  54. appEntity = await App.create({
  55. id: appInfo.id,
  56. config: { TEST_FIELD: 'test' },
  57. status,
  58. }).save();
  59. MockFiles[`${config.ROOT_FOLDER}/app-data/${appInfo.id}`] = '';
  60. MockFiles[`${config.ROOT_FOLDER}/app-data/${appInfo.id}/app.env`] = 'TEST=test\nAPP_PORT=3000\nTEST_FIELD=test';
  61. MockFiles[`${config.ROOT_FOLDER}/apps/${appInfo.id}/config.json`] = JSON.stringify(appInfo);
  62. MockFiles[`${config.ROOT_FOLDER}/apps/${appInfo.id}/metadata/description.md`] = 'md desc';
  63. }
  64. return { appInfo, MockFiles, appEntity };
  65. };
  66. export { createApp };