Skip to content

Commit cdb4d64

Browse files
committed
Moved persist tests to own class & fixed generated persist method for inline value classes
1 parent 0152d05 commit cdb4d64

File tree

5 files changed

+255
-92
lines changed

5 files changed

+255
-92
lines changed

bee.persistent.test/datasource.a/src/main/kotlin/com/beeproduced/datasource/a/Entities.kt

-21
Original file line numberDiff line numberDiff line change
@@ -175,24 +175,3 @@ data class SemiCircular2(
175175
@BeeRepository
176176
interface SemiCircular1Repository : BeeBlazeRepository<SemiCircular1, UUID>
177177

178-
179-
@Entity
180-
data class GeneratedObjectId(
181-
@GeneratedValue
182-
@Id
183-
val id: UUID = UUID.randomUUID()
184-
)
185-
186-
@BeeRepository
187-
interface GeneratedObjectIdRepository : BeeBlazeRepository<GeneratedObjectId, UUID>
188-
189-
@Entity
190-
data class GeneratedPrimitiveId(
191-
@GeneratedValue
192-
@Id
193-
val id: Long = -2
194-
)
195-
196-
@BeeRepository
197-
interface GeneratedPrimitiveIdRepository : BeeBlazeRepository<GeneratedPrimitiveId, Long>
198-
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package com.beeproduced.datasource.test.persist
2+
3+
import com.beeproduced.bee.persistent.blaze.BeeBlazeRepository
4+
import com.beeproduced.bee.persistent.blaze.annotations.BeeRepository
5+
import jakarta.persistence.Entity
6+
import jakarta.persistence.GeneratedValue
7+
import jakarta.persistence.Id
8+
import java.util.*
9+
10+
/**
11+
*
12+
*
13+
* @author Kacper Urbaniec
14+
* @version 2024-01-15
15+
*/
16+
17+
@Entity
18+
data class GeneratedObjectId(
19+
@GeneratedValue
20+
@Id
21+
val id: UUID = UUID.randomUUID()
22+
)
23+
24+
@BeeRepository
25+
interface GeneratedObjectIdRepository : BeeBlazeRepository<GeneratedObjectId, UUID>
26+
27+
@Entity
28+
data class GeneratedPrimitiveId(
29+
@GeneratedValue
30+
@Id
31+
val id: Long = -2
32+
)
33+
34+
@BeeRepository
35+
interface GeneratedPrimitiveIdRepository : BeeBlazeRepository<GeneratedPrimitiveId, Long>
36+
37+
@JvmInline
38+
value class SomeInlineId(val id: Long)
39+
40+
@Entity
41+
data class GeneratedInlineId(
42+
@GeneratedValue
43+
@Id
44+
val id: SomeInlineId
45+
)
46+
47+
@BeeRepository
48+
interface GeneratedInlineIdRepository : BeeBlazeRepository<GeneratedInlineId, SomeInlineId>

bee.persistent.test/src/test/kotlin/com/beeproduced/bee/persistent/test/BeePersistentTestA.kt

+70-70
Original file line numberDiff line numberDiff line change
@@ -49,10 +49,10 @@ class BeePersistentTestA(
4949
val circularRepository: CircularRepository,
5050
@Autowired
5151
val semiCircular1Repository: SemiCircular1Repository,
52-
@Autowired
53-
val generatedObjectIdRepository: GeneratedObjectIdRepository,
54-
@Autowired
55-
val generatedPrimitiveIdRepository: GeneratedPrimitiveIdRepository
52+
// @Autowired
53+
// val generatedObjectIdRepository: GeneratedObjectIdRepository,
54+
// @Autowired
55+
// val generatedPrimitiveIdRepository: GeneratedPrimitiveIdRepository
5656
) {
5757
private val transaction = TransactionTemplate(transactionManager)
5858

@@ -689,72 +689,72 @@ class BeePersistentTestA(
689689
}
690690
}
691691

692-
@Test
693-
fun persist() {
694-
assertThrows<Exception> {
695-
transaction.executeWithoutResult {
696-
// Different value than in constructor (-2 != -42)!
697-
val primitiveId2 = GeneratedPrimitiveId().copy(id = -42)
698-
val pstPrimitiveId2 = em.beePersist(primitiveId2)
699-
assertNotNull(pstPrimitiveId2.id)
700-
}
701-
}
702-
703-
assertThrows<Exception> {
704-
transaction.executeWithoutResult {
705-
// Primitive field which cannot be set to null!
706-
val idField2 = GeneratedPrimitiveId::class.java.getDeclaredField("id").apply { isAccessible = true }
707-
val primitiveId4 = GeneratedPrimitiveId()
708-
idField2.set(primitiveId4, null)
709-
val pstPrimitiveId4 = em.beePersist(primitiveId4)
710-
assertNotNull(pstPrimitiveId4.id)
711-
}
712-
}
713-
714-
transaction.executeWithoutResult {
715-
val idField = GeneratedObjectId::class.java.getDeclaredField("id").apply { isAccessible = true }
716-
val objectId = GeneratedObjectId()
717-
idField.set(objectId, null)
718-
val pstObjectId = em.beePersist(objectId)
719-
assertNotNull(pstObjectId.id)
720-
721-
val primitiveId = GeneratedPrimitiveId()
722-
val pstPrimitiveId = em.beePersist(primitiveId)
723-
assertNotNull(pstPrimitiveId.id)
724-
725-
val default = GeneratedPrimitiveId::class.java
726-
.getConstructor()
727-
.newInstance()
728-
val primitiveId3 = GeneratedPrimitiveId().copy(id = -42)
729-
val pstPrimitiveId3 = em.beePersist(primitiveId3.copy(id = default.id))
730-
assertNotNull(pstPrimitiveId3.id)
731-
}
732-
}
733-
734-
735-
@Test
736-
fun `test persist`() {
737-
transaction.executeWithoutResult {
738-
val objectId = GeneratedObjectId()
739-
val pstObjectId = generatedObjectIdRepository.persist(objectId)
740-
assertNotNull(pstObjectId.id)
741-
742-
val primitiveId = GeneratedPrimitiveId()
743-
val pstPrimitiveId = generatedPrimitiveIdRepository.persist(primitiveId)
744-
assertNotNull(pstPrimitiveId.id)
745-
746-
val primitiveId2 = GeneratedPrimitiveId().copy(id = -42)
747-
val pstPrimitiveId2 = generatedPrimitiveIdRepository.persist(primitiveId2)
748-
assertNotNull(pstPrimitiveId2.id)
749-
750-
val default = GeneratedPrimitiveId::class.java
751-
.getConstructor()
752-
.newInstance()
753-
val primitiveId3 = GeneratedPrimitiveId().copy(id = -42)
754-
val pstPrimitiveId3 = generatedPrimitiveIdRepository.persist(primitiveId3.copy(id = default.id))
755-
assertNotNull(pstPrimitiveId3.id)
756-
}
757-
}
692+
// @Test
693+
// fun persist() {
694+
// assertThrows<Exception> {
695+
// transaction.executeWithoutResult {
696+
// // Different value than in constructor (-2 != -42)!
697+
// val primitiveId2 = GeneratedPrimitiveId().copy(id = -42)
698+
// val pstPrimitiveId2 = em.beePersist(primitiveId2)
699+
// assertNotNull(pstPrimitiveId2.id)
700+
// }
701+
// }
702+
//
703+
// assertThrows<Exception> {
704+
// transaction.executeWithoutResult {
705+
// // Primitive field which cannot be set to null!
706+
// val idField2 = GeneratedPrimitiveId::class.java.getDeclaredField("id").apply { isAccessible = true }
707+
// val primitiveId4 = GeneratedPrimitiveId()
708+
// idField2.set(primitiveId4, null)
709+
// val pstPrimitiveId4 = em.beePersist(primitiveId4)
710+
// assertNotNull(pstPrimitiveId4.id)
711+
// }
712+
// }
713+
//
714+
// transaction.executeWithoutResult {
715+
// val idField = GeneratedObjectId::class.java.getDeclaredField("id").apply { isAccessible = true }
716+
// val objectId = GeneratedObjectId()
717+
// idField.set(objectId, null)
718+
// val pstObjectId = em.beePersist(objectId)
719+
// assertNotNull(pstObjectId.id)
720+
//
721+
// val primitiveId = GeneratedPrimitiveId()
722+
// val pstPrimitiveId = em.beePersist(primitiveId)
723+
// assertNotNull(pstPrimitiveId.id)
724+
//
725+
// val default = GeneratedPrimitiveId::class.java
726+
// .getConstructor()
727+
// .newInstance()
728+
// val primitiveId3 = GeneratedPrimitiveId().copy(id = -42)
729+
// val pstPrimitiveId3 = em.beePersist(primitiveId3.copy(id = default.id))
730+
// assertNotNull(pstPrimitiveId3.id)
731+
// }
732+
// }
733+
//
734+
//
735+
// @Test
736+
// fun `test persist`() {
737+
// transaction.executeWithoutResult {
738+
// val objectId = GeneratedObjectId()
739+
// val pstObjectId = generatedObjectIdRepository.persist(objectId)
740+
// assertNotNull(pstObjectId.id)
741+
//
742+
// val primitiveId = GeneratedPrimitiveId()
743+
// val pstPrimitiveId = generatedPrimitiveIdRepository.persist(primitiveId)
744+
// assertNotNull(pstPrimitiveId.id)
745+
//
746+
// val primitiveId2 = GeneratedPrimitiveId().copy(id = -42)
747+
// val pstPrimitiveId2 = generatedPrimitiveIdRepository.persist(primitiveId2)
748+
// assertNotNull(pstPrimitiveId2.id)
749+
//
750+
// val default = GeneratedPrimitiveId::class.java
751+
// .getConstructor()
752+
// .newInstance()
753+
// val primitiveId3 = GeneratedPrimitiveId().copy(id = -42)
754+
// val pstPrimitiveId3 = generatedPrimitiveIdRepository.persist(primitiveId3.copy(id = default.id))
755+
// assertNotNull(pstPrimitiveId3.id)
756+
// }
757+
// }
758758

759759
@BeforeAll
760760
fun beforeAll() {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,135 @@
1+
package com.beeproduced.bee.persistent.test.persist
2+
3+
import com.beeproduced.bee.persistent.test.base.BaseTestConfig
4+
import com.beeproduced.bee.persistent.test.beePersist
5+
import com.beeproduced.datasource.test.persist.*
6+
import jakarta.persistence.EntityManager
7+
import org.junit.jupiter.api.AfterEach
8+
import org.junit.jupiter.api.BeforeAll
9+
import org.junit.jupiter.api.TestInstance
10+
import org.junit.jupiter.api.assertThrows
11+
import org.junit.jupiter.api.extension.ExtendWith
12+
import org.springframework.beans.factory.annotation.Autowired
13+
import org.springframework.beans.factory.annotation.Qualifier
14+
import org.springframework.boot.test.context.SpringBootTest
15+
import org.springframework.test.context.TestPropertySource
16+
import org.springframework.test.context.junit.jupiter.SpringExtension
17+
import org.springframework.transaction.PlatformTransactionManager
18+
import org.springframework.transaction.support.TransactionTemplate
19+
import kotlin.test.Test
20+
import kotlin.test.assertNotNull
21+
22+
/**
23+
*
24+
*
25+
* @author Kacper Urbaniec
26+
* @version 2024-01-15
27+
*/
28+
@ExtendWith(SpringExtension::class)
29+
@SpringBootTest(classes = [BaseTestConfig::class])
30+
@TestPropertySource("classpath:application.properties")
31+
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
32+
class PersistTest(
33+
@Qualifier("testEM")
34+
val em: EntityManager,
35+
@Qualifier("testTM")
36+
transactionManager: PlatformTransactionManager,
37+
@Autowired
38+
val objectIdRepo: GeneratedObjectIdRepository,
39+
@Autowired
40+
val primitiveRepo: GeneratedPrimitiveIdRepository,
41+
@Autowired
42+
val inlineRepo: GeneratedInlineIdRepository
43+
) {
44+
private val transaction = TransactionTemplate(transactionManager)
45+
46+
@BeforeAll
47+
fun beforeAll() = clear()
48+
49+
@AfterEach
50+
fun afterEach() = clear()
51+
52+
fun clear() = transaction.executeWithoutResult {
53+
objectIdRepo.cbf.delete(em, GeneratedObjectId::class.java).executeUpdate()
54+
primitiveRepo.cbf.delete(em, GeneratedPrimitiveId::class.java).executeUpdate()
55+
}
56+
57+
@Test
58+
fun `persist implementation details`() {
59+
assertThrows<Exception> {
60+
transaction.executeWithoutResult {
61+
// Different value than in constructor (-2 != -42)!
62+
val primitiveId2 = GeneratedPrimitiveId().copy(id = -42)
63+
val pstPrimitiveId2 = em.beePersist(primitiveId2)
64+
assertNotNull(pstPrimitiveId2.id)
65+
}
66+
}
67+
68+
assertThrows<Exception> {
69+
transaction.executeWithoutResult {
70+
// Primitive field which cannot be set to null!
71+
val idField2 = GeneratedPrimitiveId::class.java.getDeclaredField("id").apply { isAccessible = true }
72+
val primitiveId4 = GeneratedPrimitiveId()
73+
idField2.set(primitiveId4, null)
74+
val pstPrimitiveId4 = em.beePersist(primitiveId4)
75+
assertNotNull(pstPrimitiveId4.id)
76+
}
77+
}
78+
79+
transaction.executeWithoutResult {
80+
val idField = GeneratedObjectId::class.java.getDeclaredField("id").apply { isAccessible = true }
81+
val objectId = GeneratedObjectId()
82+
idField.set(objectId, null)
83+
val pstObjectId = em.beePersist(objectId)
84+
assertNotNull(pstObjectId.id)
85+
86+
val primitiveId = GeneratedPrimitiveId()
87+
val pstPrimitiveId = em.beePersist(primitiveId)
88+
assertNotNull(pstPrimitiveId.id)
89+
90+
val default = GeneratedPrimitiveId::class.java
91+
.getConstructor()
92+
.newInstance()
93+
val primitiveId3 = GeneratedPrimitiveId().copy(id = -42)
94+
val pstPrimitiveId3 = em.beePersist(primitiveId3.copy(id = default.id))
95+
assertNotNull(pstPrimitiveId3.id)
96+
}
97+
}
98+
99+
@Test
100+
fun `persist with primitive id`() {
101+
transaction.executeWithoutResult {
102+
val primitiveId = GeneratedPrimitiveId()
103+
val pstPrimitiveId = primitiveRepo.persist(primitiveId)
104+
assertNotNull(pstPrimitiveId.id)
105+
}
106+
}
107+
108+
@Test
109+
fun `persist with primitive id with non default value`() {
110+
transaction.executeWithoutResult {
111+
val primitiveId = GeneratedPrimitiveId().copy(id = -42)
112+
val pstPrimitiveId = primitiveRepo.persist(primitiveId)
113+
assertNotNull(pstPrimitiveId.id)
114+
}
115+
}
116+
117+
@Test
118+
fun `persist with object id`() {
119+
transaction.executeWithoutResult {
120+
val objectId = GeneratedObjectId()
121+
val pstObjectId = objectIdRepo.persist(objectId)
122+
assertNotNull(pstObjectId)
123+
}
124+
}
125+
126+
127+
@Test
128+
fun `persist with inline value id`() {
129+
transaction.executeWithoutResult {
130+
val inlineId = GeneratedInlineId(SomeInlineId(-1))
131+
val pstInlinedId = inlineRepo.persist(inlineId)
132+
assertNotNull(pstInlinedId)
133+
}
134+
}
135+
}

bee.persistent/src/blaze-processor/kotlin/com/beeproduced/bee/persistent/blaze/processor/codegen/BeePersistentRepoCodegen.kt

+2-1
Original file line numberDiff line numberDiff line change
@@ -246,7 +246,8 @@ class BeePersistentRepoCodegen(
246246
if (!id.isGenerated) return ""
247247
val type = id.type
248248
if (type.isMarkedNullable) return "null"
249-
val typeName = type.declaration.simpleName.asString()
249+
val typeName = if (id.innerValue != null) id.innerValue.type.declaration.simpleName.asString()
250+
else type.declaration.simpleName.asString()
250251
return when (typeName) {
251252
"Double" -> "default.${id.simpleName}"
252253
"Float" -> "default.${id.simpleName}"

0 commit comments

Comments
 (0)