Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions app/BUILD.bazel
Original file line number Diff line number Diff line change
@@ -1 +1,10 @@
package(default_visibility = ["//visibility:public"])

exports_files([
"src/main/assets/databases/seed.db",
])

filegroup(
name = "seed_db_asset",
srcs = ["src/main/assets/databases/seed.db"],
)
Binary file added app/src/main/assets/databases/seed.db
Binary file not shown.
23 changes: 23 additions & 0 deletions core/data/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ kt_jvm_library(

kt_jvm_test(
name = "seed_database_test",
size = "small",
srcs = ["src/test/kotlin/com/anysoftkeyboard/calque/data/seed/SeedDatabaseTest.kt"],
test_class = "com.anysoftkeyboard.calque.data.seed.SeedDatabaseTest",
deps = [
Expand All @@ -23,6 +24,7 @@ kt_jvm_test(

kt_jvm_test(
name = "seed_dictionary_repository_test",
size = "small",
srcs = ["src/test/kotlin/com/anysoftkeyboard/calque/data/seed/SeedDictionaryRepositoryTest.kt"],
test_class = "com.anysoftkeyboard.calque.data.seed.SeedDictionaryRepositoryTest",
deps = [
Expand All @@ -34,6 +36,7 @@ kt_jvm_test(

kt_jvm_test(
name = "seed_false_cognates_repository_test",
size = "small",
srcs = ["src/test/kotlin/com/anysoftkeyboard/calque/data/seed/SeedFalseCognatesRepositoryTest.kt"],
test_class = "com.anysoftkeyboard.calque.data.seed.SeedFalseCognatesRepositoryTest",
deps = [
Expand All @@ -45,6 +48,7 @@ kt_jvm_test(

kt_jvm_test(
name = "seed_curated_lessons_repository_test",
size = "small",
srcs = ["src/test/kotlin/com/anysoftkeyboard/calque/data/seed/SeedCuratedLessonsRepositoryTest.kt"],
test_class = "com.anysoftkeyboard.calque.data.seed.SeedCuratedLessonsRepositoryTest",
deps = [
Expand All @@ -55,6 +59,7 @@ kt_jvm_test(

kt_jvm_test(
name = "seed_cognate_rules_repository_test",
size = "small",
srcs = ["src/test/kotlin/com/anysoftkeyboard/calque/data/seed/SeedCognateRulesRepositoryTest.kt"],
test_class = "com.anysoftkeyboard.calque.data.seed.SeedCognateRulesRepositoryTest",
deps = [
Expand All @@ -63,8 +68,23 @@ kt_jvm_test(
],
)

kt_jvm_test(
name = "packaged_seed_asset_test",
size = "small",
srcs = ["src/test/kotlin/com/anysoftkeyboard/calque/data/seed/PackagedSeedAssetTest.kt"],
data = [
"//app:seed_db_asset",
],
test_class = "com.anysoftkeyboard.calque.data.seed.PackagedSeedAssetTest",
deps = [
":data",
"@maven//:junit_junit",
],
)

kt_jvm_test(
name = "user_database_test",
size = "small",
srcs = ["src/test/kotlin/com/anysoftkeyboard/calque/data/user/UserDatabaseTest.kt"],
test_class = "com.anysoftkeyboard.calque.data.user.UserDatabaseTest",
deps = [
Expand All @@ -75,6 +95,7 @@ kt_jvm_test(

kt_jvm_test(
name = "user_word_state_repository_test",
size = "small",
srcs = ["src/test/kotlin/com/anysoftkeyboard/calque/data/user/UserWordStateRepositoryTest.kt"],
test_class = "com.anysoftkeyboard.calque.data.user.UserWordStateRepositoryTest",
deps = [
Expand All @@ -86,6 +107,7 @@ kt_jvm_test(

kt_jvm_test(
name = "user_custom_text_repository_test",
size = "small",
srcs = ["src/test/kotlin/com/anysoftkeyboard/calque/data/user/UserCustomTextRepositoryTest.kt"],
test_class = "com.anysoftkeyboard.calque.data.user.UserCustomTextRepositoryTest",
deps = [
Expand All @@ -96,6 +118,7 @@ kt_jvm_test(

kt_jvm_test(
name = "calque_word_lookup_provider_test",
size = "small",
srcs = ["src/test/kotlin/com/anysoftkeyboard/calque/data/CalqueWordLookupProviderTest.kt"],
test_class = "com.anysoftkeyboard.calque.data.CalqueWordLookupProviderTest",
deps = [
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
package com.anysoftkeyboard.calque.data.seed

import java.io.File
import org.junit.Assert.assertEquals
import org.junit.Assert.assertNotNull
import org.junit.Assert.assertTrue
import org.junit.Test

class PackagedSeedAssetTest {

@Test
fun packagedSeedAsset_existsAndHasAllSeedTablesPopulated() {
val assetFile = File("app/src/main/assets/databases/seed.db")
assertTrue("Expected packaged seed database at ${assetFile.path}", assetFile.exists())
assertTrue(
"Expected database size > 10KB, got ${assetFile.length()}",
assetFile.length() > 10_000
)

val database = SeedDatabase.open("jdbc:sqlite:${assetFile.path}")
database.use { db ->
val dictRepo = SqliteDictionaryRepository(db.connection)
val fcRepo = SqliteFalseCognatesRepository(db.connection)
val lessonRepo = SqliteCuratedLessonsRepository(db.connection)
val rulesRepo = SqliteCognateRulesRepository(db.connection)

// 1. Verify dictionary entries
val hotelWord = dictRepo.getBySurfaceForm("hotel")
assertNotNull("Dictionary should contain 'hotel'", hotelWord)
assertEquals("hotel", hotelWord?.lemma)
assertTrue("hotel should be marked as cognate", hotelWord?.isCognate == true)

val esWord = dictRepo.getBySurfaceForm("es")
assertNotNull("Dictionary should contain 'es'", esWord)
assertEquals("ser", esWord?.lemma)

// 2. Verify false cognates
val exitoCard = fcRepo.getBySurfaceForm("éxito")
assertNotNull("False cognates should contain 'éxito'", exitoCard)
assertEquals("exit", exitoCard?.apparentEnglish)
assertEquals("salida", exitoCard?.realSpanishForApparent)

val carpetasPlural = fcRepo.getBySurfaceForm("carpetas")
assertNotNull(
"False cognates should expand inflections like 'carpetas'",
carpetasPlural
)
assertEquals("carpeta", carpetasPlural?.lemma)

// 3. Verify curated lessons
val lessons = lessonRepo.getAll()
assertEquals("Should contain 8 curated lessons", 8, lessons.size)
val levels = lessons.map { it.level }.toSet()
assertEquals(setOf(0, 1, 2), levels)

val firstLesson = lessonRepo.getById("lvl0_00_cognate_unlock")
assertNotNull(firstLesson)
assertEquals("The Cognate Unlock & Vowel Soundboard", firstLesson?.title)
assertEquals(
"El hotel moderno es excelente.",
firstLesson?.parseSentences()?.first()?.sentenceEs,
)

// 4. Verify cognate rules
val rules = rulesRepo.getAll()
assertEquals("Should contain 12 cognate rules", 12, rules.size)
val matchingRule = rulesRepo.findRuleForSpanishWord("situación")
assertNotNull(matchingRule)
assertEquals("tion_to_cion", matchingRule?.ruleId)
}
}
}
2 changes: 2 additions & 0 deletions data/seeds/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package(default_visibility = ["//visibility:public"])
exports_files([
"cognate_rules_seed.json",
"curated_lessons_seed.json",
"dictionary_seed.json",
"false_cognates_seed.json",
])

Expand All @@ -11,6 +12,7 @@ filegroup(
srcs = [
"cognate_rules_seed.json",
"curated_lessons_seed.json",
"dictionary_seed.json",
"false_cognates_seed.json",
],
)
Loading
Loading