diff --git a/tests/Jiaowu.Api.Tests/AppUpdatesControllerTests.cs b/tests/Jiaowu.Api.Tests/AppUpdatesControllerTests.cs index e68a209..cf7f8ad 100644 --- a/tests/Jiaowu.Api.Tests/AppUpdatesControllerTests.cs +++ b/tests/Jiaowu.Api.Tests/AppUpdatesControllerTests.cs @@ -107,6 +107,25 @@ public sealed class AppUpdatesControllerTests (await fixture.Db.AppUpdateReleases.FindAsync(second.Id))!.Status); } + [Fact] + public async Task Deleting_an_archived_release_removes_its_history_and_bundle() + { + await using var fixture = await AppUpdatesFixture.CreateAsync(); + var first = await UploadAsync(fixture, "1.0.1", "first"); + await fixture.Controller.PublishRelease(first.Id, CancellationToken.None); + var obsolete = await UploadAsync(fixture, "1.0.2", "obsolete"); + await fixture.Controller.PublishRelease(obsolete.Id, CancellationToken.None); + + var result = await fixture.Controller.DeleteRelease( + first.Id, + CancellationToken.None); + + Assert.IsType(result); + fixture.Db.ChangeTracker.Clear(); + Assert.Null(await fixture.Db.AppUpdateReleases.FindAsync(first.Id)); + Assert.NotNull(await fixture.Db.AppUpdateReleases.FindAsync(obsolete.Id)); + } + [Fact] public async Task Invalid_or_nested_web_bundles_are_rejected() { diff --git a/web/src/components/AppUpdateManagementPanel.vue b/web/src/components/AppUpdateManagementPanel.vue index 930bffb..8891684 100644 --- a/web/src/components/AppUpdateManagementPanel.vue +++ b/web/src/components/AppUpdateManagementPanel.vue @@ -219,7 +219,7 @@ async function deleteRelease(tableRow: Record) { const row = tableRow as unknown as AppUpdateRelease try { await ElMessageBox.confirm( - `将永久删除更新包 ${row.fileName}。此操作不会影响已安装到设备的版本。`, + `将永久删除 ${row.version} 的发布历史和 ZIP 更新包(${row.fileName})。此操作不会影响已安装到设备的版本,且不可恢复。`, '删除更新包', { type: 'warning', @@ -228,7 +228,7 @@ async function deleteRelease(tableRow: Record) { }, ) await http.delete(`/app-updates/releases/${row.id}`) - ElMessage.success('更新包已删除。') + ElMessage.success('发布历史和更新包已删除。') await loadReleases() } catch (error) { if (error === 'cancel' || error === 'close') return