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.
229 lines
5.9 KiB
229 lines
5.9 KiB
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)
|
|
}
|
|
}
|
|
} |