✨ Test users and start testing bets
continuous-integration/drone/push Build is passing
Details
continuous-integration/drone/push Build is passing
Details
parent
4b2e9c22a3
commit
8d886b8592
@ -0,0 +1,129 @@
|
||||
package allin.data.postgres
|
||||
|
||||
import allin.data.postgres.entities.betAnswerInfos
|
||||
import allin.data.postgres.entities.betInfos
|
||||
import allin.data.postgres.entities.betResults
|
||||
import allin.model.*
|
||||
import org.junit.jupiter.api.*
|
||||
import org.junit.jupiter.api.Assertions.*
|
||||
import org.ktorm.database.Database
|
||||
import org.ktorm.dsl.eq
|
||||
import org.ktorm.entity.removeIf
|
||||
import org.ktorm.support.postgresql.PostgreSqlDialect
|
||||
import java.time.ZoneId
|
||||
import java.time.ZonedDateTime
|
||||
|
||||
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
|
||||
@TestMethodOrder(MethodOrderer.OrderAnnotation::class)
|
||||
class PostgresBetDataSourceTest {
|
||||
|
||||
private lateinit var database: Database
|
||||
private lateinit var dataSource: PostgresBetDataSource
|
||||
lateinit var user: User
|
||||
|
||||
@BeforeAll
|
||||
fun setUp() {
|
||||
val dbDatabase = System.getenv()["POSTGRES_DB"]
|
||||
val dbUser = System.getenv()["POSTGRES_USER"]
|
||||
val dbPassword = System.getenv()["POSTGRES_PASSWORD"]
|
||||
val dbHost = System.getenv()["POSTGRES_HOST"]
|
||||
val url = "jdbc:postgresql://$dbHost/$dbDatabase"
|
||||
|
||||
database = Database.connect(
|
||||
url = url,
|
||||
user = dbUser,
|
||||
password = dbPassword,
|
||||
dialect = PostgreSqlDialect()
|
||||
)
|
||||
|
||||
user = User(
|
||||
id = "123",
|
||||
username = "JohnDoe",
|
||||
email = "johndoe@example.com",
|
||||
password = "securePassword123",
|
||||
nbCoins = 1000,
|
||||
token = null,
|
||||
image = null,
|
||||
bestWin = 500,
|
||||
nbBets = 50,
|
||||
nbFriends = 10
|
||||
)
|
||||
|
||||
|
||||
dataSource = PostgresBetDataSource(database)
|
||||
PostgresUserDataSource(database).addUser(user)
|
||||
}
|
||||
|
||||
@Test
|
||||
@Order(1)
|
||||
fun testAddBet() {
|
||||
val bet = Bet(
|
||||
id = "bbba08f7-744f-4d23-9706-b31bdf24f614",
|
||||
theme = "Sports",
|
||||
sentenceBet = "Will team A win?",
|
||||
type = BetType.BINARY,
|
||||
endRegistration = ZonedDateTime.now(ZoneId.of("+02:00")).plusDays(1),
|
||||
endBet = ZonedDateTime.now(ZoneId.of("+02:00")).plusDays(2),
|
||||
isPrivate = false,
|
||||
response = listOf(YES_VALUE, NO_VALUE),
|
||||
createdBy = user.id
|
||||
)
|
||||
dataSource.addBet(bet)
|
||||
|
||||
val retrievedBet = dataSource.getBetById("bbba08f7-744f-4d23-9706-b31bdf24f614")
|
||||
assertNotNull(retrievedBet)
|
||||
assertEquals("bbba08f7-744f-4d23-9706-b31bdf24f614", retrievedBet?.id)
|
||||
}
|
||||
|
||||
@Test
|
||||
@Order(2)
|
||||
fun testGetAllBets() {
|
||||
val userDTO = user.toDto()
|
||||
val bets = dataSource.getAllBets(emptyList(), userDTO)
|
||||
assertTrue(bets.isNotEmpty())
|
||||
}
|
||||
|
||||
@Test
|
||||
@Order(3)
|
||||
fun testUpdateBet() {
|
||||
val updatedData = UpdatedBetData(
|
||||
id = "bbba08f7-744f-4d23-9706-b31bdf24f614",
|
||||
endBet = ZonedDateTime.now(ZoneId.of("+02:00")).plusDays(3),
|
||||
isPrivate = true,
|
||||
response = listOf(YES_VALUE, NO_VALUE)
|
||||
)
|
||||
val result = dataSource.updateBet(updatedData)
|
||||
assertTrue(result)
|
||||
|
||||
val retrievedBet = dataSource.getBetById("bbba08f7-744f-4d23-9706-b31bdf24f614")
|
||||
assertNotNull(retrievedBet)
|
||||
assertTrue(retrievedBet?.isPrivate ?: false)
|
||||
}
|
||||
|
||||
@Test
|
||||
@Order(4)
|
||||
fun testConfirmBet() {
|
||||
dataSource.confirmBet("bbba08f7-744f-4d23-9706-b31bdf24f614", YES_VALUE)
|
||||
|
||||
val retrievedBet = dataSource.getBetById("bbba08f7-744f-4d23-9706-b31bdf24f614")
|
||||
assertNotNull(retrievedBet)
|
||||
assertEquals(BetStatus.FINISHED, retrievedBet?.status)
|
||||
}
|
||||
|
||||
@Test
|
||||
@Order(5)
|
||||
fun testGetBetDetailById() {
|
||||
val betDetail = dataSource.getBetDetailById("bbba08f7-744f-4d23-9706-b31bdf24f614", user.id)
|
||||
assertNotNull(betDetail)
|
||||
assertEquals("bbba08f7-744f-4d23-9706-b31bdf24f614", betDetail?.bet?.id)
|
||||
}
|
||||
|
||||
@AfterAll
|
||||
fun tearDown() {
|
||||
database.betResults.removeIf { it.betId eq "bbba08f7-744f-4d23-9706-b31bdf24f614" }
|
||||
database.betInfos.removeIf { it.id eq "bbba08f7-744f-4d23-9706-b31bdf24f614" }
|
||||
database.betAnswerInfos.removeIf { it.betId eq "bbba08f7-744f-4d23-9706-b31bdf24f614" }
|
||||
dataSource.removeBet("bbba08f7-744f-4d23-9706-b31bdf24f614")
|
||||
PostgresUserDataSource(database).deleteUser(user.username)
|
||||
}
|
||||
}
|
@ -0,0 +1,229 @@
|
||||
import allin.data.postgres.PostgresUserDataSource
|
||||
import allin.data.postgres.entities.UsersEntity
|
||||
import allin.data.postgres.entities.users
|
||||
import allin.ext.executeWithResult
|
||||
import allin.model.User
|
||||
import junit.framework.TestCase.*
|
||||
import org.junit.jupiter.api.*
|
||||
import org.ktorm.database.Database
|
||||
import org.ktorm.dsl.eq
|
||||
import org.ktorm.dsl.update
|
||||
import org.ktorm.entity.find
|
||||
import org.ktorm.support.postgresql.PostgreSqlDialect
|
||||
import java.time.Instant
|
||||
import java.util.*
|
||||
|
||||
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
|
||||
@TestMethodOrder(MethodOrderer.OrderAnnotation::class)
|
||||
class PostgresUserDataSourceTest {
|
||||
|
||||
private lateinit var userDataSource: PostgresUserDataSource
|
||||
private lateinit var database: Database
|
||||
|
||||
@BeforeAll
|
||||
fun setUp() {
|
||||
val dbDatabase = System.getenv()["POSTGRES_DB"]
|
||||
val dbUser = System.getenv()["POSTGRES_USER"]
|
||||
val dbPassword = System.getenv()["POSTGRES_PASSWORD"]
|
||||
val dbHost = System.getenv()["POSTGRES_HOST"]
|
||||
val url = "jdbc:postgresql://$dbHost/$dbDatabase"
|
||||
|
||||
database = Database.connect(
|
||||
url = url,
|
||||
user = dbUser,
|
||||
password = dbPassword,
|
||||
dialect = PostgreSqlDialect()
|
||||
)
|
||||
|
||||
userDataSource = PostgresUserDataSource(database)
|
||||
|
||||
}
|
||||
|
||||
@AfterAll
|
||||
fun delUser() {
|
||||
userDataSource.deleteUser("JaneDoe")
|
||||
}
|
||||
|
||||
@Test
|
||||
@Order(1)
|
||||
fun addUser() {
|
||||
val user = User(
|
||||
id = "123",
|
||||
username = "JohnDoe",
|
||||
email = "johndoe@example.com",
|
||||
password = "securePassword123",
|
||||
nbCoins = 1000,
|
||||
token = null,
|
||||
image = null,
|
||||
bestWin = 500,
|
||||
nbBets = 50,
|
||||
nbFriends = 10
|
||||
)
|
||||
|
||||
userDataSource.addUser(user)
|
||||
|
||||
val addedUser = database.users.find { it.id eq "123" }
|
||||
assertNotNull(addedUser)
|
||||
assertEquals("JohnDoe", addedUser?.username)
|
||||
}
|
||||
|
||||
@Test
|
||||
@Order(2)
|
||||
fun getUserByUsername() {
|
||||
val result = userDataSource.getUserByUsername("JohnDoe")
|
||||
|
||||
assertNotNull(result.first)
|
||||
assertEquals("JohnDoe", result.first?.username)
|
||||
assertEquals("securePassword123", result.second)
|
||||
|
||||
val resultS = userDataSource.getUserByUsername("nonexistent")
|
||||
|
||||
assertNull(resultS.first)
|
||||
assertNull(resultS.second)
|
||||
}
|
||||
|
||||
@Test
|
||||
@Order(3)
|
||||
fun getUserById() {
|
||||
val result = userDataSource.getUserById("123")
|
||||
|
||||
assertNotNull(result)
|
||||
assertEquals("JohnDoe", result?.username)
|
||||
}
|
||||
|
||||
@Test
|
||||
@Order(4)
|
||||
fun deleteUser() {
|
||||
val result = userDataSource.deleteUser("JohnDoe")
|
||||
|
||||
assertTrue(result)
|
||||
|
||||
val deletedUser = database.users.find { it.id eq "123" }
|
||||
assertNull(deletedUser)
|
||||
|
||||
val resultS = userDataSource.deleteUser("nonexistent")
|
||||
assertFalse(resultS)
|
||||
}
|
||||
|
||||
@Test
|
||||
@Order(5)
|
||||
fun addCoins() {
|
||||
userDataSource.addUser(
|
||||
User(
|
||||
id = "11111",
|
||||
username = "JaneDoe",
|
||||
email = "janedoe@example.com",
|
||||
password = "securePassword456",
|
||||
nbCoins = 1000,
|
||||
token = null,
|
||||
image = null,
|
||||
bestWin = 500,
|
||||
nbBets = 50,
|
||||
nbFriends = 10
|
||||
)
|
||||
)
|
||||
|
||||
userDataSource.addCoins("JaneDoe", 500)
|
||||
|
||||
val updatedUser = database.users.find { it.id eq "11111" }
|
||||
assertNotNull(updatedUser)
|
||||
assertEquals(1500, updatedUser?.nbCoins)
|
||||
}
|
||||
|
||||
@Test
|
||||
@Order(6)
|
||||
fun removeCoins() {
|
||||
userDataSource.removeCoins("JaneDoe", 300)
|
||||
val updatedUser = database.users.find { it.id eq "11111" }
|
||||
assertNotNull(updatedUser)
|
||||
assertEquals(1200, updatedUser?.nbCoins)
|
||||
}
|
||||
|
||||
@Test
|
||||
@Order(7)
|
||||
fun userExists() {
|
||||
val result = userDataSource.userExists("JaneDoe")
|
||||
assertTrue(result)
|
||||
val resultS = userDataSource.userExists("nonexistent")
|
||||
assertFalse(resultS)
|
||||
}
|
||||
|
||||
@Test
|
||||
@Order(8)
|
||||
fun emailExists() {
|
||||
val result = userDataSource.emailExists("janedoe@example.com")
|
||||
|
||||
assertTrue(result)
|
||||
|
||||
val resultS = userDataSource.emailExists("nonexistent@example.com")
|
||||
|
||||
assertFalse(resultS)
|
||||
}
|
||||
|
||||
@Test
|
||||
@Order(9)
|
||||
fun canHaveDailyGift() {
|
||||
database.update(UsersEntity) {
|
||||
set(it.lastGift, Instant.now().minusSeconds(86400 * 2)) // 2 days ago
|
||||
where { it.username eq "JaneDoe" }
|
||||
}
|
||||
|
||||
val result = userDataSource.canHaveDailyGift("JaneDoe")
|
||||
|
||||
assertTrue(result)
|
||||
|
||||
val resultS = userDataSource.canHaveDailyGift("JaneDoe")
|
||||
|
||||
assertFalse(resultS)
|
||||
}
|
||||
|
||||
@Test
|
||||
@Order(10)
|
||||
fun addImage() {
|
||||
val imageBytes = "sampleImage".toByteArray()
|
||||
|
||||
userDataSource.addImage("11111", imageBytes)
|
||||
|
||||
val resultSet = database.executeWithResult(
|
||||
"""
|
||||
SELECT encode(image, 'base64') AS image
|
||||
FROM userimage
|
||||
WHERE user_id = '11111'
|
||||
""".trimIndent()
|
||||
)
|
||||
|
||||
assertNotNull(resultSet)
|
||||
if (resultSet != null && resultSet.next()) {
|
||||
val image = resultSet.getString("image")
|
||||
assertEquals(Base64.getEncoder().encodeToString(imageBytes), image)
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
@Order(11)
|
||||
fun getImage() {
|
||||
val result = userDataSource.getImage("11111")
|
||||
|
||||
assertNotNull(result)
|
||||
}
|
||||
|
||||
@Test
|
||||
@Order(12)
|
||||
fun removeImage() {
|
||||
userDataSource.removeImage("11111")
|
||||
|
||||
val resultSet = database.executeWithResult(
|
||||
"""
|
||||
SELECT encode(image, 'base64') AS image
|
||||
FROM userimage
|
||||
WHERE user_id = '11111'
|
||||
""".trimIndent()
|
||||
)
|
||||
|
||||
assertNotNull(resultSet)
|
||||
if (resultSet != null && resultSet.next()) {
|
||||
val image = resultSet.getString("image")
|
||||
assertNull(image)
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in new issue