@@ -15,7 +15,9 @@ import io.mockk.every
1515import io.mockk.mockk
1616import kotlin.test.assertEquals
1717import kotlin.test.assertTrue
18- import kotlinx.coroutines.awaitCancellation
18+ import kotlinx.coroutines.flow.filterNotNull
19+ import kotlinx.coroutines.flow.first
20+ import kotlinx.coroutines.test.advanceUntilIdle
1921import org.junit.jupiter.api.Assertions.assertNotNull
2022import org.junit.jupiter.api.Assertions.assertNull
2123import org.junit.jupiter.api.DisplayName
@@ -85,182 +87,163 @@ internal class ContentViewModelTest : BaseTest() {
8587 }
8688
8789 @Test
88- fun `Content header is invoked` () {
89- test {
90- val useCase: BaseUseCase <PragmaParameters .Pragma , Page > = get(qualifier = StringQualifier (" schemaInfo" ))
91- val viewModel = object : ContentViewModel (
92- get(),
93- get(),
94- useCase,
95- get(qualifier = StringQualifier (" getSchema" )),
96- get(qualifier = StringQualifier (" dropSchema" ))
97- ) {
98- override fun headerStatement (name : String ): String = " "
99-
100- override fun schemaStatement (name : String , orderBy : String? , sort : Sort ): String = " "
101-
102- override fun dropStatement (name : String ): String = " "
103- }.apply {
104- databasePath = " test.db"
105- }
106-
107- coEvery { useCase.invoke(any()) } returns mockk {
108- every { cells } returns listOf (
109- mockk {
110- every { text } returns " my_column"
111- }
112- )
113- }
114-
115- viewModel.header(" my_content" )
116-
117- coVerify(exactly = 1 ) { useCase.invoke(any()) }
118-
119- viewModel.stateFlow.test {
120- val item: ContentState ? = awaitItem()
121- assertTrue(item is ContentState .Headers )
122- assertTrue(item.headers.isNotEmpty())
123- awaitCancellation()
124- }
125- viewModel.eventFlow.test {
126- expectNoEvents()
127- }
128- viewModel.errorFlow.test {
129- expectNoEvents()
130- }
90+ fun `Content header is invoked` () = test {
91+ val useCase: BaseUseCase <PragmaParameters .Pragma , Page > = get(qualifier = StringQualifier (" schemaInfo" ))
92+ val viewModel = object : ContentViewModel (
93+ get(),
94+ get(),
95+ useCase,
96+ get(qualifier = StringQualifier (" getSchema" )),
97+ get(qualifier = StringQualifier (" dropSchema" ))
98+ ) {
99+ override fun headerStatement (name : String ): String = " "
100+
101+ override fun schemaStatement (name : String , orderBy : String? , sort : Sort ): String = " "
102+
103+ override fun dropStatement (name : String ): String = " "
104+ }.apply {
105+ databasePath = " test.db"
106+ }
107+
108+ coEvery { useCase.invoke(any()) } returns mockk {
109+ every { cells } returns listOf (
110+ mockk {
111+ every { text } returns " my_column"
112+ }
113+ )
131114 }
115+
116+ viewModel.header(" my_content" )
117+ advanceUntilIdle()
118+
119+ coVerify(exactly = 1 ) { useCase.invoke(any()) }
120+
121+ val state = viewModel.stateFlow.filterNotNull().first()
122+ assertTrue(state is ContentState .Headers )
123+ assertTrue(state.headers.isNotEmpty())
124+
125+ assertNull(viewModel.errorFlow.value)
132126 }
133127
134128 @Test
135- fun `Content data has cells` () {
136- test {
137- val useCase: BaseUseCase <ContentParameters , Page > = get(qualifier = StringQualifier (" getSchema" ))
138- val viewModel = object : ContentViewModel (
139- get(),
140- get(),
141- get(qualifier = StringQualifier (" schemaInfo" )),
142- useCase,
143- get(qualifier = StringQualifier (" dropSchema" ))
144- ) {
145- override fun headerStatement (name : String ): String = " "
146-
147- override fun schemaStatement (name : String , orderBy : String? , sort : Sort ): String = " "
148-
149- override fun dropStatement (name : String ): String = " "
150- }.apply {
151- databasePath = " test.db"
152- }
153-
154- coEvery { useCase.invoke(any()) } returns mockk {
155- every { cells } returns listOf (mockk())
156- }
157-
158- viewModel.query(" my_content" , null , Sort .ASCENDING )
159-
160- coVerify(exactly = 0 ) { useCase.invoke(any()) }
161-
162- viewModel.stateFlow.test {
163- assertNull(awaitItem())
164- val item: ContentState ? = awaitItem()
165- assertTrue(item is ContentState .Content )
166- assertNotNull(item.content)
167- expectNoEvents()
168- }
169- viewModel.eventFlow.test {
170- expectNoEvents()
171- }
172- viewModel.errorFlow.test {
173- assertNull(awaitItem())
174- expectNoEvents()
175- }
129+ fun `Content data has cells` () = test {
130+ val useCase: BaseUseCase <ContentParameters , Page > = get(qualifier = StringQualifier (" getSchema" ))
131+ val viewModel = object : ContentViewModel (
132+ get(),
133+ get(),
134+ get(qualifier = StringQualifier (" schemaInfo" )),
135+ useCase,
136+ get(qualifier = StringQualifier (" dropSchema" ))
137+ ) {
138+ override fun headerStatement (name : String ): String = " "
139+
140+ override fun schemaStatement (name : String , orderBy : String? , sort : Sort ): String = " "
141+
142+ override fun dropStatement (name : String ): String = " "
143+ }.apply {
144+ databasePath = " test.db"
145+ }
146+
147+ coEvery { useCase.invoke(any()) } returns mockk {
148+ every { cells } returns listOf (mockk())
149+ }
150+
151+ viewModel.query(" my_content" , null , Sort .ASCENDING )
152+
153+ coVerify(exactly = 0 ) { useCase.invoke(any()) }
154+
155+ viewModel.stateFlow.test {
156+ assertNull(awaitItem())
157+ val item: ContentState ? = awaitItem()
158+ assertTrue(item is ContentState .Content )
159+ assertNotNull(item.content)
160+ expectNoEvents()
161+ }
162+ viewModel.eventFlow.test {
163+ expectNoEvents()
164+ }
165+ viewModel.errorFlow.test {
166+ assertNull(awaitItem())
167+ expectNoEvents()
176168 }
177169 }
178170
179171 @Test
180- fun `Drop content successful` () {
181- test {
182- val useCase : BaseUseCase < ContentParameters , Page > = get(qualifier = StringQualifier ( " dropSchema " ))
183- val viewModel = object : ContentViewModel (
184- get(),
185- get( ),
186- get(qualifier = StringQualifier (" schemaInfo " )),
187- get(qualifier = StringQualifier ( " getSchema " )),
188- useCase
189- ) {
190- override fun headerStatement ( name : String ): String = " "
191-
192- override fun schemaStatement ( name : String , orderBy : String? , sort : Sort ): String = " "
193-
194- override fun dropStatement ( name : String ): String = " "
195- }. apply {
196- databasePath = " test.db "
197- }
198-
199- coEvery { useCase.invoke(any()) } returns mockk {
200- every { cells } returns listOf ()
201- }
202-
203- viewModel.drop( " my_content " )
204-
205- coVerify(exactly = 1 ) { useCase.invoke(any()) }
206-
207- viewModel.stateFlow.test {
208- assertNull(awaitItem())
209- }
210- viewModel.eventFlow.test {
211- val item: ContentEvent ? = awaitItem()
212- assertTrue(item is ContentEvent .Dropped )
213- awaitCancellation ()
214- }
215- viewModel.errorFlow.test {
216- expectNoEvents( )
217- }
172+ fun `Drop content successful` () = test {
173+ val useCase : BaseUseCase < ContentParameters , Page > = get(qualifier = StringQualifier ( " dropSchema " ))
174+ val viewModel = object : ContentViewModel (
175+ get(),
176+ get(),
177+ get(qualifier = StringQualifier ( " schemaInfo " ) ),
178+ get(qualifier = StringQualifier (" getSchema " )),
179+ useCase
180+ ) {
181+ override fun headerStatement ( name : String ): String = " "
182+
183+ override fun schemaStatement ( name : String , orderBy : String? , sort : Sort ): String = " "
184+
185+ override fun dropStatement ( name : String ): String = " "
186+ }. apply {
187+ databasePath = " test.db "
188+ }
189+
190+ coEvery { useCase.invoke(any()) } returns mockk {
191+ every { cells } returns listOf ()
192+ }
193+
194+ viewModel.drop( " my_content " )
195+ advanceUntilIdle( )
196+
197+ coVerify(exactly = 1 ) { useCase.invoke(any()) }
198+
199+ viewModel.stateFlow.test {
200+ assertNull(awaitItem())
201+ }
202+ viewModel.eventFlow.test {
203+ val item: ContentEvent ? = awaitItem()
204+ assertTrue(item is ContentEvent .Dropped )
205+ cancelAndIgnoreRemainingEvents ()
206+ }
207+ viewModel.errorFlow.test {
208+ assertNull(awaitItem() )
209+ cancelAndIgnoreRemainingEvents()
218210 }
219211 }
220212
221213 @Test
222- fun `Drop content failed` () {
223- test {
224- val useCase: BaseUseCase <ContentParameters , Page > = get(qualifier = StringQualifier (" dropSchema" ))
225- val viewModel = object : ContentViewModel (
226- get(),
227- get(),
228- get(qualifier = StringQualifier (" schemaInfo" )),
229- get(qualifier = StringQualifier (" getSchema" )),
230- useCase
231- ) {
232- override fun headerStatement (name : String ): String = " "
233-
234- override fun schemaStatement (name : String , orderBy : String? , sort : Sort ): String = " "
235-
236- override fun dropStatement (name : String ): String = " "
237- }.apply {
238- databasePath = " test.db"
239- }
240-
241- coEvery { useCase.invoke(any()) } returns mockk {
242- every { cells } returns listOf (mockk())
243- }
244-
245- viewModel.drop(" my_content" )
246-
247- coVerify(exactly = 1 ) { useCase.invoke(any()) }
248-
249- viewModel.stateFlow.test {
250- assertNull(awaitItem())
251- expectNoEvents()
252- }
253- viewModel.eventFlow.test {
254- expectNoEvents()
255- }
256- viewModel.errorFlow.test {
257- val item: Throwable ? = awaitItem()
258- assertTrue(item is DropException )
259- assertNotNull(item.message)
260- assertEquals(" Cannot perform a drop on selected schema." , item.message)
261- assertTrue(item.stackTrace.isNotEmpty())
262- expectNoEvents()
263- }
214+ fun `Drop content failed` () = test {
215+ val useCase: BaseUseCase <ContentParameters , Page > = get(qualifier = StringQualifier (" dropSchema" ))
216+ val viewModel = object : ContentViewModel (
217+ get(),
218+ get(),
219+ get(qualifier = StringQualifier (" schemaInfo" )),
220+ get(qualifier = StringQualifier (" getSchema" )),
221+ useCase
222+ ) {
223+ override fun headerStatement (name : String ): String = " "
224+
225+ override fun schemaStatement (name : String , orderBy : String? , sort : Sort ): String = " "
226+
227+ override fun dropStatement (name : String ): String = " "
228+ }.apply {
229+ databasePath = " test.db"
230+ }
231+
232+ coEvery { useCase.invoke(any()) } returns mockk {
233+ every { cells } returns listOf (mockk())
264234 }
235+
236+ viewModel.drop(" my_content" )
237+ advanceUntilIdle()
238+
239+ coVerify(exactly = 1 ) { useCase.invoke(any()) }
240+
241+ assertNull(viewModel.stateFlow.value)
242+
243+ val error = viewModel.errorFlow.filterNotNull().first()
244+ assertTrue(error is DropException )
245+ assertNotNull(error.message)
246+ assertEquals(" Cannot perform a drop on selected schema." , error.message)
247+ assertTrue(error.stackTrace.isNotEmpty())
265248 }
266249}
0 commit comments