-
Notifications
You must be signed in to change notification settings - Fork 75
Expand file tree
/
Copy pathDownloadPlanBuilderTests.cs
More file actions
105 lines (91 loc) · 3.23 KB
/
Copy pathDownloadPlanBuilderTests.cs
File metadata and controls
105 lines (91 loc) · 3.23 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
using System.Linq;
using GeneralUpdate.Core.Download;
using GeneralUpdate.Core.Download.Models;
using Xunit;
namespace CoreTest.Download;
public class DownloadPlanBuilderTests
{
[Fact]
public void Build_EmptyAssets_ReturnsEmptyPlan()
{
var plan = DownloadPlanBuilder.Build(Array.Empty<DownloadAsset>(), "1.0.0");
Assert.False(plan.HasAssets);
}
[Fact]
public void Build_SingleAsset_ReturnsIt()
{
var assets = new[] { new DownloadAsset("pkg", "http://x", 100, "sha", "1.0.1") };
var plan = DownloadPlanBuilder.Build(assets, "1.0.0");
Assert.True(plan.HasAssets);
Assert.Single(plan.Assets);
Assert.Equal("1.0.1", plan.Assets[0].Version);
}
[Fact]
public void Build_CrossVersionPackage_DirectJump()
{
var assets = new[]
{
new DownloadAsset("chain", "http://x", 100, "sha", "1.0.1"),
new DownloadAsset("jump", "http://y", 500, "sha2", "2.0.0",
IsCrossVersion: true, FromVersion: "1.0.0")
};
var plan = DownloadPlanBuilder.Build(assets, "1.0.0");
Assert.Single(plan.Assets); // Only the cross-version jump package
Assert.Equal("2.0.0", plan.Assets[0].Version);
}
[Fact]
public void Build_FrozenPackagesExcluded()
{
var assets = new[]
{
new DownloadAsset("bad", "http://x", 100, "sha", "1.0.1", IsFreeze: true),
new DownloadAsset("good", "http://y", 100, "sha2", "1.0.2")
};
var plan = DownloadPlanBuilder.Build(assets, "1.0.0");
Assert.Single(plan.Assets);
Assert.Equal("1.0.2", plan.Assets[0].Version);
}
[Fact]
public void Build_ForcedUpdate_MarksPlan()
{
var assets = new[]
{
new DownloadAsset("forced", "http://x", 100, "sha", "1.0.1", IsForcibly: true)
};
var plan = DownloadPlanBuilder.Build(assets, "1.0.0");
Assert.True(plan.IsForcibly);
}
[Fact]
public void Build_VersionChain_MultipleSteps()
{
var assets = new[]
{
new DownloadAsset("v101", "http://x", 100, "sha1", "1.0.1"),
new DownloadAsset("v102", "http://y", 100, "sha2", "1.0.2"),
new DownloadAsset("v103", "http://z", 100, "sha3", "1.0.3")
};
var plan = DownloadPlanBuilder.Build(assets, "1.0.0");
Assert.Equal(3, plan.Assets.Count);
Assert.Equal("1.0.1", plan.Assets[0].Version);
Assert.Equal("1.0.3", plan.Assets[^1].Version);
}
[Fact]
public void Build_SameVersion_ReturnsEmpty()
{
var assets = new[] { new DownloadAsset("same", "http://x", 100, "sha", "1.0.0") };
var plan = DownloadPlanBuilder.Build(assets, "1.0.0");
Assert.False(plan.HasAssets);
}
[Fact]
public void Build_MinClientVersion_FiltersOut()
{
var assets = new[]
{
new DownloadAsset("compat", "http://x", 100, "sha1", "1.0.1", MinClientVersion: "1.0.0"),
new DownloadAsset("incompat", "http://y", 100, "sha2", "1.0.2", MinClientVersion: "2.0.0")
};
var plan = DownloadPlanBuilder.Build(assets, "1.0.0");
Assert.Single(plan.Assets);
Assert.Equal("1.0.1", plan.Assets[0].Version);
}
}