コード例 #1
0
        public void Should_Create_Correct_LogDTO_Object(int id)
        {
            var fakeContext = new FakeContext("LogDTOTest");

            fakeContext.FillWithAll();

            using (var context = new MainContext(fakeContext.FakeOptions))
            {
                var repository = new LogRepository(context);
                var validator  = new LogValidator();
                var service    = new LogService(repository, validator, context);
                var mockMapper = new MapperConfiguration(cfg =>
                {
                    cfg.AddProfile <AutoMapperProfile>();;
                });
                var mapper = mockMapper.CreateMapper();

                var testLog = service.GetFullLog(id);
                var logDTO  = mapper.Map <Log, LogDTO>(testLog);

                Assert.IsType <LogDTO>(logDTO);
                Assert.Equal(testLog.Id, logDTO.Id);
                Assert.Equal(testLog.Name, logDTO.Name);
                Assert.Equal(testLog.Description, logDTO.Description);
                Assert.Equal(testLog.Layer.Name, logDTO.Layer.Name);
                Assert.Equal(testLog.Level.Name, logDTO.Level.Name);
                Assert.Equal(testLog.Status.Name, logDTO.Status.Name);
                Assert.Equal(testLog.Environment.Name, logDTO.Environment.Name);
                Assert.Equal(testLog.CreatedAt, logDTO.CreatedAt);
                Assert.Equal(testLog.User.FullName, logDTO.User.FullName);
            }
        }
コード例 #2
0
        public async Task UpdateLogAsync(Log log)
        {
            if (!LogValidator.ValidateDefault(log))
            {
                throw new InvalidOperationException(Resources.LogValidFailString);
            }

            await _logsRepository.UpdateLogAsync(log);
        }
コード例 #3
0
        public async Task <long> CreateNewLogAsync(Log log)
        {
            if (!LogValidator.ValidateDefault(log))
            {
                throw new InvalidOperationException(Resources.LogValidFailString);
            }

            return(await _logsRepository.AddLogAsync(log));
        }
コード例 #4
0
        public static async Task <bool> ShowReplay(GameStats game, bool showToast)
        {
            if (game == null)
            {
                return(false);
            }
            if (Config.Instance.ForceLocalReplayViewer)
            {
                ReplayReader.LaunchReplayViewer(game.ReplayFile, false);
                return(true);
            }
            Action <ReplayProgress> setToastStatus = null;

            if (game.HasReplayFile && !game.HsReplay.Uploaded)
            {
                if (showToast)
                {
                    setToastStatus = ToastManager.ShowReplayProgressToast();
                }
                var log = GetLogFromHdtReplay(game.ReplayFile).ToArray();
                var validationResult = LogValidator.Validate(log);
                if (validationResult.IsValid)
                {
                    await LogUploader.Upload(log, null, game);
                }
                else
                {
                    Log.Error("Invalid log: " + validationResult.Reason);
                    game.HsReplay.Unsupported = true;
                }
                if (DefaultDeckStats.Instance.DeckStats.Any(x => x.DeckId == game.DeckId))
                {
                    DefaultDeckStats.Save();
                }
                else
                {
                    DeckStatsList.Save();
                }
            }
            if (game.HsReplay?.Uploaded ?? false)
            {
                setToastStatus?.Invoke(ReplayProgress.Complete);
                Helper.TryOpenUrl(game.HsReplay?.Url);
            }
            else if (game.HasReplayFile)
            {
                setToastStatus?.Invoke(ReplayProgress.Error);
                ReplayReader.LaunchReplayViewer(game.ReplayFile, true);
            }
            else
            {
                setToastStatus?.Invoke(ReplayProgress.Error);
                return(false);
            }
            return(true);
        }
コード例 #5
0
        public static async Task <bool> ShowReplay(GameStats game, bool showToast)
        {
            if (game == null)
            {
                return(false);
            }
            Action <ReplayProgress> setToastStatus = null;

            if (game.HasReplayFile && !game.HsReplay.Uploaded)
            {
                if (showToast)
                {
                    setToastStatus = ToastManager.ShowReplayProgressToast();
                }
                var log = GetLogFromHdtReplay(game.ReplayFile).ToArray();
                var validationResult = LogValidator.Validate(log);
                if (validationResult.IsValid)
                {
                    await LogUploader.Upload(log, null, game);
                }
                else
                {
                    Log.Error("Invalid log: " + validationResult.Reason);
                    game.HsReplay.Unsupported = true;
                }
                if (DefaultDeckStats.Instance.DeckStats.Any(x => x.DeckId == game.DeckId))
                {
                    DefaultDeckStats.Save();
                }
                else
                {
                    DeckStatsList.Save();
                }
            }
            if (game.HsReplay?.Uploaded ?? false)
            {
                setToastStatus?.Invoke(ReplayProgress.Complete);
                Helper.TryOpenUrl(game.HsReplay?.Url);
            }
            else
            {
                setToastStatus?.Invoke(ReplayProgress.Error);
                if (game.HsReplay?.Unsupported ?? false)
                {
                    ErrorManager.AddError("Can not load replay", "Game has no valid replay.");
                }
                else
                {
                    ErrorManager.AddError("Error uploading replay", "Please try again later.");
                }
                return(false);
            }
            return(true);
        }
コード例 #6
0
        public static async Task ShowReplay(string fileName, bool showToast)
        {
            if (Config.Instance.ForceLocalReplayViewer)
            {
                ReplayReader.LaunchReplayViewer(fileName, false);
                return;
            }
            Action <ReplayProgress> setToastStatus = null;
            var log = GetLogFromHdtReplay(fileName).ToArray();
            var validationResult = LogValidator.Validate(log);

            if (validationResult.IsValid)
            {
                if (showToast)
                {
                    setToastStatus = ToastManager.ShowReplayProgressToast();
                }
                setToastStatus?.Invoke(ReplayProgress.Uploading);
                var file     = new FileInfo(fileName);
                var hsBuild  = BuildDates.GetByDate(file.LastWriteTime);
                var metaData = hsBuild != null ? new GameMetaData()
                {
                    HearthstoneBuild = hsBuild
                } : null;
                var gameStats = hsBuild != null ? new GameStats()
                {
                    StartTime = file.LastWriteTime
                } : null;
                var success = await LogUploader.Upload(log.ToArray(), metaData, gameStats);

                if (success)
                {
                    Helper.TryOpenUrl(gameStats?.HsReplay?.Url);
                }
                else
                {
                    ReplayReader.LaunchReplayViewer(fileName, true);
                }
            }
            else
            {
                Log.Error("Invalid log: " + validationResult.Reason);
                ReplayReader.LaunchReplayViewer(fileName, true);
            }
            setToastStatus?.Invoke(ReplayProgress.Complete);
        }
コード例 #7
0
        public void Should_Return_All_Log()
        {
            var fakeContext = new FakeContext("GetAllLog");

            fakeContext.FillWith <Log>();

            using (var context = new MainContext(fakeContext.FakeOptions))
            {
                var logCountIndDb = context.Log.Count();
                var repository    = new LogRepository(context);
                var validator     = new LogValidator();
                var service       = new LogService(repository, validator, context);

                Assert.Equal(logCountIndDb, service.GetAll().Count());
                repository.Dispose();
            }
        }
コード例 #8
0
        public void Should_Get_Log_By_EnvironmentId(int userId, int environmentId)
        {
            var fakeContext = new FakeContext("ControllerGetLogById");

            fakeContext.FillWith <User>();
            fakeContext.FillWith <Log>();
            fakeContext.FillWith <Environment>();
            var auth = new UserAuthenticationTest();

            using (var context = new MainContext(fakeContext.FakeOptions))
            {
                var repository     = new LogRepository(context);
                var userRepository = new UserRepository(context);
                var validator      = new LogValidator();
                var userValidator  = new UserValidator(context);
                var service        = new LogService(repository, validator, context);
                var userService    = new UserService(userRepository, userValidator);
                var mockMapper     = new MapperConfiguration(cfg =>
                {
                    cfg.AddProfile <AutoMapperProfile>();;
                });
                var mapper     = mockMapper.CreateMapper();
                var controller = new LogController(service, mapper);
                var user       = userService.GetById(userId);
                var log        = service.GetByEnvironmentId(environmentId);
                authServer.CreateClient();
                var token = auth.GetToken(user.Email, user.Password);

                var client = server.CreateClient();
                client.SetBearerToken(token.access_token);
                var response = client.GetAsync($"log/environment/{environmentId}").Result;
                var result   = response.Content.ReadAsStringAsync();
                var retrLog  = JsonConvert.DeserializeObject <List <Log> >(result.Result);

                Assert.IsType <HttpStatusCode>(response.StatusCode);
                Assert.IsType <List <Log> >(retrLog);
                Assert.Equal(HttpStatusCode.OK, response.StatusCode);
                foreach (var testLog in retrLog)
                {
                    Assert.IsType <string>(testLog.Name);
                    Assert.IsType <string>(testLog.Description);
                    Assert.IsType <int>(testLog.Id);
                }
            }
        }
コード例 #9
0
        public void Should_Get_Log_Properties_After_Creation()
        {
            var fakeContext = new FakeContext("LogGetter");

            fakeContext.FillWithAll();

            using (var context = new MainContext(fakeContext.FakeOptions))
            {
                var logbuilder = new LogBuilder(context);
                var repository = new LogRepository(context);
                var validator  = new LogValidator();
                var service    = new LogService(repository, validator, context);

                var logTest = new Log();
                logTest.Name          = "Error testing";
                logTest.Description   = "Testing log getter and setters";
                logTest.UserId        = 1;
                logTest.LevelId       = 2;
                logTest.LayerId       = 2;
                logTest.EnvironmentId = 2;
                logTest.StatusId      = 1;
                logTest.CreatedAt     = new DateTime(2020, 05, 21, 14, 35, 01);
                service.Create(logTest);

                var createdLog = (from l in service.GetAllFull()
                                  where l.Name == "Error testing"
                                  select l).FirstOrDefault();

                Assert.Equal("Error testing", createdLog.Name);
                Assert.Equal("Testing log getter and setters", createdLog.Description);
                Assert.Equal(1, createdLog.UserId);
                Assert.Equal(2, createdLog.LevelId);
                Assert.Equal(2, createdLog.LayerId);
                Assert.Equal(2, createdLog.EnvironmentId);
                Assert.Equal(1, createdLog.StatusId);
                Assert.Equal(new DateTime(2020, 05, 21, 14, 35, 01), createdLog.CreatedAt);
                Assert.Equal("José da Silva", createdLog.User.FullName);
                Assert.Equal("Warning", createdLog.Level.Name);
                Assert.Equal("Frontend", createdLog.Layer.Name);
                Assert.Equal("Homologação", createdLog.Environment.Name);
                Assert.Equal("Arquivado", createdLog.Status.Name);
                context.Dispose();
            }
        }
コード例 #10
0
        public void Should_Build_Log_Correctly(int id)
        {
            var fakeContext = new FakeContext("LogBuilderTest");

            fakeContext.FillWith <Log>();

            using (var context = new MainContext(fakeContext.FakeOptions))
            {
                var repository = new LogRepository(context);
                var validator  = new LogValidator();
                var service    = new LogService(repository, validator, context);
                var build      = new LogBuilder(context);
                var testLog    = service.GetById(id);
                var builtLog   = build.GetPayload(testLog);

                Assert.IsType <Log>(builtLog);
                Assert.NotNull(builtLog);
            }
        }
コード例 #11
0
        public void Should_Update_Existing_Log(int id)
        {
            var fakeContext = new FakeContext("UpdateLog");

            fakeContext.FillWith <Log>();

            using (var context = new MainContext(fakeContext.FakeOptions))
            {
                var repository = new LogRepository(context);
                var validator  = new LogValidator();
                var service    = new LogService(repository, validator, context);
                var curretLog  = service.GetById(id);

                curretLog.Name = "Testing";
                service.Update(curretLog);
                Assert.Equal("Testing", service.GetById(id).Name);
                repository.Dispose();
            }
        }
コード例 #12
0
        public void Should_Delete_Log()
        {
            var fakeContext = new FakeContext("DeleteLogLog");

            fakeContext.FillWith <Log>();

            using (var context = new MainContext(fakeContext.FakeOptions))
            {
                var repository   = new LogRepository(context);
                var validator    = new LogValidator();
                var service      = new LogService(repository, validator, context);
                var currentCount = context.Log.Count();

                Assert.NotEqual(0, currentCount);
                service.Delete(1);
                Assert.NotEqual(currentCount, context.Log.Count());
                repository.Dispose();
            }
        }
コード例 #13
0
        public void Should_Get_By_EnvironmentId(int id)
        {
            var fakeContext = new FakeContext("DeleteLogLog");

            fakeContext.FillWith <Log>();

            using (var context = new MainContext(fakeContext.FakeOptions))
            {
                var repository = new LogRepository(context);
                var validator  = new LogValidator();
                var service    = new LogService(repository, validator, context);
                var logByEnvId = service.GetByEnvironmentId(id);

                foreach (var log in logByEnvId)
                {
                    Assert.Equal(id, log.EnvironmentId);
                }
            }
        }
コード例 #14
0
ファイル: LogUploader.cs プロジェクト: riQQ/HearthSim.Common
        public async Task <UploadStatus> Upload(string[] logLines, UploadMetaData data)
        {
            var result = LogValidator.Validate(logLines);

            if (!result.IsValid)
            {
                UploadError?.Invoke(new UploadErrorEventArgs(0, data, result.Reason));
                return(new UploadStatus(new InvalidLogException(result.Reason)));
            }

            var log  = string.Join(Environment.NewLine, logLines);
            var item = new UploaderItem(log.GetHashCode());

            if (_inProgress.Contains(item))
            {
                Log.Debug($"{item.Hash} already in progress. Waiting for it to complete...");
                _inProgress.Add(item);
                return(await item.Status);
            }
            _inProgress.Add(item);
            Log.Debug($"Uploading {item.Hash}...");
            UploadStatus status;

            UploadInitiated?.Invoke(new UploadStatusChangedEventArgs(item.Hash, data));
            try
            {
                status = await TryUpload(logLines, data);
            }
            catch (Exception ex)
            {
                Log.Error(ex);
                status = new UploadStatus(ex);
            }
            Log.Debug($"{item.Hash} complete. Success={status.Success}");
            UploadComplete?.Invoke(new UploadCompleteEventArgs(item.Hash, data, status));
            foreach (var waiting in _inProgress.Where(x => x.Hash == item.Hash))
            {
                waiting.Complete(status);
            }
            _inProgress.RemoveAll(x => x.Hash == item.Hash);
            return(status);
        }
コード例 #15
0
        public static async Task ShowReplay(string fileName, bool showToast)
        {
            Action <ReplayProgress> setToastStatus = null;
            var log = GetLogFromHdtReplay(fileName).ToArray();
            var validationResult = LogValidator.Validate(log);

            if (validationResult.IsValid)
            {
                if (showToast)
                {
                    setToastStatus = ToastManager.ShowReplayProgressToast();
                }
                setToastStatus?.Invoke(ReplayProgress.Uploading);
                var file     = new FileInfo(fileName);
                var hsBuild  = BuildDates.GetByDate(file.LastWriteTime);
                var metaData = hsBuild != null ? new GameMetaData()
                {
                    HearthstoneBuild = hsBuild
                } : null;
                var gameStats = hsBuild != null ? new GameStats()
                {
                    StartTime = file.LastWriteTime
                } : null;
                var success = await LogUploader.Upload(log.ToArray(), metaData, gameStats);

                if (success)
                {
                    Helper.TryOpenUrl(gameStats?.HsReplay?.Url);
                    setToastStatus?.Invoke(ReplayProgress.Complete);
                }
                else
                {
                    ErrorManager.AddError("Error uploading replay", "Please try again later.");
                    setToastStatus?.Invoke(ReplayProgress.Error);
                }
            }
            else
            {
                Log.Error("Invalid log: " + validationResult.Reason);
                ErrorManager.AddError("Can not load replay", $"{fileName} does not contain a valid replay.");
            }
        }
コード例 #16
0
        public void Should_Get_By_Environment_and_Layer_Id(int environmentId, int layerId)
        {
            var fakeContext = new FakeContext("DeleteLogLog");

            fakeContext.FillWith <Log>();

            using (var context = new MainContext(fakeContext.FakeOptions))
            {
                var repository         = new LogRepository(context);
                var validator          = new LogValidator();
                var service            = new LogService(repository, validator, context);
                var logByEnvAndLayerId = service.GetByEnvironmentAndLayer(environmentId, layerId);

                foreach (var log in logByEnvAndLayerId)
                {
                    Assert.NotEqual(0, log.Id);
                    Assert.IsType <Log>(log);
                }
            }
        }
コード例 #17
0
        public void Should_GetFullLog()
        {
            var fakeContext = new FakeContext("DeleteLogLog");

            fakeContext.FillWith <Log>();

            using (var context = new MainContext(fakeContext.FakeOptions))
            {
                var repository = new LogRepository(context);
                var validator  = new LogValidator();
                var service    = new LogService(repository, validator, context);
                var logs       = service.GetAllFull();

                foreach (var log in logs)
                {
                    Assert.NotEqual(0, log.Id);
                }
                Assert.NotEmpty(logs);
            }
        }
コード例 #18
0
        public void Should_Return_Right_Log_When_Find_By_Id(int id)
        {
            var fakeContext = new FakeContext("LogById");

            fakeContext.FillWith <Log>();

            using (var context = new MainContext(fakeContext.FakeOptions))
            {
                var expected = fakeContext.GetFakeData <Log>().Find(x => x.Id == id);

                var repository = new LogRepository(context);
                var validator  = new LogValidator();
                var service    = new LogService(repository, validator, context);
                var actual     = service.GetById(id);
                var tryZeroId  = service.GetById(0);

                Assert.Null(tryZeroId);
                Assert.Equal(expected, actual, new LogIdComparer());
                repository.Dispose();
            }
        }
コード例 #19
0
        private async Task SaveReplays()
        {
            if (!_savedReplay && _game.CurrentGameStats != null)
            {
                _savedReplay = true;
                await LogIsComplete();

                var powerLog = new List <string>();
                foreach (var stored in _game.StoredPowerLogs.Where(x => x.Item1 == _game.MetaData.ServerInfo.GameHandle))
                {
                    powerLog.AddRange(stored.Item2);
                }
                powerLog.AddRange(_game.PowerLog);

                var createGameCount = 0;
                powerLog = powerLog.TakeWhile(x => !(x.Contains("CREATE_GAME") && createGameCount++ == 1)).ToList();

                if (Config.Instance.RecordReplays && RecordCurrentGameMode && _game.Entities.Count > 0 && !_game.SavedReplay &&
                    _game.CurrentGameStats.ReplayFile == null)
                {
                    _game.CurrentGameStats.ReplayFile = ReplayMaker.SaveToDisk(_game.CurrentGameStats, powerLog);
                }

                if (Config.Instance.HsReplayAutoUpload && UploadCurrentGameMode)
                {
                    var log = powerLog.ToArray();
                    var validationResult = LogValidator.Validate(log);
                    if (validationResult.IsValid)
                    {
                        LogUploader.Upload(log, (GameMetaData)_game.MetaData.Clone(), _game.CurrentGameStats).Forget();
                    }
                    else
                    {
                        Log.Error("Invalid log: " + validationResult.Reason);
                        Influx.OnEndOfGameUploadError(validationResult.Reason);
                    }
                }
            }
        }
コード例 #20
0
        public void Should_Get_By_Environment_And_Description(int environmentId, string description)
        {
            var fakeContext = new FakeContext("DeleteLogLog");

            fakeContext.FillWith <Log>();

            using (var context = new MainContext(fakeContext.FakeOptions))
            {
                var repository = new LogRepository(context);
                var validator  = new LogValidator();
                var service    = new LogService(repository, validator, context);
                var logByEnvAndDescriptionId = service
                                               .GetByEnvironmentAndDescription(environmentId, description);

                foreach (var log in logByEnvAndDescriptionId)
                {
                    Assert.Contains("tentar", log.Description);
                }
                Assert.NotEmpty(logByEnvAndDescriptionId);
                Assert.NotNull(logByEnvAndDescriptionId);
            }
        }
コード例 #21
0
        public void Should_Get_Log_Info_Right(int id)
        {
            var fakeContext = new FakeContext("LogInfo");

            fakeContext.FillWith <Log>();

            using (var context = new MainContext(fakeContext.FakeOptions))
            {
                var logbuilder = new LogBuilder(context);
                var repository = new LogRepository(context);
                var validator  = new LogValidator();
                var service    = new LogService(repository, validator, context);
                var logTest    = service.GetById(id);

                Assert.NotEqual(0, logTest.UserId);
                Assert.NotNull(logbuilder.GetPayload(logTest));
                Assert.NotEqual(0, logTest.EnvironmentId);
                Assert.NotEqual(0, logTest.LayerId);
                Assert.NotEqual(0, logTest.LevelId);
                Assert.NotEqual(0, logTest.StatusId);
                context.Dispose();
            }
        }
コード例 #22
0
 public UserController()
 {
     userLogic    = new UserLogic();
     logValidator = new LogValidator();
 }
コード例 #23
0
 public LogService(ILogRepository repository, IMapper mapper)
 {
     this._repository = repository;
     this._mapper     = mapper;
     this._validator  = new LogValidator(_mapper);
 }
コード例 #24
0
 public static void RegisterLogValidator( LogValidator handler )
 {
     logValidator += handler;
 }