Skip to content

Commit c758246

Browse files
committed
Move snapshot name generation from cli-config to preview create command
1 parent 18c1bac commit c758246

File tree

5 files changed

+55
-24
lines changed

5 files changed

+55
-24
lines changed

apps/cli/ai/tests/tools.test.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@ import { runCommand as runCreatePreviewCommand } from 'cli/commands/preview/crea
33
import { runCommand as runDeletePreviewCommand } from 'cli/commands/preview/delete';
44
import { runCommand as runListPreviewCommand } from 'cli/commands/preview/list';
55
import { runCommand as runUpdatePreviewCommand } from 'cli/commands/preview/update';
6-
import { getSiteByFolder, readAppdata } from 'cli/lib/appdata';
6+
import { readAppdata } from 'cli/lib/appdata';
7+
import { getSiteByFolder } from 'cli/lib/cli-config';
78
import { getProgressCallback, setProgressCallback } from 'cli/logger';
89
import { studioToolDefinitions } from '../tools';
910

@@ -58,10 +59,14 @@ vi.mock( 'cli/commands/site/stop', () => ( {
5859

5960
vi.mock( 'cli/lib/appdata', async () => ( {
6061
...( await vi.importActual( 'cli/lib/appdata' ) ),
61-
getSiteByFolder: vi.fn(),
6262
readAppdata: vi.fn(),
6363
} ) );
6464

65+
vi.mock( 'cli/lib/cli-config', async () => ( {
66+
...( await vi.importActual( 'cli/lib/cli-config' ) ),
67+
getSiteByFolder: vi.fn(),
68+
} ) );
69+
6570
vi.mock( 'cli/lib/daemon-client', () => ( {
6671
connectToDaemon: vi.fn(),
6772
disconnectFromDaemon: vi.fn(),

apps/cli/commands/preview/create.ts

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@ import { __, sprintf } from '@wordpress/i18n';
77
import { uploadArchive, waitForSiteReady } from 'cli/lib/api';
88
import { getAuthToken } from 'cli/lib/appdata';
99
import { archiveSiteContent, cleanup } from 'cli/lib/archive';
10-
import { getSiteByFolder } from 'cli/lib/cli-config';
10+
import { getSiteByFolder, getNextSnapshotSequence } from 'cli/lib/cli-config';
1111
import { emitSnapshotEvent } from 'cli/lib/daemon-client';
12-
import { saveSnapshotToConfig } from 'cli/lib/snapshots';
12+
import { getSnapshotsFromConfig, saveSnapshotToConfig } from 'cli/lib/snapshots';
1313
import { validateSiteSize } from 'cli/lib/validation';
1414
import { Logger, LoggerError } from 'cli/logger';
1515
import { StudioArgv } from 'cli/types';
@@ -44,12 +44,24 @@ export async function runCommand( siteFolder: string, name?: string ): Promise<
4444
);
4545

4646
logger.reportStart( LoggerAction.APPDATA, __( 'Saving preview site to Studio…' ) );
47+
let snapshotName = name;
48+
if ( ! snapshotName ) {
49+
const site = await getSiteByFolder( siteFolder );
50+
const snapshots = await getSnapshotsFromConfig( token.id );
51+
const sequence = getNextSnapshotSequence( site.id, snapshots, token.id );
52+
snapshotName = sprintf(
53+
/* translators: 1: Site name 2: Sequence number (e.g. "My Site Name Preview 1") */
54+
__( '%1$s Preview %2$d' ),
55+
site.name,
56+
sequence
57+
);
58+
}
4759
const snapshot = await saveSnapshotToConfig(
4860
siteFolder,
4961
uploadResponse.site_id,
5062
uploadResponse.site_url,
5163
token.id,
52-
name
64+
snapshotName
5365
);
5466
logger.reportSuccess( __( 'Preview site saved to Studio' ) );
5567
await emitSnapshotEvent( SNAPSHOT_EVENTS.CREATED );

apps/cli/commands/preview/tests/create.test.ts

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ import { vi } from 'vitest';
55
import { uploadArchive, waitForSiteReady } from 'cli/lib/api';
66
import { getAuthToken } from 'cli/lib/appdata';
77
import { archiveSiteContent, cleanup } from 'cli/lib/archive';
8-
import { getSiteByFolder } from 'cli/lib/cli-config';
9-
import { saveSnapshotToConfig } from 'cli/lib/snapshots';
8+
import { getSiteByFolder, getNextSnapshotSequence } from 'cli/lib/cli-config';
9+
import { getSnapshotsFromConfig, saveSnapshotToConfig } from 'cli/lib/snapshots';
1010
import { LoggerError } from 'cli/logger';
1111
import { runCommand } from '../create';
1212

@@ -27,13 +27,18 @@ vi.mock( 'cli/lib/appdata', async () => ( {
2727
vi.mock( 'cli/lib/cli-config', async () => ( {
2828
...( await vi.importActual( 'cli/lib/cli-config' ) ),
2929
getSiteByFolder: vi.fn(),
30+
getNextSnapshotSequence: vi.fn().mockReturnValue( 1 ),
3031
} ) );
3132
vi.mock( 'cli/lib/validation', () => ( {
3233
validateSiteSize: vi.fn(),
3334
} ) );
3435
vi.mock( 'cli/lib/archive' );
3536
vi.mock( 'cli/lib/api' );
36-
vi.mock( 'cli/lib/snapshots' );
37+
vi.mock( 'cli/lib/snapshots', async () => ( {
38+
...( await vi.importActual( 'cli/lib/snapshots' ) ),
39+
getSnapshotsFromConfig: vi.fn().mockResolvedValue( [] ),
40+
saveSnapshotToConfig: vi.fn(),
41+
} ) );
3742
vi.mock( 'cli/logger', () => ( {
3843
Logger: class {
3944
reportStart = mockReportStart;
@@ -138,7 +143,7 @@ describe( 'Preview Create Command', () => {
138143
mockAtomicSiteId,
139144
mockSiteUrl,
140145
mockAuthToken.id,
141-
undefined
146+
'Test Site Preview 1'
142147
);
143148
expect( mockReportStart.mock.calls[ 4 ] ).toEqual( [
144149
'appdata',

apps/cli/lib/cli-config.ts

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { arePathsEqual, isWordPressDirectory } from '@studio/common/lib/fs-utils
55
import { lockFileAsync, unlockFileAsync } from '@studio/common/lib/lockfile';
66
import { siteDetailsSchema } from '@studio/common/lib/site-events';
77
import { snapshotSchema, type Snapshot } from '@studio/common/types/snapshot';
8-
import { __, sprintf } from '@wordpress/i18n';
8+
import { __ } from '@wordpress/i18n';
99
import { readFile, writeFile } from 'atomically';
1010
import { z } from 'zod';
1111
import { STUDIO_CLI_HOME } from 'cli/lib/paths';
@@ -233,7 +233,7 @@ export async function saveSnapshotToConfig(
233233
atomicSiteId: number,
234234
previewUrl: string,
235235
userId: number,
236-
name?: string
236+
name: string
237237
): Promise< Snapshot > {
238238
try {
239239
const site = await getSiteByFolder( siteFolder );
@@ -246,14 +246,7 @@ export async function saveSnapshotToConfig(
246246
atomicSiteId,
247247
localSiteId: site.id,
248248
date: Date.now(),
249-
name:
250-
name ||
251-
sprintf(
252-
/* translators: 1: Site name 2: Sequence number (e.g. "My Site Name Preview 1") */
253-
__( '%1$s Preview %2$d' ),
254-
site.name,
255-
nextSequenceNumber
256-
),
249+
name,
257250
sequence: nextSequenceNumber,
258251
userId,
259252
};
@@ -327,7 +320,11 @@ export async function setSnapshotInConfig(
327320
}
328321
}
329322

330-
function getNextSnapshotSequence( siteId: string, snapshots: Snapshot[], userId: number ): number {
323+
export function getNextSnapshotSequence(
324+
siteId: string,
325+
snapshots: Snapshot[],
326+
userId: number
327+
): number {
331328
const siteSnapshots = snapshots.filter(
332329
( s ) => s.localSiteId === siteId && s.userId === userId
333330
);

apps/cli/lib/tests/snapshots.test.ts

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,13 @@ describe( 'Snapshots Module', () => {
100100

101101
mocks.readFile.mockResolvedValue( JSON.stringify( mockUserData ) );
102102

103-
await saveSnapshotToConfig( mockSiteFolder, mockAtomicSiteId, mockSiteUrl, mockUserId );
103+
await saveSnapshotToConfig(
104+
mockSiteFolder,
105+
mockAtomicSiteId,
106+
mockSiteUrl,
107+
mockUserId,
108+
'Test Site Preview 1'
109+
);
104110

105111
expect( writeFile ).toHaveBeenCalled();
106112
const savedData = JSON.parse( mocks.writeFile.mock.calls[ 0 ][ 1 ] );
@@ -149,7 +155,13 @@ describe( 'Snapshots Module', () => {
149155

150156
mocks.readFile.mockResolvedValue( JSON.stringify( mockUserData ) );
151157

152-
await saveSnapshotToConfig( mockSiteFolder, mockAtomicSiteId + 1, mockSiteUrl, mockUserId );
158+
await saveSnapshotToConfig(
159+
mockSiteFolder,
160+
mockAtomicSiteId + 1,
161+
mockSiteUrl,
162+
mockUserId,
163+
'Test Site Preview 2'
164+
);
153165

154166
expect( writeFile ).toHaveBeenCalled();
155167
const savedData = JSON.parse( mocks.writeFile.mock.calls[ 0 ][ 1 ] );
@@ -189,7 +201,7 @@ describe( 'Snapshots Module', () => {
189201
mocks.readFile.mockResolvedValue( JSON.stringify( mockUserData ) );
190202

191203
await expect(
192-
saveSnapshotToConfig( mockSiteFolder, mockAtomicSiteId, mockSiteUrl, mockUserId )
204+
saveSnapshotToConfig( mockSiteFolder, mockAtomicSiteId, mockSiteUrl, mockUserId, 'Test' )
193205
).rejects.toThrow( LoggerError );
194206

195207
expect( writeFile ).not.toHaveBeenCalled();
@@ -199,7 +211,7 @@ describe( 'Snapshots Module', () => {
199211
mocks.existsSync.mockReturnValueOnce( false );
200212

201213
await expect(
202-
saveSnapshotToConfig( mockSiteFolder, mockAtomicSiteId, mockSiteUrl, mockUserId )
214+
saveSnapshotToConfig( mockSiteFolder, mockAtomicSiteId, mockSiteUrl, mockUserId, 'Test' )
203215
).rejects.toThrow( LoggerError );
204216
} );
205217
} );

0 commit comments

Comments
 (0)