public async Task Should_Not_Record_Last_Sync_When_Failed()
        {
            _service1.Sync(_user).Returns(Task.FromResult(SyncResult.Failed("test error!")));
            _service2.Sync(_user).Returns(Task.FromResult(SyncResult.Success()));

            await _syncService.Sync(_user);

            _persistenceContextFactory.DidNotReceive().CreateFor <SyncInfo>();
        }
        public async Task Should_Return_Success_When_No_Errors()
        {
            _service1.Sync(_user).Returns(Task.FromResult(SyncResult.Success()));
            _service2.Sync(_user).Returns(Task.FromResult(SyncResult.Success()));

            var syncResult = await _syncService.Sync(_user);

            Assert.That(syncResult.HasErrors, Is.False);
        }
        public async Task Should_Return_Failure_When_Any_Of_The_Services_Fails()
        {
            _service1.Sync(_user).Returns(Task.FromResult(SyncResult.Success()));
            _service2.Sync(_user).Returns(Task.FromResult(SyncResult.Failed("test error")));

            var syncResult = await _syncService.Sync(_user);

            Assert.That(syncResult.HasErrors);
            Assert.That(syncResult.ErrorMessage, Is.EqualTo("test error"));
        }
        public async Task Should_Record_Last_Sync_When_Successful()
        {
            _service1.Sync(_user).Returns(Task.FromResult(SyncResult.Success()));
            _service2.Sync(_user).Returns(Task.FromResult(SyncResult.Success()));
            var currentTime = DateTimeOffset.UtcNow;

            _syncService.GetCurrentTimeFunc = () => currentTime;

            await _syncService.Sync(_user);

            _persistenceContextFactory.CreateFor <SyncInfo>().Received().Save(Arg.Is <SyncInfo>(s => s.LastSync == currentTime && s.ObjectId == "x"));
        }
        public async Task Should_Not_Execute_Subsequent_SyncServices_On_Failure()
        {
            _service1.Sync(_user).Returns(Task.FromResult(SyncResult.Failed("test error")));
            _service2.Sync(_user).Returns(Task.FromResult(SyncResult.Success()));

            var syncResult = await _syncService.Sync(_user);

            await _service2.DidNotReceive().Sync(_user);

            Assert.That(syncResult.HasErrors);
            Assert.That(syncResult.ErrorMessage, Is.EqualTo("test error"));
        }
        public async Task <SyncResult> SyncJobsAsync(GameSave gameSave, GameModType modType, int selectedDlc)
        {
            var webApi         = new Ets2SyncApiHost();
            var syncJobsResult = await webApi.SyncJobs(gameSave, modType, selectedDlc);

            if (syncJobsResult.Result != SyncJobsResult.SyncResult.Success)
            {
                return(SyncResult.Fail(syncJobsResult.ErrorException));
            }

            await using var fileWriter = File.Create(gameSave.FilePath);
            await fileWriter.WriteAsync(syncJobsResult.SaveFileBytes);

            return(SyncResult.Success(syncJobsResult.SaveFileBytes));
        }
        public async Task <SyncResult> Sync(User user)
        {
            await Task.Delay(TimeSpan.FromSeconds(3));

            return(SyncResult.Success());
        }