| 1 |
package io.oxygenhub.android.update |
| 2 |
|
| 3 |
import io.oxygenhub.android.api.Release |
| 4 |
import io.oxygenhub.android.api.ReleaseAsset |
| 5 |
import org.junit.Assert.assertEquals |
| 6 |
import org.junit.Assert.assertFalse |
| 7 |
import org.junit.Assert.assertNull |
| 8 |
import org.junit.Assert.assertTrue |
| 9 |
import org.junit.Test |
| 10 |
|
| 11 |
class AppUpdateTest { |
| 12 |
@Test |
| 13 |
fun versionsCompareAsNumbers() { |
| 14 |
assertTrue(isNewer("v0.10.0", "0.9.9")) |
| 15 |
assertTrue(isNewer("1.0.0", "0.99.99")) |
| 16 |
assertFalse(isNewer("v0.1.0", "0.1.0")) |
| 17 |
assertFalse(isNewer("0.1.0", "0.2.0")) |
| 18 |
// A pre-release is never offered; a debug build's odd version is always behind. |
| 19 |
assertFalse(isNewer("0.2.0-rc1", "0.1.0")) |
| 20 |
assertTrue(isNewer("0.1.0", "1.0")) |
| 21 |
assertNull(versionOf("1.2")) |
| 22 |
} |
| 23 |
|
| 24 |
private fun release(tag: String, vararg assets: String, pre: Boolean = false) = |
| 25 |
Release(tag = tag, prerelease = pre, url = "/andymccall/oxygenhub-android/release/$tag", assets = assets.map { ReleaseAsset(it, url = "/andymccall/oxygenhub-android/asset/1/$it") }) |
| 26 |
|
| 27 |
@Test |
| 28 |
fun theNewestFullReleaseWithAnApkIsOffered() { |
| 29 |
val releases = listOf( |
| 30 |
release("v0.1.0", "oxygenhub-android-0.1.0-universal.apk"), |
| 31 |
release("v0.3.0", "oxygenhub-android-0.3.0-universal.apk", pre = true), |
| 32 |
release("v0.2.0", "oxygenhub-android-0.2.0-universal.apk", "SHA256SUMS"), |
| 33 |
) |
| 34 |
val u = updateFrom(releases, "0.1.0")!! |
| 35 |
assertEquals("0.2.0", u.version) |
| 36 |
assertEquals("https://oxygenhub.io/andymccall/oxygenhub-android/asset/1/oxygenhub-android-0.2.0-universal.apk", u.apkUrl) |
| 37 |
assertEquals("https://oxygenhub.io/andymccall/oxygenhub-android/release/v0.2.0", u.pageUrl) |
| 38 |
assertNull("up to date", updateFrom(releases, "0.2.0")) |
| 39 |
assertNull("no APK, no offer", updateFrom(listOf(release("v0.4.0", "SHA256SUMS")), "0.1.0")) |
| 40 |
} |
| 41 |
} |