Skip to content

Commit e9e5821

Browse files
authored
Merge pull request #118 from infinum/fix/tests
Fix tests
2 parents e5e5f79 + 6288ace commit e9e5821

15 files changed

Lines changed: 614 additions & 689 deletions

File tree

dbinspector/src/main/kotlin/com/infinum/dbinspector/data/sources/raw/AndroidDatabasesSource.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ internal class AndroidDatabasesSource : Sources.Raw {
5050
try {
5151
val importedDatabases: MutableSet<File> = mutableSetOf()
5252

53-
operation.importUris.forEach { uri ->
53+
for (uri in operation.importUris) {
5454
uri.lastPathSegment?.split("/")?.last()?.let { filename ->
5555
operation.context.contentResolver.openInputStream(uri)?.use { inputStream ->
5656
val file = File(operation.context.databaseDir, filename)

dbinspector/src/main/kotlin/com/infinum/dbinspector/ui/settings/SettingsActivity.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -70,13 +70,13 @@ internal class SettingsActivity : BaseActivity<SettingsState, SettingsEvent>() {
7070
private fun setupIgnoredTableNames(settings: Settings) =
7171
with(binding) {
7272
tableNameInputLayout.setEndIconOnClickListener {
73-
tableNameInputLayout.editText?.text?.toString().orEmpty().trim().split(",").forEach { newName ->
73+
for (newName in tableNameInputLayout.editText?.text?.toString().orEmpty().trim().split(",")) {
7474
addIgnoredTableNameView(newName.trim())
7575
}
7676
}
77-
settings.ignoredTableNames.forEach {
77+
for (tableName in settings.ignoredTableNames) {
7878
namesLayout.addView(
79-
createIgnoredTableNameView(it)
79+
createIgnoredTableNameView(tableName)
8080
)
8181
}
8282
}

dbinspector/src/main/kotlin/com/infinum/dbinspector/ui/shared/views/editor/KeywordAdapter.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,9 @@ internal class KeywordAdapter(
4444

4545
private fun createSpannable(keyword: Keyword) =
4646
SpannableString(keyword.value).apply {
47-
spanFactory.findSpans(keyword.type).forEach {
47+
for (span in spanFactory.findSpans(keyword.type)) {
4848
setSpan(
49-
it,
49+
span,
5050
0,
5151
keyword.value.length,
5252
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE

dbinspector/src/main/kotlin/com/infinum/dbinspector/ui/shared/views/editor/WordTokenizer.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,9 +83,9 @@ internal class WordTokenizer(
8383
spans: List<ParcelableSpan>,
8484
chopLastChar: Boolean = false
8585
) = SpannableString(text).apply {
86-
spans.forEach {
86+
for (span in spans) {
8787
setSpan(
88-
it,
88+
span,
8989
0,
9090
text.length - (if (chopLastChar) 1 else 0),
9191
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE

dbinspector/src/test/kotlin/com/infinum/dbinspector/ui/content/shared/ContentViewModelTest.kt

Lines changed: 148 additions & 165 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,9 @@ import io.mockk.every
1515
import io.mockk.mockk
1616
import kotlin.test.assertEquals
1717
import 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
1921
import org.junit.jupiter.api.Assertions.assertNotNull
2022
import org.junit.jupiter.api.Assertions.assertNull
2123
import 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

Comments
 (0)