You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
56 lines
2.0 KiB
56 lines
2.0 KiB
package com.xsn.explorer.data
|
|
|
|
import com.xsn.explorer.data.anorm.BalancePostgresDataHandler
|
|
import com.xsn.explorer.data.anorm.dao.BalancePostgresDAO
|
|
import com.xsn.explorer.data.common.PostgresDataHandlerSpec
|
|
import com.xsn.explorer.helpers.DataHelper
|
|
import com.xsn.explorer.models.Balance
|
|
import org.scalactic.Good
|
|
|
|
class BalancePostgresDataHandlerSpec extends PostgresDataHandlerSpec {
|
|
|
|
lazy val dataHandler = new BalancePostgresDataHandler(database, new BalancePostgresDAO)
|
|
|
|
"upsert" should {
|
|
"create an empty balance" in {
|
|
val address = DataHelper.createAddress("XxQ7j37LfuXgsLd5DZAwFKhT3s2ZMkW85F")
|
|
val balance = Balance(address)
|
|
|
|
val result = dataHandler.upsert(balance)
|
|
result mustEqual Good(balance)
|
|
}
|
|
|
|
"set the available amount" in {
|
|
val address = DataHelper.createAddress("Xbh5pJdBNm8J9PxnEmwVcuQKRmZZ7DkpcF")
|
|
val balance = Balance(address, received = BigDecimal(10), spent = BigDecimal(5))
|
|
|
|
val result = dataHandler.upsert(balance)
|
|
result mustEqual Good(balance)
|
|
database.withConnection { implicit conn =>
|
|
val available = _root_.anorm
|
|
.SQL(s"SELECT available FROM balances WHERE address = '${address.string}'")
|
|
.as(_root_.anorm.SqlParser.get[BigDecimal]("available").single)
|
|
|
|
available mustEqual balance.available
|
|
}
|
|
}
|
|
|
|
"update an existing balance" in {
|
|
val address = DataHelper.createAddress("XfAATXtkRgCdMTrj2fxHvLsKLLmqAjhEAt")
|
|
val initialBalance = Balance(address, received = BigDecimal(10), spent = BigDecimal(5))
|
|
val patch = Balance(address, received = BigDecimal(10), spent = BigDecimal(10))
|
|
val expected = combine(initialBalance, patch)
|
|
|
|
dataHandler.upsert(initialBalance)
|
|
|
|
val result = dataHandler.upsert(patch)
|
|
result mustEqual Good(expected)
|
|
}
|
|
}
|
|
|
|
private def combine(balances: Balance*): Balance = {
|
|
balances.reduce { (a, b) =>
|
|
Balance(a.address, a.received + b.received, a.spent + b.spent)
|
|
}
|
|
}
|
|
}
|
|
|