Example #1
0
        public async Task Get_ReturnsMatch()
        {
            var mockMatchmakingService = new Mock <IMatchmakingService>();
            var mockMatchRepository    = new Mock <IMatchRepository>();

            var matchId = Guid.NewGuid();
            var match   = new ApplicationCore.Models.Match {
                Id = matchId
            };

            mockMatchRepository.Setup(x => x.GetAsync(matchId)).Returns(Task.FromResult(match));

            var stubMatchEngine = new Mock <IMatchEngine>();

            var mockBus = new Mock <IBus>();

            _matchService = new MatchService(mockMatchmakingService.Object, stubMatchEngine.Object,
                                             mockMatchRepository.Object, mockBus.Object);

            //Act
            var returnedMatch = await _matchService.GetAsync(matchId);

            //Assert
            Assert.Equal(returnedMatch, match);
        }
Example #2
0
        public async Task GetInProgressAsync_WithMatchInProgressAsHomeTeam_ReturnsMatchId()
        {
            // Arrange
            var matchId   = Guid.NewGuid();
            var userId    = Guid.NewGuid();
            var stubMatch = new ApplicationCore.Models.Match
            {
                Id       = matchId,
                HomeTeam = new TeamDetails()
                {
                    UserId = userId
                },
                AwayTeam = new TeamDetails()
                {
                    UserId = Guid.NewGuid()
                },
                KickOff = DateTime.Now.AddMinutes(-10)
            };
            var stubMatchList = new List <ApplicationCore.Models.Match>()
            {
                stubMatch
            };

            var dbContextStub = new InMemoryDataContext <ApplicationCore.Models.Match>(stubMatchList);

            // Act
            var repository = new MatchRepository(dbContextStub);
            var result     = await repository.GetInProgressAsync(userId);

            //Assert
            Assert.Equal(stubMatch.Id, result);
        }
Example #3
0
        public async Task GetAllSync_WithMatchNotInvolvingUser_ReturnsEmptyList()
        {
            // Arrange
            var stubMatch = new ApplicationCore.Models.Match
            {
                Id       = Guid.NewGuid(),
                HomeTeam = new TeamDetails()
                {
                    UserId = Guid.NewGuid()
                },
                AwayTeam = new TeamDetails()
                {
                    UserId = Guid.NewGuid()
                }
            };
            var stubMatchList = new List <ApplicationCore.Models.Match>()
            {
                stubMatch
            };

            var dbContextStub = new InMemoryDataContext <ApplicationCore.Models.Match>(stubMatchList);

            // Act
            var repository = new MatchRepository(dbContextStub);
            var result     = await repository.GetAllAsync(0, 1, Guid.NewGuid());

            //Assert
            Assert.False(result.Any());
        }
Example #4
0
        public async Task GetAllSync_WithOneMatchPlayed_ReturnsOneMatch()
        {
            // Arrange
            var matchId   = Guid.NewGuid();
            var userId    = Guid.NewGuid();
            var stubMatch = new ApplicationCore.Models.Match
            {
                Id       = matchId,
                HomeTeam = new TeamDetails()
                {
                    UserId = userId,
                },
                AwayTeam = new TeamDetails()
                {
                    UserId = Guid.NewGuid()
                }
            };
            var stubMatchList = new List <ApplicationCore.Models.Match>()
            {
                stubMatch
            };

            var dbContextStub = new InMemoryDataContext <ApplicationCore.Models.Match>(stubMatchList);

            // Act
            var repository = new MatchRepository(dbContextStub);
            var result     = await repository.GetAllAsync(0, 1, userId);

            //Assert
            Assert.Equal(stubMatch, result.First());
        }
Example #5
0
        public async Task GetUnclaimedAsync_WhenUserHasAnUnclaimedMatch_ReturnsUnclaimedMatch()
        {
            var matchId   = Guid.NewGuid();
            var userId    = Guid.NewGuid();
            var stubMatch = new ApplicationCore.Models.Match
            {
                Id       = matchId,
                HomeTeam = new TeamDetails()
                {
                    UserId            = userId,
                    HasClaimedRewards = false
                },
                AwayTeam = new TeamDetails()
                {
                    UserId = Guid.NewGuid()
                },
                KickOff = DateTime.Now.AddMinutes(-100)
            };
            var stubMatchList = new List <ApplicationCore.Models.Match>()
            {
                stubMatch
            };

            var dbContextStub = new InMemoryDataContext <ApplicationCore.Models.Match>(stubMatchList);

            // Act
            var repository = new MatchRepository(dbContextStub);
            var result     = await repository.GetUnclaimedAsync(userId);

            //Assert
            Assert.Equal(stubMatch, result.First());
        }
Example #6
0
        public async Task ClaimingMatchReward_AsHomeTeam_ShouldMarkMatchAsClaimedByHomeTeam()
        {
            var mockMatchmakingService = new Mock <IMatchmakingService>();
            var mockMatchRepository    = new Mock <IMatchRepository>();
            var userId = Guid.NewGuid();

            var unclaimedMatch = new ApplicationCore.Models.Match
            {
                HomeTeam = new TeamDetails
                {
                    UserId = userId,
                    Squad  = new Squad
                    {
                        Id = Guid.NewGuid()
                    }
                },
                AwayTeam = new TeamDetails
                {
                    UserId = Guid.NewGuid(),
                    Squad  = new Squad
                    {
                        Id = Guid.NewGuid()
                    }
                }
            };

            ApplicationCore.Models.Match updatedMatch   = null;
            MatchCompletedEvent          publishedEvent = null;

            mockMatchRepository.Setup(x => x.GetUnclaimedAsync(userId)).Returns(
                Task.FromResult((IEnumerable <ApplicationCore.Models.Match>) new List <ApplicationCore.Models.Match>
            {
                unclaimedMatch
            }));
            mockMatchRepository.Setup(x => x.UpdateAsync(It.IsAny <ApplicationCore.Models.Match>()))
            .Callback <ApplicationCore.Models.Match>(r => updatedMatch = r);

            var stubMatchEngine = new Mock <IMatchEngine>();

            var mockBus = new Mock <IBus>();

            mockBus.Setup(x => x.PublishAsync(It.IsAny <MatchCompletedEvent>()))
            .Callback <MatchCompletedEvent>(r => publishedEvent = r);

            _matchService = new MatchService(mockMatchmakingService.Object, stubMatchEngine.Object,
                                             mockMatchRepository.Object, mockBus.Object);

            //Act
            await _matchService.ClaimAsync(userId);

            //Assert
            Assert.True(updatedMatch.HomeTeam.HasClaimedRewards);
            Assert.NotNull(publishedEvent);
        }
Example #7
0
        private void Setup()
        {
            _matchId = Guid.NewGuid();
            var userId = Guid.NewGuid();

            var matchStub = new ApplicationCore.Models.Match
            {
                HomeTeam = new TeamDetails
                {
                    UserId = userId,
                    Squad  = new Squad
                    {
                        Id = Guid.NewGuid()
                    }
                },
                AwayTeam = new TeamDetails
                {
                    UserId = Guid.NewGuid(),
                    Squad  = new Squad
                    {
                        Id = Guid.NewGuid()
                    }
                }
            };

            var mockMatchService = new Mock <IMatchService>();

            mockMatchService.Setup(x => x.GetAsync(_matchId)).Returns(Task.FromResult(matchStub));

            var mockAutomapper = new Mock <IMapper>();

            mockAutomapper.Setup(x => x.Map <LineupModel>(It.IsAny <Lineup>())).Returns(new LineupModel());

            _matchControllerStub = new MatchController(mockMatchService.Object, mockAutomapper.Object);

            var claims = new List <Claim>
            {
                new Claim(ClaimTypes.Name, "username"),
                new Claim(ClaimTypes.NameIdentifier, userId.ToString())
            };
            var identity        = new ClaimsIdentity(claims, "TestAuthType");
            var claimsPrincipal = new ClaimsPrincipal(identity);

            var contextStub = new DefaultHttpContext();

            contextStub.User = claimsPrincipal;
            var controllerContextStub = new ControllerContext();

            controllerContextStub.HttpContext      = contextStub;
            _matchControllerStub.ControllerContext = controllerContextStub;
        }
Example #8
0
        public async Task KickOff_ReturnsMatch()
        {
            var mockMatchmakingService = new Mock <IMatchmakingService>();
            var sessionId = Guid.NewGuid();
            var session   = new MatchmakingSession
            {
                Id             = sessionId,
                HostPlayerId   = Guid.NewGuid(),
                JoinedPlayerId = Guid.NewGuid()
            };

            mockMatchmakingService.Setup(x => x.GetSession(sessionId)).Returns(session);

            var stubMatchEngine = new Mock <IMatchEngine>();

            stubMatchEngine.Setup(x => x.SimulateReentrant(It.IsAny <ApplicationCore.Models.Match>()))
            .Returns(new ApplicationCore.Models.Match());

            ApplicationCore.Models.Match simulatedMatch = null;

            var mockBus       = new Mock <IBus>();
            var squadResponse = new GetSquadResponse
            {
                Lineup = new Dictionary <string, Card>()
            };

            mockBus.Setup(x => x.RequestAsync <GetSquadRequest, GetSquadResponse>(It.IsAny <GetSquadRequest>()))
            .Returns(Task.FromResult(squadResponse));

            var mockMatchRepository = new Mock <IMatchRepository>();

            mockMatchRepository.Setup(x => x.CreateAsync(It.IsAny <ApplicationCore.Models.Match>()))
            .Callback <ApplicationCore.Models.Match>(r => simulatedMatch = r);

            _matchService = new MatchService(mockMatchmakingService.Object, stubMatchEngine.Object,
                                             mockMatchRepository.Object, mockBus.Object);

            //Act
            await _matchService.KickOff(sessionId);

            //Assert
            Assert.NotNull(simulatedMatch);
        }
Example #9
0
        public void FoulAction_OnAYellowCard_WithASecondYellow_ShouldSpawnARedCardEvent()
        {
            //Arrange
            var randomnessProvider = new TestRandomnessProvider(3);
            var foul   = new Foul(randomnessProvider);
            var cardId = Guid.NewGuid();
            var card   = new Card {
                Id = cardId
            };
            var match = new ApplicationCore.Models.Match();

            match.Events.Add(new YellowCard(5, cardId, new Guid()));

            //Act
            var @event = foul.SpawnEvent(card, new Guid(), 10, match);

            //Assert
            Assert.Equal(typeof(RedCard), @event.GetType());
        }
Example #10
0
        public async Task UpdateAsync_CallsUpdateAsyncOnce()
        {
            // Arrange
            var matchId   = Guid.NewGuid();
            var stubMatch = new ApplicationCore.Models.Match()
            {
                Id = matchId
            };

            var dbContextMock = new Mock <IDataContext <ApplicationCore.Models.Match> >();

            dbContextMock.Setup(x => x.CreateAsync(stubMatch));

            // Act
            var repository = new MatchRepository(dbContextMock.Object);
            var result     = await repository.UpdateAsync(stubMatch);

            //Assert
            dbContextMock.Verify(x => x.UpdateAsync(stubMatch), Times.Once);
        }
Example #11
0
        public async Task GetAsync_MatchIdGuidPassed_ReturnsMatchWithId()
        {
            // Arrange
            var matchId   = Guid.NewGuid();
            var stubMatch = new ApplicationCore.Models.Match
            {
                Id = matchId
            };
            var stubMatchList = new List <ApplicationCore.Models.Match>()
            {
                stubMatch
            };

            var dbContextStub = new InMemoryDataContext <ApplicationCore.Models.Match>(stubMatchList);

            // Act
            var repository = new MatchRepository(dbContextStub);
            var result     = await repository.GetAsync(matchId);

            //Assert
            Assert.Equal(stubMatch, result);
        }
Example #12
0
 protected void SimulateStubMatch()
 {
     StubMatch = StubMatchEngine.SimulateReentrant(StubMatch);
 }
Example #13
0
        protected MatchTestBase()
        {
            var randomnessProvider = new ThreadSafeRandomnessProvider();
            var actions            = new IAction[] { new Foul(randomnessProvider), new Shot(randomnessProvider) };
            var actionService      = new ActionService(actions, randomnessProvider);

            StubMatchEngine = new MatchEngine(actionService);

            StubHomePlayer = new Card
            {
                Id      = Guid.NewGuid(),
                Name    = "GK",
                Rating  = 80,
                Fitness = 100
            };

            StubHomeSub = new Card
            {
                Id      = Guid.NewGuid(),
                Name    = "ST",
                Rating  = 40,
                Fitness = 100
            };

            StubAwayPlayer = new Card
            {
                Id      = Guid.NewGuid(),
                Name    = "ST",
                Rating  = 40,
                Fitness = 100
            };

            StubAwaySub = new Card
            {
                Id      = Guid.NewGuid(),
                Name    = "ST",
                Rating  = 40,
                Fitness = 100
            };

            var stubHomeTeamLineup = new Dictionary <string, IEnumerable <Card> >
            {
                {
                    "GK", new List <Card>
                    {
                        StubHomePlayer
                    }
                },
                {
                    "DEF", new List <Card>
                    {
                        new Card
                        {
                            Id      = Guid.NewGuid(),
                            Name    = "LB",
                            Rating  = 80,
                            Fitness = 100
                        },
                        new Card
                        {
                            Id      = Guid.NewGuid(),
                            Name    = "CB",
                            Rating  = 80,
                            Fitness = 100
                        },
                        new Card
                        {
                            Id      = Guid.NewGuid(),
                            Name    = "CB",
                            Rating  = 80,
                            Fitness = 100
                        },
                        new Card
                        {
                            Id      = Guid.NewGuid(),
                            Name    = "RB",
                            Rating  = 80,
                            Fitness = 100
                        }
                    }
                },
                {
                    "MID", new List <Card>
                    {
                        new Card
                        {
                            Id      = Guid.NewGuid(),
                            Name    = "LM",
                            Rating  = 80,
                            Fitness = 100
                        },
                        new Card
                        {
                            Id      = Guid.NewGuid(),
                            Name    = "CM",
                            Rating  = 80,
                            Fitness = 100
                        },
                        new Card
                        {
                            Id      = Guid.NewGuid(),
                            Name    = "CM",
                            Rating  = 80,
                            Fitness = 100
                        },
                        new Card
                        {
                            Id      = Guid.NewGuid(),
                            Name    = "RM",
                            Rating  = 80,
                            Fitness = 100
                        }
                    }
                },
                {
                    "ATT", new List <Card>
                    {
                        new Card
                        {
                            Id      = Guid.NewGuid(),
                            Name    = "ST",
                            Rating  = 80,
                            Fitness = 100
                        },
                        new Card
                        {
                            Id      = Guid.NewGuid(),
                            Name    = "ST",
                            Rating  = 80,
                            Fitness = 100
                        }
                    }
                }
            };

            var stubAwayTeamLineup = new Dictionary <string, IEnumerable <Card> >
            {
                {
                    "GK", new List <Card>
                    {
                        new Card
                        {
                            Id      = Guid.NewGuid(),
                            Name    = "GK",
                            Rating  = 40,
                            Fitness = 100
                        }
                    }
                },
                {
                    "DEF", new List <Card>
                    {
                        new Card
                        {
                            Id      = Guid.NewGuid(),
                            Name    = "LB",
                            Rating  = 40,
                            Fitness = 100
                        },
                        new Card
                        {
                            Id      = Guid.NewGuid(),
                            Name    = "CB",
                            Rating  = 40,
                            Fitness = 100
                        },
                        new Card
                        {
                            Id      = Guid.NewGuid(),
                            Name    = "CB",
                            Rating  = 40,
                            Fitness = 100
                        },
                        new Card
                        {
                            Id      = Guid.NewGuid(),
                            Name    = "RB",
                            Rating  = 40,
                            Fitness = 100
                        }
                    }
                },
                {
                    "MID", new List <Card>
                    {
                        new Card
                        {
                            Id      = Guid.NewGuid(),
                            Name    = "LM",
                            Rating  = 40,
                            Fitness = 100
                        },
                        new Card
                        {
                            Id      = Guid.NewGuid(),
                            Name    = "CM",
                            Rating  = 40,
                            Fitness = 100
                        },
                        new Card
                        {
                            Id      = Guid.NewGuid(),
                            Name    = "CM",
                            Rating  = 40,
                            Fitness = 100
                        },
                        new Card
                        {
                            Id      = Guid.NewGuid(),
                            Name    = "RM",
                            Rating  = 40,
                            Fitness = 100
                        }
                    }
                },
                {
                    "ATT", new List <Card>
                    {
                        StubAwayPlayer,
                        new Card
                        {
                            Id      = Guid.NewGuid(),
                            Name    = "ST",
                            Rating  = 40,
                            Fitness = 100
                        }
                    }
                }
            };

            StubHomeSquad = new Squad
            {
                Id     = Guid.NewGuid(),
                Lineup = stubHomeTeamLineup,
                Subs   = new[]
                {
                    StubHomeSub
                },
                Name = "Good FC"
            };

            StubAwaySquad = new Squad
            {
                Id     = Guid.NewGuid(),
                Lineup = stubAwayTeamLineup,
                Subs   = new[]
                {
                    StubAwaySub
                },
                Name = "Shitty FC"
            };

            StubHomeUserId = Guid.NewGuid();
            var stubAwayUserId = Guid.NewGuid();

            StubHomeTeamDetails = new TeamDetails
            {
                UserId = StubHomeUserId,
                Squad  = StubHomeSquad
            };

            StubMatch = new ApplicationCore.Models.Match
            {
                Id       = Guid.NewGuid(),
                KickOff  = DateTime.Now,
                HomeTeam = StubHomeTeamDetails,
                AwayTeam = new TeamDetails
                {
                    UserId = stubAwayUserId,
                    Squad  = StubAwaySquad
                }
            };
        }
Example #14
0
        public async Task <ApplicationCore.Models.Match> UpdateAsync(ApplicationCore.Models.Match match)
        {
            await _dataContext.UpdateAsync(match);

            return(match);
        }