PrototypeUploadTest.cs 3.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. using Content.Shared.Tag;
  2. using Robust.Client.Upload.Commands;
  3. using Robust.Shared.GameObjects;
  4. using Robust.Shared.Prototypes;
  5. using Robust.Shared.Upload;
  6. namespace Content.IntegrationTests.Tests.PrototypeTests;
  7. public sealed class PrototypeUploadTest
  8. {
  9. public const string IdA = "UploadTestPrototype";
  10. public const string IdB = $"{IdA}NoParent";
  11. public const string IdC = $"{IdA}Abstract";
  12. public const string IdD = $"{IdA}UploadedParent";
  13. private const string File = $@"
  14. - type: entity
  15. parent: BaseStructure # BaseItem can cause AllItemsHaveSpritesTest to fail
  16. id: {IdA}
  17. - type: entity
  18. id: {IdB}
  19. - type: entity
  20. id: {IdC}
  21. abstract: true
  22. components:
  23. - type: Tag
  24. - type: entity
  25. id: {IdD}
  26. parent: {IdC}
  27. ";
  28. [Test]
  29. [TestOf(typeof(LoadPrototypeCommand))]
  30. public async Task TestFileUpload()
  31. {
  32. await using var pair = await PoolManager.GetServerClient(new PoolSettings {Connected = true});
  33. var sCompFact = pair.Server.ResolveDependency<IComponentFactory>();
  34. var cCompFact = pair.Client.ResolveDependency<IComponentFactory>();
  35. Assert.That(!pair.Server.ProtoMan.TryIndex<EntityPrototype>(IdA, out _));
  36. Assert.That(!pair.Server.ProtoMan.TryIndex<EntityPrototype>(IdB, out _));
  37. Assert.That(!pair.Server.ProtoMan.TryIndex<EntityPrototype>(IdC, out _));
  38. Assert.That(!pair.Server.ProtoMan.TryIndex<EntityPrototype>(IdD, out _));
  39. Assert.That(!pair.Client.ProtoMan.TryIndex<EntityPrototype>(IdA, out _));
  40. Assert.That(!pair.Client.ProtoMan.TryIndex<EntityPrototype>(IdB, out _));
  41. Assert.That(!pair.Client.ProtoMan.TryIndex<EntityPrototype>(IdC, out _));
  42. Assert.That(!pair.Client.ProtoMan.TryIndex<EntityPrototype>(IdD, out _));
  43. var protoLoad = pair.Client.ResolveDependency<IGamePrototypeLoadManager>();
  44. await pair.Client.WaitPost(() => protoLoad.SendGamePrototype(File));
  45. await pair.RunTicksSync(10);
  46. Assert.That(pair.Server.ProtoMan.TryIndex<EntityPrototype>(IdA, out var sProtoA));
  47. Assert.That(pair.Server.ProtoMan.TryIndex<EntityPrototype>(IdB, out var sProtoB));
  48. Assert.That(!pair.Server.ProtoMan.TryIndex<EntityPrototype>(IdC, out _));
  49. Assert.That(pair.Server.ProtoMan.TryIndex<EntityPrototype>(IdD, out var sProtoD));
  50. Assert.That(pair.Client.ProtoMan.TryIndex<EntityPrototype>(IdA, out var cProtoA));
  51. Assert.That(pair.Client.ProtoMan.TryIndex<EntityPrototype>(IdB, out var cProtoB));
  52. Assert.That(!pair.Client.ProtoMan.TryIndex<EntityPrototype>(IdC, out _));
  53. Assert.That(pair.Client.ProtoMan.TryIndex<EntityPrototype>(IdD, out var cProtoD));
  54. // Arbitrarily choosing TagComponent to check that inheritance works for uploaded prototypes.
  55. await pair.Server.WaitPost(() =>
  56. {
  57. Assert.That(sProtoA!.TryGetComponent<TagComponent>(out _, sCompFact), Is.True);
  58. Assert.That(sProtoB!.TryGetComponent<TagComponent>(out _, sCompFact), Is.False);
  59. Assert.That(sProtoD!.TryGetComponent<TagComponent>(out _, sCompFact), Is.True);
  60. });
  61. await pair.Client.WaitPost(() =>
  62. {
  63. Assert.That(cProtoA!.TryGetComponent<TagComponent>(out _, cCompFact), Is.True);
  64. Assert.That(cProtoB!.TryGetComponent<TagComponent>(out _, cCompFact), Is.False);
  65. Assert.That(cProtoD!.TryGetComponent<TagComponent>(out _, cCompFact), Is.True);
  66. });
  67. await pair.CleanReturnAsync();
  68. }
  69. }