Remove getStudents() API
This commit is contained in:
parent
4ce5701f5a
commit
07d68f5425
15 changed files with 243 additions and 222 deletions
2
.gitignore
vendored
2
.gitignore
vendored
|
@ -75,3 +75,5 @@ classes
|
|||
.idea/kotlinc.xml
|
||||
.idea/jpa-buddy.xml
|
||||
.idea/kotlinScripting.xml
|
||||
Snap.*.trc
|
||||
javacore.*.txt
|
||||
|
|
|
@ -19,3 +19,10 @@ dependencies {
|
|||
|
||||
testImplementation "io.mockk:mockk-jvm:1.13.4"
|
||||
}
|
||||
|
||||
tasks.withType(Test) {
|
||||
/**
|
||||
* fix for retrofit https://github.com/square/retrofit/issues/3341
|
||||
*/
|
||||
jvmArgs = ["--add-opens", "java.base/java.lang.invoke=ALL-UNNAMED"]
|
||||
}
|
||||
|
|
|
@ -27,7 +27,6 @@ import io.github.wulkanowy.sdk.scrapper.mobile.TokenResponse
|
|||
import io.github.wulkanowy.sdk.scrapper.notes.Note
|
||||
import io.github.wulkanowy.sdk.scrapper.register.RegisterUser
|
||||
import io.github.wulkanowy.sdk.scrapper.register.Semester
|
||||
import io.github.wulkanowy.sdk.scrapper.register.Student
|
||||
import io.github.wulkanowy.sdk.scrapper.repository.AccountRepository
|
||||
import io.github.wulkanowy.sdk.scrapper.repository.HomepageRepository
|
||||
import io.github.wulkanowy.sdk.scrapper.repository.MessagesRepository
|
||||
|
@ -264,8 +263,6 @@ class Scrapper {
|
|||
return account.sendPasswordResetRequest(registerBaseUrl, symbol, email.trim(), captchaCode)
|
||||
}
|
||||
|
||||
suspend fun getStudents(): List<Student> = register.getStudents()
|
||||
|
||||
suspend fun getUserSubjects(): RegisterUser = register.getUserSubjects()
|
||||
|
||||
suspend fun getSemesters(): List<Semester> = studentStart.getSemesters()
|
||||
|
|
|
@ -1,24 +0,0 @@
|
|||
package io.github.wulkanowy.sdk.scrapper.register
|
||||
|
||||
import io.github.wulkanowy.sdk.scrapper.Scrapper
|
||||
|
||||
data class Student(
|
||||
val email: String,
|
||||
val userName: String,
|
||||
val userLogin: String,
|
||||
val userLoginId: Int,
|
||||
val symbol: String,
|
||||
val studentId: Int,
|
||||
val studentName: String,
|
||||
val studentSecondName: String,
|
||||
val studentSurname: String,
|
||||
val schoolSymbol: String,
|
||||
val schoolShortName: String,
|
||||
val schoolName: String,
|
||||
val className: String,
|
||||
val classId: Int,
|
||||
val baseUrl: String,
|
||||
val loginType: Scrapper.LoginType,
|
||||
val isParent: Boolean,
|
||||
val semesters: List<Semester>,
|
||||
)
|
|
@ -2,14 +2,11 @@ package io.github.wulkanowy.sdk.scrapper.repository
|
|||
|
||||
import com.migcomponents.migbase64.Base64
|
||||
import io.github.wulkanowy.sdk.scrapper.Scrapper
|
||||
import io.github.wulkanowy.sdk.scrapper.exception.AccountInactiveException
|
||||
import io.github.wulkanowy.sdk.scrapper.exception.ScrapperException
|
||||
import io.github.wulkanowy.sdk.scrapper.exception.StudentGraduateException
|
||||
import io.github.wulkanowy.sdk.scrapper.exception.TemporarilyDisabledException
|
||||
import io.github.wulkanowy.sdk.scrapper.getNormalizedSymbol
|
||||
import io.github.wulkanowy.sdk.scrapper.getScriptParam
|
||||
import io.github.wulkanowy.sdk.scrapper.interceptor.handleErrors
|
||||
import io.github.wulkanowy.sdk.scrapper.login.AccountPermissionException
|
||||
import io.github.wulkanowy.sdk.scrapper.login.CertificateResponse
|
||||
import io.github.wulkanowy.sdk.scrapper.login.InvalidSymbolException
|
||||
import io.github.wulkanowy.sdk.scrapper.login.LoginHelper
|
||||
|
@ -24,7 +21,6 @@ import io.github.wulkanowy.sdk.scrapper.register.RegisterStudent
|
|||
import io.github.wulkanowy.sdk.scrapper.register.RegisterSymbol
|
||||
import io.github.wulkanowy.sdk.scrapper.register.RegisterUnit
|
||||
import io.github.wulkanowy.sdk.scrapper.register.RegisterUser
|
||||
import io.github.wulkanowy.sdk.scrapper.register.Student
|
||||
import io.github.wulkanowy.sdk.scrapper.register.toSemesters
|
||||
import io.github.wulkanowy.sdk.scrapper.repository.AccountRepository.Companion.SELECTOR_ADFS
|
||||
import io.github.wulkanowy.sdk.scrapper.repository.AccountRepository.Companion.SELECTOR_ADFS_CARDS
|
||||
|
@ -51,7 +47,7 @@ class RegisterRepository(
|
|||
private val url: UrlGenerator,
|
||||
) {
|
||||
|
||||
companion object {
|
||||
private companion object {
|
||||
@JvmStatic
|
||||
private val logger = LoggerFactory.getLogger(this::class.java)
|
||||
}
|
||||
|
@ -60,48 +56,6 @@ class RegisterRepository(
|
|||
ignoreUnknownKeys = true
|
||||
}
|
||||
|
||||
suspend fun getStudents(): List<Student> {
|
||||
val user = getUserSubjects()
|
||||
|
||||
return user.symbols.flatMap { symbol ->
|
||||
symbol.error?.takeIf {
|
||||
val isAccountNotRegistered = it is AccountPermissionException
|
||||
val isInvalidSymbol = it is InvalidSymbolException
|
||||
val isGraduated = it is StudentGraduateException
|
||||
val isInactive = it is AccountInactiveException
|
||||
|
||||
(!isAccountNotRegistered && !isInvalidSymbol && !isGraduated && !isInactive)
|
||||
}?.let { throw it }
|
||||
|
||||
symbol.schools.flatMap { unit ->
|
||||
unit.error?.takeIf { it !is TemporarilyDisabledException }?.let { throw it }
|
||||
|
||||
unit.subjects.filterIsInstance<RegisterStudent>().map { student ->
|
||||
Student(
|
||||
email = user.login, // for compatibility
|
||||
userLogin = user.login,
|
||||
userName = symbol.userName,
|
||||
userLoginId = unit.userLoginId,
|
||||
symbol = symbol.symbol,
|
||||
studentId = student.studentId,
|
||||
studentName = student.studentName,
|
||||
studentSecondName = student.studentSecondName,
|
||||
studentSurname = student.studentSurname,
|
||||
schoolSymbol = unit.schoolId,
|
||||
schoolShortName = unit.schoolShortName,
|
||||
schoolName = unit.schoolName,
|
||||
className = student.className,
|
||||
classId = student.classId,
|
||||
baseUrl = user.baseUrl,
|
||||
loginType = user.loginType,
|
||||
isParent = student.isParent,
|
||||
semesters = student.semesters,
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
suspend fun getUserSubjects(): RegisterUser {
|
||||
val symbolLoginType = getLoginType(startSymbol.getNormalizedSymbol())
|
||||
val certificateResponse = getCert(symbolLoginType)
|
||||
|
|
|
@ -23,7 +23,7 @@ class StudentStartRepository(
|
|||
return diaries?.toSemesters(studentId, classId, unitId).orEmpty()
|
||||
.sortedByDescending { it.semesterId }
|
||||
.ifEmpty {
|
||||
logger.debug("Student $studentId, class $classId not found in diaries: $diaries")
|
||||
logger.debug("Student {}, class {} not found in diaries: {}", studentId, classId, diaries)
|
||||
emptyList()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -35,7 +35,7 @@ class HostsRemoteTest : BaseTest() {
|
|||
fun loginTest() = runBlocking {
|
||||
knownHosts.forEach { (host, symbol) ->
|
||||
println("$host/$symbol")
|
||||
val res = runCatching { getScrapper(host, symbol).getStudents() }
|
||||
val res = runCatching { getScrapper(host, symbol).getUserSubjects() }
|
||||
requireNotNull(res.exceptionOrNull()).cause!!.printStackTrace()
|
||||
assert(res.exceptionOrNull() is BadCredentialsException)
|
||||
println()
|
||||
|
|
|
@ -2,7 +2,10 @@ package io.github.wulkanowy.sdk.scrapper
|
|||
|
||||
import io.github.wulkanowy.sdk.scrapper.attendance.AttendanceCategory
|
||||
import io.github.wulkanowy.sdk.scrapper.messages.Folder
|
||||
import io.github.wulkanowy.sdk.scrapper.register.RegisterStudent
|
||||
import kotlinx.coroutines.ExperimentalCoroutinesApi
|
||||
import kotlinx.coroutines.runBlocking
|
||||
import kotlinx.coroutines.test.runTest
|
||||
import okhttp3.logging.HttpLoggingInterceptor
|
||||
import org.junit.Assert.assertEquals
|
||||
import org.junit.Assert.assertTrue
|
||||
|
@ -12,6 +15,7 @@ import org.junit.Test
|
|||
import java.time.LocalDate
|
||||
import java.time.Month
|
||||
|
||||
@OptIn(ExperimentalCoroutinesApi::class)
|
||||
@Ignore
|
||||
class ScrapperRemoteTest : BaseTest() {
|
||||
|
||||
|
@ -67,20 +71,21 @@ class ScrapperRemoteTest : BaseTest() {
|
|||
}
|
||||
|
||||
@Test
|
||||
fun studentsTest() {
|
||||
val students = runBlocking { api.getStudents() }
|
||||
fun studentsTest() = runTest {
|
||||
val user = api.getUserSubjects()
|
||||
val symbol = user.symbols[0]
|
||||
val school = symbol.schools[0]
|
||||
val student = school.subjects[0] as RegisterStudent
|
||||
|
||||
students[0].run {
|
||||
assertEquals("powiatwulkanowy", symbol)
|
||||
assertEquals("jan@fakelog.cf", email)
|
||||
assertEquals("Jan", studentName)
|
||||
assertEquals("Kowalski", studentSurname)
|
||||
assertEquals("123456", schoolSymbol)
|
||||
assertEquals(1, studentId)
|
||||
assertEquals(1, classId)
|
||||
assertEquals("A", className)
|
||||
assertEquals("Publiczna szkoła Wulkanowego nr 1 w fakelog.cf", schoolName)
|
||||
}
|
||||
assertEquals("powiatwulkanowy", symbol.symbol)
|
||||
assertEquals("jan@fakelog.cf", user.email)
|
||||
assertEquals("Jan", student.studentName)
|
||||
assertEquals("Kowalski", student.studentSurname)
|
||||
assertEquals("123456", school.schoolId)
|
||||
assertEquals(1, student.studentId)
|
||||
assertEquals(1, student.classId)
|
||||
assertEquals("A", student.className)
|
||||
assertEquals("Publiczna szkoła Wulkanowego nr 1 w fakelog.cf", school.schoolName)
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
|
@ -9,11 +9,13 @@ import io.github.wulkanowy.sdk.scrapper.repository.RegisterRepository
|
|||
import io.github.wulkanowy.sdk.scrapper.service.LoginService
|
||||
import io.github.wulkanowy.sdk.scrapper.service.RegisterService
|
||||
import io.github.wulkanowy.sdk.scrapper.service.StudentService
|
||||
import kotlinx.coroutines.runBlocking
|
||||
import kotlinx.coroutines.ExperimentalCoroutinesApi
|
||||
import kotlinx.coroutines.test.runTest
|
||||
import org.junit.Assert.assertEquals
|
||||
import org.junit.Test
|
||||
import java.net.CookieManager
|
||||
|
||||
@OptIn(ExperimentalCoroutinesApi::class)
|
||||
class RegisterTest : BaseLocalTest() {
|
||||
|
||||
private val login by lazy {
|
||||
|
@ -57,7 +59,7 @@ class RegisterTest : BaseLocalTest() {
|
|||
}
|
||||
|
||||
@Test
|
||||
fun filterStudentsByClass() {
|
||||
fun filterStudentsByClass() = runTest {
|
||||
with(server) {
|
||||
enqueue("LoginPage-standard.html", LoginTest::class.java)
|
||||
enqueue("Logowanie-uonet.html", LoginTest::class.java)
|
||||
|
@ -72,7 +74,10 @@ class RegisterTest : BaseLocalTest() {
|
|||
start(3000)
|
||||
}
|
||||
|
||||
val res = runBlocking { registerStudent.getStudents() }
|
||||
val res = registerStudent.getUserSubjects().symbols
|
||||
.flatMap { it.schools }
|
||||
.flatMap { it.subjects }
|
||||
.filterIsInstance<RegisterStudent>()
|
||||
|
||||
assertEquals(2, res.size)
|
||||
|
||||
|
@ -81,7 +86,7 @@ class RegisterTest : BaseLocalTest() {
|
|||
assertEquals("Jan", studentName)
|
||||
assertEquals("Kowalski", studentSurname)
|
||||
assertEquals(121, classId)
|
||||
assertEquals("Publiczna szkoła Wulkanowego nr 1 w fakelog.cf", schoolName)
|
||||
// assertEquals("Publiczna szkoła Wulkanowego nr 1 w fakelog.cf", schoolName)
|
||||
assertEquals("Te", className)
|
||||
}
|
||||
|
||||
|
@ -90,13 +95,13 @@ class RegisterTest : BaseLocalTest() {
|
|||
assertEquals("Jan", studentName)
|
||||
assertEquals("Kowalski", studentSurname)
|
||||
assertEquals(119, classId)
|
||||
assertEquals("Publiczna szkoła Wulkanowego nr 1 w fakelog.cf", schoolName)
|
||||
// assertEquals("Publiczna szkoła Wulkanowego nr 1 w fakelog.cf", schoolName)
|
||||
assertEquals("Ti", className)
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun getStudents_kindergartenDiaries() {
|
||||
fun getStudents_kindergartenDiaries() = runTest {
|
||||
with(server) {
|
||||
enqueue("LoginPage-standard.html", LoginTest::class.java)
|
||||
enqueue("Logowanie-uonet.html", LoginTest::class.java)
|
||||
|
@ -114,7 +119,10 @@ class RegisterTest : BaseLocalTest() {
|
|||
start(3000)
|
||||
}
|
||||
|
||||
val res = runBlocking { registerStudent.getStudents() }
|
||||
val res = registerStudent.getUserSubjects().symbols
|
||||
.flatMap { it.schools }
|
||||
.flatMap { it.subjects }
|
||||
.filterIsInstance<RegisterStudent>()
|
||||
|
||||
assertEquals(1, res.size)
|
||||
|
||||
|
@ -123,17 +131,17 @@ class RegisterTest : BaseLocalTest() {
|
|||
assertEquals("Jan", studentName)
|
||||
assertEquals("Kowalski", studentSurname)
|
||||
assertEquals(0, classId) // always 0 for kindergarten
|
||||
assertEquals("Publiczna szkoła Wulkanowego nr 1 w fakelog.cf", schoolName)
|
||||
assertEquals("123456", schoolSymbol)
|
||||
assertEquals(654321, userLoginId)
|
||||
assertEquals("Jan Kowalski", userName)
|
||||
// assertEquals("Publiczna szkoła Wulkanowego nr 1 w fakelog.cf", schoolName)
|
||||
// assertEquals("123456", schoolSymbol)
|
||||
// assertEquals(654321, userLoginId)
|
||||
// assertEquals("Jan Kowalski", fullname) // todo
|
||||
assertEquals(2016, semesters[0].schoolYear)
|
||||
assertEquals(2017, semesters[1].schoolYear)
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun getStudents_filterNoDiares() {
|
||||
fun getStudents_filterNoDiares() = runTest {
|
||||
with(server) {
|
||||
enqueue("LoginPage-standard.html", LoginTest::class.java)
|
||||
enqueue("Logowanie-uonet.html", LoginTest::class.java)
|
||||
|
@ -151,13 +159,15 @@ class RegisterTest : BaseLocalTest() {
|
|||
start(3000)
|
||||
}
|
||||
|
||||
val res = runBlocking { registerStudent.getStudents() }
|
||||
val res = registerStudent.getUserSubjects().symbols
|
||||
.flatMap { it.schools }
|
||||
.flatMap { it.subjects }
|
||||
|
||||
assertEquals(0, res.size)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun getStudents_classNameOrder() {
|
||||
fun getStudents_classNameOrder() = runTest {
|
||||
with(server) {
|
||||
enqueue("LoginPage-standard.html", LoginTest::class.java)
|
||||
enqueue("Logowanie-uonet.html", LoginTest::class.java)
|
||||
|
@ -173,7 +183,10 @@ class RegisterTest : BaseLocalTest() {
|
|||
start(3000)
|
||||
}
|
||||
|
||||
val res = runBlocking { registerStudent.getStudents() }
|
||||
val res = registerStudent.getUserSubjects().symbols
|
||||
.flatMap { it.schools }
|
||||
.flatMap { it.subjects }
|
||||
.filterIsInstance<RegisterStudent>()
|
||||
|
||||
assertEquals(2, res.size)
|
||||
|
||||
|
@ -183,7 +196,7 @@ class RegisterTest : BaseLocalTest() {
|
|||
assertEquals("Kowalski", studentSurname)
|
||||
assertEquals(1, classId)
|
||||
assertEquals("A", className)
|
||||
assertEquals("Publiczna szkoła Wulkanowego nr 1 w fakelog.cf", schoolName)
|
||||
// assertEquals("Publiczna szkoła Wulkanowego nr 1 w fakelog.cf", schoolName)
|
||||
}
|
||||
|
||||
res[1].run {
|
||||
|
@ -192,7 +205,7 @@ class RegisterTest : BaseLocalTest() {
|
|||
assertEquals("Czerwińska", studentSurname)
|
||||
assertEquals(2, classId)
|
||||
assertEquals("A", className)
|
||||
assertEquals("Publiczna szkoła Wulkanowego nr 1 w fakelog.cf", schoolName)
|
||||
// assertEquals("Publiczna szkoła Wulkanowego nr 1 w fakelog.cf", schoolName) // todo
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -7,12 +7,12 @@ import io.github.wulkanowy.sdk.scrapper.interceptor.ErrorInterceptorTest
|
|||
import io.github.wulkanowy.sdk.scrapper.login.LoginHelper
|
||||
import io.github.wulkanowy.sdk.scrapper.login.LoginTest
|
||||
import io.github.wulkanowy.sdk.scrapper.login.UrlGenerator
|
||||
import io.github.wulkanowy.sdk.scrapper.register.RegisterStudent
|
||||
import io.github.wulkanowy.sdk.scrapper.register.RegisterTest
|
||||
import io.github.wulkanowy.sdk.scrapper.service.LoginService
|
||||
import io.github.wulkanowy.sdk.scrapper.service.RegisterService
|
||||
import io.github.wulkanowy.sdk.scrapper.service.StudentService
|
||||
import kotlinx.coroutines.ExperimentalCoroutinesApi
|
||||
import kotlinx.coroutines.runBlocking
|
||||
import kotlinx.coroutines.test.runTest
|
||||
import org.junit.Assert.assertEquals
|
||||
import org.junit.Assert.assertTrue
|
||||
|
@ -48,7 +48,7 @@ class RegisterRepositoryTest : BaseLocalTest() {
|
|||
}
|
||||
|
||||
@Test
|
||||
fun normalLogin_one() {
|
||||
fun normalLogin_one() = runTest {
|
||||
with(server) {
|
||||
enqueue("LoginPage-standard.html", LoginTest::class.java)
|
||||
enqueue("Logowanie-uonet.html", LoginTest::class.java)
|
||||
|
@ -65,18 +65,20 @@ class RegisterRepositoryTest : BaseLocalTest() {
|
|||
start(3000)
|
||||
}
|
||||
|
||||
val students = runBlocking { getRegisterRepository("Default").getStudents() }
|
||||
val user = getRegisterRepository("Default").getUserSubjects()
|
||||
val school = user.symbols[0].schools[0]
|
||||
val students = school.subjects.filterIsInstance<RegisterStudent>()
|
||||
|
||||
assertEquals(1, students.size)
|
||||
with(students[0]) {
|
||||
assertEquals("123456", schoolSymbol)
|
||||
with(school) {
|
||||
assertEquals("123456", schoolId)
|
||||
assertEquals("Fake123456", schoolShortName)
|
||||
assertEquals(2, semesters.size)
|
||||
}
|
||||
assertEquals(1, students.size)
|
||||
assertEquals(2, students[0].semesters.size)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun normalLogin_semesters() {
|
||||
fun normalLogin_semesters() = runTest {
|
||||
with(server) {
|
||||
enqueue("LoginPage-standard.html", LoginTest::class.java)
|
||||
enqueue("Logowanie-uonet.html", LoginTest::class.java)
|
||||
|
@ -93,19 +95,21 @@ class RegisterRepositoryTest : BaseLocalTest() {
|
|||
start(3000)
|
||||
}
|
||||
|
||||
val students = runBlocking { getRegisterRepository("Default").getStudents() }
|
||||
val user = getRegisterRepository("Default").getUserSubjects()
|
||||
val school = user.symbols[0].schools[0]
|
||||
val students = school.subjects.filterIsInstance<RegisterStudent>()
|
||||
|
||||
assertEquals(2, students.size)
|
||||
with(students[0]) {
|
||||
assertEquals("123456", schoolSymbol)
|
||||
with(school) {
|
||||
assertEquals("123456", schoolId)
|
||||
assertEquals("Fake123456", schoolShortName)
|
||||
assertEquals(6, semesters.size)
|
||||
}
|
||||
assertEquals(6, students[0].semesters.size)
|
||||
assertEquals(2, students.size)
|
||||
assertEquals(6, students[1].semesters.size)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun normalLogin_triple() {
|
||||
fun normalLogin_triple() = runTest {
|
||||
with(server) {
|
||||
enqueue("LoginPage-standard.html", LoginTest::class.java)
|
||||
enqueue("Logowanie-uonet.html", LoginTest::class.java)
|
||||
|
@ -124,21 +128,22 @@ class RegisterRepositoryTest : BaseLocalTest() {
|
|||
start(3000)
|
||||
}
|
||||
|
||||
val students = runBlocking { getRegisterRepository("Default").getStudents() }
|
||||
assertEquals(3, students.size)
|
||||
val user = getRegisterRepository("Default").getUserSubjects()
|
||||
val schools = user.symbols[0].schools
|
||||
assertEquals(3, schools.size)
|
||||
|
||||
with(students[0]) {
|
||||
assertEquals("000788", schoolSymbol)
|
||||
with(schools[0]) {
|
||||
assertEquals("000788", schoolId)
|
||||
assertEquals("ZST-CKZiU", schoolShortName)
|
||||
}
|
||||
|
||||
with(students[1]) {
|
||||
assertEquals("004355", schoolSymbol)
|
||||
with(schools[1]) {
|
||||
assertEquals("004355", schoolId)
|
||||
assertEquals("ZSET", schoolShortName)
|
||||
}
|
||||
|
||||
with(students[2]) {
|
||||
assertEquals("016636", schoolSymbol)
|
||||
with(schools[2]) {
|
||||
assertEquals("016636", schoolId)
|
||||
assertEquals("G7 Wulkanowo", schoolShortName)
|
||||
}
|
||||
}
|
||||
|
@ -165,7 +170,12 @@ class RegisterRepositoryTest : BaseLocalTest() {
|
|||
start(3000)
|
||||
}
|
||||
|
||||
val students = getRegisterRepository("Default").getStudents()
|
||||
val user = getRegisterRepository("Default").getUserSubjects()
|
||||
val students = user.symbols
|
||||
.flatMap { it.schools }
|
||||
.flatMap { it.subjects }
|
||||
.filterIsInstance<RegisterStudent>()
|
||||
|
||||
assertEquals(2, students.size)
|
||||
}
|
||||
|
||||
|
@ -174,25 +184,26 @@ class RegisterRepositoryTest : BaseLocalTest() {
|
|||
with(server) {
|
||||
enqueue("LoginPage-standard.html", LoginTest::class.java)
|
||||
enqueue("Logowanie-uonet.html", LoginTest::class.java)
|
||||
|
||||
enqueue("Logowanie-brak-dostepu.html", LoginTest::class.java)
|
||||
enqueue("Offline.html", ErrorInterceptorTest::class.java)
|
||||
|
||||
enqueue("Logowanie-brak-dostepu.html", LoginTest::class.java)
|
||||
enqueue("Logowanie-brak-dostepu.html", LoginTest::class.java)
|
||||
enqueue("Logowanie-brak-dostepu.html", LoginTest::class.java)
|
||||
start(3000)
|
||||
}
|
||||
|
||||
val res = runCatching { normal.getStudents() }
|
||||
val res = normal.getUserSubjects().symbols
|
||||
assertEquals(5, res.size)
|
||||
assertEquals(
|
||||
"Wystąpił nieoczekiwany błąd. Wystąpił błąd aplikacji. Prosimy zalogować się ponownie. Jeśli problem będzie się powtarzał, prosimy o kontakt z serwisem.",
|
||||
res.exceptionOrNull()?.message,
|
||||
res[1].error?.message,
|
||||
)
|
||||
assertEquals(VulcanException::class.java, res.exceptionOrNull()!!::class.java)
|
||||
assertEquals(VulcanException::class.java, res[1].error!!::class.java)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun filterSymbolsWithSpaces() {
|
||||
fun filterSymbolsWithSpaces() = runTest {
|
||||
with(server) {
|
||||
enqueue("LoginPage-standard.html", LoginTest::class.java)
|
||||
enqueue("Logowanie-uonet.html", LoginTest::class.java)
|
||||
|
@ -204,18 +215,21 @@ class RegisterRepositoryTest : BaseLocalTest() {
|
|||
start(3000)
|
||||
}
|
||||
|
||||
val students = runBlocking { normal.getStudents() }
|
||||
assertEquals(0, students.size)
|
||||
val user = normal.getUserSubjects().symbols
|
||||
.flatMap { it.schools }
|
||||
.flatMap { it.subjects }
|
||||
|
||||
assertEquals(0, user.size)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun normalizeInvalidSymbol_default() {
|
||||
fun normalizeInvalidSymbol_default() = runTest {
|
||||
with(server) {
|
||||
enqueue("LoginPage-standard.html", LoginTest::class.java)
|
||||
enqueue("Logowanie-uonet.html", LoginTest::class.java)
|
||||
|
||||
enqueue("Logowanie-brak-dostepu.html", LoginTest::class.java)
|
||||
enqueue("Offline.html", ErrorInterceptorTest::class.java)
|
||||
|
||||
enqueue("Logowanie-brak-dostepu.html", LoginTest::class.java)
|
||||
enqueue("Logowanie-brak-dostepu.html", LoginTest::class.java)
|
||||
enqueue("Logowanie-brak-dostepu.html", LoginTest::class.java)
|
||||
|
@ -223,23 +237,24 @@ class RegisterRepositoryTest : BaseLocalTest() {
|
|||
start(3000)
|
||||
}
|
||||
|
||||
val res = runCatching { runBlocking { getRegisterRepository("Default").getStudents() } }
|
||||
val res = getRegisterRepository("Default").getUserSubjects()
|
||||
assertEquals(5, res.symbols.size)
|
||||
assertEquals(
|
||||
"Wystąpił nieoczekiwany błąd. Wystąpił błąd aplikacji. Prosimy zalogować się ponownie. Jeśli problem będzie się powtarzał, prosimy o kontakt z serwisem.",
|
||||
res.exceptionOrNull()?.message,
|
||||
res.symbols[1].error?.message,
|
||||
)
|
||||
assertTrue(res.exceptionOrNull() is VulcanException)
|
||||
assertTrue(res.symbols[1].error is VulcanException)
|
||||
assertEquals("/Default/Account/LogOn", server.takeRequest().path)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun normalizeInvalidSymbol_custom() {
|
||||
fun normalizeInvalidSymbol_custom() = runTest {
|
||||
with(server) {
|
||||
enqueue("LoginPage-standard.html", LoginTest::class.java)
|
||||
enqueue("Logowanie-uonet.html", LoginTest::class.java)
|
||||
|
||||
enqueue("Logowanie-brak-dostepu.html", LoginTest::class.java)
|
||||
enqueue("Offline.html", ErrorInterceptorTest::class.java)
|
||||
|
||||
enqueue("Logowanie-brak-dostepu.html", LoginTest::class.java)
|
||||
enqueue("Logowanie-brak-dostepu.html", LoginTest::class.java)
|
||||
enqueue("Logowanie-brak-dostepu.html", LoginTest::class.java)
|
||||
|
@ -247,23 +262,24 @@ class RegisterRepositoryTest : BaseLocalTest() {
|
|||
start(3000)
|
||||
}
|
||||
|
||||
val res = runCatching { runBlocking { getRegisterRepository(" Rzeszów + ").getStudents() } }
|
||||
assertTrue(res.exceptionOrNull() is VulcanException)
|
||||
val res = getRegisterRepository(" Rzeszów + ").getUserSubjects()
|
||||
assertEquals(5, res.symbols.size)
|
||||
assertTrue(res.symbols[1].error is VulcanException)
|
||||
assertEquals(
|
||||
"Wystąpił nieoczekiwany błąd. Wystąpił błąd aplikacji. Prosimy zalogować się ponownie. Jeśli problem będzie się powtarzał, prosimy o kontakt z serwisem.",
|
||||
res.exceptionOrNull()?.message,
|
||||
res.symbols[1].error?.message,
|
||||
)
|
||||
assertEquals("/rzeszow/Account/LogOn", server.takeRequest().path)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun normalizeInvalidSymbol_trimMultipleSpaces() {
|
||||
fun normalizeInvalidSymbol_trimMultipleSpaces() = runTest {
|
||||
with(server) {
|
||||
enqueue("LoginPage-standard.html", LoginTest::class.java)
|
||||
enqueue("Logowanie-uonet.html", LoginTest::class.java)
|
||||
|
||||
enqueue("Logowanie-brak-dostepu.html", LoginTest::class.java)
|
||||
enqueue("Offline.html", ErrorInterceptorTest::class.java)
|
||||
|
||||
enqueue("Logowanie-brak-dostepu.html", LoginTest::class.java)
|
||||
enqueue("Logowanie-brak-dostepu.html", LoginTest::class.java)
|
||||
enqueue("Logowanie-brak-dostepu.html", LoginTest::class.java)
|
||||
|
@ -271,24 +287,24 @@ class RegisterRepositoryTest : BaseLocalTest() {
|
|||
start(3000)
|
||||
}
|
||||
|
||||
val res = runCatching { runBlocking { getRegisterRepository(" Niepoprawny symbol no ale + ").getStudents() } }
|
||||
assertTrue(res.exceptionOrNull() is VulcanException)
|
||||
val res = getRegisterRepository(" Niepoprawny symbol no ale + ").getUserSubjects()
|
||||
assertTrue(res.symbols[1].error is VulcanException)
|
||||
assertEquals(
|
||||
"Wystąpił nieoczekiwany błąd. Wystąpił błąd aplikacji. Prosimy zalogować się ponownie. Jeśli problem będzie się powtarzał, prosimy o kontakt z serwisem.",
|
||||
res.exceptionOrNull()?.message,
|
||||
res.symbols[1].error?.message,
|
||||
)
|
||||
|
||||
assertEquals("/niepoprawnysymbolnoale/Account/LogOn", server.takeRequest().path)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun normalizeInvalidSymbol_emptyFallback() {
|
||||
fun normalizeInvalidSymbol_emptyFallback() = runTest {
|
||||
with(server) {
|
||||
enqueue("LoginPage-standard.html", LoginTest::class.java)
|
||||
enqueue("Logowanie-uonet.html", LoginTest::class.java)
|
||||
|
||||
enqueue("Logowanie-brak-dostepu.html", LoginTest::class.java)
|
||||
enqueue("Offline.html", ErrorInterceptorTest::class.java)
|
||||
|
||||
enqueue("Logowanie-brak-dostepu.html", LoginTest::class.java)
|
||||
enqueue("Logowanie-brak-dostepu.html", LoginTest::class.java)
|
||||
enqueue("Logowanie-brak-dostepu.html", LoginTest::class.java)
|
||||
|
@ -296,23 +312,24 @@ class RegisterRepositoryTest : BaseLocalTest() {
|
|||
start(3000)
|
||||
}
|
||||
|
||||
val res = runCatching { runBlocking { getRegisterRepository(" + ").getStudents() } }
|
||||
assertTrue(res.exceptionOrNull() is VulcanException)
|
||||
val res = getRegisterRepository(" + ").getUserSubjects()
|
||||
assertEquals(5, res.symbols.size)
|
||||
assertTrue(res.symbols[1].error is VulcanException)
|
||||
assertEquals(
|
||||
"Wystąpił nieoczekiwany błąd. Wystąpił błąd aplikacji. Prosimy zalogować się ponownie. Jeśli problem będzie się powtarzał, prosimy o kontakt z serwisem.",
|
||||
res.exceptionOrNull()?.message,
|
||||
res.symbols[1].error?.message,
|
||||
)
|
||||
assertEquals("/Default/Account/LogOn", server.takeRequest().path)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun normalizeInvalidSymbol_digits() {
|
||||
fun normalizeInvalidSymbol_digits() = runTest {
|
||||
with(server) {
|
||||
enqueue("LoginPage-standard.html", LoginTest::class.java)
|
||||
enqueue("Logowanie-uonet.html", LoginTest::class.java)
|
||||
|
||||
enqueue("Logowanie-brak-dostepu.html", LoginTest::class.java)
|
||||
enqueue("Offline.html", ErrorInterceptorTest::class.java)
|
||||
|
||||
enqueue("Logowanie-brak-dostepu.html", LoginTest::class.java)
|
||||
enqueue("Logowanie-brak-dostepu.html", LoginTest::class.java)
|
||||
enqueue("Logowanie-brak-dostepu.html", LoginTest::class.java)
|
||||
|
@ -320,11 +337,12 @@ class RegisterRepositoryTest : BaseLocalTest() {
|
|||
start(3000)
|
||||
}
|
||||
|
||||
val res = runCatching { runBlocking { getRegisterRepository("Default").getStudents() } }
|
||||
assertTrue(res.exceptionOrNull() is VulcanException)
|
||||
val res = getRegisterRepository("Default").getUserSubjects()
|
||||
assertEquals(5, res.symbols.size)
|
||||
assertTrue(res.symbols[1].error is VulcanException)
|
||||
assertEquals(
|
||||
"Wystąpił nieoczekiwany błąd. Wystąpił błąd aplikacji. Prosimy zalogować się ponownie. Jeśli problem będzie się powtarzał, prosimy o kontakt z serwisem.",
|
||||
res.exceptionOrNull()?.message,
|
||||
res.symbols[1].error?.message,
|
||||
)
|
||||
assertEquals("/Default/Account/LogOn", server.takeRequest().path)
|
||||
assertEquals(true, server.takeRequest().path?.startsWith("/Account/LogOn?ReturnUrl=%2FDefault"))
|
||||
|
|
|
@ -108,7 +108,7 @@ class ServiceManagerTest : BaseLocalTest() {
|
|||
}
|
||||
|
||||
try {
|
||||
runBlocking { api.getStudents() }
|
||||
runBlocking { api.getUserSubjects() }
|
||||
} catch (e: Throwable) {
|
||||
assertTrue(e is ScrapperException)
|
||||
}
|
||||
|
|
|
@ -22,13 +22,13 @@ import io.github.wulkanowy.sdk.mapper.mapSchool
|
|||
import io.github.wulkanowy.sdk.mapper.mapScrapperMessage
|
||||
import io.github.wulkanowy.sdk.mapper.mapSemesters
|
||||
import io.github.wulkanowy.sdk.mapper.mapStudent
|
||||
import io.github.wulkanowy.sdk.mapper.mapStudents
|
||||
import io.github.wulkanowy.sdk.mapper.mapSubjects
|
||||
import io.github.wulkanowy.sdk.mapper.mapTeachers
|
||||
import io.github.wulkanowy.sdk.mapper.mapTimetableFull
|
||||
import io.github.wulkanowy.sdk.mapper.mapToScrapperAbsent
|
||||
import io.github.wulkanowy.sdk.mapper.mapToUnits
|
||||
import io.github.wulkanowy.sdk.mapper.mapToken
|
||||
import io.github.wulkanowy.sdk.mapper.mapUser
|
||||
import io.github.wulkanowy.sdk.pojo.Absent
|
||||
import io.github.wulkanowy.sdk.pojo.Attendance
|
||||
import io.github.wulkanowy.sdk.pojo.AttendanceSummary
|
||||
|
@ -51,9 +51,9 @@ import io.github.wulkanowy.sdk.pojo.MessageDetails
|
|||
import io.github.wulkanowy.sdk.pojo.MessageReplayDetails
|
||||
import io.github.wulkanowy.sdk.pojo.Note
|
||||
import io.github.wulkanowy.sdk.pojo.Recipient
|
||||
import io.github.wulkanowy.sdk.pojo.RegisterUser
|
||||
import io.github.wulkanowy.sdk.pojo.School
|
||||
import io.github.wulkanowy.sdk.pojo.Semester
|
||||
import io.github.wulkanowy.sdk.pojo.Student
|
||||
import io.github.wulkanowy.sdk.pojo.StudentInfo
|
||||
import io.github.wulkanowy.sdk.pojo.StudentPhoto
|
||||
import io.github.wulkanowy.sdk.pojo.Subject
|
||||
|
@ -61,7 +61,6 @@ import io.github.wulkanowy.sdk.pojo.Teacher
|
|||
import io.github.wulkanowy.sdk.pojo.Timetable
|
||||
import io.github.wulkanowy.sdk.pojo.Token
|
||||
import io.github.wulkanowy.sdk.scrapper.Scrapper
|
||||
import io.github.wulkanowy.sdk.scrapper.register.RegisterUser
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.withContext
|
||||
import okhttp3.Interceptor
|
||||
|
@ -225,23 +224,18 @@ class Sdk {
|
|||
scrapper.sendPasswordResetRequest(registerBaseUrl, symbol, email, captchaCode)
|
||||
}
|
||||
|
||||
suspend fun getStudentsFromScrapper(email: String, password: String, scrapperBaseUrl: String, symbol: String = "Default"): List<Student> = withContext(Dispatchers.IO) {
|
||||
suspend fun getUserSubjectsFromScrapper(
|
||||
email: String,
|
||||
password: String,
|
||||
scrapperBaseUrl: String,
|
||||
symbol: String = "Default",
|
||||
): RegisterUser = withContext(Dispatchers.IO) {
|
||||
scrapper.let {
|
||||
it.baseUrl = scrapperBaseUrl
|
||||
it.email = email
|
||||
it.password = password
|
||||
it.symbol = symbol
|
||||
it.getStudents().mapStudents()
|
||||
}
|
||||
}
|
||||
|
||||
suspend fun getUserSubjectsFromScrapper(email: String, password: String, scrapperBaseUrl: String, symbol: String = "Default"): RegisterUser = withContext(Dispatchers.IO) {
|
||||
scrapper.let {
|
||||
it.baseUrl = scrapperBaseUrl
|
||||
it.email = email
|
||||
it.password = password
|
||||
it.symbol = symbol
|
||||
it.getUserSubjects()
|
||||
it.getUserSubjects().mapUser()
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,31 +1,64 @@
|
|||
package io.github.wulkanowy.sdk.mapper
|
||||
|
||||
import io.github.wulkanowy.sdk.Sdk
|
||||
import io.github.wulkanowy.sdk.pojo.Student
|
||||
import io.github.wulkanowy.sdk.scrapper.register.Student as ScrapperStudent
|
||||
import io.github.wulkanowy.sdk.pojo.RegisterEmployee
|
||||
import io.github.wulkanowy.sdk.pojo.RegisterStudent
|
||||
import io.github.wulkanowy.sdk.pojo.RegisterSubject
|
||||
import io.github.wulkanowy.sdk.pojo.RegisterSymbol
|
||||
import io.github.wulkanowy.sdk.pojo.RegisterUnit
|
||||
import io.github.wulkanowy.sdk.pojo.RegisterUser
|
||||
import io.github.wulkanowy.sdk.scrapper.register.RegisterEmployee as ScrapperRegisterEmploye
|
||||
import io.github.wulkanowy.sdk.scrapper.register.RegisterStudent as ScrapperRegisterStudent
|
||||
import io.github.wulkanowy.sdk.scrapper.register.RegisterSubject as ScrapperRegisterSubject
|
||||
import io.github.wulkanowy.sdk.scrapper.register.RegisterSymbol as SdkRegisterSymbol
|
||||
import io.github.wulkanowy.sdk.scrapper.register.RegisterUnit as ScrapperRegisterUnit
|
||||
import io.github.wulkanowy.sdk.scrapper.register.RegisterUser as ScrapperRegisterUser
|
||||
|
||||
fun List<ScrapperStudent>.mapStudents() = map {
|
||||
Student(
|
||||
email = it.email,
|
||||
userName = it.userName,
|
||||
userLogin = it.userLogin,
|
||||
userLoginId = it.userLoginId,
|
||||
isParent = it.isParent,
|
||||
className = it.className,
|
||||
classId = it.classId,
|
||||
studentId = it.studentId,
|
||||
symbol = it.symbol,
|
||||
loginType = Sdk.ScrapperLoginType.valueOf(it.loginType.name),
|
||||
schoolName = it.schoolName,
|
||||
schoolShortName = it.schoolShortName,
|
||||
schoolSymbol = it.schoolSymbol,
|
||||
studentName = it.studentName,
|
||||
studentSurname = it.studentSurname,
|
||||
loginMode = Sdk.Mode.SCRAPPER,
|
||||
scrapperBaseUrl = it.baseUrl,
|
||||
mobileBaseUrl = "",
|
||||
certificateKey = "",
|
||||
privateKey = "",
|
||||
semesters = it.semesters.mapSemesters(),
|
||||
fun ScrapperRegisterUser.mapUser(): RegisterUser = RegisterUser(
|
||||
email = email,
|
||||
login = login,
|
||||
baseUrl = baseUrl,
|
||||
loginType = loginType,
|
||||
symbols = symbols.map { it.mapSymbol() },
|
||||
)
|
||||
|
||||
fun SdkRegisterSymbol.mapSymbol(): RegisterSymbol = RegisterSymbol(
|
||||
symbol = symbol,
|
||||
userName = userName,
|
||||
error = error,
|
||||
schools = schools.map { it.mapUnit() },
|
||||
)
|
||||
|
||||
fun ScrapperRegisterUnit.mapUnit(): RegisterUnit = RegisterUnit(
|
||||
userLoginId = userLoginId,
|
||||
schoolId = schoolId,
|
||||
schoolName = schoolName,
|
||||
schoolShortName = schoolShortName,
|
||||
parentIds = parentIds,
|
||||
studentIds = studentIds,
|
||||
employeeIds = employeeIds,
|
||||
error = error,
|
||||
subjects = subjects.map { it.mapSubject() },
|
||||
)
|
||||
|
||||
fun ScrapperRegisterSubject.mapSubject(): RegisterSubject {
|
||||
return when (this) {
|
||||
is ScrapperRegisterStudent -> mapStudent()
|
||||
is ScrapperRegisterEmploye -> mapEmployee()
|
||||
}
|
||||
}
|
||||
|
||||
fun ScrapperRegisterEmploye.mapEmployee(): RegisterEmployee = RegisterEmployee(
|
||||
employeeId = employeeId,
|
||||
employeeName = employeeName,
|
||||
)
|
||||
|
||||
fun ScrapperRegisterStudent.mapStudent(): RegisterStudent = RegisterStudent(
|
||||
studentId = studentId,
|
||||
studentName = studentName,
|
||||
studentSecondName = studentSecondName,
|
||||
studentSurname = studentSurname,
|
||||
className = className,
|
||||
classId = classId,
|
||||
isParent = isParent,
|
||||
semesters = semesters.mapSemesters(),
|
||||
)
|
||||
|
|
|
@ -1,27 +1,48 @@
|
|||
package io.github.wulkanowy.sdk.pojo
|
||||
|
||||
import io.github.wulkanowy.sdk.Sdk
|
||||
import io.github.wulkanowy.sdk.scrapper.Scrapper
|
||||
|
||||
data class Student(
|
||||
data class RegisterUser(
|
||||
val email: String,
|
||||
val userName: String,
|
||||
val userLogin: String,
|
||||
val userLoginId: Int,
|
||||
val login: String, // may be the same as email
|
||||
val baseUrl: String,
|
||||
val loginType: Scrapper.LoginType?,
|
||||
val symbols: List<RegisterSymbol>,
|
||||
)
|
||||
|
||||
data class RegisterSymbol(
|
||||
val symbol: String,
|
||||
val isParent: Boolean,
|
||||
val error: Throwable?,
|
||||
val userName: String,
|
||||
val schools: List<RegisterUnit>,
|
||||
)
|
||||
|
||||
data class RegisterUnit(
|
||||
val userLoginId: Int,
|
||||
val schoolId: String,
|
||||
val schoolName: String,
|
||||
val schoolShortName: String,
|
||||
val parentIds: List<Int>,
|
||||
val studentIds: List<Int>,
|
||||
val employeeIds: List<Int>,
|
||||
val error: Throwable?,
|
||||
val subjects: List<RegisterSubject>,
|
||||
)
|
||||
|
||||
sealed interface RegisterSubject
|
||||
|
||||
data class RegisterEmployee(
|
||||
val employeeId: Int,
|
||||
val employeeName: String,
|
||||
) : RegisterSubject
|
||||
|
||||
data class RegisterStudent(
|
||||
val studentId: Int,
|
||||
val studentName: String,
|
||||
val studentSecondName: String,
|
||||
val studentSurname: String,
|
||||
val schoolSymbol: String,
|
||||
val schoolShortName: String,
|
||||
val schoolName: String,
|
||||
val className: String,
|
||||
val classId: Int,
|
||||
val loginType: Sdk.ScrapperLoginType,
|
||||
val loginMode: Sdk.Mode,
|
||||
val scrapperBaseUrl: String,
|
||||
val mobileBaseUrl: String,
|
||||
val certificateKey: String,
|
||||
val privateKey: String,
|
||||
val isParent: Boolean,
|
||||
val semesters: List<Semester>,
|
||||
)
|
||||
) : RegisterSubject
|
||||
|
|
|
@ -26,8 +26,9 @@ class SdkRemoteTest {
|
|||
// mode = Sdk.Mode.SCRAPPER
|
||||
}
|
||||
|
||||
val students =
|
||||
runBlocking { sdk.getStudentsFromScrapper(email = "jan@fakelog.cf", password = "jan123", scrapperBaseUrl = "http://fakelog.cf", symbol = "powiatwulkanowy") }
|
||||
val students = runBlocking {
|
||||
sdk.getUserSubjectsFromScrapper(email = "jan@fakelog.cf", password = "jan123", scrapperBaseUrl = "http://fakelog.cf", symbol = "powiatwulkanowy")
|
||||
}.symbols.flatMap { it.schools }.flatMap { it.subjects }
|
||||
assertEquals(6, students.size)
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue