< Summary

Class:BlockersControllerShould
Assembly:BlockerControllerTests
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/BlockerController/Tests/BlockersControllerShould.cs
Covered lines:78
Uncovered lines:0
Coverable lines:78
Total lines:150
Line coverage:100% (78 of 78)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
SetUp()0%110100%
TearDown()0%110100%
SetupBlockersOnlyWhenEnabled()0%220100%
PutBlockersAroundExplorableArea()0%110100%
ClearOnlyChangedBlockers()0%110100%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/BlockerController/Tests/BlockersControllerShould.cs

#LineLine coverage
 1using System.Collections.Generic;
 2using DCL;
 3using DCL.Controllers;
 4using NSubstitute;
 5using NSubstitute.ReceivedExtensions;
 6using NUnit.Framework;
 7using UnityEngine;
 8
 9public class BlockersControllerShould
 10{
 11    private ISceneHandler sceneHandler;
 12    WorldBlockersController blockerController;
 13    IBlockerInstanceHandler blockerInstanceHandler;
 14    GameObject blockersParent;
 15
 16    [SetUp]
 17    protected void SetUp()
 18    {
 319        RenderProfileManifest.i.Initialize();
 20
 321        sceneHandler = Substitute.For<ISceneHandler>();
 22
 323        var allLoadedParcelCoords = new HashSet<Vector2Int>();
 324        allLoadedParcelCoords.Add(new Vector2Int(0, 0));
 325        allLoadedParcelCoords.Add(new Vector2Int(-1, 0));
 326        allLoadedParcelCoords.Add(new Vector2Int(-1, 1));
 27
 328        sceneHandler.GetAllLoadedScenesCoords().Returns(allLoadedParcelCoords);
 29
 330        var animationHandler = Substitute.For<IBlockerAnimationHandler>();
 31        //NOTE(Brian): Call OnFinish() when blockerAnimationHandler.FadeOut is called.
 332        animationHandler.FadeOut(Arg.Any<GameObject>(), Arg.Invoke());
 33
 334        var newBlockerInstanceHandler = new BlockerInstanceHandler();
 335        newBlockerInstanceHandler.Initialize(animationHandler, null);
 36
 337        blockerInstanceHandler = newBlockerInstanceHandler;
 338        blockersParent = new GameObject();
 339        blockerInstanceHandler.SetParent(blockersParent.transform);
 40
 341        blockerController = new WorldBlockersController();
 342        blockerController.Initialize(sceneHandler, blockerInstanceHandler);
 343    }
 44
 45    [TearDown]
 46    protected void TearDown()
 47    {
 348        blockerController.Dispose();
 349        Object.Destroy(blockersParent);
 350    }
 51
 52    [Test]
 53    public void SetupBlockersOnlyWhenEnabled()
 54    {
 55        // Arrange
 156        blockerInstanceHandler = Substitute.For<IBlockerInstanceHandler>();
 157        blockerInstanceHandler.GetBlockers().Returns(new Dictionary<Vector2Int, IPoolableObject>());
 58
 159        if (blockerController != null)
 160            blockerController.Dispose();
 61
 162        blockerController.Initialize(sceneHandler, blockerInstanceHandler);
 63
 64        // Act-assert #1: first blockers added should be shown
 165        blockerController.SetupWorldBlockers();
 166        blockerInstanceHandler.ReceivedWithAnyArgs().ShowBlocker(default);
 67
 168        blockerInstanceHandler.ClearReceivedCalls();
 69
 70        // Act-assert #2: if disabled, blockers should be removed
 171        blockerController.SetEnabled(false);
 172        blockerInstanceHandler.Received(1).DestroyAllBlockers();
 73
 174        blockerInstanceHandler.ClearReceivedCalls();
 75
 76        // Act-assert #3: if disabled, no blockers should be added nor removed
 177        blockerController.SetupWorldBlockers();
 178        blockerInstanceHandler.DidNotReceiveWithAnyArgs().ShowBlocker(default);
 179        blockerInstanceHandler.DidNotReceiveWithAnyArgs().HideBlocker(default, default);
 80
 181        blockerInstanceHandler.ClearReceivedCalls();
 82
 83        // Act-assert #4: If enabled again, blockers should be added or removed as needed
 184        blockerController.SetEnabled(true);
 185        blockerController.SetupWorldBlockers();
 186        blockerInstanceHandler.ReceivedWithAnyArgs().ShowBlocker(default);
 87
 188        blockerController.Dispose();
 189    }
 90
 91    [Test]
 92    public void PutBlockersAroundExplorableArea()
 93    {
 194        blockerController.SetupWorldBlockers();
 195        var blockers = blockerInstanceHandler.GetBlockers();
 96
 197        Assert.AreEqual(12, blockers.Count);
 198        Assert.IsFalse(blockers.ContainsKey(new Vector2Int(0, 0)));
 199        Assert.IsFalse(blockers.ContainsKey(new Vector2Int(-1, 0)));
 1100        Assert.IsFalse(blockers.ContainsKey(new Vector2Int(-1, 1)));
 101
 1102        Assert.IsTrue(blockers.ContainsKey(new Vector2Int(1, 0)));
 1103        Assert.IsTrue(blockers.ContainsKey(new Vector2Int(0, 1)));
 1104        Assert.IsTrue(blockers.ContainsKey(new Vector2Int(0, -1)));
 1105        Assert.IsTrue(blockers.ContainsKey(new Vector2Int(1, 1)));
 1106        Assert.IsTrue(blockers.ContainsKey(new Vector2Int(-1, -1)));
 1107        Assert.IsTrue(blockers.ContainsKey(new Vector2Int(1, -1)));
 1108        Assert.IsTrue(blockers.ContainsKey(new Vector2Int(-2, 0)));
 1109        Assert.IsTrue(blockers.ContainsKey(new Vector2Int(-2, -1)));
 1110        Assert.IsTrue(blockers.ContainsKey(new Vector2Int(-2, 1)));
 1111        Assert.IsTrue(blockers.ContainsKey(new Vector2Int(-1, 2)));
 1112        Assert.IsTrue(blockers.ContainsKey(new Vector2Int(0, 2)));
 1113        Assert.IsTrue(blockers.ContainsKey(new Vector2Int(-2, 2)));
 1114    }
 115
 116    [Test]
 117    public void ClearOnlyChangedBlockers()
 118    {
 1119        blockerController.SetupWorldBlockers();
 1120        var blockers = blockerInstanceHandler.GetBlockers();
 121
 122        // Save instance of some blockers that shouldn't change on the next scene load
 1123        var blocker1 = blockers[new Vector2Int(-1, -1)].gameObject;
 1124        var blocker2 = blockers[new Vector2Int(-2, -1)].gameObject;
 1125        var blocker3 = blockers[new Vector2Int(-2, 0)].gameObject;
 126
 127        // check blocker that will get removed on next scene load
 1128        Assert.IsTrue(blockers.ContainsKey(new Vector2Int(0, 1)));
 129
 130        // Load 2nd scene next to the first one
 1131        var newTotalLoadedCoords = new HashSet<Vector2Int>();
 1132        newTotalLoadedCoords.Add(new Vector2Int(0, 1));
 1133        newTotalLoadedCoords.Add(new Vector2Int(1, 1));
 1134        newTotalLoadedCoords.Add(new Vector2Int(1, 2));
 1135        newTotalLoadedCoords.UnionWith(sceneHandler.GetAllLoadedScenesCoords());
 136
 1137        sceneHandler.GetAllLoadedScenesCoords().Returns(newTotalLoadedCoords);
 1138        blockerController.SetupWorldBlockers();
 139
 1140        blockers = blockerInstanceHandler.GetBlockers();
 141
 142        // Check some non-changed blockers:
 1143        Assert.IsTrue(blockers[new Vector2Int(-1, -1)].gameObject == blocker1);
 1144        Assert.IsTrue(blockers[new Vector2Int(-2, -1)].gameObject == blocker2);
 1145        Assert.IsTrue(blockers[new Vector2Int(-2, 0)].gameObject == blocker3);
 146
 147        // Check removed blocker
 1148        Assert.IsFalse(blockers.ContainsKey(new Vector2Int(0, 1)));
 1149    }
 150}