mirror of
https://github.com/SchildiChat/SchildiChat-android.git
synced 2024-12-28 03:48:37 +03:00
Adds AuthTo005 realm migration
This commit is contained in:
parent
d33081c349
commit
dffd568e14
5 changed files with 140 additions and 2 deletions
|
@ -22,6 +22,7 @@ import org.matrix.android.sdk.internal.auth.db.migration.MigrateAuthTo001
|
||||||
import org.matrix.android.sdk.internal.auth.db.migration.MigrateAuthTo002
|
import org.matrix.android.sdk.internal.auth.db.migration.MigrateAuthTo002
|
||||||
import org.matrix.android.sdk.internal.auth.db.migration.MigrateAuthTo003
|
import org.matrix.android.sdk.internal.auth.db.migration.MigrateAuthTo003
|
||||||
import org.matrix.android.sdk.internal.auth.db.migration.MigrateAuthTo004
|
import org.matrix.android.sdk.internal.auth.db.migration.MigrateAuthTo004
|
||||||
|
import org.matrix.android.sdk.internal.auth.db.migration.MigrateAuthTo005
|
||||||
import timber.log.Timber
|
import timber.log.Timber
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
|
@ -33,7 +34,7 @@ internal class AuthRealmMigration @Inject constructor() : RealmMigration {
|
||||||
override fun equals(other: Any?) = other is AuthRealmMigration
|
override fun equals(other: Any?) = other is AuthRealmMigration
|
||||||
override fun hashCode() = 4000
|
override fun hashCode() = 4000
|
||||||
|
|
||||||
val schemaVersion = 4L
|
val schemaVersion = 5L
|
||||||
|
|
||||||
override fun migrate(realm: DynamicRealm, oldVersion: Long, newVersion: Long) {
|
override fun migrate(realm: DynamicRealm, oldVersion: Long, newVersion: Long) {
|
||||||
Timber.d("Migrating Auth Realm from $oldVersion to $newVersion")
|
Timber.d("Migrating Auth Realm from $oldVersion to $newVersion")
|
||||||
|
@ -42,5 +43,6 @@ internal class AuthRealmMigration @Inject constructor() : RealmMigration {
|
||||||
if (oldVersion < 2) MigrateAuthTo002(realm).perform()
|
if (oldVersion < 2) MigrateAuthTo002(realm).perform()
|
||||||
if (oldVersion < 3) MigrateAuthTo003(realm).perform()
|
if (oldVersion < 3) MigrateAuthTo003(realm).perform()
|
||||||
if (oldVersion < 4) MigrateAuthTo004(realm).perform()
|
if (oldVersion < 4) MigrateAuthTo004(realm).perform()
|
||||||
|
if (oldVersion < 5) MigrateAuthTo005(realm).perform()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,5 +27,5 @@ internal open class SessionParamsEntity(
|
||||||
// Set to false when the token is invalid and the user has been soft logged out
|
// Set to false when the token is invalid and the user has been soft logged out
|
||||||
// In case of hard logout, this object is deleted from DB
|
// In case of hard logout, this object is deleted from DB
|
||||||
var isTokenValid: Boolean = true,
|
var isTokenValid: Boolean = true,
|
||||||
var loginType: String,
|
var loginType: String = "",
|
||||||
) : RealmObject()
|
) : RealmObject()
|
||||||
|
|
|
@ -0,0 +1,34 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2022 The Matrix.org Foundation C.I.C.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.matrix.android.sdk.internal.auth.db.migration
|
||||||
|
|
||||||
|
import io.realm.DynamicRealm
|
||||||
|
import org.matrix.android.sdk.internal.auth.db.SessionParamsEntityFields
|
||||||
|
import org.matrix.android.sdk.internal.auth.login.LoginType
|
||||||
|
import org.matrix.android.sdk.internal.util.database.RealmMigrator
|
||||||
|
import timber.log.Timber
|
||||||
|
|
||||||
|
class MigrateAuthTo005(realm: DynamicRealm) : RealmMigrator(realm, 5) {
|
||||||
|
|
||||||
|
override fun doMigrate(realm: DynamicRealm) {
|
||||||
|
Timber.d("Update SessionParamsEntity to add LoginType")
|
||||||
|
|
||||||
|
realm.schema.get("SessionParamsEntity")
|
||||||
|
?.addField(SessionParamsEntityFields.LOGIN_TYPE, String::class.java)
|
||||||
|
?.transform { it.set(SessionParamsEntityFields.LOGIN_TYPE, LoginType.UNKNOWN.value) }
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,34 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2022 New Vector Ltd
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.matrix.android.sdk.internal.auth.db.migration
|
||||||
|
|
||||||
|
import org.junit.Test
|
||||||
|
import org.matrix.android.sdk.test.fakes.Fake005MigrationRealm
|
||||||
|
|
||||||
|
class MigrateAuthTo005Test {
|
||||||
|
|
||||||
|
private val fakeRealm = Fake005MigrationRealm()
|
||||||
|
private val migrator = MigrateAuthTo005(fakeRealm.instance)
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `when doMigrate, then LoginType field added`() {
|
||||||
|
|
||||||
|
migrator.doMigrate(fakeRealm.instance)
|
||||||
|
|
||||||
|
fakeRealm.verifyLoginTypeAdded()
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,68 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2022 New Vector Ltd
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.matrix.android.sdk.test.fakes
|
||||||
|
|
||||||
|
import io.mockk.every
|
||||||
|
import io.mockk.mockk
|
||||||
|
import io.mockk.slot
|
||||||
|
import io.mockk.verify
|
||||||
|
import io.mockk.verifyOrder
|
||||||
|
import io.realm.DynamicRealm
|
||||||
|
import io.realm.DynamicRealmObject
|
||||||
|
import io.realm.RealmObjectSchema
|
||||||
|
import io.realm.RealmSchema
|
||||||
|
import org.matrix.android.sdk.internal.auth.db.SessionParamsEntityFields
|
||||||
|
import org.matrix.android.sdk.internal.auth.login.LoginType
|
||||||
|
|
||||||
|
class Fake005MigrationRealm {
|
||||||
|
|
||||||
|
val instance: DynamicRealm = mockk()
|
||||||
|
|
||||||
|
private val schema: RealmSchema = mockk()
|
||||||
|
private val objectSchema: RealmObjectSchema = mockk()
|
||||||
|
|
||||||
|
init {
|
||||||
|
every { instance.schema } returns schema
|
||||||
|
every { schema.get("SessionParamsEntity") } returns objectSchema
|
||||||
|
every { objectSchema.addField(any(), any()) } returns objectSchema
|
||||||
|
every { objectSchema.transform(any()) } returns objectSchema
|
||||||
|
}
|
||||||
|
|
||||||
|
fun verifyLoginTypeAdded() {
|
||||||
|
transformFunctionSlot.clear()
|
||||||
|
verifyLoginTypeFieldAddedAndTransformed()
|
||||||
|
verifyTransformationSetsUnknownLoginType()
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun verifyLoginTypeFieldAddedAndTransformed() {
|
||||||
|
verifyOrder {
|
||||||
|
objectSchema["SessionParamsEntity"]
|
||||||
|
objectSchema.addField(SessionParamsEntityFields.LOGIN_TYPE, String::class.java)
|
||||||
|
objectSchema.transform(capture(transformFunctionSlot))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun verifyTransformationSetsUnknownLoginType() {
|
||||||
|
val dynamicRealmObject: DynamicRealmObject = mockk()
|
||||||
|
transformFunctionSlot.captured.invoke(dynamicRealmObject)
|
||||||
|
verify { dynamicRealmObject.set(SessionParamsEntityFields.LOGIN_TYPE, LoginType.UNKNOWN.value) }
|
||||||
|
}
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
private val transformFunctionSlot = slot<(DynamicRealmObject) -> Unit>()
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue