@friggframework/devtools 2.0.0-next.44 → 2.0.0-next.46
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/infrastructure/ARCHITECTURE.md +487 -0
- package/infrastructure/HEALTH.md +468 -0
- package/infrastructure/README.md +51 -0
- package/infrastructure/__tests__/postgres-config.test.js +914 -0
- package/infrastructure/__tests__/template-generation.test.js +687 -0
- package/infrastructure/create-frigg-infrastructure.js +1 -1
- package/infrastructure/docs/POSTGRES-CONFIGURATION.md +630 -0
- package/infrastructure/{DEPLOYMENT-INSTRUCTIONS.md → docs/deployment-instructions.md} +3 -3
- package/infrastructure/{IAM-POLICY-TEMPLATES.md → docs/iam-policy-templates.md} +9 -10
- package/infrastructure/domains/database/aurora-builder.js +809 -0
- package/infrastructure/domains/database/aurora-builder.test.js +950 -0
- package/infrastructure/domains/database/aurora-discovery.js +87 -0
- package/infrastructure/domains/database/aurora-discovery.test.js +188 -0
- package/infrastructure/domains/database/aurora-resolver.js +210 -0
- package/infrastructure/domains/database/aurora-resolver.test.js +347 -0
- package/infrastructure/domains/database/migration-builder.js +633 -0
- package/infrastructure/domains/database/migration-builder.test.js +294 -0
- package/infrastructure/domains/database/migration-resolver.js +163 -0
- package/infrastructure/domains/database/migration-resolver.test.js +337 -0
- package/infrastructure/domains/health/application/ports/IPropertyReconciler.js +164 -0
- package/infrastructure/domains/health/application/ports/IResourceDetector.js +129 -0
- package/infrastructure/domains/health/application/ports/IResourceImporter.js +142 -0
- package/infrastructure/domains/health/application/ports/IStackRepository.js +131 -0
- package/infrastructure/domains/health/application/ports/index.js +26 -0
- package/infrastructure/domains/health/application/use-cases/__tests__/execute-resource-import-use-case.test.js +679 -0
- package/infrastructure/domains/health/application/use-cases/__tests__/mismatch-analyzer-method-name.test.js +167 -0
- package/infrastructure/domains/health/application/use-cases/__tests__/repair-via-import-use-case.test.js +1130 -0
- package/infrastructure/domains/health/application/use-cases/execute-resource-import-use-case.js +221 -0
- package/infrastructure/domains/health/application/use-cases/reconcile-properties-use-case.js +152 -0
- package/infrastructure/domains/health/application/use-cases/reconcile-properties-use-case.test.js +343 -0
- package/infrastructure/domains/health/application/use-cases/repair-via-import-use-case.js +535 -0
- package/infrastructure/domains/health/application/use-cases/repair-via-import-use-case.test.js +376 -0
- package/infrastructure/domains/health/application/use-cases/run-health-check-use-case.js +213 -0
- package/infrastructure/domains/health/application/use-cases/run-health-check-use-case.test.js +441 -0
- package/infrastructure/domains/health/docs/ACME-DEV-DRIFT-ANALYSIS.md +267 -0
- package/infrastructure/domains/health/docs/BUILD-VS-DEPLOYED-TEMPLATE-ANALYSIS.md +324 -0
- package/infrastructure/domains/health/docs/ORPHAN-DETECTION-ANALYSIS.md +386 -0
- package/infrastructure/domains/health/docs/SPEC-CLEANUP-COMMAND.md +1419 -0
- package/infrastructure/domains/health/docs/TDD-IMPLEMENTATION-SUMMARY.md +391 -0
- package/infrastructure/domains/health/docs/TEMPLATE-COMPARISON-IMPLEMENTATION.md +551 -0
- package/infrastructure/domains/health/domain/entities/issue.js +299 -0
- package/infrastructure/domains/health/domain/entities/issue.test.js +528 -0
- package/infrastructure/domains/health/domain/entities/property-mismatch.js +108 -0
- package/infrastructure/domains/health/domain/entities/property-mismatch.test.js +275 -0
- package/infrastructure/domains/health/domain/entities/resource.js +159 -0
- package/infrastructure/domains/health/domain/entities/resource.test.js +432 -0
- package/infrastructure/domains/health/domain/entities/stack-health-report.js +306 -0
- package/infrastructure/domains/health/domain/entities/stack-health-report.test.js +601 -0
- package/infrastructure/domains/health/domain/services/__tests__/health-score-percentage-based.test.js +380 -0
- package/infrastructure/domains/health/domain/services/__tests__/import-progress-monitor.test.js +971 -0
- package/infrastructure/domains/health/domain/services/__tests__/import-template-generator.test.js +1150 -0
- package/infrastructure/domains/health/domain/services/__tests__/logical-id-mapper.test.js +672 -0
- package/infrastructure/domains/health/domain/services/__tests__/template-parser.test.js +496 -0
- package/infrastructure/domains/health/domain/services/__tests__/update-progress-monitor.test.js +419 -0
- package/infrastructure/domains/health/domain/services/health-score-calculator.js +248 -0
- package/infrastructure/domains/health/domain/services/health-score-calculator.test.js +504 -0
- package/infrastructure/domains/health/domain/services/import-progress-monitor.js +195 -0
- package/infrastructure/domains/health/domain/services/import-template-generator.js +435 -0
- package/infrastructure/domains/health/domain/services/logical-id-mapper.js +345 -0
- package/infrastructure/domains/health/domain/services/mismatch-analyzer.js +234 -0
- package/infrastructure/domains/health/domain/services/mismatch-analyzer.test.js +431 -0
- package/infrastructure/domains/health/domain/services/property-mutability-config.js +382 -0
- package/infrastructure/domains/health/domain/services/template-parser.js +245 -0
- package/infrastructure/domains/health/domain/services/update-progress-monitor.js +192 -0
- package/infrastructure/domains/health/domain/value-objects/health-score.js +138 -0
- package/infrastructure/domains/health/domain/value-objects/health-score.test.js +267 -0
- package/infrastructure/domains/health/domain/value-objects/property-mutability.js +161 -0
- package/infrastructure/domains/health/domain/value-objects/property-mutability.test.js +198 -0
- package/infrastructure/domains/health/domain/value-objects/resource-state.js +167 -0
- package/infrastructure/domains/health/domain/value-objects/resource-state.test.js +196 -0
- package/infrastructure/domains/health/domain/value-objects/stack-identifier.js +192 -0
- package/infrastructure/domains/health/domain/value-objects/stack-identifier.test.js +262 -0
- package/infrastructure/domains/health/infrastructure/adapters/__tests__/orphan-detection-cfn-tagged.test.js +312 -0
- package/infrastructure/domains/health/infrastructure/adapters/__tests__/orphan-detection-multi-stack.test.js +367 -0
- package/infrastructure/domains/health/infrastructure/adapters/__tests__/orphan-detection-relationship-analysis.test.js +432 -0
- package/infrastructure/domains/health/infrastructure/adapters/aws-property-reconciler.js +784 -0
- package/infrastructure/domains/health/infrastructure/adapters/aws-property-reconciler.test.js +1133 -0
- package/infrastructure/domains/health/infrastructure/adapters/aws-resource-detector.js +565 -0
- package/infrastructure/domains/health/infrastructure/adapters/aws-resource-detector.test.js +554 -0
- package/infrastructure/domains/health/infrastructure/adapters/aws-resource-importer.js +318 -0
- package/infrastructure/domains/health/infrastructure/adapters/aws-resource-importer.test.js +398 -0
- package/infrastructure/domains/health/infrastructure/adapters/aws-stack-repository.js +777 -0
- package/infrastructure/domains/health/infrastructure/adapters/aws-stack-repository.test.js +580 -0
- package/infrastructure/domains/integration/integration-builder.js +397 -0
- package/infrastructure/domains/integration/integration-builder.test.js +593 -0
- package/infrastructure/domains/integration/integration-resolver.js +170 -0
- package/infrastructure/domains/integration/integration-resolver.test.js +369 -0
- package/infrastructure/domains/integration/websocket-builder.js +69 -0
- package/infrastructure/domains/integration/websocket-builder.test.js +195 -0
- package/infrastructure/domains/networking/vpc-builder.js +1829 -0
- package/infrastructure/domains/networking/vpc-builder.test.js +1262 -0
- package/infrastructure/domains/networking/vpc-discovery.js +177 -0
- package/infrastructure/domains/networking/vpc-discovery.test.js +350 -0
- package/infrastructure/domains/networking/vpc-resolver.js +324 -0
- package/infrastructure/domains/networking/vpc-resolver.test.js +501 -0
- package/infrastructure/domains/parameters/ssm-builder.js +79 -0
- package/infrastructure/domains/parameters/ssm-builder.test.js +189 -0
- package/infrastructure/domains/parameters/ssm-discovery.js +84 -0
- package/infrastructure/domains/parameters/ssm-discovery.test.js +210 -0
- package/infrastructure/{iam-generator.js → domains/security/iam-generator.js} +2 -2
- package/infrastructure/domains/security/kms-builder.js +366 -0
- package/infrastructure/domains/security/kms-builder.test.js +374 -0
- package/infrastructure/domains/security/kms-discovery.js +80 -0
- package/infrastructure/domains/security/kms-discovery.test.js +177 -0
- package/infrastructure/domains/security/kms-resolver.js +96 -0
- package/infrastructure/domains/security/kms-resolver.test.js +216 -0
- package/infrastructure/domains/shared/base-builder.js +112 -0
- package/infrastructure/domains/shared/base-resolver.js +186 -0
- package/infrastructure/domains/shared/base-resolver.test.js +305 -0
- package/infrastructure/domains/shared/builder-orchestrator.js +212 -0
- package/infrastructure/domains/shared/builder-orchestrator.test.js +213 -0
- package/infrastructure/domains/shared/cloudformation-discovery-v2.js +334 -0
- package/infrastructure/domains/shared/cloudformation-discovery.js +375 -0
- package/infrastructure/domains/shared/cloudformation-discovery.test.js +590 -0
- package/infrastructure/domains/shared/environment-builder.js +119 -0
- package/infrastructure/domains/shared/environment-builder.test.js +247 -0
- package/infrastructure/domains/shared/providers/aws-provider-adapter.js +544 -0
- package/infrastructure/domains/shared/providers/aws-provider-adapter.test.js +377 -0
- package/infrastructure/domains/shared/providers/azure-provider-adapter.stub.js +93 -0
- package/infrastructure/domains/shared/providers/cloud-provider-adapter.js +136 -0
- package/infrastructure/domains/shared/providers/gcp-provider-adapter.stub.js +82 -0
- package/infrastructure/domains/shared/providers/provider-factory.js +108 -0
- package/infrastructure/domains/shared/providers/provider-factory.test.js +170 -0
- package/infrastructure/domains/shared/resource-discovery.js +192 -0
- package/infrastructure/domains/shared/resource-discovery.test.js +552 -0
- package/infrastructure/domains/shared/types/app-definition.js +205 -0
- package/infrastructure/domains/shared/types/discovery-result.js +106 -0
- package/infrastructure/domains/shared/types/discovery-result.test.js +258 -0
- package/infrastructure/domains/shared/types/index.js +46 -0
- package/infrastructure/domains/shared/types/resource-ownership.js +108 -0
- package/infrastructure/domains/shared/types/resource-ownership.test.js +101 -0
- package/infrastructure/domains/shared/utilities/base-definition-factory.js +380 -0
- package/infrastructure/domains/shared/utilities/base-definition-factory.js.bak +338 -0
- package/infrastructure/domains/shared/utilities/base-definition-factory.test.js +248 -0
- package/infrastructure/domains/shared/utilities/handler-path-resolver.js +134 -0
- package/infrastructure/domains/shared/utilities/handler-path-resolver.test.js +268 -0
- package/infrastructure/domains/shared/utilities/prisma-layer-manager.js +55 -0
- package/infrastructure/domains/shared/utilities/prisma-layer-manager.test.js +138 -0
- package/infrastructure/{env-validator.js → domains/shared/validation/env-validator.js} +2 -1
- package/infrastructure/domains/shared/validation/env-validator.test.js +173 -0
- package/infrastructure/esbuild.config.js +53 -0
- package/infrastructure/infrastructure-composer.js +87 -0
- package/infrastructure/{serverless-template.test.js → infrastructure-composer.test.js} +115 -24
- package/infrastructure/scripts/build-prisma-layer.js +553 -0
- package/infrastructure/scripts/build-prisma-layer.test.js +102 -0
- package/infrastructure/{build-time-discovery.js → scripts/build-time-discovery.js} +80 -48
- package/infrastructure/{build-time-discovery.test.js → scripts/build-time-discovery.test.js} +5 -4
- package/layers/prisma/nodejs/package.json +8 -0
- package/management-ui/server/utils/cliIntegration.js +1 -1
- package/management-ui/server/utils/environment/awsParameterStore.js +29 -18
- package/package.json +11 -11
- package/frigg-cli/.eslintrc.js +0 -141
- package/frigg-cli/__tests__/unit/commands/build.test.js +0 -251
- package/frigg-cli/__tests__/unit/commands/db-setup.test.js +0 -548
- package/frigg-cli/__tests__/unit/commands/install.test.js +0 -400
- package/frigg-cli/__tests__/unit/commands/ui.test.js +0 -346
- package/frigg-cli/__tests__/unit/utils/database-validator.test.js +0 -366
- package/frigg-cli/__tests__/unit/utils/error-messages.test.js +0 -304
- package/frigg-cli/__tests__/unit/utils/prisma-runner.test.js +0 -486
- package/frigg-cli/__tests__/utils/mock-factory.js +0 -270
- package/frigg-cli/__tests__/utils/prisma-mock.js +0 -194
- package/frigg-cli/__tests__/utils/test-fixtures.js +0 -463
- package/frigg-cli/__tests__/utils/test-setup.js +0 -287
- package/frigg-cli/build-command/index.js +0 -65
- package/frigg-cli/db-setup-command/index.js +0 -193
- package/frigg-cli/deploy-command/index.js +0 -175
- package/frigg-cli/generate-command/__tests__/generate-command.test.js +0 -301
- package/frigg-cli/generate-command/azure-generator.js +0 -43
- package/frigg-cli/generate-command/gcp-generator.js +0 -47
- package/frigg-cli/generate-command/index.js +0 -332
- package/frigg-cli/generate-command/terraform-generator.js +0 -555
- package/frigg-cli/generate-iam-command.js +0 -118
- package/frigg-cli/index.js +0 -75
- package/frigg-cli/index.test.js +0 -158
- package/frigg-cli/init-command/backend-first-handler.js +0 -756
- package/frigg-cli/init-command/index.js +0 -93
- package/frigg-cli/init-command/template-handler.js +0 -143
- package/frigg-cli/install-command/backend-js.js +0 -33
- package/frigg-cli/install-command/commit-changes.js +0 -16
- package/frigg-cli/install-command/environment-variables.js +0 -127
- package/frigg-cli/install-command/environment-variables.test.js +0 -136
- package/frigg-cli/install-command/index.js +0 -54
- package/frigg-cli/install-command/install-package.js +0 -13
- package/frigg-cli/install-command/integration-file.js +0 -30
- package/frigg-cli/install-command/logger.js +0 -12
- package/frigg-cli/install-command/template.js +0 -90
- package/frigg-cli/install-command/validate-package.js +0 -75
- package/frigg-cli/jest.config.js +0 -124
- package/frigg-cli/package.json +0 -54
- package/frigg-cli/start-command/index.js +0 -149
- package/frigg-cli/start-command/start-command.test.js +0 -297
- package/frigg-cli/test/init-command.test.js +0 -180
- package/frigg-cli/test/npm-registry.test.js +0 -319
- package/frigg-cli/ui-command/index.js +0 -154
- package/frigg-cli/utils/app-resolver.js +0 -319
- package/frigg-cli/utils/backend-path.js +0 -25
- package/frigg-cli/utils/database-validator.js +0 -161
- package/frigg-cli/utils/error-messages.js +0 -257
- package/frigg-cli/utils/npm-registry.js +0 -167
- package/frigg-cli/utils/prisma-runner.js +0 -280
- package/frigg-cli/utils/process-manager.js +0 -199
- package/frigg-cli/utils/repo-detection.js +0 -405
- package/infrastructure/aws-discovery.js +0 -1176
- package/infrastructure/aws-discovery.test.js +0 -1220
- package/infrastructure/serverless-template.js +0 -2074
- /package/infrastructure/{WEBSOCKET-CONFIGURATION.md → docs/WEBSOCKET-CONFIGURATION.md} +0 -0
- /package/infrastructure/{GENERATE-IAM-DOCS.md → docs/generate-iam-command.md} +0 -0
- /package/infrastructure/{iam-generator.test.js → domains/security/iam-generator.test.js} +0 -0
- /package/infrastructure/{frigg-deployment-iam-stack.yaml → domains/security/templates/frigg-deployment-iam-stack.yaml} +0 -0
- /package/infrastructure/{iam-policy-basic.json → domains/security/templates/iam-policy-basic.json} +0 -0
- /package/infrastructure/{iam-policy-full.json → domains/security/templates/iam-policy-full.json} +0 -0
- /package/infrastructure/{run-discovery.js → scripts/run-discovery.js} +0 -0
|
@@ -1,251 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Test suite for build command
|
|
3
|
-
*
|
|
4
|
-
* Tests the serverless package build functionality including:
|
|
5
|
-
* - Command execution with spawnSync
|
|
6
|
-
* - Stage option handling
|
|
7
|
-
* - Verbose flag support
|
|
8
|
-
* - Environment variable setup
|
|
9
|
-
* - Error handling and process exit
|
|
10
|
-
*/
|
|
11
|
-
|
|
12
|
-
// Mock dependencies BEFORE requiring modules
|
|
13
|
-
jest.mock('child_process', () => ({
|
|
14
|
-
spawnSync: jest.fn()
|
|
15
|
-
}));
|
|
16
|
-
|
|
17
|
-
// Require after mocks
|
|
18
|
-
const { spawnSync } = require('child_process');
|
|
19
|
-
const { buildCommand } = require('../../../build-command');
|
|
20
|
-
|
|
21
|
-
describe('CLI Command: build', () => {
|
|
22
|
-
let consoleLogSpy;
|
|
23
|
-
let consoleErrorSpy;
|
|
24
|
-
let processExitSpy;
|
|
25
|
-
let originalCwd;
|
|
26
|
-
|
|
27
|
-
beforeEach(() => {
|
|
28
|
-
jest.clearAllMocks();
|
|
29
|
-
|
|
30
|
-
// Mock console methods
|
|
31
|
-
consoleLogSpy = jest.spyOn(console, 'log').mockImplementation();
|
|
32
|
-
consoleErrorSpy = jest.spyOn(console, 'error').mockImplementation();
|
|
33
|
-
|
|
34
|
-
// Mock process.exit to prevent actual exit
|
|
35
|
-
processExitSpy = jest.spyOn(process, 'exit').mockImplementation();
|
|
36
|
-
|
|
37
|
-
// Mock successful serverless execution by default
|
|
38
|
-
spawnSync.mockReturnValue({ status: 0 });
|
|
39
|
-
|
|
40
|
-
// Store original cwd for restoration
|
|
41
|
-
originalCwd = process.cwd();
|
|
42
|
-
});
|
|
43
|
-
|
|
44
|
-
afterEach(() => {
|
|
45
|
-
consoleLogSpy.mockRestore();
|
|
46
|
-
consoleErrorSpy.mockRestore();
|
|
47
|
-
processExitSpy.mockRestore();
|
|
48
|
-
});
|
|
49
|
-
|
|
50
|
-
describe('Success Cases', () => {
|
|
51
|
-
it('should spawn serverless with default stage', async () => {
|
|
52
|
-
await buildCommand({ stage: 'dev' });
|
|
53
|
-
|
|
54
|
-
expect(spawnSync).toHaveBeenCalledWith(
|
|
55
|
-
'serverless',
|
|
56
|
-
['package', '--config', 'infrastructure.js', '--stage', 'dev'],
|
|
57
|
-
expect.objectContaining({
|
|
58
|
-
cwd: expect.any(String),
|
|
59
|
-
stdio: 'inherit',
|
|
60
|
-
shell: true
|
|
61
|
-
})
|
|
62
|
-
);
|
|
63
|
-
});
|
|
64
|
-
|
|
65
|
-
it('should spawn serverless with production stage', async () => {
|
|
66
|
-
await buildCommand({ stage: 'production' });
|
|
67
|
-
|
|
68
|
-
expect(spawnSync).toHaveBeenCalledWith(
|
|
69
|
-
'serverless',
|
|
70
|
-
expect.arrayContaining(['--stage', 'production']),
|
|
71
|
-
expect.any(Object)
|
|
72
|
-
);
|
|
73
|
-
});
|
|
74
|
-
|
|
75
|
-
it('should spawn serverless with staging stage', async () => {
|
|
76
|
-
await buildCommand({ stage: 'staging' });
|
|
77
|
-
|
|
78
|
-
expect(spawnSync).toHaveBeenCalledWith(
|
|
79
|
-
'serverless',
|
|
80
|
-
expect.arrayContaining(['--stage', 'staging']),
|
|
81
|
-
expect.any(Object)
|
|
82
|
-
);
|
|
83
|
-
});
|
|
84
|
-
|
|
85
|
-
it('should append verbose flag when verbose option is true', async () => {
|
|
86
|
-
await buildCommand({ stage: 'dev', verbose: true });
|
|
87
|
-
|
|
88
|
-
expect(spawnSync).toHaveBeenCalledWith(
|
|
89
|
-
'serverless',
|
|
90
|
-
expect.arrayContaining(['--verbose']),
|
|
91
|
-
expect.any(Object)
|
|
92
|
-
);
|
|
93
|
-
});
|
|
94
|
-
|
|
95
|
-
it('should NOT append verbose flag when verbose option is false', async () => {
|
|
96
|
-
await buildCommand({ stage: 'dev', verbose: false });
|
|
97
|
-
|
|
98
|
-
const call = spawnSync.mock.calls[0];
|
|
99
|
-
const args = call[1];
|
|
100
|
-
|
|
101
|
-
expect(args).not.toContain('--verbose');
|
|
102
|
-
});
|
|
103
|
-
|
|
104
|
-
it('should use process.cwd() as working directory', async () => {
|
|
105
|
-
await buildCommand({ stage: 'dev' });
|
|
106
|
-
|
|
107
|
-
const call = spawnSync.mock.calls[0];
|
|
108
|
-
const options = call[2];
|
|
109
|
-
|
|
110
|
-
// Verify ACTUAL cwd value, not generic check
|
|
111
|
-
expect(options.cwd).toBe(process.cwd());
|
|
112
|
-
});
|
|
113
|
-
|
|
114
|
-
it('should use stdio inherit for output streaming', async () => {
|
|
115
|
-
await buildCommand({ stage: 'dev' });
|
|
116
|
-
|
|
117
|
-
const call = spawnSync.mock.calls[0];
|
|
118
|
-
const options = call[2];
|
|
119
|
-
|
|
120
|
-
expect(options.stdio).toBe('inherit');
|
|
121
|
-
});
|
|
122
|
-
|
|
123
|
-
it('should use shell mode for execution', async () => {
|
|
124
|
-
await buildCommand({ stage: 'dev' });
|
|
125
|
-
|
|
126
|
-
const call = spawnSync.mock.calls[0];
|
|
127
|
-
const options = call[2];
|
|
128
|
-
|
|
129
|
-
expect(options.shell).toBe(true);
|
|
130
|
-
});
|
|
131
|
-
|
|
132
|
-
it('should set NODE_PATH environment variable with actual resolved path', async () => {
|
|
133
|
-
await buildCommand({ stage: 'dev' });
|
|
134
|
-
|
|
135
|
-
const call = spawnSync.mock.calls[0];
|
|
136
|
-
const options = call[2];
|
|
137
|
-
|
|
138
|
-
// Verify ACTUAL resolved path, not just "contains node_modules"
|
|
139
|
-
const path = require('path');
|
|
140
|
-
const expectedNodePath = path.resolve(process.cwd(), 'node_modules');
|
|
141
|
-
|
|
142
|
-
expect(options.env.NODE_PATH).toBe(expectedNodePath);
|
|
143
|
-
});
|
|
144
|
-
|
|
145
|
-
it('should pass through all process.env variables', async () => {
|
|
146
|
-
// Set a test env var
|
|
147
|
-
process.env.TEST_VAR = 'test-value';
|
|
148
|
-
|
|
149
|
-
await buildCommand({ stage: 'dev' });
|
|
150
|
-
|
|
151
|
-
const call = spawnSync.mock.calls[0];
|
|
152
|
-
const options = call[2];
|
|
153
|
-
|
|
154
|
-
// Verify parent env vars are passed through
|
|
155
|
-
expect(options.env.TEST_VAR).toBe('test-value');
|
|
156
|
-
|
|
157
|
-
delete process.env.TEST_VAR;
|
|
158
|
-
});
|
|
159
|
-
|
|
160
|
-
it('should use infrastructure.js as config file', async () => {
|
|
161
|
-
await buildCommand({ stage: 'dev' });
|
|
162
|
-
|
|
163
|
-
expect(spawnSync).toHaveBeenCalledWith(
|
|
164
|
-
'serverless',
|
|
165
|
-
expect.arrayContaining(['--config', 'infrastructure.js']),
|
|
166
|
-
expect.any(Object)
|
|
167
|
-
);
|
|
168
|
-
});
|
|
169
|
-
|
|
170
|
-
it('should NOT call process.exit when build succeeds', async () => {
|
|
171
|
-
spawnSync.mockReturnValue({ status: 0 });
|
|
172
|
-
|
|
173
|
-
await buildCommand({ stage: 'dev' });
|
|
174
|
-
|
|
175
|
-
expect(processExitSpy).not.toHaveBeenCalled();
|
|
176
|
-
});
|
|
177
|
-
|
|
178
|
-
it('should log build start messages', async () => {
|
|
179
|
-
await buildCommand({ stage: 'dev' });
|
|
180
|
-
|
|
181
|
-
expect(consoleLogSpy).toHaveBeenCalledWith('Building the serverless application...');
|
|
182
|
-
expect(consoleLogSpy).toHaveBeenCalledWith('📦 Packaging serverless application...');
|
|
183
|
-
});
|
|
184
|
-
|
|
185
|
-
it('should construct complete valid serverless command', async () => {
|
|
186
|
-
await buildCommand({ stage: 'production', verbose: true });
|
|
187
|
-
|
|
188
|
-
const [cmd, args, opts] = spawnSync.mock.calls[0];
|
|
189
|
-
|
|
190
|
-
// Verify complete command structure
|
|
191
|
-
expect(cmd).toBe('serverless');
|
|
192
|
-
expect(args).toEqual([
|
|
193
|
-
'package',
|
|
194
|
-
'--config',
|
|
195
|
-
'infrastructure.js',
|
|
196
|
-
'--stage',
|
|
197
|
-
'production',
|
|
198
|
-
'--verbose'
|
|
199
|
-
]);
|
|
200
|
-
|
|
201
|
-
// Verify all required options present
|
|
202
|
-
expect(opts.cwd).toBeDefined();
|
|
203
|
-
expect(opts.stdio).toBe('inherit');
|
|
204
|
-
expect(opts.shell).toBe(true);
|
|
205
|
-
expect(opts.env).toBeDefined();
|
|
206
|
-
expect(opts.env.NODE_PATH).toBeDefined();
|
|
207
|
-
});
|
|
208
|
-
|
|
209
|
-
it('should build command without verbose when verbose=false', async () => {
|
|
210
|
-
await buildCommand({ stage: 'dev', verbose: false });
|
|
211
|
-
|
|
212
|
-
const [, args] = spawnSync.mock.calls[0];
|
|
213
|
-
|
|
214
|
-
// Verify exact args without verbose
|
|
215
|
-
expect(args).toEqual([
|
|
216
|
-
'package',
|
|
217
|
-
'--config',
|
|
218
|
-
'infrastructure.js',
|
|
219
|
-
'--stage',
|
|
220
|
-
'dev'
|
|
221
|
-
]);
|
|
222
|
-
});
|
|
223
|
-
});
|
|
224
|
-
|
|
225
|
-
describe('Error Handling', () => {
|
|
226
|
-
it('should exit with code 1 when serverless fails', async () => {
|
|
227
|
-
spawnSync.mockReturnValue({ status: 1 });
|
|
228
|
-
|
|
229
|
-
await buildCommand({ stage: 'dev' });
|
|
230
|
-
|
|
231
|
-
expect(processExitSpy).toHaveBeenCalledWith(1);
|
|
232
|
-
});
|
|
233
|
-
|
|
234
|
-
it('should log error message when build fails', async () => {
|
|
235
|
-
spawnSync.mockReturnValue({ status: 2 });
|
|
236
|
-
|
|
237
|
-
await buildCommand({ stage: 'dev' });
|
|
238
|
-
|
|
239
|
-
expect(consoleErrorSpy).toHaveBeenCalledWith('Serverless build failed with code 2');
|
|
240
|
-
});
|
|
241
|
-
|
|
242
|
-
it('should exit with code 1 for any non-zero status', async () => {
|
|
243
|
-
spawnSync.mockReturnValue({ status: 127 });
|
|
244
|
-
|
|
245
|
-
await buildCommand({ stage: 'dev' });
|
|
246
|
-
|
|
247
|
-
expect(processExitSpy).toHaveBeenCalledWith(1);
|
|
248
|
-
expect(consoleErrorSpy).toHaveBeenCalledWith('Serverless build failed with code 127');
|
|
249
|
-
});
|
|
250
|
-
});
|
|
251
|
-
});
|