feat: 添加下载进度条
This commit is contained in:
99
server.test/ProgressTrackerTest.cs
Normal file
99
server.test/ProgressTrackerTest.cs
Normal file
@@ -0,0 +1,99 @@
|
||||
using Microsoft.AspNetCore.SignalR;
|
||||
using Moq;
|
||||
using server.Hubs;
|
||||
using server.Services;
|
||||
|
||||
public class ProgressTrackerTest
|
||||
{
|
||||
[Fact]
|
||||
public async Task Test_ProgressReporter_Basic()
|
||||
{
|
||||
int reportedValue = -1;
|
||||
var reporter = new ProgressReporter(async v => { reportedValue = v; await Task.CompletedTask; }, 0, 100, 10);
|
||||
|
||||
// Report
|
||||
reporter.Report(50);
|
||||
Assert.Equal(50, reporter.Progress);
|
||||
Assert.Equal(ProgressStatus.InProgress, reporter.Status);
|
||||
Assert.Equal(50, reportedValue);
|
||||
|
||||
// Increase by step
|
||||
reporter.Increase();
|
||||
Assert.Equal(60, reporter.Progress);
|
||||
|
||||
// Increase by value
|
||||
reporter.Increase(20);
|
||||
Assert.Equal(80, reporter.Progress);
|
||||
|
||||
// Finish
|
||||
reporter.Finish();
|
||||
Assert.Equal(ProgressStatus.Completed, reporter.Status);
|
||||
Assert.Equal(100, reporter.Progress);
|
||||
|
||||
// Cancel
|
||||
reporter = new ProgressReporter(async v => { reportedValue = v; await Task.CompletedTask; }, 0, 100, 10);
|
||||
reporter.Cancel();
|
||||
Assert.Equal(ProgressStatus.Canceled, reporter.Status);
|
||||
Assert.Equal("User Cancelled", reporter.ErrorMessage);
|
||||
|
||||
// Error
|
||||
reporter = new ProgressReporter(async v => { reportedValue = v; await Task.CompletedTask; }, 0, 100, 10);
|
||||
reporter.Error("Test Error");
|
||||
Assert.Equal(ProgressStatus.Failed, reporter.Status);
|
||||
Assert.Equal("Test Error", reporter.ErrorMessage);
|
||||
|
||||
// CreateChild
|
||||
var parent = new ProgressReporter(async v => { await Task.CompletedTask; }, 10, 100, 5);
|
||||
var child = parent.CreateChild(50, 5);
|
||||
Assert.Equal(ProgressStatus.Pending, child.Status);
|
||||
Assert.NotNull(child);
|
||||
|
||||
// Child Increase
|
||||
child.Increase();
|
||||
Assert.Equal(ProgressStatus.InProgress, child.Status);
|
||||
Assert.Equal(20, child.ProgressPercent);
|
||||
Assert.Equal(20, parent.Progress);
|
||||
|
||||
// Child Complete
|
||||
child.Finish();
|
||||
Assert.Equal(ProgressStatus.Completed, child.Status);
|
||||
Assert.Equal(100, child.ProgressPercent);
|
||||
Assert.Equal(60, parent.Progress);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Test_ProgressTrackerService_Basic()
|
||||
{
|
||||
// Mock SignalR HubContext
|
||||
var mockHubContext = new Mock<IHubContext<ProgressHub, IProgressReceiver>>();
|
||||
var service = new ProgressTrackerService(mockHubContext.Object);
|
||||
|
||||
// CreateTask
|
||||
var (taskId, reporter) = service.CreateTask();
|
||||
Assert.NotNull(taskId);
|
||||
Assert.NotNull(reporter);
|
||||
|
||||
// GetReporter
|
||||
var optReporter = service.GetReporter(taskId);
|
||||
Assert.True(optReporter.HasValue);
|
||||
Assert.Equal(reporter, optReporter.Value);
|
||||
|
||||
// GetProgressStatus
|
||||
var optStatus = service.GetProgressStatus(taskId);
|
||||
Assert.True(optStatus.HasValue);
|
||||
Assert.Equal(ProgressStatus.Pending, optStatus.Value);
|
||||
|
||||
// BindTask
|
||||
var bindResult = service.BindTask(taskId, "conn1");
|
||||
Assert.True(bindResult);
|
||||
|
||||
// CancelTask
|
||||
var cancelResult = service.CancelTask(taskId);
|
||||
Assert.True(cancelResult);
|
||||
|
||||
// After cancel, status should be Cancelled
|
||||
var optStatus2 = service.GetProgressStatus(taskId);
|
||||
Assert.True(optStatus2.HasValue);
|
||||
Assert.Equal(ProgressStatus.Canceled, optStatus2.Value);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user