refactor: update shared to project

This commit is contained in:
Mauricio Siu
2024-11-17 18:33:14 -06:00
parent 2f175f0e44
commit ce2dce3401
2 changed files with 26 additions and 26 deletions

View File

@@ -7,13 +7,13 @@ DATABASE_URL=postgres://postgres:postgres@localhost:5432/project_db
PORT=3000 PORT=3000
`; `;
const serviceEnv = ` const serviceEnv = `
ENVIRONMENT=\${{shared.ENVIRONMENT}} ENVIRONMENT=\${{project.ENVIRONMENT}}
DATABASE_URL=\${{shared.DATABASE_URL}} DATABASE_URL=\${{project.DATABASE_URL}}
SERVICE_PORT=4000 SERVICE_PORT=4000
`; `;
describe("prepareEnvironmentVariables", () => { describe("prepareEnvironmentVariables", () => {
it("resolves shared variables correctly", () => { it("resolves project variables correctly", () => {
const resolved = prepareEnvironmentVariables(serviceEnv, projectEnv); const resolved = prepareEnvironmentVariables(serviceEnv, projectEnv);
expect(resolved).toEqual([ expect(resolved).toEqual([
@@ -23,24 +23,24 @@ describe("prepareEnvironmentVariables", () => {
]); ]);
}); });
it("handles undefined shared variables", () => { it("handles undefined project variables", () => {
const incompleteProjectEnv = ` const incompleteProjectEnv = `
NODE_ENV=production NODE_ENV=production
`; `;
const invalidServiceEnv = ` const invalidServiceEnv = `
UNDEFINED_VAR=\${{shared.UNDEFINED_VAR}} UNDEFINED_VAR=\${{project.UNDEFINED_VAR}}
`; `;
expect( expect(
() => () =>
prepareEnvironmentVariables(invalidServiceEnv, incompleteProjectEnv), // Cambiado el orden prepareEnvironmentVariables(invalidServiceEnv, incompleteProjectEnv), // Cambiado el orden
).toThrow("Invalid shared environment variable: shared.UNDEFINED_VAR"); ).toThrow("Invalid project environment variable: project.UNDEFINED_VAR");
}); });
it("allows service-specific variables to override shared variables", () => { it("allows service-specific variables to override project variables", () => {
const serviceSpecificEnv = ` const serviceSpecificEnv = `
ENVIRONMENT=production ENVIRONMENT=production
DATABASE_URL=\${{shared.DATABASE_URL}} DATABASE_URL=\${{project.DATABASE_URL}}
`; `;
const resolved = prepareEnvironmentVariables( const resolved = prepareEnvironmentVariables(
@@ -49,7 +49,7 @@ describe("prepareEnvironmentVariables", () => {
); );
expect(resolved).toEqual([ expect(resolved).toEqual([
"ENVIRONMENT=production", // Overrides shared variable "ENVIRONMENT=production", // Overrides project variable
"DATABASE_URL=postgres://postgres:postgres@localhost:5432/project_db", "DATABASE_URL=postgres://postgres:postgres@localhost:5432/project_db",
]); ]);
}); });
@@ -61,7 +61,7 @@ API_VERSION=v1
PORT=8000 PORT=8000
`; `;
const serviceEnv = ` const serviceEnv = `
API_ENDPOINT=\${{shared.BASE_URL}}/\${{shared.API_VERSION}}/endpoint API_ENDPOINT=\${{project.BASE_URL}}/\${{project.API_VERSION}}/endpoint
SERVICE_PORT=9000 SERVICE_PORT=9000
`; `;
const resolved = prepareEnvironmentVariables(serviceEnv, projectEnv); const resolved = prepareEnvironmentVariables(serviceEnv, projectEnv);
@@ -72,27 +72,27 @@ SERVICE_PORT=9000
]); ]);
}); });
it("handles missing shared variables gracefully", () => { it("handles missing project variables gracefully", () => {
const projectEnv = ` const projectEnv = `
PORT=8080 PORT=8080
`; `;
const serviceEnv = ` const serviceEnv = `
MISSING_VAR=\${{shared.MISSING_KEY}} MISSING_VAR=\${{project.MISSING_KEY}}
SERVICE_PORT=3000 SERVICE_PORT=3000
`; `;
expect(() => prepareEnvironmentVariables(serviceEnv, projectEnv)).toThrow( expect(() => prepareEnvironmentVariables(serviceEnv, projectEnv)).toThrow(
"Invalid shared environment variable: shared.MISSING_KEY", "Invalid project environment variable: project.MISSING_KEY",
); );
}); });
it("overrides shared variables with service-specific values", () => { it("overrides project variables with service-specific values", () => {
const projectEnv = ` const projectEnv = `
ENVIRONMENT=staging ENVIRONMENT=staging
DATABASE_URL=postgres://project:project@localhost:5432/project_db DATABASE_URL=postgres://project:project@localhost:5432/project_db
`; `;
const serviceEnv = ` const serviceEnv = `
ENVIRONMENT=\${{shared.ENVIRONMENT}} ENVIRONMENT=\${{project.ENVIRONMENT}}
DATABASE_URL=postgres://service:service@localhost:5432/service_db DATABASE_URL=postgres://service:service@localhost:5432/service_db
SERVICE_NAME=my-service SERVICE_NAME=my-service
`; `;
@@ -105,15 +105,15 @@ SERVICE_NAME=my-service
]); ]);
}); });
it("handles shared variables with normal and unusual characters", () => { it("handles project variables with normal and unusual characters", () => {
const projectEnv = ` const projectEnv = `
ENVIRONMENT=PRODUCTION ENVIRONMENT=PRODUCTION
`; `;
// Needs to be in quotes // Needs to be in quotes
const serviceEnv = ` const serviceEnv = `
NODE_ENV=\${{shared.ENVIRONMENT}} NODE_ENV=\${{project.ENVIRONMENT}}
SPECIAL_VAR="$^@$^@#$^@!#$@#$-\${{shared.ENVIRONMENT}}" SPECIAL_VAR="$^@$^@#$^@!#$@#$-\${{project.ENVIRONMENT}}"
`; `;
const resolved = prepareEnvironmentVariables(serviceEnv, projectEnv); const resolved = prepareEnvironmentVariables(serviceEnv, projectEnv);
@@ -131,8 +131,8 @@ APP_NAME=MyApp
`; `;
const serviceEnv = ` const serviceEnv = `
NODE_ENV=\${{shared.ENVIRONMENT}} NODE_ENV=\${{project.ENVIRONMENT}}
COMPLEX_VAR="Prefix-$#^!@-\${{shared.ENVIRONMENT}}--\${{shared.APP_NAME}} Suffix " COMPLEX_VAR="Prefix-$#^!@-\${{project.ENVIRONMENT}}--\${{project.APP_NAME}} Suffix "
`; `;
const resolved = prepareEnvironmentVariables(serviceEnv, projectEnv); const resolved = prepareEnvironmentVariables(serviceEnv, projectEnv);
@@ -149,8 +149,8 @@ COMPLEX_VAR="Prefix-$#^!@-\${{shared.ENVIRONMENT}}--\${{shared.APP_NAME}} Suffix
`; `;
const serviceEnv = ` const serviceEnv = `
NODE_ENV='\${{shared.ENVIRONMENT}}' NODE_ENV='\${{project.ENVIRONMENT}}'
COMPLEX_VAR='Prefix-$#^!@-\${{shared.ENVIRONMENT}}--\${{shared.APP_NAME}} Suffix' COMPLEX_VAR='Prefix-$#^!@-\${{project.ENVIRONMENT}}--\${{project.APP_NAME}} Suffix'
`; `;
const resolved = prepareEnvironmentVariables(serviceEnv, projectEnv); const resolved = prepareEnvironmentVariables(serviceEnv, projectEnv);
@@ -166,8 +166,8 @@ ENVIRONMENT=PRODUCTION
APP_NAME=MyApp APP_NAME=MyApp
`; `;
const serviceEnv = ` const serviceEnv = `
NODE_ENV="'\${{shared.ENVIRONMENT}}'" NODE_ENV="'\${{project.ENVIRONMENT}}'"
COMPLEX_VAR="'Prefix \"DoubleQuoted\" and \${{shared.APP_NAME}}'" COMPLEX_VAR="'Prefix \"DoubleQuoted\" and \${{project.APP_NAME}}'"
`; `;
const resolved = prepareEnvironmentVariables(serviceEnv, projectEnv); const resolved = prepareEnvironmentVariables(serviceEnv, projectEnv);

View File

@@ -268,11 +268,11 @@ export const prepareEnvironmentVariables = (
const resolvedVars = Object.entries(serviceVars).map(([key, value]) => { const resolvedVars = Object.entries(serviceVars).map(([key, value]) => {
let resolvedValue = value; let resolvedValue = value;
if (projectVars) { if (projectVars) {
resolvedValue = value.replace(/\$\{\{shared\.(.*?)\}\}/g, (_, ref) => { resolvedValue = value.replace(/\$\{\{project\.(.*?)\}\}/g, (_, ref) => {
if (projectVars[ref] !== undefined) { if (projectVars[ref] !== undefined) {
return projectVars[ref]; return projectVars[ref];
} }
throw new Error(`Invalid shared environment variable: shared.${ref}`); throw new Error(`Invalid project environment variable: project.${ref}`);
}); });
} }
return `${key}=${resolvedValue}`; return `${key}=${resolvedValue}`;