Skip to content

Commit 3c4a739

Browse files
authored
Add button to show less commits (#3562)
* Add a button to show less commits * Fix lint issue * Fix test * Add tests
1 parent 263c16b commit 3c4a739

File tree

17 files changed

+141
-31
lines changed

17 files changed

+141
-31
lines changed

extension/src/experiments/index.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,7 @@ export class Experiments extends BaseRepository<TableData> {
180180
return this.cliData.managedUpdate()
181181
}
182182

183-
public getMoreCommits(numberOfCommitsToShow: number) {
183+
public changeNbOfCommits(numberOfCommitsToShow: number) {
184184
return this.cliData.update(
185185
ExperimentFlag.NUM_COMMIT,
186186
numberOfCommitsToShow.toString()
@@ -581,7 +581,7 @@ export class Experiments extends BaseRepository<TableData> {
581581
AvailableCommands.GIT_GET_NUM_COMMITS,
582582
this.dvcRoot
583583
),
584-
(nbOfCommits: number) => this.getMoreCommits(nbOfCommits)
584+
(nbOfCommits: number) => this.changeNbOfCommits(nbOfCommits)
585585
)
586586

587587
this.dispose.track(

extension/src/experiments/webview/contract.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,7 @@ export type TableData = {
102102
hasMoreCommits: boolean
103103
hasRunningExperiment: boolean
104104
hasValidDvcYaml: boolean
105+
isShowingMoreCommits: boolean
105106
rows: Row[]
106107
sorts: SortDefinition[]
107108
filteredCounts: FilteredCounts

extension/src/experiments/webview/messages.ts

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -47,11 +47,13 @@ export class WebviewMessages {
4747
private hasConfig = false
4848
private hasValidDvcYaml = true
4949
private hasMoreCommits = false
50+
private isShowingMoreCommits = true
51+
5052
private numberOfCommitsToShow = Number.parseInt(NUM_OF_COMMITS_TO_SHOW, 10)
5153

5254
private readonly addStage: () => Promise<boolean>
5355
private readonly getNumCommits: () => Promise<number>
54-
private readonly getMoreCommits: (nbOfCommits: number) => Promise<void>
56+
private readonly changeNbOfCommits: (nbOfCommits: number) => Promise<void>
5557

5658
constructor(
5759
dvcRoot: string,
@@ -68,7 +70,7 @@ export class WebviewMessages {
6870
hasStages: () => Promise<string>,
6971
addStage: () => Promise<boolean>,
7072
getNumCommits: () => Promise<number>,
71-
getMoreCommits: (nbOfCommits: number) => Promise<void>
73+
changeNbOfCommits: (nbOfCommits: number) => Promise<void>
7274
) {
7375
this.dvcRoot = dvcRoot
7476
this.experiments = experiments
@@ -81,10 +83,10 @@ export class WebviewMessages {
8183
this.hasStages = hasStages
8284
this.addStage = addStage
8385
this.getNumCommits = getNumCommits
84-
this.getMoreCommits = getMoreCommits
86+
this.changeNbOfCommits = changeNbOfCommits
8587

8688
void this.changeHasConfig()
87-
void this.changeHasMoreCommits()
89+
void this.changeHasMoreOrLessCommits()
8890
}
8991

9092
public async changeHasConfig(update?: boolean) {
@@ -216,22 +218,27 @@ export class WebviewMessages {
216218
)
217219

218220
case MessageFromWebviewType.SHOW_MORE_COMMITS:
219-
return this.changeNumberOfCommits()
221+
return this.changeCommitsToShow(1)
222+
223+
case MessageFromWebviewType.SHOW_LESS_COMMITS:
224+
return this.changeCommitsToShow(-1)
220225

221226
default:
222227
Logger.error(`Unexpected message: ${JSON.stringify(message)}`)
223228
}
224229
}
225230

226-
private async changeHasMoreCommits() {
227-
this.hasMoreCommits =
228-
(await this.getNumCommits()) > this.numberOfCommitsToShow
231+
private async changeHasMoreOrLessCommits() {
232+
const availableNbCommits = await this.getNumCommits()
233+
this.hasMoreCommits = availableNbCommits > this.numberOfCommitsToShow
234+
this.isShowingMoreCommits =
235+
Math.min(this.numberOfCommitsToShow, availableNbCommits) > 1
229236
}
230237

231-
private async changeNumberOfCommits() {
232-
this.numberOfCommitsToShow = this.numberOfCommitsToShow + 2
233-
await this.getMoreCommits(this.numberOfCommitsToShow)
234-
await this.changeHasMoreCommits()
238+
private async changeCommitsToShow(change: number) {
239+
this.numberOfCommitsToShow = this.numberOfCommitsToShow + 2 * change
240+
await this.changeNbOfCommits(this.numberOfCommitsToShow)
241+
await this.changeHasMoreOrLessCommits()
235242
}
236243

237244
private getWebviewData() {
@@ -250,6 +257,7 @@ export class WebviewMessages {
250257
hasMoreCommits: this.hasMoreCommits,
251258
hasRunningExperiment: this.experiments.hasRunningExperiment(),
252259
hasValidDvcYaml: this.hasValidDvcYaml,
260+
isShowingMoreCommits: this.isShowingMoreCommits,
253261
rows: this.experiments.getRowData(),
254262
sorts: this.experiments.getSorts()
255263
}

extension/src/test/fixtures/expShow/base/tableData.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ const tableDataFixture: TableData = {
1313
hasRunningExperiment: true,
1414
hasValidDvcYaml: true,
1515
hasColumns: true,
16+
isShowingMoreCommits: true,
1617
sorts: [],
1718
changes: [],
1819
columnOrder: [],

extension/src/test/fixtures/expShow/dataTypes/tableData.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ export const data: TableData = {
1313
hasMoreCommits: true,
1414
hasRunningExperiment: false,
1515
hasValidDvcYaml: true,
16+
isShowingMoreCommits: true,
1617
sorts: [],
1718
columns,
1819
hasColumns: true,

extension/src/test/fixtures/expShow/deeplyNested/tableData.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ const data: TableData = {
1616
hasMoreCommits: true,
1717
hasRunningExperiment: false,
1818
hasValidDvcYaml: true,
19+
isShowingMoreCommits: true,
1920
sorts: [
2021
{
2122
path: 'params:params.yaml:nested1.doubled',

extension/src/test/fixtures/expShow/survival/tableData.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ const data: TableData = {
1313
hasColumns: true,
1414
hasMoreCommits: true,
1515
hasValidDvcYaml: true,
16+
isShowingMoreCommits: true,
1617
sorts: [],
1718
changes: [],
1819
columnOrder: [],

extension/src/test/suite/experiments/index.test.ts

Lines changed: 48 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -136,14 +136,14 @@ suite('Experiments Test Suite', () => {
136136
const { experiments, mockUpdateExperimentsData } =
137137
buildExperiments(disposable)
138138

139-
await experiments.getMoreCommits(5)
139+
await experiments.changeNbOfCommits(5)
140140

141141
expect(mockUpdateExperimentsData).to.be.calledWithExactly(
142142
ExperimentFlag.NUM_COMMIT,
143143
'5'
144144
)
145145

146-
await experiments.getMoreCommits(7)
146+
await experiments.changeNbOfCommits(7)
147147

148148
expect(mockUpdateExperimentsData).to.be.calledWithExactly(
149149
ExperimentFlag.NUM_COMMIT,
@@ -316,6 +316,33 @@ suite('Experiments Test Suite', () => {
316316
hasMoreCommits: false
317317
})
318318
}).timeout(WEBVIEW_TEST_TIMEOUT)
319+
320+
it('should set isShowingMoreCommits to true if it is showing more than the current commit', async () => {
321+
const { experiments, messageSpy } = buildExperiments(
322+
disposable,
323+
expShowFixture
324+
)
325+
326+
await experiments.showWebview()
327+
328+
expect(messageSpy).to.be.calledWithMatch({
329+
isShowingMoreCommits: true
330+
})
331+
}).timeout(WEBVIEW_TEST_TIMEOUT)
332+
333+
it('should set isShowingMoreCommits to false it is showing only the current commit', async () => {
334+
stub(GitReader.prototype, 'getNumCommits').resolves(1)
335+
const { experiments, messageSpy } = buildExperiments(
336+
disposable,
337+
expShowFixture
338+
)
339+
340+
await experiments.showWebview()
341+
342+
expect(messageSpy).to.be.calledWithMatch({
343+
isShowingMoreCommits: false
344+
})
345+
}).timeout(WEBVIEW_TEST_TIMEOUT)
319346
})
320347

321348
describe('handleMessageFromWebview', () => {
@@ -1352,7 +1379,7 @@ suite('Experiments Test Suite', () => {
13521379
it('should handle a message to show more commits', async () => {
13531380
const { experiments, messageSpy } = setupExperimentsAndMockCommands()
13541381

1355-
const getMoreCommitsSpy = spy(experiments, 'getMoreCommits')
1382+
const getMoreCommitsSpy = spy(experiments, 'changeNbOfCommits')
13561383

13571384
const webview = await experiments.showWebview()
13581385
messageSpy.resetHistory()
@@ -1363,6 +1390,24 @@ suite('Experiments Test Suite', () => {
13631390
})
13641391

13651392
expect(getMoreCommitsSpy).to.be.calledOnce
1393+
expect(getMoreCommitsSpy).to.be.calledWith(5)
1394+
}).timeout(WEBVIEW_TEST_TIMEOUT)
1395+
1396+
it('should handle a message to show less commits', async () => {
1397+
const { experiments, messageSpy } = setupExperimentsAndMockCommands()
1398+
1399+
const getLessCommitsSpy = spy(experiments, 'changeNbOfCommits')
1400+
1401+
const webview = await experiments.showWebview()
1402+
messageSpy.resetHistory()
1403+
const mockMessageReceived = getMessageReceivedEmitter(webview)
1404+
1405+
mockMessageReceived.fire({
1406+
type: MessageFromWebviewType.SHOW_LESS_COMMITS
1407+
})
1408+
1409+
expect(getLessCommitsSpy).to.be.calledOnce
1410+
expect(getLessCommitsSpy).to.be.calledWith(1)
13661411
}).timeout(WEBVIEW_TEST_TIMEOUT)
13671412
})
13681413

extension/src/webview/contract.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,8 @@ export enum MessageFromWebviewType {
6767
INSTALL_DVC = 'install-dvc',
6868
SETUP_WORKSPACE = 'setup-workspace',
6969
ZOOM_PLOT = 'zoom-plot',
70-
SHOW_MORE_COMMITS = 'show-more-commits'
70+
SHOW_MORE_COMMITS = 'show-more-commits',
71+
SHOW_LESS_COMMITS = 'show-less-commits'
7172
}
7273

7374
export type ColumnResizePayload = {
@@ -232,6 +233,7 @@ export type MessageFromWebview =
232233
| { type: MessageFromWebviewType.ZOOM_PLOT; payload?: string }
233234
| { type: MessageFromWebviewType.OPEN_EXPERIMENTS_WEBVIEW }
234235
| { type: MessageFromWebviewType.SHOW_MORE_COMMITS }
236+
| { type: MessageFromWebviewType.SHOW_LESS_COMMITS }
235237

236238
export type MessageToWebview<T extends WebviewData> = {
237239
type: MessageToWebviewType.SET_DATA

webview/src/experiments/components/App.test.tsx

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1541,5 +1541,27 @@ describe('App', () => {
15411541
type: MessageFromWebviewType.SHOW_MORE_COMMITS
15421542
})
15431543
})
1544+
1545+
it('should display a show less commits button if the table data isShowingMoreCommits is set to true', () => {
1546+
renderTable({ ...tableDataFixture, isShowingMoreCommits: true })
1547+
1548+
expect(screen.getByTestId('show-less-commits')).toBeInTheDocument()
1549+
})
1550+
1551+
it('should not display a show less commits button if the table data isShowingMoreCommits is set to false', () => {
1552+
renderTable({ ...tableDataFixture, isShowingMoreCommits: false })
1553+
1554+
expect(screen.queryByTestId('show-less-commits')).not.toBeInTheDocument()
1555+
})
1556+
1557+
it('should send a message to show less commits when the show less commits button is clicked', () => {
1558+
renderTable({ ...tableDataFixture, isShowingMoreCommits: true })
1559+
1560+
fireEvent.click(screen.getByTestId('show-less-commits'))
1561+
1562+
expect(mockPostMessage).toHaveBeenCalledWith({
1563+
type: MessageFromWebviewType.SHOW_LESS_COMMITS
1564+
})
1565+
})
15441566
})
15451567
})

0 commit comments

Comments
 (0)