destination->server, etc.), making them * unsuitable for unit tests. Integration tests for those paths belong * in tests/Feature/. */ describe('addPreviewDeploymentSuffix', function () { it('appends -pr-N suffix for non-zero pull request id', function () { expect(addPreviewDeploymentSuffix('myvolume', 3))->toBe('myvolume-pr-3'); }); it('returns name unchanged when pull request id is zero', function () { expect(addPreviewDeploymentSuffix('myvolume', 0))->toBe('myvolume'); }); it('handles pull request id of 1', function () { expect(addPreviewDeploymentSuffix('scripts', 1))->toBe('scripts-pr-1'); }); it('handles large pull request ids', function () { expect(addPreviewDeploymentSuffix('data', 9999))->toBe('data-pr-9999'); }); it('handles names with dots and slashes', function () { expect(addPreviewDeploymentSuffix('./scripts', 2))->toBe('./scripts-pr-2'); }); it('handles names with existing hyphens', function () { expect(addPreviewDeploymentSuffix('my-volume-name', 5))->toBe('my-volume-name-pr-5'); }); it('handles empty name with non-zero pr id', function () { expect(addPreviewDeploymentSuffix('', 1))->toBe('-pr-1'); }); it('handles uuid-prefixed volume names', function () { $uuid = 'abc123_my-volume'; expect(addPreviewDeploymentSuffix($uuid, 7))->toBe('abc123_my-volume-pr-7'); }); it('defaults pull_request_id to 0', function () { expect(addPreviewDeploymentSuffix('myvolume'))->toBe('myvolume'); }); }); describe('sourceIsLocal', function () { it('detects relative paths starting with dot-slash', function () { expect(sourceIsLocal(str('./scripts')))->toBeTrue(); }); it('detects absolute paths starting with slash', function () { expect(sourceIsLocal(str('/var/data')))->toBeTrue(); }); it('detects tilde paths', function () { expect(sourceIsLocal(str('~/data')))->toBeTrue(); }); it('detects parent directory paths', function () { expect(sourceIsLocal(str('../config')))->toBeTrue(); }); it('returns false for named volumes', function () { expect(sourceIsLocal(str('myvolume')))->toBeFalse(); }); }); describe('replaceLocalSource', function () { it('replaces dot-slash prefix with target path', function () { $result = replaceLocalSource(str('./scripts'), str('/app')); expect((string) $result)->toBe('/app/scripts'); }); it('resolves dot-dot-slash prefix against the parent of the target path', function () { $result = replaceLocalSource(str('../config'), str('/app')); expect((string) $result)->toBe('/config'); }); it('replaces tilde prefix with target path', function () { $result = replaceLocalSource(str('~/data'), str('/app')); expect((string) $result)->toBe('/app/data'); }); });