public async void ShouldThrowExceptionWhenScoreIsValid()
        {
            const string username = "******";
            const long   points   = 5453;
            var          start    = DateTime.Now.ToString(ClientDateFormat);
            var          end      = DateTime.Now.AddDays(1).ToString(ClientDateFormat);

            var score = new PlayerScoreCreateMessage
            {
                Username = username,
                Score    = points,
                Start    = start,
                End      = end
            };

            Expression <Func <PlayerScore, bool> > entityCheck = ps =>
                                                                 ps.Score == points &&
                                                                 ps.Time == DateTime.Parse(end).Subtract(DateTime.Parse(start)) &&
                                                                 ps.Username == username;

            _repositoryMock
            .Setup(m => m.AddAsync(It.Is(entityCheck)))
            .ReturnsAsync((PlayerScore)null)
            .Verifiable();

            var service = NewService();

            await Assert.ThrowsAsync <Exception>(async() => { await service.StoreScoreAsync(score); });

            _repositoryMock.Verify(m => m.AddAsync(It.Is(entityCheck)), Times.Once);
        }
        public async Task StoreScoreAsync(PlayerScoreCreateMessage score)
        {
            var entity = score.ToEntity();

            var result = await _repository.AddAsync(entity);

            if (result == null)
            {
                throw new Exception("Failed to add high score");
            }
        }
        public async Task <JsonResult> OnPostStoreScore([FromBody] PlayerScoreCreateMessage createMessage)
        {
            try
            {
                await _scoreService.StoreScoreAsync(createMessage);

                return(new JsonResult(true));
            }
            catch (Exception e)
            {
                Trace.TraceError(e.ToString());

                return(new JsonResult(false));
            }
        }