public void ShouldNotDetectCollision_PlayersAreSameSize()
        {
            // Arange
            var detector = new CollisionDetectingService();

            var expectedWinner         = A.Fake <IPlayerActor>();
            var expectedWinnerPosition = new Vector2D(0, 0);
            var expectedWinnerState    = new PlayerInfo
            {
                Nickname   = nameof(expectedWinner),
                Position   = expectedWinnerPosition,
                SpriteSize = 2
            };

            A.CallTo(() => expectedWinner.GetState()).Returns(Task.FromResult(expectedWinnerState));
            A.CallTo(() => expectedWinner.GetPosition()).Returns(expectedWinnerPosition);

            var expectedLooser         = A.Fake <IPlayerActor>();
            var expectedLooserPosition = new Vector2D(0, 1);
            var expectedLooserState    = new PlayerInfo
            {
                Nickname   = nameof(expectedLooser),
                Position   = expectedLooserPosition,
                SpriteSize = 2
            };

            A.CallTo(() => expectedLooser.GetState()).Returns(Task.FromResult(expectedLooserState));
            A.CallTo(() => expectedLooser.GetPosition()).Returns(expectedLooserPosition);

            // Act
            CollisionResult result = detector.DetectCollision(expectedWinner, new[] { expectedLooser }).Result;

            // Assert
            Assert.True(result.IsEmpty());
        }
        public async void ShouldDetectCollision_BiggerPlayerWins()
        {
            // Arange
            var detector = new CollisionDetectingService();

            var expectedWinner         = A.Fake <IPlayerActor>();
            var expectedWinnerPosition = new Vector2D(3, 3);
            var expectedWinnerState    = new PlayerInfo
            {
                Nickname   = nameof(expectedWinner),
                Position   = expectedWinnerPosition,
                SpriteSize = 2
            };

            A.CallTo(() => expectedWinner.GetState()).Returns(Task.FromResult(expectedWinnerState));
            A.CallTo(() => expectedWinner.GetPosition()).Returns(expectedWinnerPosition);

            var expectedLooser         = A.Fake <IPlayerActor>();
            var expectedLooserPosition = new Vector2D(3, 4);
            var expectedLooserState    = new PlayerInfo
            {
                Nickname   = nameof(expectedLooser),
                Position   = expectedLooserPosition,
                SpriteSize = 1
            };

            A.CallTo(() => expectedLooser.GetState()).Returns(Task.FromResult(expectedLooserState));
            A.CallTo(() => expectedLooser.GetPosition()).Returns(expectedLooserPosition);

            // Act
            CollisionResult result = await detector.DetectCollision(expectedWinner, new[] { expectedLooser });

            var expectedWinnerName = expectedWinnerState.Nickname;
            var expectedLooserName = expectedLooserState.Nickname;

            var actualWinner = await result.Winner.GetState();

            var actualLooser = await result.Loosers.First().GetState();

            // Assert
            Assert.False(result.IsEmpty());
            Assert.Equal(expectedWinnerName, actualWinner.Nickname);
            Assert.Equal(expectedLooserName, actualLooser.Nickname);
        }