Skip to content

Commit b162f3e

Browse files
committed
feat(r559): GetApplicationRelease — filter by release quality (autoloop iter 4)
1 parent 87013aa commit b162f3e

3 files changed

Lines changed: 174 additions & 0 deletions

File tree

app/src/main/java/eu/kanade/tachiyomi/data/updater/AppUpdateChecker.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ class AppUpdateChecker {
2525
BuildConfig.VERSION_NAME,
2626
GITHUB_REPO,
2727
forceCheck,
28+
includePrerelease = isPreviewBuildType,
2829
),
2930
)
3031

domain/src/main/java/tachiyomi/domain/release/interactor/GetApplicationRelease.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,11 @@ class GetApplicationRelease(
3030

3131
val release = service.latest(arguments) ?: return Result.NoNewUpdate
3232

33+
// Filter by release quality and user preference
34+
if (!release.isUsable(arguments.includePrerelease)) {
35+
return Result.NoNewUpdate
36+
}
37+
3338
lastChecked.set(now.toEpochMilli())
3439

3540
// Check if latest version is different from current version
@@ -81,6 +86,7 @@ class GetApplicationRelease(
8186
val versionName: String,
8287
val repository: String,
8388
val forceCheck: Boolean = false,
89+
val includePrerelease: Boolean = false,
8490
)
8591

8692
sealed interface Result {

domain/src/test/java/tachiyomi/domain/release/interactor/GetApplicationReleaseTest.kt

Lines changed: 167 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import org.junit.jupiter.api.Test
1111
import tachiyomi.core.common.preference.Preference
1212
import tachiyomi.core.common.preference.PreferenceStore
1313
import tachiyomi.domain.release.model.Release
14+
import tachiyomi.domain.release.model.ReleaseQuality
1415
import tachiyomi.domain.release.service.ReleaseService
1516
import java.time.Instant
1617

@@ -138,4 +139,170 @@ class GetApplicationReleaseTest {
138139
coVerify(exactly = 0) { releaseService.latest(any()) }
139140
result shouldBe GetApplicationRelease.Result.NoNewUpdate
140141
}
142+
143+
@Test
144+
fun `When release quality is STABLE and includePrerelease false expect new update`() = runTest {
145+
every { preference.get() } returns 0
146+
every { preference.set(any()) }.answers { }
147+
148+
val release = Release(
149+
"v2.0.0",
150+
"info",
151+
"http://example.com/release_link",
152+
"http://example.com/release_link.apk",
153+
quality = ReleaseQuality.STABLE,
154+
)
155+
156+
coEvery { releaseService.latest(any()) } returns release
157+
158+
val result = getApplicationRelease.await(
159+
GetApplicationRelease.Arguments(
160+
isPreview = false,
161+
commitCount = 0,
162+
versionName = "v1.0.0",
163+
repository = "test",
164+
forceCheck = false,
165+
includePrerelease = false,
166+
),
167+
)
168+
169+
(result as GetApplicationRelease.Result.NewUpdate).release shouldBe release
170+
}
171+
172+
@Test
173+
fun `When release quality is PRERELEASE and includePrerelease false expect no new update`() = runTest {
174+
every { preference.get() } returns 0
175+
every { preference.set(any()) }.answers { }
176+
177+
val release = Release(
178+
"v2.0.0-rc1",
179+
"info",
180+
"http://example.com/release_link",
181+
"http://example.com/release_link.apk",
182+
quality = ReleaseQuality.PRERELEASE,
183+
)
184+
185+
coEvery { releaseService.latest(any()) } returns release
186+
187+
val result = getApplicationRelease.await(
188+
GetApplicationRelease.Arguments(
189+
isPreview = false,
190+
commitCount = 0,
191+
versionName = "v1.0.0",
192+
repository = "test",
193+
forceCheck = false,
194+
includePrerelease = false,
195+
),
196+
)
197+
198+
result shouldBe GetApplicationRelease.Result.NoNewUpdate
199+
}
200+
201+
@Test
202+
fun `When release quality is PRERELEASE and includePrerelease true expect new update`() = runTest {
203+
every { preference.get() } returns 0
204+
every { preference.set(any()) }.answers { }
205+
206+
val release = Release(
207+
"v2.0.0-rc1",
208+
"info",
209+
"http://example.com/release_link",
210+
"http://example.com/release_link.apk",
211+
quality = ReleaseQuality.PRERELEASE,
212+
)
213+
214+
coEvery { releaseService.latest(any()) } returns release
215+
216+
val result = getApplicationRelease.await(
217+
GetApplicationRelease.Arguments(
218+
isPreview = false,
219+
commitCount = 0,
220+
versionName = "v1.0.0",
221+
repository = "test",
222+
forceCheck = false,
223+
includePrerelease = true,
224+
),
225+
)
226+
227+
(result as GetApplicationRelease.Result.NewUpdate).release shouldBe release
228+
}
229+
230+
@Test
231+
fun `When release quality is DRAFT and includePrerelease true expect no new update`() = runTest {
232+
every { preference.get() } returns 0
233+
every { preference.set(any()) }.answers { }
234+
235+
val release = Release(
236+
"v2.0.0",
237+
"info",
238+
"http://example.com/release_link",
239+
"http://example.com/release_link.apk",
240+
quality = ReleaseQuality.DRAFT,
241+
)
242+
243+
coEvery { releaseService.latest(any()) } returns release
244+
245+
val result = getApplicationRelease.await(
246+
GetApplicationRelease.Arguments(
247+
isPreview = false,
248+
commitCount = 0,
249+
versionName = "v1.0.0",
250+
repository = "test",
251+
forceCheck = false,
252+
includePrerelease = true,
253+
),
254+
)
255+
256+
result shouldBe GetApplicationRelease.Result.NoNewUpdate
257+
}
258+
259+
@Test
260+
fun `When release quality is DEPRECATED and includePrerelease false expect no new update`() = runTest {
261+
every { preference.get() } returns 0
262+
every { preference.set(any()) }.answers { }
263+
264+
val release = Release(
265+
"v2.0.0",
266+
"info",
267+
"http://example.com/release_link",
268+
"http://example.com/release_link.apk",
269+
quality = ReleaseQuality.DEPRECATED,
270+
)
271+
272+
coEvery { releaseService.latest(any()) } returns release
273+
274+
val result = getApplicationRelease.await(
275+
GetApplicationRelease.Arguments(
276+
isPreview = false,
277+
commitCount = 0,
278+
versionName = "v1.0.0",
279+
repository = "test",
280+
forceCheck = false,
281+
includePrerelease = false,
282+
),
283+
)
284+
285+
result shouldBe GetApplicationRelease.Result.NoNewUpdate
286+
}
287+
288+
@Test
289+
fun `When service returns null expect no new update`() = runTest {
290+
every { preference.get() } returns 0
291+
every { preference.set(any()) }.answers { }
292+
293+
coEvery { releaseService.latest(any()) } returns null
294+
295+
val result = getApplicationRelease.await(
296+
GetApplicationRelease.Arguments(
297+
isPreview = false,
298+
commitCount = 0,
299+
versionName = "v1.0.0",
300+
repository = "test",
301+
forceCheck = false,
302+
includePrerelease = false,
303+
),
304+
)
305+
306+
result shouldBe GetApplicationRelease.Result.NoNewUpdate
307+
}
141308
}

0 commit comments

Comments
 (0)