| | 1 | | using DCL.Helpers; |
| | 2 | | using DCL.Models; |
| | 3 | | using System.Collections; |
| | 4 | | using UnityEngine; |
| | 5 | | using NSubstitute; |
| | 6 | | using UnityEngine.TestTools; |
| | 7 | |
|
| | 8 | | public class AvatarModifierAreaShould : IntegrationTestSuite_Legacy |
| | 9 | | { |
| | 10 | | private const string MOCK_MODIFIER_KEY = "MockModifier"; |
| | 11 | | private AvatarModifierArea avatarModifierArea; |
| | 12 | | private AvatarModifier mockAvatarModifier; |
| | 13 | |
|
| | 14 | | protected override IEnumerator SetUp() |
| | 15 | | { |
| 5 | 16 | | yield return base.SetUp(); |
| | 17 | |
|
| 5 | 18 | | var entity = TestHelpers.CreateSceneEntity(scene); |
| 5 | 19 | | AvatarModifierArea.Model model = new AvatarModifierArea.Model |
| | 20 | | { |
| | 21 | | area = new BoxTriggerArea { box = new Vector3(10, 10, 10) }, |
| | 22 | | }; |
| 5 | 23 | | avatarModifierArea = TestHelpers.EntityComponentCreate<AvatarModifierArea, AvatarModifierArea.Model>(scene, enti |
| 5 | 24 | | yield return avatarModifierArea.routine; |
| | 25 | |
|
| 5 | 26 | | model.modifiers = new[] { MOCK_MODIFIER_KEY }; |
| 5 | 27 | | mockAvatarModifier = Substitute.For<AvatarModifier>(); |
| 5 | 28 | | avatarModifierArea.modifiers.Add(MOCK_MODIFIER_KEY, mockAvatarModifier); |
| | 29 | |
|
| | 30 | | //now that the modifier has been added we trigger the Update again so it gets taken into account |
| 5 | 31 | | yield return TestHelpers.EntityComponentUpdate(avatarModifierArea, model); |
| 5 | 32 | | } |
| | 33 | |
|
| | 34 | | [UnityTest] |
| | 35 | | public IEnumerator NotApplyModifierIfNoAvatarDetected() |
| | 36 | | { |
| 1 | 37 | | yield return null; |
| | 38 | |
|
| 1 | 39 | | mockAvatarModifier.DidNotReceiveWithAnyArgs().ApplyModifier(null); |
| 1 | 40 | | } |
| | 41 | |
|
| | 42 | | [UnityTest] |
| | 43 | | public IEnumerator ApplyModifierWhenDetectingAvatar() |
| | 44 | | { |
| 1 | 45 | | var fakeObject = PrepareGameObjectForModifierArea(); |
| 1 | 46 | | yield return null; |
| | 47 | |
|
| 1 | 48 | | mockAvatarModifier.Received().ApplyModifier(fakeObject); |
| 1 | 49 | | } |
| | 50 | |
|
| | 51 | | [UnityTest] |
| | 52 | | public IEnumerator BehaveWhenTheModifiedItemIsRemoved() |
| | 53 | | { |
| 1 | 54 | | var fakeObject = PrepareGameObjectForModifierArea(); |
| 1 | 55 | | yield return null; |
| | 56 | |
|
| 1 | 57 | | Object.Destroy(fakeObject); |
| 1 | 58 | | yield return null; |
| 1 | 59 | | } |
| | 60 | |
|
| | 61 | | [UnityTest] |
| | 62 | | public IEnumerator RemoveModifiersWhenMovingAway() |
| | 63 | | { |
| 1 | 64 | | var fakeObject = PrepareGameObjectForModifierArea(); |
| 1 | 65 | | yield return null; |
| | 66 | |
|
| 1 | 67 | | fakeObject.transform.position += Vector3.one * 100; |
| 1 | 68 | | yield return null; |
| | 69 | |
|
| 1 | 70 | | mockAvatarModifier.Received().RemoveModifier(fakeObject); |
| 1 | 71 | | } |
| | 72 | |
|
| | 73 | | [UnityTest] |
| | 74 | | public IEnumerator RemoveModifiersWhenBeingDestroyed() |
| | 75 | | { |
| 1 | 76 | | var fakeObject = PrepareGameObjectForModifierArea(); |
| 1 | 77 | | yield return null; |
| | 78 | |
|
| 1 | 79 | | mockAvatarModifier.Received().ApplyModifier(fakeObject); |
| 1 | 80 | | fakeObject.SetActive(false); |
| 1 | 81 | | Object.Destroy(avatarModifierArea.gameObject); |
| 1 | 82 | | yield return null; |
| 1 | 83 | | mockAvatarModifier.Received().RemoveModifier(fakeObject); |
| 1 | 84 | | } |
| | 85 | |
|
| | 86 | | private GameObject PrepareGameObjectForModifierArea() |
| | 87 | | { |
| 4 | 88 | | GameObject fakeObject = CreateTestGameObject("_FakeObject"); |
| | 89 | |
|
| | 90 | | // ModifierArea presumes the object has a parent |
| 4 | 91 | | GameObject fakeParent = CreateTestGameObject("_FakeParent"); |
| 4 | 92 | | fakeObject.transform.parent = fakeParent.transform; |
| | 93 | |
|
| 4 | 94 | | var boxCollider = fakeObject.AddComponent<BoxCollider>(); |
| 4 | 95 | | boxCollider.size = new Vector3(3, 3, 3); |
| 4 | 96 | | fakeObject.layer = LayerMask.NameToLayer(BoxTriggerArea.AVATAR_TRIGGER_LAYER); |
| 4 | 97 | | fakeObject.transform.position = avatarModifierArea.transform.position; |
| | 98 | |
|
| 4 | 99 | | return fakeParent; |
| | 100 | | } |
| | 101 | | } |