< Summary

Class:AvatarShape_Tests.WearableControllerShould
Assembly:AvatarShapeTests
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Components/Avatar/Tests/WearableControllerShould.cs
Covered lines:69
Uncovered lines:0
Coverable lines:69
Total lines:164
Line coverage:100% (69 of 69)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
WearableControllerShould()0%110100%
SetUp()0%330100%
LoadSuccessfully()0%330100%
FailsGracefully()0%330100%
SetAnimatorBonesProperly()0%550100%
UpdateVisibilityProperly_True()0%330100%
UpdateVisibilityProperly_False()0%330100%
TearDown()0%220100%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Components/Avatar/Tests/WearableControllerShould.cs

#LineLine coverage
 1using System.Collections;
 2using System.Collections.Generic;
 3using DCL;
 4using DCL.Components;
 5using NUnit.Framework;
 6using UnityEngine;
 7using UnityEngine.TestTools;
 8using WaitUntil = DCL.WaitUntil;
 9
 10namespace AvatarShape_Tests
 11{
 12    public class WearableControllerShould : IntegrationTestSuite_Legacy
 13    {
 14        private const string SUNGLASSES_ID = "urn:decentraland:off-chain:base-avatars:black_sun_glasses";
 15
 16        private BaseDictionary<string, WearableItem> catalog;
 17        private Transform wearableHolder;
 118        private List<WearableController> toCleanUp = new List<WearableController>();
 19
 20        [UnitySetUp]
 21        protected override IEnumerator SetUp()
 22        {
 523            yield return base.SetUp();
 524            catalog = AvatarAssetsTestHelpers.CreateTestCatalogLocal();
 25
 526            toCleanUp.Clear();
 527            wearableHolder = CreateTestGameObject("_Holder").transform;
 528        }
 29
 30        [UnityTest]
 31        public IEnumerator LoadSuccessfully()
 32        {
 33            //Arrange
 134            catalog.TryGetValue(SUNGLASSES_ID, out WearableItem wearableItem);
 135            WearableController wearable = new WearableController(wearableItem);
 136            toCleanUp.Add(wearable);
 37
 38            //Act
 139            bool succeeded = false;
 140            bool failed = false;
 241            wearable.Load(WearableLiterals.BodyShapes.FEMALE, wearableHolder, x => succeeded = true, x => failed = true)
 742            yield return new WaitUntil(() => succeeded || failed);
 43
 44            //Assert
 145            Assert.IsTrue(succeeded);
 146            Assert.IsFalse(failed);
 147        }
 48
 49        [UnityTest]
 50        public IEnumerator FailsGracefully()
 51        {
 52            //Arrange
 153            WearableItem unexistentWearableItem = new WearableItem
 54            {
 55                data = new WearableItem.Data()
 56                {
 57                    representations = new []
 58                    {
 59                        new WearableItem.Representation
 60                        {
 61                            mainFile = "NothingHere",
 62                            contents = new [] { new WearableItem.MappingPair { key = "NothingHere", hash = "NothingHere"
 63                            bodyShapes = new [] { WearableLiterals.BodyShapes.FEMALE, WearableLiterals.BodyShapes.MALE }
 64                        }
 65                    }
 66                }
 67            };
 168            WearableController wearable = new WearableController(unexistentWearableItem);
 169            toCleanUp.Add(wearable);
 70
 71            //Act
 172            bool succeeded = false;
 173            bool failed = false;
 174            RendereableAssetLoadHelper.LoadingType cacheLoadingType = RendereableAssetLoadHelper.loadingType;
 175            RendereableAssetLoadHelper.loadingType = RendereableAssetLoadHelper.LoadingType.ASSET_BUNDLE_ONLY;
 276            wearable.Load(WearableLiterals.BodyShapes.FEMALE, wearableHolder, x => succeeded = true, x => failed = true)
 277            yield return new WaitUntil(() => succeeded || failed);
 178            RendereableAssetLoadHelper.loadingType = cacheLoadingType;
 79
 80            //Assert
 181            Assert.IsFalse(succeeded);
 182            Assert.IsTrue(failed);
 183        }
 84
 85        [UnityTest]
 86        public IEnumerator SetAnimatorBonesProperly()
 87        {
 88            //Arrange
 189            SkinnedMeshRenderer skinnedMeshRenderer = CreateTestGameObject("_SMR_Holder").AddComponent<SkinnedMeshRender
 190            skinnedMeshRenderer.rootBone = CreateTestGameObject("_rootBone").transform;
 191            skinnedMeshRenderer.bones = new Transform[5];
 1292            for (var i = 0; i < skinnedMeshRenderer.bones.Length; i++)
 93            {
 594                skinnedMeshRenderer.bones[i] = CreateTestGameObject($"_rootBone_{i}").transform;
 95            }
 96
 197            catalog.TryGetValue(SUNGLASSES_ID, out WearableItem wereableItem);
 198            WearableController wearable = new WearableController(wereableItem);
 199            toCleanUp.Add(wearable);
 1100            wearable.Load(WearableLiterals.BodyShapes.FEMALE, wearableHolder, null, null);
 7101            yield return new WaitUntil(() => wearable.isReady);
 102
 103            //Act
 1104            wearable.SetAnimatorBones(skinnedMeshRenderer);
 105
 106            //Assert
 1107            SkinnedMeshRenderer wearableSMR = wearable.assetContainer.GetComponentInChildren<SkinnedMeshRenderer>();
 1108            Assert.AreEqual(skinnedMeshRenderer.rootBone, wearableSMR.rootBone);
 12109            for (int index = 0; index < wearableSMR.bones.Length; index++)
 110            {
 5111                Assert.AreEqual(skinnedMeshRenderer.bones[index], wearableSMR.bones[index]);
 112            }
 1113        }
 114
 115        [UnityTest]
 116        public IEnumerator UpdateVisibilityProperly_True()
 117        {
 118            //Arrange
 1119            catalog.TryGetValue(SUNGLASSES_ID, out WearableItem wereableItem);
 1120            WearableController wearable = new WearableController(wereableItem);
 1121            toCleanUp.Add(wearable);
 1122            wearable.Load(WearableLiterals.BodyShapes.FEMALE, wearableHolder, null, null);
 7123            yield return new WaitUntil(() => wearable.isReady);
 1124            SkinnedMeshRenderer skinnedMeshRenderer = wearable.assetContainer.GetComponentInChildren<SkinnedMeshRenderer
 1125            skinnedMeshRenderer.enabled = false;
 126
 127            //Act
 1128            wearable.UpdateVisibility(new HashSet<string>());
 129
 130            //Assert
 1131            Assert.IsTrue(skinnedMeshRenderer.enabled);
 1132        }
 133
 134        [UnityTest]
 135        public IEnumerator UpdateVisibilityProperly_False()
 136        {
 137            //Arrange
 1138            catalog.TryGetValue(SUNGLASSES_ID, out WearableItem wereableItem);
 1139            WearableController wearable = new WearableController(wereableItem);
 1140            toCleanUp.Add(wearable);
 1141            wearable.Load(WearableLiterals.BodyShapes.FEMALE, wearableHolder, null, null);
 7142            yield return new WaitUntil(() => wearable.isReady);
 1143            SkinnedMeshRenderer skinnedMeshRenderer = wearable.assetContainer.GetComponentInChildren<SkinnedMeshRenderer
 1144            skinnedMeshRenderer.enabled = true;
 145
 146            //Act
 1147            wearable.UpdateVisibility(new HashSet<string> { wearable.wearable.data.category });
 148
 149            //Assert
 1150            Assert.IsFalse(skinnedMeshRenderer.enabled);
 1151        }
 152
 153        protected override IEnumerator TearDown()
 154        {
 20155            for (int index = toCleanUp.Count - 1; index >= 0; index--)
 156            {
 5157                toCleanUp[index].CleanUp();
 158            }
 159
 5160            toCleanUp.Clear();
 5161            return base.TearDown();
 162        }
 163    }
 164}