Teste e Depure Sua Integração
Este guia descreve as melhores práticas para depurar sua integração com a redsys-tpv-business-lib e executar testes automatizados em dispositivos físicos.
Habilitando Logs de Depuração (Timber)
O Get Smart SDK integra a biblioteca Timber para facilitar a rastreabilidade e depuração. Para visualizar os logs internos do SDK no Logcat do Android Studio, você deve “plantar” (plant) uma Debug Tree quando sua aplicação iniciar.
Configuração
Adicione a configuração do Timber ao método onCreate da sua classe Application.
@HiltAndroidApp
class Application : Application() {
override fun onCreate() {
super.onCreate()
// Plant the debug tree only in Debug builds
if (BuildConfig.DEBUG) {
Timber.plant(Timber.DebugTree())
}
}
}Uma vez configurado, você verá as operações detalhadas do SDK no Logcat, o que é essencial para diagnosticar um ProtocolError ou problemas de conexão.
Executando Testes em Dispositivos Físicos
O SDK foi projetado para ser testado usando AndroidJUnit4. Como a biblioteca depende do aplicativo Get Smart SDK Payment Service (que interage com hardwares seguros específicos e conexões de host), você não pode executar esses testes em um Android Emulator padrão. Você deve usar um dispositivo TPV físico.
Pré-requisitos
- TPV Físico: Um dispositivo Android certificado pela Redsys/Getnet.
- Instalação do Serviço: O aplicativo Get Smart SDK Payment Service deve estar instalado e em execução no dispositivo.
- Test Runner: Seu projeto deve estar configurado para executar testes instrumentados (androidTest).
Exemplo: Teste de Inicialização
Este teste valida se o seu aplicativo consegue se conectar com sucesso ao serviço e recuperar a configuração do terminal.
@Test
fun executeInitTpv() = runTest {
// 1. Get the Context
val appContext = InstrumentationRegistry.getInstrumentation().targetContext
// 2. Instantiate the repository manually (bypassing Dagger for this isolated test)
val initializationRepository = PsaInitializationRepository.newInstance(appContext)
// 3. Execute Initialization
val result = initializationRepository.initTpv()
// 4. Validate results
println("TPV Info: $result")
assert(result is RepositoryResult.Success)
}Exemplo: Teste de Pagamento
Este teste realiza uma transação real. Use um cartão de teste ou um valor nominal (por exemplo, 1.00€).
@Test
fun executePayment() = runTest {
val appContext = InstrumentationRegistry.getInstrumentation().targetContext
// Initialize first
val initializationRepository = PsaInitializationRepository.newInstance(appContext)
initializationRepository.initTpv()
val paymentRepository = PsaPaymentRepository.newInstance(appContext)
// Execute Payment
val result = paymentRepository.makePayment(
amount = Money(BigDecimal("1.00"), Currency.getInstance("EUR"))
)
println("Payment Result: $result")
// Assert Success
assert(result is RepositoryResult.Success)
}Exemplo: Teste de Histórico de Transações
Este teste valida se você consegue recuperar o histórico do dia atual.
@Test
fun getTransactions() = runTest {
val appContext = InstrumentationRegistry.getInstrumentation().targetContext
val transactionRepository = PsaTransactionRepository.newInstance(appContext)
// Define query range (Today)
val calendar = Calendar.getInstance()
val endDate = calendar.time
calendar.set(Calendar.HOUR_OF_DAY, 0)
val initDate = calendar.time
val result = transactionRepository.getTransactions(
initDate = initDate,
endDate = endDate
)
if (result is RepositoryResult.Success) {
println("Found ${result.data.transactionList.size} transactions")
} else {
println("Error fetching transactions: $result")
}
}Resumo
- Logs: Use
Timber.plant(Timber.DebugTree())para habilitar logs detalhados (verbose) do SDK. - Hardware: Os testes devem ser executados em hardware físico com o serviço instalado.
- Framework: Use
AndroidJUnit4erunTestpara suporte a coroutines nos testes.