-
Notifications
You must be signed in to change notification settings - Fork 68
Expand file tree
/
Copy pathCraftingSyncTests.cs
More file actions
109 lines (93 loc) · 4.68 KB
/
Copy pathCraftingSyncTests.cs
File metadata and controls
109 lines (93 loc) · 4.68 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
using E2E.Tests.Environment;
using HarmonyLib;
using System.Reflection;
using TaleWorlds.CampaignSystem;
using TaleWorlds.Core;
using TaleWorlds.Localization;
using Xunit.Abstractions;
namespace E2E.Tests.Services.CraftingService
{
public class CraftingSyncTests : IDisposable
{
E2ETestEnvironment TestEnvironment { get; }
public CraftingSyncTests(ITestOutputHelper output)
{
TestEnvironment = new E2ETestEnvironment(output);
}
public void Dispose()
{
TestEnvironment.Dispose();
}
[Fact]
public void ServerCreateCrafting_SyncAllClients()
{
// Arrange
var server = TestEnvironment.Server;
// Act
string? craftingId = null;
var currentHistoryIndexField = AccessTools.Field(typeof(Crafting), nameof(Crafting._currentHistoryIndex));
var craftedItemObjectField = AccessTools.Field(typeof(Crafting), nameof(Crafting._craftedItemObject));
var currentHistoryIntercept = TestEnvironment.GetIntercept(currentHistoryIndexField);
var craftingItemObjectIntercept = TestEnvironment.GetIntercept(craftedItemObjectField);
server.Call(() =>
{
CraftingTemplate craftingTemplate = new CraftingTemplate();
CultureObject cultureObject = new CultureObject();
Crafting crafting = new Crafting(craftingTemplate, cultureObject, new TextObject("test"));
Assert.True(server.ObjectManager.TryGetId(crafting, out craftingId));
});
// Assert
Assert.True(server.ObjectManager.TryGetObject(craftingId, out Crafting serverCrafting));
server.Call(() =>
{
currentHistoryIntercept.Invoke(null, new object[] { serverCrafting, 69 });
craftingItemObjectIntercept.Invoke(null, new object[] { serverCrafting, new ItemObject("item") });
ItemModifierGroup img = new ItemModifierGroup();
ItemModifier modifier = new ItemModifier();
modifier.Armor = 10;
modifier.Damage = 10;
modifier.ChargeDamage = 10;
modifier.HitPoints = 10;
modifier.ItemQuality = ItemQuality.Poor;
modifier.LootDropScore = 10;
modifier.Maneuver = 10;
modifier.MissileSpeed = 10;
modifier.MountHitPoints = 10;
modifier.MountSpeed = 10;
modifier.Name = new TextObject("test");
modifier.PriceMultiplier = 10;
modifier.ProductionDropScore = 10;
modifier.Speed = 10;
modifier.StackCount = 10;
img.AddItemModifier(modifier);
serverCrafting.CurrentItemModifierGroup = img;
serverCrafting.CraftedWeaponName = new TextObject("craftedWeapon");
var weaponDesign = new WeaponDesign(
new CraftingTemplate(),
new TextObject("Excaliber"),
new WeaponDesignElement[] {
new WeaponDesignElement(new CraftingPiece())
});
serverCrafting.CurrentWeaponDesign = weaponDesign;
},
new MethodInfo[]
{
AccessTools.Method(typeof(WeaponDesign), nameof(WeaponDesign.CalculatePivotDistances)),
AccessTools.Method(typeof(WeaponDesign), nameof(WeaponDesign.CalculateHolsterShiftAmount))
});
server.ObjectManager.TryGetId(serverCrafting._craftedItemObject, out string serverObjectId);
server.ObjectManager.TryGetId(serverCrafting.CurrentWeaponDesign, out string serverWeaponDesignId);
foreach (var client in TestEnvironment.Clients)
{
Assert.True(client.ObjectManager.TryGetObject(craftingId, out Crafting clientCrafting));
Assert.Equal(serverCrafting._currentHistoryIndex, clientCrafting._currentHistoryIndex);
client.ObjectManager.TryGetId(clientCrafting._craftedItemObject, out string clientObjectId);
client.ObjectManager.TryGetId(clientCrafting.CurrentWeaponDesign, out string clientWeaponDesignId);
Assert.Equal(serverObjectId, clientObjectId);
Assert.Equal(serverWeaponDesignId, clientWeaponDesignId);
Assert.Equal(serverCrafting.CurrentItemModifierGroup.ItemModifiers.Count, clientCrafting.CurrentItemModifierGroup.ItemModifiers.Count);
Assert.Equal(serverCrafting.CraftedWeaponName.ToString(), clientCrafting.CraftedWeaponName.ToString());
}
}
}
}