field_ios

In-the-field app for Radroots on iOS
git clone https://radroots.dev/git/field_ios.git
Log | Files | Refs | README | LICENSE

LegacyInventoryTests.kt (3939B)


      1 package tera.smoke
      2 
      3 import java.nio.ByteBuffer
      4 import kotlin.test.Test
      5 import kotlin.test.assertEquals
      6 import kotlin.test.assertFailsWith
      7 import kotlin.test.assertFalse
      8 import kotlin.test.assertNotNull
      9 import kotlin.test.assertNull
     10 import kotlin.test.assertTrue
     11 import kotlinx.coroutines.runBlocking
     12 import uniffi.tera_core.FfiAddCommandType
     13 import uniffi.tera_core.FfiConverterTypeFfiLegacyDraftListEntry
     14 import uniffi.tera_core.FfiConverterTypeFfiLegacyDraftPageRecord
     15 import uniffi.tera_core.FfiLegacyDraftListEntry
     16 import uniffi.tera_core.FfiLegacyDraftRepairReason
     17 import uniffi.tera_core.TeraAppException
     18 
     19 class LegacyInventoryTests {
     20     @Test
     21     fun nativeLegacyPagesPreserveOperationsAcrossRestartAndRejectMalformedCursors(): Unit = runBlocking {
     22         SmokeFixture().use { fixture ->
     23             val runtime = fixture.runtime()
     24             val input = fixture.draft(emptyList()).copy(commandType = FfiAddCommandType.CREATE_UPDATE)
     25             val saved = (1..2).map { runtime.phase1SaveAddIntent(input, null, null) }
     26             val first = try {
     27                 val page = runtime.legacyDraftPage(1u, 1u, null)
     28                 assertEquals(PUBLIC_KEY, page.authorPublicKey)
     29                 assertEquals(1u.toUShort(), page.schemaVersion)
     30                 assertEquals(1, page.entries.size)
     31                 assertNotNull(page.nextCursor)
     32                 val summary = (page.entries.single() as FfiLegacyDraftListEntry.Draft).summary
     33                 assertTrue(summary.hasForm)
     34                 assertFalse(summary.isRevision)
     35                 assertEquals(0uL, summary.mediaCount)
     36                 assertEquals(0uL, summary.verifiedMediaCount)
     37                 assertEquals(0uL, summary.possibleOrphanCount)
     38                 assertNull(summary.settlement)
     39                 assertEquals(page, FfiConverterTypeFfiLegacyDraftPageRecord.lift(FfiConverterTypeFfiLegacyDraftPageRecord.lower(page)))
     40                 assertEquals("unsupported_schema_version", assertFailsWith<TeraAppException.Failure> {
     41                     runtime.legacyDraftPage(2u, 1u, null)
     42                 }.report.code)
     43                 assertEquals("draft_inventory_invalid", assertFailsWith<TeraAppException.Failure> {
     44                     runtime.legacyDraftPage(1u, 0u, null)
     45                 }.report.code)
     46                 for (cursor in listOf("invalid", page.nextCursor!!.uppercase(), page.nextCursor!! + "0")) {
     47                     assertEquals("draft_inventory_cursor_invalid", assertFailsWith<TeraAppException.Failure> {
     48                         runtime.legacyDraftPage(1u, 1u, cursor)
     49                     }.report.code)
     50                 }
     51                 page
     52             } finally {
     53                 runtime.shutdown()
     54                 runtime.close()
     55             }
     56             val reopened = fixture.runtime()
     57             try {
     58                 val last = reopened.legacyDraftPage(1u, 1u, first.nextCursor)
     59                 assertNull(last.nextCursor)
     60                 assertEquals(saved.map { it.draftId }.toSet(), (first.entries + last.entries).map {
     61                     (it as FfiLegacyDraftListEntry.Draft).summary.draftId
     62                 }.toSet())
     63                 for (draft in saved) assertEquals(draft, reopened.phase1DraftStatus(draft.draftId))
     64                 for (reason in FfiLegacyDraftRepairReason.entries) {
     65                     val repair = FfiLegacyDraftListEntry.Repair("00".repeat(16), ULong.MAX_VALUE, reason)
     66                     assertEquals(repair, FfiConverterTypeFfiLegacyDraftListEntry.lift(FfiConverterTypeFfiLegacyDraftListEntry.lower(repair)))
     67                 }
     68                 for (bytes in listOf(byteArrayOf(), byteArrayOf(0, 0, 0, 99), byteArrayOf(0, 0, 0, 1))) {
     69                     assertFailsWith<RuntimeException> { FfiConverterTypeFfiLegacyDraftListEntry.read(ByteBuffer.wrap(bytes)) }
     70                 }
     71             } finally {
     72                 reopened.shutdown()
     73                 reopened.close()
     74             }
     75         }
     76     }
     77 }