-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathEmbeddedItemDatabaseTests.cs
More file actions
115 lines (100 loc) · 3.71 KB
/
Copy pathEmbeddedItemDatabaseTests.cs
File metadata and controls
115 lines (100 loc) · 3.71 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
106
107
108
109
110
111
112
113
114
115
using System.Text;
using RustPlusBot.Features.ItemData.Data;
using RustPlusBot.Features.ItemData.Lookup;
namespace RustPlusBot.Features.ItemData.Tests;
public sealed class EmbeddedItemDatabaseTests
{
private readonly EmbeddedItemDatabase _db = new();
[Fact]
public void GetById_ReturnsKnownItem()
{
var ak = _db.GetById(1545779598);
Assert.NotNull(ak);
Assert.Equal("Assault Rifle", ak.Name);
}
[Fact]
public void GetById_ReturnsNullForUnknown()
{
Assert.Null(_db.GetById(123456789));
}
[Fact]
public void Sources_ArePopulated()
{
Assert.Equal(new DateOnly(2026, 4, 8), _db.Sources.NamesAsOf);
}
[Fact]
public void Parse_ThrowsOnSchemaVersionMismatch()
{
const string json =
"""{"schemaVersion":999,"sources":{"namesAsOf":"2026-04-08","recycleAsOf":"2024-09-07","craftAsOf":"2024-09-07","researchAsOf":"2024-09-07"},"items":[]}""";
using var stream = new MemoryStream(Encoding.UTF8.GetBytes(json));
Assert.Throws<InvalidOperationException>(() => EmbeddedItemDatabase.Parse(stream, 1));
}
[Fact]
public void Parse_SucceedsOnMatchingSchemaVersion()
{
const string json =
"""{"schemaVersion":1,"sources":{"namesAsOf":"2026-04-08","recycleAsOf":"2024-09-07","craftAsOf":"2024-09-07","researchAsOf":"2024-09-07"},"items":[]}""";
using var stream = new MemoryStream(Encoding.UTF8.GetBytes(json));
var dataset = EmbeddedItemDatabase.Parse(stream, 1);
Assert.Equal(1, dataset.SchemaVersion);
}
[Fact]
public void IndexById_DuplicateId_LastWins()
{
var first = new ItemRecord(42, "First", 1, null, null, null, null, null, null);
var last = new ItemRecord(42, "Last", 1, null, null, null, null, null, null);
var index = EmbeddedItemDatabase.IndexById([first, last]);
Assert.Equal("Last", index[42].Name);
}
[Fact]
public void GetById_StoneBarricade_HasDecay()
{
var rec = _db.GetById(15388698);
Assert.NotNull(rec);
Assert.NotNull(rec.Decay);
Assert.Equal(900, rec.Decay.Seconds);
Assert.Equal(100, rec.Decay.Hp);
}
[Fact]
public void GetById_WoodenDoor_HasUpkeep()
{
var rec = _db.GetById(1729120840);
Assert.NotNull(rec);
Assert.NotNull(rec.Upkeep);
var entry = Assert.Single(rec.Upkeep.Entries);
Assert.Equal(-151838493, entry.ItemId);
Assert.Equal(30, entry.QuantityMin);
Assert.Equal(100, entry.QuantityMax);
}
[Fact]
public void Sources_DecayAndUpkeep_ArePopulated()
{
Assert.Equal(new DateOnly(2024, 9, 7), _db.Sources.DecayAsOf);
Assert.Equal(new DateOnly(2024, 9, 7), _db.Sources.UpkeepAsOf);
}
[Fact]
public void ResolveRaidTarget_StoneWall_ListsTimedExplosiveCharge()
{
var found = Assert.IsType<RaidMatch.Found>(_db.ResolveRaidTarget("Stone Wall"));
Assert.Equal("Stone Wall", found.Target.Name);
Assert.Contains(found.Target.Costs, c => c.ToolId == 1248356124); // Timed Explosive Charge (C4)
}
[Fact]
public void Sources_DurabilityAsOf_IsPopulated()
{
Assert.Equal(new DateOnly(2024, 9, 7), _db.Sources.DurabilityAsOf);
}
[Fact]
public void ResolveSmelter_Furnace_ListsMetalFragmentsOutput()
{
var found = Assert.IsType<SmeltMatch.Found>(_db.ResolveSmelter("Furnace"));
Assert.Equal("Furnace", found.Smelter.Name);
Assert.Contains(found.Smelter.Conversions, c => c.OutputId == 69511070); // Metal Fragments
}
[Fact]
public void Sources_SmeltingAsOf_IsPopulated()
{
Assert.Equal(new DateOnly(2023, 11, 5), _db.Sources.SmeltingAsOf);
}
}