Add detection of some new error screens

This commit is contained in:
Mikołaj Pich 2023-05-23 14:02:46 +02:00
parent c17fcee052
commit 6f06410133
5 changed files with 89 additions and 1 deletions

View file

@ -16,7 +16,7 @@ ext {
moshi = "1.13.0"
}
version = "2.0.5"
version = "2.0.6-SNAPSHOT"
group = "io.github.wulkanowy"
nexusPublishing {

View file

@ -60,6 +60,12 @@ internal class ErrorInterceptor(
} else throw BadCredentialsException(errorMessage)
}
doc.select(".app-error-container").takeIf { it.isNotEmpty() }?.let {
if (it.select("h2").text() == "Informacja") {
throw ServiceUnavailableException(it.select("span").firstOrNull()?.text().orEmpty())
}
}
doc.select("#MainPage_ErrorDiv div").let {
if (it.text().contains("Trwa aktualizacja bazy danych")) throw ServiceUnavailableException(it.last()?.ownText().orEmpty())
if (it.last()?.ownText()?.contains("czasowo wyłączona") == true) throw TemporarilyDisabledException(it.last()?.ownText().orEmpty())

View file

@ -7,6 +7,8 @@ import io.github.wulkanowy.sdk.scrapper.exception.VulcanException
import io.github.wulkanowy.sdk.scrapper.login.LoginTest
import io.github.wulkanowy.sdk.scrapper.login.PasswordChangeRequiredException
import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.test.runTest
import org.junit.Assert.assertEquals
import org.junit.Assert.assertTrue
import org.junit.Test
@ -21,6 +23,18 @@ class ErrorInterceptorTest : BaseLocalTest() {
}
}
@Test
fun `eduOne update`() = runTest {
runCatching {
getStudentRepo(ErrorInterceptorTest::class.java, "AktualizacjaEduOne.html", Scrapper.LoginType.STANDARD).getNotes()
}.onFailure {
assertTrue(it is ServiceUnavailableException)
assertEquals("Trwa aktualizacja bazy danych.", it.message)
return@runTest
}
assert(false)
}
@Test
fun passwordChangeRequired() {
try {
@ -39,4 +53,16 @@ class ErrorInterceptorTest : BaseLocalTest() {
assertTrue(e.message?.startsWith("Błąd") == true)
}
}
@Test
fun `technical break eduOne`() = runTest {
runCatching {
getStudentRepo(ErrorInterceptorTest::class.java, "Przerwa.html", Scrapper.LoginType.STANDARD).getNotes()
}.onFailure {
assertTrue(it is ServiceUnavailableException)
assertEquals("Przerwa", it.message)
return@runTest
}
assert(false)
}
}

View file

@ -0,0 +1,17 @@
<!DOCTYPE html>
<html class=" njwkvjhvie idc0_347 ikflewkcjx" lang="pl">
<head>
<meta charset="utf-8">
<title>Dziennik UONET+</title>
</head>
<body>
<div class="app-error-container">
<h2>Informacja</h2>
<span>Trwa aktualizacja bazy danych.</span>
<span>Dostęp do bazy został wyłączony.</span>
<span>Proszę uruchomić aplikację ponownie za kilka minut.</span>
<span>© 2023 VULCAN sp. z o.o., UONET+</span>
</div>
</body>
</html>

View file

@ -0,0 +1,39 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html class=" pwuya idc0_347">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Przerwa</title>
</head>
<body>
<div id="page_error">
<div id="content_error">
<div class="box_error">
<div id="info_error">
<div class="icon_error">
</div>
<div class="info_error">
<h1>Przerwa techniczna</h1>
<p class="info_error_main">Aktualnie trwają prace konserwacyjne.</p>
<p class="info_error_main">Witryna będzie dostępna za kilka minut.</p>
</div>
<div class="info_error" style="display: none;">
<h1>Problemy z dostępnością</h1>
<p class="info_error_main">Informujemy, że wystąpiły nieoczekiwane problemy z dostępnością aplikacji.</p>
<p class="info_error_main">Państwa dane są bezpieczne.</p>
<p class="info_error_main">Podjęliśmy pilne działania mające na celu przywrócenie stabilnego działania systemu
w jak najkrótszym czasie.</p>
<p class="info_error_details">Szczegóły dotyczące postępów prac pojawią się w pierwszej kolejności na stronie
<a href="https://www.vulcan.edu.pl/">www.vulcan.edu.pl</a>
oraz na naszym profilu na FB <a href="https://www.facebook.com/vulcan.oswiata">www.facebook.com/vulcan.oswiata</a>
</p>
</div>
<div class="error_link">
<p>155</p>
<p id="details">Fri May 19 2023 22:17:29 GMT+0200 (czas środkowoeuropejski letni)</p>
</div>
</div>
</div>
</div>
</div>
</body>
</html>