Coverage Summary for Class: SyncWorker (com.georgeci.moneysurfer.sync.scheduler)

Class Method, % Branch, % Line, % Instruction, %
SyncWorker 0% (0/2) 0% (0/8) 0% (0/48)
SyncWorker$doWork$1
SyncWorker$special$$inlined$inject$default$1 0% (0/1)
Total 0% (0/3) 0% (0/8) 0% (0/48)


 package com.georgeci.moneysurfer.sync.scheduler
 
 import android.content.Context
 import androidx.work.CoroutineWorker
 import androidx.work.WorkerParameters
 import com.georgeci.moneysurfer.sync.api.SyncReason
 import com.georgeci.moneysurfer.sync.coordinator.SyncCoordinator
 import org.koin.core.component.KoinComponent
 import org.koin.core.component.inject
 
 /**
  * Background entry point on Android. Resolves [SyncCoordinator] from Koin
  * and waits for the run to finish.
  *
  * Mapping of [com.georgeci.moneysurfer.sync.api.SyncResult] onto [Result]:
  * - success → [Result.success]
  * - retryable error → [Result.retry] (WorkManager backoff handles delay)
  * - non-retryable error → [Result.failure]
  */
 class SyncWorker(
     context: Context,
     params: WorkerParameters,
 ) : CoroutineWorker(context, params), KoinComponent {
 
     private val coordinator: SyncCoordinator by inject()
 
     override suspend fun doWork(): Result {
         val handle = coordinator.requestSync(reason = SyncReason.BACKGROUND)
         val outcome = handle.result.await()
         return outcome.fold(
             ifLeft = { error ->
                 if (error.isRetryable) Result.retry() else Result.failure()
             },
             ifRight = { Result.success() },
         )
     }
 }