Recently Written · git

ink-update

Ink Update: tells you when Rebind, Ink Recents or Ink Dim has a new version. F-Droid, then Google Play, then GitHub.

git clone https://github.com/equwal/ink-update

Log | Files | Refs


app/src/test/java/dev/equwal/inkupdate/DecideTest.kt (5461 bytes)

1 // SPDX-License-Identifier: GPL-3.0-or-later
2 // Copyright (c) 2026 equwal
3 package dev.equwal.inkupdate
4 
5 import org.junit.Assert.assertEquals
6 import org.junit.Assert.assertNull
7 import org.junit.Assert.assertTrue
8 import org.junit.Test
9 
10 /** The order F-Droid, Google Play, GitHub. */
11 class DecideTest {
12 
13     private val fdroidPage = "https://f-droid.org/packages/dev.equwal.inkdim/"
14     private val ghPage = "https://github.com/equwal/ink-dim/releases/tag/v0.1.1"
15     private val apk = "https://github.com/equwal/ink-dim/releases/download/v0.1.1/ink-dim-0.1.1.apk"
16 
17     private fun fdroidNewer() = FdroidAnswer.Found(2L, "0.1.1", fdroidPage)
18     private fun fdroidSame() = FdroidAnswer.Found(1L, "0.1.0", fdroidPage)
19     private fun githubNewer() = GithubAnswer.Found("v0.1.1", ghPage, apk)
20     private fun githubSame() = GithubAnswer.Found("v0.1.0", ghPage, apk)
21 
22     @Test
23     fun fdroidWinsOverGithub() {
24         val r = Decide.source(null, fdroidNewer(), githubNewer(), 1L, "0.1.0")
25         assertTrue(r is Result.Update)
26         r as Result.Update
27         assertEquals(Decide.FDROID, r.source)
28         assertEquals("0.1.1", r.versionName)
29         assertEquals(fdroidPage, r.page)
30         // F-Droid installs the app by itself, so there is no APK link.
31         assertNull(r.apk)
32     }
33 
34     @Test
35     fun fdroidNotThereFallsToGithub() {
36         val r = Decide.source(null, FdroidAnswer.NotThere, githubNewer(), 1L, "0.1.0")
37         assertTrue(r is Result.Update)
38         r as Result.Update
39         assertEquals(Decide.GITHUB, r.source)
40         assertEquals("0.1.1", r.versionName)
41         assertEquals(ghPage, r.page)
42         assertEquals(apk, r.apk)
43     }
44 
45     @Test
46     fun fdroidNotThereAndPlayInstalledLeavesItToPlay() {
47         val r = Decide.source(
48             Decide.PLAY_PACKAGE, FdroidAnswer.NotThere, githubNewer(), 1L, "0.1.0"
49         )
50         assertEquals(Result.LeftToPlay, r)
51     }
52 
53     /** The Play store does not beat a newer build on F-Droid. */
54     @Test
55     fun fdroidStillWinsOverPlay() {
56         val r = Decide.source(
57             Decide.PLAY_PACKAGE, fdroidNewer(), GithubAnswer.None, 1L, "0.1.0"
58         )
59         assertTrue(r is Result.Update)
60         assertEquals(Decide.FDROID, (r as Result.Update).source)
61     }
62 
63     @Test
64     fun anotherInstallerDoesNotLeaveItToPlay() {
65         val r = Decide.source(
66             "com.android.packageinstaller", FdroidAnswer.NotThere, githubNewer(), 1L, "0.1.0"
67         )
68         assertEquals(Decide.GITHUB, (r as Result.Update).source)
69     }
70 
71     @Test
72     fun theSameVersionIsUpToDate() {
73         assertEquals(
74             Result.UpToDate,
75             Decide.source(null, FdroidAnswer.NotThere, githubSame(), 1L, "0.1.0")
76         )
77         assertEquals(
78             Result.UpToDate,
79             Decide.source(null, fdroidSame(), githubSame(), 1L, "0.1.0")
80         )
81     }
82 
83     /** A tag that is older than what is installed is not an update. */
84     @Test
85     fun anOlderTagIsUpToDate() {
86         val r = Decide.source(
87             null, FdroidAnswer.NotThere,
88             GithubAnswer.Found("v0.0.9-alpha", ghPage, apk), 1L, "0.1.0"
89         )
90         assertEquals(Result.UpToDate, r)
91     }
92 
93     /** Rebind: the tag has no "-full", the installed name has. */
94     @Test
95     fun rebindTagsAndNamesLineUp() {
96         val page = "https://github.com/equwal/rebind/releases/tag/v0.0.16-alpha"
97         val full = "https://github.com/equwal/rebind/releases/download/" +
98             "v0.0.16-alpha/rebind-0.0.16-alpha-full.apk"
99         val r = Decide.source(
100             null, FdroidAnswer.NotThere,
101             GithubAnswer.Found("v0.0.16-alpha", page, full), 15L, "0.0.15-alpha-full"
102         )
103         assertTrue(r is Result.Update)
104         r as Result.Update
105         assertEquals("0.0.16-alpha", r.versionName)
106         assertEquals(full, r.apk)
107 
108         val same = Decide.source(
109             null, FdroidAnswer.NotThere,
110             GithubAnswer.Found("v0.0.15-alpha", page, full), 15L, "0.0.15-alpha-full"
111         )
112         assertEquals(Result.UpToDate, same)
113     }
114 
115     @Test
116     fun nobodyAnsweredIsUnknown() {
117         val r = Decide.source(
118             null, FdroidAnswer.Failed("No answer"), GithubAnswer.Failed("No answer"),
119             1L, "0.1.0"
120         )
121         assertTrue(r is Result.Unknown)
122         assertEquals("No answer", (r as Result.Unknown).reason)
123     }
124 
125     /** F-Droid answered, so a failed GitHub request does not hide the answer. */
126     @Test
127     fun fdroidAnsweredAndGithubFailed() {
128         val r = Decide.source(
129             null, fdroidSame(), GithubAnswer.Failed("Too many requests"), 1L, "0.1.0"
130         )
131         assertEquals(Result.UpToDate, r)
132     }
133 
134     /** GitHub answered, so a failed F-Droid request does not hide the answer. */
135     @Test
136     fun githubAnsweredAndFdroidFailed() {
137         val r = Decide.source(
138             null, FdroidAnswer.Failed("No answer"), githubNewer(), 1L, "0.1.0"
139         )
140         assertEquals(Decide.GITHUB, (r as Result.Update).source)
141     }
142 
143     /** Neither place has the app. There is nothing newer to get. */
144     @Test
145     fun nothingAnywhereIsUpToDate() {
146         assertEquals(
147             Result.UpToDate,
148             Decide.source(null, FdroidAnswer.NotThere, GithubAnswer.None, 1L, "0.1.0")
149         )
150     }
151 
152     @Test
153     fun aVersionNameThatMakesNoSenseIsUnknown() {
154         val r = Decide.source(
155             null, FdroidAnswer.NotThere, githubNewer(), 1L, "nightly"
156         )
157         assertTrue(r is Result.Unknown)
158     }
159 }