[READ-ONLY] Mirror of https://github.com/FoxxMD/komodo-import. Import existing compose stacks into Komodo
foxxmd.github.io/komodo-import
compose
docker
import
komodo
toml
4.9 kB
120 lines
1import { describe, it } from 'mocha';
2import chai, { expect } from 'chai';
3import { detectGitRepo, parseGitStatus } from '../src/common/utils/git.js';
4import { stripIndents } from 'common-tags';
5import withLocalTmpDir from 'with-local-tmp-dir';
6import { mkdir, writeFile, chmod, constants } from 'node:fs/promises';
7import path from "path";
8import { buildGitStack, BuildGitStackOptions } from '../src/builders/stack/gitStack.js';
9import { loggerTest } from "@foxxmd/logging";
10import chaiAsPromised from 'chai-as-promised';
11import git from 'isomorphic-git';
12import fs from 'fs';
13import { execa, Options } from 'execa';
14import { DEFAULT_KOMODO_ENV_NAME, parseEnvConfig } from '../src/builders/stack/stackUtils.js';
15
16chai.use(chaiAsPromised);
17
18const DEFAULT_SERVER = 'test-server';
19
20const defaultGitStandaloneConfig: BuildGitStackOptions = {
21 server: DEFAULT_SERVER,
22 logger: loggerTest
23}
24
25describe('#StackCommon', function () {
26
27 describe('#EnvironmentParsing', function () {
28
29 it(`does not include additional_env_files when no env files found`, async function () {
30 await withLocalTmpDir(async () => {
31 const dir = path.join(process.cwd(), 'test_1');
32
33 await mkdir(dir);
34 const data = await parseEnvConfig(dir, { logger: loggerTest });
35
36 expect(data.additional_env_files).to.be.undefined;
37 }, { unsafeCleanup: true });
38 });
39
40 it(`includes additional_env_files when env files found`, async function () {
41 await withLocalTmpDir(async () => {
42 const dir = path.join(process.cwd(), 'test_1');
43
44 await mkdir(dir);
45 await writeFile(path.join(dir, '.env'), '');
46 await mkdir(path.join(dir, 'nested'));
47 await writeFile(path.join(dir, 'nested', 'additional.env'), '');
48 const data = await parseEnvConfig(dir, { logger: loggerTest });
49
50 expect(data.additional_env_files).to.not.be.undefined;
51 expect(data.additional_env_files.length).eq(2);
52 expect(data.additional_env_files[0]).eq('.env');
53 expect(data.additional_env_files[1]).eq('nested/additional.env');
54 }, { unsafeCleanup: true });
55 });
56
57 it(`uses pathPrefix for additional_env_files`, async function () {
58 await withLocalTmpDir(async () => {
59 const dir = path.join(process.cwd(), 'test_1');
60
61 await mkdir(dir);
62 await writeFile(path.join(dir, '.env'), '');
63 const data = await parseEnvConfig(dir, { logger: loggerTest, pathPrefix: '/mytest' });
64
65 expect(data.additional_env_files).to.not.be.undefined;
66 expect(data.additional_env_files.length).eq(1);
67 expect(data.additional_env_files[0]).eq('/mytest/.env');
68 }, { unsafeCleanup: true });
69 });
70
71 it(`uses komodo env name when files found includes .env`, async function () {
72 await withLocalTmpDir(async () => {
73 const dir = path.join(process.cwd(), 'test_1');
74
75 await mkdir(dir);
76 await writeFile(path.join(dir, '.env'), '');
77 const data = await parseEnvConfig(dir, { logger: loggerTest });
78
79 expect(data.env_file_path).eq(DEFAULT_KOMODO_ENV_NAME)
80 }, { unsafeCleanup: true });
81 });
82
83 describe('When writeEnv is true', function () {
84
85 it(`writes env contents`, async function () {
86 await withLocalTmpDir(async () => {
87 const dir = path.join(process.cwd(), 'test_1');
88
89 await mkdir(dir);
90 await writeFile(path.join(dir, '.env'), stripIndents`MY_1ENV=foo
91 MY_2ENV=bar`);
92 const data = await parseEnvConfig(dir, { logger: loggerTest, writeEnv: true });
93
94 expect(data.env_file_path).to.be.undefined;
95 expect(data.environment).to.eq(`MY_1ENV=foo\nMY_2ENV=bar`)
96
97 }, { unsafeCleanup: true });
98 });
99
100 it(`writes multiple env contents`, async function () {
101 await withLocalTmpDir(async () => {
102 const dir = path.join(process.cwd(), 'test_1');
103
104 await mkdir(dir);
105 await writeFile(path.join(dir, '.env'), stripIndents`MY_1ENV=foo
106 MY_2ENV=bar`);
107 await writeFile(path.join(dir, 'additional.env'), stripIndents`MY_3ENV=foo
108 MY_4ENV=bar`);
109 const data = await parseEnvConfig(dir, { logger: loggerTest, writeEnv: true });
110
111 expect(data.env_file_path).to.be.undefined;
112 expect(data.environment).to.eq(`MY_3ENV=foo\nMY_4ENV=bar\nMY_1ENV=foo\nMY_2ENV=bar`)
113
114 }, { unsafeCleanup: true });
115 });
116
117 });
118
119 });
120});