diff --git a/.circleci/config.yml b/.circleci/config.yml index fe74ebe6..841ff9e0 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -7,7 +7,7 @@ references: container_config: &container_config docker: - - image: circleci/android:api-26-alpha + - image: circleci/android:api-27-alpha working_directory: *workspace_root environment: environment: @@ -31,18 +31,9 @@ jobs: - run: name: Setup environment command: ./gradlew dependencies --no-daemon --stacktrace --console=plain -PdisablePreDex || true - - run: - name: Decrypt keys - command: | - openssl aes-256-cbc -d -in ./app/key-encrypted.p12 -k $ENCRYPT_KEY >> ./app/key.p12 - openssl aes-256-cbc -d -in ./app/upload-key-encrypted.jks -k $ENCRYPT_KEY >> ./app/upload-key.jks - run: name: Initial build command: ./gradlew build assembleDebug -x test -x lint -x fabricGenerateResourcesRelease --no-daemon --stacktrace --console=plain -PdisablePreDex - - run: - name: Clear keys - command: | - rm ./app/key.p12 ./app/upload-key.jks - store_artifacts: path: ./app/build/outputs/apk/ destination: apks/ @@ -135,9 +126,6 @@ jobs: name: Launch emulator command: export LD_LIBRARY_PATH=${ANDROID_HOME}/emulator/lib64:${ANDROID_HOME}/emulator/lib64/qt/lib && emulator64-arm -avd test -noaudio -no-boot-anim -no-window -accel on background: true - - run: - name: Change circle-android script file permissions - command: sudo chmod +rx /bin/circle-android - run: name: Wait emulator command: | @@ -181,69 +169,30 @@ jobs: name: Run sonarqube runner command: ./gradlew -x test -x lint sonarqube -Dsonar.host.url=$SONAR_HOST -Dsonar.organization=$SONAR_ORG -Dsonar.login=$SONAR_KEY -Dsonar.branch.name=$CIRCLE_BRANCH --no-daemon --stacktrace --console=plain -PdisablePreDex - deploy: - <<: *container_config - steps: - - *attach_workspace - - restore_cache: - <<: *general_cache_key - - run: - name: Decrypt keys - command: | - openssl aes-256-cbc -d -in ./app/key-encrypted.p12 -k $ENCRYPT_KEY >> ./app/key.p12 - openssl aes-256-cbc -d -in ./app/upload-key-encrypted.jks -k $ENCRYPT_KEY >> ./app/upload-key.jks - - run: - name: Publish release - command: ./gradlew publishRelease --no-daemon --stacktrace --console=plain -PdisablePreDex - workflows: version: 2 - build-test-deploy: + build_check_tests: jobs: - - build: - filters: - tags: - only: /.*/ + - build - lint: - filters: - tags: - only: /.*/ requires: - build - app-test: - filters: - tags: - only: /.*/ requires: - build - api-test: - filters: - tags: - only: /.*/ requires: - build - instrumented: - filters: - tags: - only: /.*/ + requires: + - build requires: - build - sonarcube: - filters: - tags: - only: /.*/ requires: - build - lint - app-test - api-test - instrumented - - deploy: - requires: - - instrumented - filters: - tags: - only: /\d+\.\d+\.\d+/ - branches: - ignore: /.*/ diff --git a/.gitignore b/.gitignore index 8ad04ebf..3b524b65 100644 --- a/.gitignore +++ b/.gitignore @@ -32,8 +32,6 @@ local.properties .idea/tasks.xml .idea/vcs.xml .idea/workspace.xml -.idea/caches/ -.idea/codeStyles/ *.iml # OS-specific files @@ -44,7 +42,3 @@ local.properties .Trashes ehthumbs.db Thumbs.db -.idea/codeStyles/ -.idea/caches/ -./app/key.p12 -./app/upload-key.jks diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index bf80ae04..d8fdd058 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -12,7 +12,7 @@ build: script: - ./gradlew --no-daemon --stacktrace dependencies || true - ./gradlew --no-daemon --stacktrace assembleDebug - - mv app/build/outputs/apk/debug/app-debug.apk . + - mv app/build/outputs/apk/app-debug.apk . artifacts: name: "${CI_PROJECT_NAME}_${CI_BUILD_REF_NAME}-${CI_BUILD_ID}" paths: @@ -26,7 +26,7 @@ tests: - .gradle policy: pull script: - - ./gradlew --no-daemon --stacktrace -x fabricGenerateResourcesRelease test + - ./gradlew --no-daemon --stacktrace test artifacts: paths: - app/build/reports/tests @@ -39,7 +39,7 @@ lint: - .gradle policy: pull script: - - ./gradlew --no-daemon --stacktrace -x fabricGenerateResourcesRelease lint + - ./gradlew --no-daemon --stacktrace lint artifacts: paths: - app/build/reports diff --git a/README.md b/README.md index 6ccaa20a..65cf14af 100644 --- a/README.md +++ b/README.md @@ -4,12 +4,9 @@ [![Bitrise](https://img.shields.io/bitrise/daeff1893f3c8128/master.svg?token=Hjm1ACamk86JDeVVJHOeqQ&style=flat-square)](https://www.bitrise.io/app/daeff1893f3c8128) [![Codecov](https://img.shields.io/codecov/c/github/wulkanowy/wulkanowy/master.svg?style=flat-square)](https://codecov.io/gh/wulkanowy/wulkanowy) [![BCH compliance](https://bettercodehub.com/edge/badge/wulkanowy/wulkanowy?branch=master)](https://bettercodehub.com/) -[![Scrutinizer](https://img.shields.io/scrutinizer/g/wulkanowy/wulkanowy.svg?style=flat-square)](https://scrutinizer-ci.com/g/wulkanowy/wulkanowy/?branch=master) +[![Known Vulnerabilities](https://snyk.io/test/github/wulkanowy/wulkanowy/badge.svg?targetFile=app%2Fbuild.gradle&style=flat-square)](https://snyk.io/test/github/wulkanowy/wulkanowy?targetFile=app%2Fbuild.gradle) [![Bintray](https://img.shields.io/bintray/v/wulkanowy/wulkanowy/api.svg?style=flat-square)](https://bintray.com/wulkanowy/wulkanowy/api) -[![Discord](https://img.shields.io/discord/390889354199040011.svg?style=flat-square)](https://discord.gg/vccAQBr) - -[Pobierz wersję beta](https://play.google.com/store/apps/details?id=io.github.wulkanowy&utm_source=vcs) [Pobierz wersję rozwojową](https://bitrise-redirector.herokuapp.com/v0.1/apps/daeff1893f3c8128/builds/master/artifacts/app-debug-bitrise-signed.apk) -Androidowy klient dziennika VULCAN UONET+. +Wulkanowy to aplikacja na androida polepszająca wygodę używania dziennika UONET+. diff --git a/android-sonarqube.gradle b/android-sonarqube.gradle index 3ad2c5ff..b9284eea 100644 --- a/android-sonarqube.gradle +++ b/android-sonarqube.gradle @@ -5,7 +5,7 @@ sonarqube { //noinspection GroovyAssignabilityCheck properties { def files = fileTree("${rootProject.projectDir}/api/build/libs/").filter { it.isFile() }.files.name - def libraries = project.android.sdkDirectory.getPath() + "/platforms/android-26/android.jar," + + def libraries = project.android.sdkDirectory.getPath() + "/platforms/android-27/android.jar," + "${project.rootDir}/api/build/libs/" + files[0] property "sonar.projectName", GROUP_ID + ":app" diff --git a/api/build.gradle b/api/build.gradle index 001d2579..ebaca4c8 100644 --- a/api/build.gradle +++ b/api/build.gradle @@ -28,12 +28,12 @@ jacocoTestReport { } dependencies { - implementation "org.jsoup:jsoup:$jsoup" - implementation "org.apache.commons:commons-lang3:$apacheLang" - implementation "com.google.code.gson:gson:$gson" + implementation 'org.jsoup:jsoup:1.10.3' + implementation 'org.apache.commons:commons-lang3:3.7' + implementation 'com.google.code.gson:gson:2.8.2' - testImplementation "junit:junit:$junit" - testImplementation "org.mockito:mockito-core:$mockito" + testImplementation 'junit:junit:4.12' + testImplementation 'org.mockito:mockito-core:2.13.0' } version = PUBLISH_VERSION diff --git a/api/src/main/java/io/github/wulkanowy/api/Client.java b/api/src/main/java/io/github/wulkanowy/api/Client.java index 53300788..16b7982c 100644 --- a/api/src/main/java/io/github/wulkanowy/api/Client.java +++ b/api/src/main/java/io/github/wulkanowy/api/Client.java @@ -21,9 +21,11 @@ public class Client { private String password; - private String symbol; + private String symbol = "Default"; - private Date lastSuccessRequest; + private Login login; + + private Date lastSuccessRequest = new Date(); private Cookies cookies = new Cookies(); @@ -44,11 +46,7 @@ public class Client { String[] url = creds[0].split("://"); protocol = url[0]; - String[] path = url[1].split("/"); - host = path[0]; - if (path.length > 1) { - symbol = path[1]; - } + host = url[1]; email = creds[2]; } } @@ -58,15 +56,25 @@ public class Client { return; } - this.symbol = new Login(this).login(email, password, symbol); + this.symbol = getLogin().login(email, password, symbol); } private boolean isLoggedIn() { - return getCookies().size() > 0 && lastSuccessRequest != null && - 5 > TimeUnit.MILLISECONDS.toMinutes(new Date().getTime() - lastSuccessRequest.getTime()); + return getCookies().size() > 0 && + 29 > TimeUnit.MILLISECONDS.toMinutes(new Date().getTime() - lastSuccessRequest.getTime()); } + Login getLogin() { + if (null != login) { + return login; + } + + login = new Login(this); + + return login; + } + public String getSymbol() { return symbol; } @@ -75,10 +83,6 @@ public class Client { this.symbol = symbol; } - public void addCookies(Map items) { - cookies.addItems(items); - } - private Map getCookies() { return cookies.getItems(); } @@ -94,22 +98,8 @@ public class Client { .replace("{symbol}", symbol); } - public Document getPageByUrl(String url) throws IOException, VulcanException { - return getPageByUrl(url, true, null); - } - - public Document getPageByUrl(String url, boolean loginBefore) throws IOException, VulcanException { - return getPageByUrl(url, loginBefore, null); - } - - public synchronized Document getPageByUrl(String url, boolean loginBefore, Map cookies) throws IOException, VulcanException { - if (loginBefore) { - login(); - } - - if (null != cookies) { - this.cookies.addItems(cookies); - } + Document getPageByUrl(String url) throws IOException, VulcanException { + login(); Connection.Response response = Jsoup.connect(getFilledUrl(url)) .followRedirects(true) @@ -118,16 +108,10 @@ public class Client { this.cookies.addItems(response.cookies()); - Document doc = checkForErrors(response.parse()); - - if (loginBefore) { - lastSuccessRequest = new Date(); - } - - return doc; + return checkForErrors(response.parse()); } - public synchronized Document postPageByUrl(String url, String[][] params) throws IOException, VulcanException { + public Document postPageByUrl(String url, String[][] params) throws IOException, VulcanException { Connection connection = Jsoup.connect(getFilledUrl(url)); for (String[] data : params) { @@ -142,8 +126,6 @@ public class Client { this.cookies.addItems(response.cookies()); - response.bufferUp(); // fixes cert parsing issues #109 - return checkForErrors(response.parse()); } @@ -183,21 +165,15 @@ public class Client { } Document checkForErrors(Document doc) throws VulcanException { - lastSuccessRequest = null; - - String title = doc.select("title").text(); - if ("Przerwa techniczna".equals(title)) { - throw new VulcanOfflineException(title); + if ("Przerwa techniczna".equals(doc.select("title").text())) { + throw new VulcanOfflineException(); } - String singIn = doc.select(".loginButton").text(); - if ("Zaloguj się".equals(singIn)) { - throw new NotLoggedInErrorException(singIn); + if ("Zaloguj się".equals(doc.select(".loginButton").text())) { + throw new NotLoggedInErrorException(); } - if (title.startsWith("Błąd")) { - throw new NotLoggedInErrorException(title + " " + doc.selectFirst("p, body")); - } + lastSuccessRequest = new Date(); return doc; } diff --git a/api/src/main/java/io/github/wulkanowy/api/Diary.java b/api/src/main/java/io/github/wulkanowy/api/Diary.java deleted file mode 100644 index d7d09f9c..00000000 --- a/api/src/main/java/io/github/wulkanowy/api/Diary.java +++ /dev/null @@ -1,38 +0,0 @@ -package io.github.wulkanowy.api; - -public class Diary implements ParamItem { - - private String id = ""; - - private String name = ""; - - private boolean current = false; - - public String getId() { - return id; - } - - public Diary setId(String id) { - this.id = id; - return this; - } - - public String getName() { - return name; - } - - public Diary setName(String name) { - this.name = name; - return this; - } - - @Override - public boolean isCurrent() { - return current; - } - - public Diary setCurrent(boolean current) { - this.current = current; - return this; - } -} diff --git a/api/src/main/java/io/github/wulkanowy/api/NotLoggedInErrorException.java b/api/src/main/java/io/github/wulkanowy/api/NotLoggedInErrorException.java index 179fc8cc..86372266 100644 --- a/api/src/main/java/io/github/wulkanowy/api/NotLoggedInErrorException.java +++ b/api/src/main/java/io/github/wulkanowy/api/NotLoggedInErrorException.java @@ -1,8 +1,4 @@ package io.github.wulkanowy.api; public class NotLoggedInErrorException extends VulcanException { - - public NotLoggedInErrorException(String message) { - super(message); - } } diff --git a/api/src/main/java/io/github/wulkanowy/api/ParamItem.java b/api/src/main/java/io/github/wulkanowy/api/ParamItem.java deleted file mode 100644 index c830467a..00000000 --- a/api/src/main/java/io/github/wulkanowy/api/ParamItem.java +++ /dev/null @@ -1,12 +0,0 @@ -package io.github.wulkanowy.api; - -interface ParamItem { - - ParamItem setId(String id); - - ParamItem setName(String name); - - ParamItem setCurrent(boolean isCurrent); - - boolean isCurrent(); -} diff --git a/api/src/main/java/io/github/wulkanowy/api/Semester.java b/api/src/main/java/io/github/wulkanowy/api/Semester.java index 31230f01..64a07c97 100644 --- a/api/src/main/java/io/github/wulkanowy/api/Semester.java +++ b/api/src/main/java/io/github/wulkanowy/api/Semester.java @@ -1,12 +1,21 @@ package io.github.wulkanowy.api; -public class Semester implements ParamItem { +public class Semester { + + private String number = ""; private String id = ""; - private String name = ""; + private boolean isCurrent = false; - private boolean current = false; + public String getNumber() { + return number; + } + + public Semester setNumber(String number) { + this.number = number; + return this; + } public String getId() { return id; @@ -17,21 +26,12 @@ public class Semester implements ParamItem { return this; } - public String getName() { - return name; - } - - public Semester setName(String number) { - this.name = number; - return this; - } - public boolean isCurrent() { - return current; + return isCurrent; } public Semester setCurrent(boolean current) { - this.current = current; + isCurrent = current; return this; } } diff --git a/api/src/main/java/io/github/wulkanowy/api/SnP.java b/api/src/main/java/io/github/wulkanowy/api/SnP.java index 7f074071..adbffd4b 100644 --- a/api/src/main/java/io/github/wulkanowy/api/SnP.java +++ b/api/src/main/java/io/github/wulkanowy/api/SnP.java @@ -8,25 +8,17 @@ import java.util.List; public interface SnP { - String getSchoolID(); + String getId(); - void setDiaryID(String id); - - String getStudentID(); - - List getStudents() throws IOException, VulcanException; - - StudentAndParent setUp() throws IOException, VulcanException; + StudentAndParent storeContextCookies() throws IOException, VulcanException; String getRowDataChildValue(Element e, int index); Document getSnPPageDocument(String url) throws IOException, VulcanException; - List getDiaries() throws IOException, VulcanException; - List getSemesters() throws IOException, VulcanException; List getSemesters(Document gradesPage); - T getCurrent(List list); + Semester getCurrentSemester(List semesterList); } diff --git a/api/src/main/java/io/github/wulkanowy/api/Student.java b/api/src/main/java/io/github/wulkanowy/api/Student.java deleted file mode 100644 index 8b22f1d8..00000000 --- a/api/src/main/java/io/github/wulkanowy/api/Student.java +++ /dev/null @@ -1,37 +0,0 @@ -package io.github.wulkanowy.api; - -public class Student implements ParamItem { - - private String id = ""; - - private String name = ""; - - private boolean current = false; - - public String getId() { - return id; - } - - public Student setId(String id) { - this.id = id; - return this; - } - - public String getName() { - return name; - } - - public Student setName(String name) { - this.name = name; - return this; - } - - public boolean isCurrent() { - return current; - } - - public Student setCurrent(boolean current) { - this.current = current; - return this; - } -} diff --git a/api/src/main/java/io/github/wulkanowy/api/StudentAndParent.java b/api/src/main/java/io/github/wulkanowy/api/StudentAndParent.java index 1acecfd3..c014e96c 100644 --- a/api/src/main/java/io/github/wulkanowy/api/StudentAndParent.java +++ b/api/src/main/java/io/github/wulkanowy/api/StudentAndParent.java @@ -5,11 +5,8 @@ import org.jsoup.nodes.Element; import org.jsoup.select.Elements; import java.io.IOException; -import java.net.URL; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; -import java.util.Map; public class StudentAndParent implements SnP { @@ -21,47 +18,28 @@ public class StudentAndParent implements SnP { private Client client; - private String schoolID; + private String id; - private String studentID; - - private String diaryID; - - StudentAndParent(Client client, String schoolID, String studentID, String diaryID) { + StudentAndParent(Client client, String id) { this.client = client; - this.schoolID = schoolID; - this.studentID = studentID; - this.diaryID = diaryID; - } - - public StudentAndParent setUp() throws IOException, VulcanException { - if (null == getStudentID() || "".equals(getStudentID())) { - Document doc = client.getPageByUrl(getSnpHomePageUrl()); - - Student student = getCurrent(getStudents(doc)); - studentID = student.getId(); - - Diary diary = getCurrent(getDiaries(doc)); - diaryID = diary.getId(); - } - - return this; - } - - public String getSchoolID() { - return schoolID; - } - - public String getStudentID() { - return studentID; + this.id = id; } private String getBaseUrl() { - return BASE_URL.replace("{ID}", getSchoolID()); + return BASE_URL.replace("{ID}", getId()); + } + + public String getId() { + return id; + } + + public StudentAndParent storeContextCookies() throws IOException, VulcanException { + client.getPageByUrl(getSnpHomePageUrl()); + return this; } String getSnpHomePageUrl() throws IOException, VulcanException { - if (null != getSchoolID()) { + if (null != getId()) { return getBaseUrl(); } @@ -70,12 +48,12 @@ public class StudentAndParent implements SnP { Element studentTileLink = startPage.select(".panel.linkownia.pracownik.klient > a").first(); if (null == studentTileLink) { - throw new NotLoggedInErrorException("You are probably not logged in. Force login"); + throw new NotLoggedInErrorException(); } String snpPageUrl = studentTileLink.attr("href"); - this.schoolID = getExtractedIdFromUrl(snpPageUrl); + this.id = getExtractedIdFromUrl(snpPageUrl); return snpPageUrl; } @@ -84,7 +62,7 @@ public class StudentAndParent implements SnP { String[] path = snpPageUrl.split(client.getHost())[1].split("/"); if (5 != path.length) { - throw new NotLoggedInErrorException("You are probably not logged in"); + throw new NotLoggedInErrorException(); } return path[2]; @@ -94,43 +72,8 @@ public class StudentAndParent implements SnP { return e.select(".daneWiersz .wartosc").get(index - 1).text(); } - public void setDiaryID(String id) { - this.diaryID = id; - } - public Document getSnPPageDocument(String url) throws IOException, VulcanException { - Map cookies = new HashMap<>(); - cookies.put("idBiezacyDziennik", diaryID); - cookies.put("idBiezacyUczen", studentID); - client.addCookies(cookies); - - Document doc = client.getPageByUrl(getBaseUrl() + url, true, cookies); - - if (!doc.title().startsWith("Witryna ucznia i rodzica")) { - throw new VulcanException("Expected SnP page, got page with title: " + doc.title()); - } - - if (doc.title().endsWith("Strona główna")) { - throw new VulcanException("Sesja została nieprawidłowo zainicjowana"); - } - - return doc; - } - - public List getDiaries() throws IOException, VulcanException { - return getDiaries(client.getPageByUrl(getBaseUrl())); - } - - private List getDiaries(Document doc) throws IOException, VulcanException { - return getList(doc.select("#dziennikDropDownList option"), Diary.class); - } - - public List getStudents() throws IOException, VulcanException { - return getStudents(client.getPageByUrl(getBaseUrl())); - } - - private List getStudents(Document doc) throws IOException, VulcanException { - return getList(doc.select("#uczenDropDownList option"), Student.class); + return client.getPageByUrl(getBaseUrl() + url); } public List getSemesters() throws IOException, VulcanException { @@ -144,10 +87,10 @@ public class StudentAndParent implements SnP { for (Element e : semesterOptions) { Semester semester = new Semester() - .setId(e.attr("value")) - .setName(e.text()); + .setId(e.text()) + .setNumber(e.attr("value")); - if (isCurrent(e)) { + if ("selected".equals(e.attr("selected"))) { semester.setCurrent(true); } @@ -157,44 +100,15 @@ public class StudentAndParent implements SnP { return semesters; } - @SuppressWarnings("unchecked") - private List getList(Elements options, Class type) throws IOException, VulcanException { - List list = new ArrayList<>(); - - for (Element e : options) { - URL url = new URL(e.val()); - try { - ParamItem item = type.newInstance() - .setId(url.getQuery().split("=")[1]) - .setName(e.text()); - - if (isCurrent(e)) { - item.setCurrent(true); - } - - list.add((T) item); - } catch (Exception ex) { - throw new VulcanException("Error while trying to parse params list", ex); - } - } - - return list; - } - - @SuppressWarnings("unchecked") - public T getCurrent(List list) { - ParamItem current = null; - for (ParamItem s : list) { + public Semester getCurrentSemester(List semesterList) { + Semester current = null; + for (Semester s : semesterList) { if (s.isCurrent()) { current = s; break; } } - return (T) current; - } - - private boolean isCurrent(Element e) { - return "selected".equals(e.attr("selected")); + return current; } } diff --git a/api/src/main/java/io/github/wulkanowy/api/Vulcan.java b/api/src/main/java/io/github/wulkanowy/api/Vulcan.java index d90d3874..c16ef088 100644 --- a/api/src/main/java/io/github/wulkanowy/api/Vulcan.java +++ b/api/src/main/java/io/github/wulkanowy/api/Vulcan.java @@ -18,27 +18,21 @@ import io.github.wulkanowy.api.user.FamilyInformation; public class Vulcan { + private String id; + private SnP snp; private Client client; - private String schoolId; - - private String studentId; - - private String diaryId; - - public void setCredentials(String email, String password, String symbol, String schoolId, String studentId, String diaryId) { - this.schoolId = schoolId; - this.studentId = studentId; - this.diaryId = diaryId; - + public void setCredentials(String email, String password, String symbol, String id) { client = new Client(email, password, symbol); + + this.id = id; } public Client getClient() throws NotLoggedInErrorException { if (null == client) { - throw new NotLoggedInErrorException("Use setCredentials() method first"); + throw new NotLoggedInErrorException(); } return client; @@ -49,17 +43,20 @@ public class Vulcan { } - public SnP getStudentAndParent() throws VulcanException, IOException { + public SnP getStudentAndParent() throws IOException, VulcanException { if (null != this.snp) { return this.snp; } - this.snp = new StudentAndParent(getClient(), schoolId, studentId, diaryId) - .setUp(); + this.snp = new StudentAndParent(getClient(), id).storeContextCookies(); return this.snp; } + public String getId() throws IOException, VulcanException { + return getStudentAndParent().getId(); + } + public AttendanceTable getAttendanceTable() throws IOException, VulcanException { return new AttendanceTable(getStudentAndParent()); } diff --git a/api/src/main/java/io/github/wulkanowy/api/VulcanException.java b/api/src/main/java/io/github/wulkanowy/api/VulcanException.java index 0bc0c51f..0e7ed243 100644 --- a/api/src/main/java/io/github/wulkanowy/api/VulcanException.java +++ b/api/src/main/java/io/github/wulkanowy/api/VulcanException.java @@ -1,12 +1,4 @@ package io.github.wulkanowy.api; -public class VulcanException extends Exception { - - public VulcanException(String message) { - super(message); - } - - protected VulcanException(String message, Exception e) { - super(message, e); - } +public abstract class VulcanException extends Exception { } diff --git a/api/src/main/java/io/github/wulkanowy/api/VulcanOfflineException.java b/api/src/main/java/io/github/wulkanowy/api/VulcanOfflineException.java index 24ab48e6..497fba94 100644 --- a/api/src/main/java/io/github/wulkanowy/api/VulcanOfflineException.java +++ b/api/src/main/java/io/github/wulkanowy/api/VulcanOfflineException.java @@ -1,8 +1,4 @@ package io.github.wulkanowy.api; public class VulcanOfflineException extends VulcanException { - - VulcanOfflineException(String message) { - super(message); - } } diff --git a/api/src/main/java/io/github/wulkanowy/api/attendance/AttendanceTable.java b/api/src/main/java/io/github/wulkanowy/api/attendance/AttendanceTable.java index d81a30b2..c45cbe6a 100644 --- a/api/src/main/java/io/github/wulkanowy/api/attendance/AttendanceTable.java +++ b/api/src/main/java/io/github/wulkanowy/api/attendance/AttendanceTable.java @@ -63,7 +63,7 @@ public class AttendanceTable { for (int i = 1; i < size; i++) { Lesson lesson = new Lesson(); lesson.setDate(days.get(i - 1).getDate()); - lesson.setNumber(Integer.valueOf(hours.get(0).text())); + lesson.setNumber(hours.get(0).text()); addLessonDetails(lesson, hours.get(i)); diff --git a/api/src/main/java/io/github/wulkanowy/api/exams/ExamsWeek.java b/api/src/main/java/io/github/wulkanowy/api/exams/ExamsWeek.java index c111ce84..3dd056d9 100644 --- a/api/src/main/java/io/github/wulkanowy/api/exams/ExamsWeek.java +++ b/api/src/main/java/io/github/wulkanowy/api/exams/ExamsWeek.java @@ -1,17 +1,12 @@ package io.github.wulkanowy.api.exams; -import org.apache.commons.lang3.StringUtils; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; import java.io.IOException; -import java.text.ParseException; -import java.text.SimpleDateFormat; import java.util.ArrayList; -import java.util.Date; import java.util.List; -import java.util.Locale; import io.github.wulkanowy.api.SnP; import io.github.wulkanowy.api.VulcanException; @@ -27,11 +22,11 @@ public class ExamsWeek { this.snp = snp; } - public Week getCurrent() throws IOException, VulcanException, ParseException { + public Week getCurrent() throws IOException, VulcanException { return getWeek("", true); } - public Week getWeek(String tick, final boolean onlyNotEmpty) throws IOException, VulcanException, ParseException { + public Week getWeek(String tick, final boolean onlyNotEmpty) throws IOException, VulcanException { Document examsPage = snp.getSnPPageDocument(EXAMS_PAGE_URL + tick); Elements examsDays = examsPage.select(".mainContainer > div:not(.navigation)"); @@ -46,9 +41,7 @@ public class ExamsWeek { } if (null != dayHeading) { - String[] dateHeader = dayHeading.text().split(", "); - day.setDayName(StringUtils.capitalize(dateHeader[0])); - day.setDate(getFormattedDate(dateHeader[1])); + day.setDate(dayHeading.text().split(", ")[1]); } Elements exams = item.select("article"); @@ -58,24 +51,15 @@ public class ExamsWeek { .setType(snp.getRowDataChildValue(e, 2)) .setDescription(snp.getRowDataChildValue(e, 3)) .setTeacher(snp.getRowDataChildValue(e, 4).split(", ")[0]) - .setEntryDate(getFormattedDate(snp.getRowDataChildValue(e, 4).split(", ")[1])) + .setEntryDate(snp.getRowDataChildValue(e, 4).split(", ")[1]) ); } days.add(day); } - return new Week() - .setStartDayDate(getFormattedDate(examsPage.select(".mainContainer > h2") - .first().text().split(" ")[1])) + .setStartDayDate(examsDays.select("h2").first().text().split(" ")[1]) .setDays(days); } - - private String getFormattedDate(String date) throws ParseException { - SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy", Locale.ROOT); - Date d = sdf.parse(date); - sdf.applyPattern("yyyy-MM-dd"); - return sdf.format(d); - } } diff --git a/api/src/main/java/io/github/wulkanowy/api/generic/Day.java b/api/src/main/java/io/github/wulkanowy/api/generic/Day.java index 5b9086a3..6bf26c04 100644 --- a/api/src/main/java/io/github/wulkanowy/api/generic/Day.java +++ b/api/src/main/java/io/github/wulkanowy/api/generic/Day.java @@ -11,6 +11,10 @@ public class Day { private String dayName = ""; + private boolean isFreeDay = false; + + private String freeDayName = ""; + public Lesson getLesson(int index) { return lessons.get(index); } @@ -40,4 +44,20 @@ public class Day { public void setDayName(String dayName) { this.dayName = dayName; } + + public boolean isFreeDay() { + return isFreeDay; + } + + public void setFreeDay(boolean freeDay) { + isFreeDay = freeDay; + } + + public String getFreeDayName() { + return freeDayName; + } + + public void setFreeDayName(String freeDayName) { + this.freeDayName = freeDayName; + } } diff --git a/api/src/main/java/io/github/wulkanowy/api/generic/Lesson.java b/api/src/main/java/io/github/wulkanowy/api/generic/Lesson.java index 27bf9bf0..8dd65327 100644 --- a/api/src/main/java/io/github/wulkanowy/api/generic/Lesson.java +++ b/api/src/main/java/io/github/wulkanowy/api/generic/Lesson.java @@ -2,7 +2,7 @@ package io.github.wulkanowy.api.generic; public class Lesson { - private int number = 0; + private String number = ""; private String subject = ""; @@ -48,13 +48,12 @@ public class Lesson { private boolean isExemption = false; - public int getNumber() { + public String getNumber() { return number; } - public Lesson setNumber(int number) { + public void setNumber(String number) { this.number = number; - return this; } public String getSubject() { diff --git a/api/src/main/java/io/github/wulkanowy/api/grades/Grade.java b/api/src/main/java/io/github/wulkanowy/api/grades/Grade.java index 31e1bbbd..564b3e47 100644 --- a/api/src/main/java/io/github/wulkanowy/api/grades/Grade.java +++ b/api/src/main/java/io/github/wulkanowy/api/grades/Grade.java @@ -18,6 +18,8 @@ public class Grade { private String teacher = ""; + private String semester = ""; + public String getSubject() { return subject; } @@ -97,4 +99,14 @@ public class Grade { return this; } + + public String getSemester() { + return semester; + } + + public Grade setSemester(String semester) { + this.semester = semester; + + return this; + } } diff --git a/api/src/main/java/io/github/wulkanowy/api/grades/GradesList.java b/api/src/main/java/io/github/wulkanowy/api/grades/GradesList.java index 936c1533..ce8c0f77 100644 --- a/api/src/main/java/io/github/wulkanowy/api/grades/GradesList.java +++ b/api/src/main/java/io/github/wulkanowy/api/grades/GradesList.java @@ -14,6 +14,7 @@ import java.util.Locale; import java.util.regex.Matcher; import java.util.regex.Pattern; +import io.github.wulkanowy.api.Semester; import io.github.wulkanowy.api.SnP; import io.github.wulkanowy.api.VulcanException; @@ -21,7 +22,7 @@ public class GradesList { private static final String GRADES_PAGE_URL = "Oceny/Wszystkie?details=2&okres="; - private SnP snp; + private SnP snp = null; private List grades = new ArrayList<>(); @@ -40,54 +41,43 @@ public class GradesList { public List getAll(String semester) throws IOException, ParseException, VulcanException { Document gradesPage = snp.getSnPPageDocument(getGradesPageUrl() + semester); Elements gradesRows = gradesPage.select(".ocenySzczegoly-table > tbody > tr"); + Semester currentSemester = snp.getCurrentSemester(snp.getSemesters(gradesPage)); for (Element row : gradesRows) { if ("Brak ocen".equals(row.select("td:nth-child(2)").text())) { continue; } - grades.add(getGrade(row)); + String descriptions = row.select("td:nth-child(3)").text(); + String symbol = descriptions.split(", ")[0]; + String description = descriptions.replaceFirst(symbol, "").replaceFirst(", ", ""); + + Pattern pattern = Pattern.compile("#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})"); + Matcher matcher = pattern.matcher(row.select("td:nth-child(2) span.ocenaCzastkowa") + .attr("style")); + + String color = ""; + while (matcher.find()) { + color = matcher.group(1); + } + + SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy", Locale.ROOT); + Date d = sdf.parse(row.select("td:nth-child(5)").text()); + sdf.applyPattern("yyyy-MM-dd"); + + grades.add(new Grade() + .setSubject(row.select("td:nth-child(1)").text()) + .setValue(row.select("td:nth-child(2)").text()) + .setColor(color) + .setSymbol(symbol) + .setDescription(description) + .setWeight(row.select("td:nth-child(4)").text()) + .setDate(sdf.format(d)) + .setTeacher(row.select("td:nth-child(6)").text()) + .setSemester(currentSemester.getNumber()) + ); } return grades; } - - private Grade getGrade(Element row) throws ParseException { - String descriptions = row.select("td:nth-child(3)").text(); - - String symbol = descriptions.split(", ")[0]; - String description = descriptions.replaceFirst(Pattern.quote(symbol), "").replaceFirst(", ", ""); - String color = getColor(row.select("td:nth-child(2) span.ocenaCzastkowa").attr("style")); - String date = formatDate(row.select("td:nth-child(5)").text()); - - return new Grade() - .setSubject(row.select("td:nth-child(1)").text()) - .setValue(row.select("td:nth-child(2)").text()) - .setColor(color) - .setSymbol(symbol) - .setDescription(description) - .setWeight(row.select("td:nth-child(4)").text()) - .setDate(date) - .setTeacher(row.select("td:nth-child(6)").text()); - } - - private String getColor(String styleAttr) { - Pattern pattern = Pattern.compile("#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})"); - Matcher matcher = pattern.matcher(styleAttr); - - String color = ""; - while (matcher.find()) { - color = matcher.group(1); - } - - return color; - } - - private String formatDate(String date) throws ParseException { - SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy", Locale.ROOT); - Date d = sdf.parse(date); - sdf.applyPattern("yyyy-MM-dd"); - - return sdf.format(d); - } } diff --git a/api/src/main/java/io/github/wulkanowy/api/grades/SubjectsList.java b/api/src/main/java/io/github/wulkanowy/api/grades/SubjectsList.java index 37902d0d..99359413 100644 --- a/api/src/main/java/io/github/wulkanowy/api/grades/SubjectsList.java +++ b/api/src/main/java/io/github/wulkanowy/api/grades/SubjectsList.java @@ -13,21 +13,16 @@ import io.github.wulkanowy.api.VulcanException; public class SubjectsList { - private static final String SUBJECTS_PAGE_URL = "Oceny/Wszystkie?details=1&okres="; + private static final String SUBJECTS_PAGE_URL = "Oceny/Wszystkie?details=1"; - private SnP snp; + private SnP snp = null; public SubjectsList(SnP snp) { this.snp = snp; } - public List getAll() throws IOException, VulcanException { - return getAll(""); - } - - public List getAll(String semester) throws IOException, VulcanException { - Document subjectPage = snp.getSnPPageDocument(SUBJECTS_PAGE_URL + semester); + Document subjectPage = snp.getSnPPageDocument(SUBJECTS_PAGE_URL); Elements rows = subjectPage.select(".ocenyZwykle-table > tbody > tr"); diff --git a/api/src/main/java/io/github/wulkanowy/api/login/AccountPermissionException.java b/api/src/main/java/io/github/wulkanowy/api/login/AccountPermissionException.java index de3901ff..99feb86f 100644 --- a/api/src/main/java/io/github/wulkanowy/api/login/AccountPermissionException.java +++ b/api/src/main/java/io/github/wulkanowy/api/login/AccountPermissionException.java @@ -3,8 +3,4 @@ package io.github.wulkanowy.api.login; import io.github.wulkanowy.api.VulcanException; public class AccountPermissionException extends VulcanException { - - AccountPermissionException(String message) { - super(message); - } } diff --git a/api/src/main/java/io/github/wulkanowy/api/login/BadCredentialsException.java b/api/src/main/java/io/github/wulkanowy/api/login/BadCredentialsException.java index 13efd4a1..1ac37f9c 100644 --- a/api/src/main/java/io/github/wulkanowy/api/login/BadCredentialsException.java +++ b/api/src/main/java/io/github/wulkanowy/api/login/BadCredentialsException.java @@ -3,8 +3,4 @@ package io.github.wulkanowy.api.login; import io.github.wulkanowy.api.VulcanException; public class BadCredentialsException extends VulcanException { - - BadCredentialsException(String message) { - super(message); - } } diff --git a/api/src/main/java/io/github/wulkanowy/api/login/Login.java b/api/src/main/java/io/github/wulkanowy/api/login/Login.java index a734501e..7f88037d 100644 --- a/api/src/main/java/io/github/wulkanowy/api/login/Login.java +++ b/api/src/main/java/io/github/wulkanowy/api/login/Login.java @@ -2,7 +2,6 @@ package io.github.wulkanowy.api.login; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; -import org.jsoup.nodes.Element; import org.jsoup.parser.Parser; import org.jsoup.select.Elements; @@ -13,101 +12,64 @@ import io.github.wulkanowy.api.VulcanException; public class Login { - static final String LOGIN_PAGE_URL = "{schema}://cufs.{host}/{symbol}/Account/LogOn" + + private static final String LOGIN_PAGE_URL = "{schema}://cufs.{host}/{symbol}/Account/LogOn" + "?ReturnUrl=%2F{symbol}%2FFS%2FLS%3Fwa%3Dwsignin1.0%26wtrealm%3D" + "{schema}%253a%252f%252fuonetplus.{host}%252f{symbol}%252fLoginEndpoint.aspx%26wctx%3D" + "{schema}%253a%252f%252fuonetplus.{host}%252f{symbol}%252fLoginEndpoint.aspx"; + private static final String LOGIN_ENDPOINT_PAGE_URL = + "{schema}://uonetplus.{host}/{symbol}/LoginEndpoint.aspx"; + private Client client; + private String symbol; + public Login(Client client) { this.client = client; } public String login(String email, String password, String symbol) throws VulcanException, IOException { - Document certDoc = sendCredentials(email, password); + String certificate = sendCredentials(email, password, symbol); - return sendCertificate(certDoc, symbol); + return sendCertificate(certificate, symbol); } - Document sendCredentials(String email, String password) throws IOException, VulcanException { - String[][] credentials = new String[][]{ + String sendCredentials(String email, String password, String symbol) throws IOException, VulcanException { + this.symbol = symbol; + + Document html = client.postPageByUrl(LOGIN_PAGE_URL, new String[][]{ {"LoginName", email}, {"Password", password} - }; + }); - Document nextDoc = sendCredentialsData(credentials, LOGIN_PAGE_URL); - - Element errorMessage = nextDoc.selectFirst(".ErrorMessage, #ErrorTextLabel"); - if (null != errorMessage) { - throw new BadCredentialsException(errorMessage.text()); + if (null != html.select(".ErrorMessage").first()) { + throw new BadCredentialsException(); } - return nextDoc; + return html.select("input[name=wresult]").attr("value"); } - private Document sendCredentialsData(String[][] credentials, String nextUrl) throws IOException, VulcanException { - Element formFirst = client.getPageByUrl(nextUrl, false).selectFirst("#form1"); + String sendCertificate(String certificate, String defaultSymbol) throws IOException, VulcanException { + this.symbol = findSymbol(defaultSymbol, certificate); + client.setSymbol(this.symbol); - if (null != formFirst) { // only on adfs login - Document formSecond = client.postPageByUrl( - formFirst.attr("abs:action"), - getFormStateParams(formFirst, "", "") - ); - credentials = getFormStateParams(formSecond, credentials[0][1], credentials[1][1]); - nextUrl = formSecond.selectFirst("#form1").attr("abs:action"); - } - - return client.postPageByUrl(nextUrl, credentials); - } - - private String[][] getFormStateParams(Element form, String email, String password) { - return new String[][]{ - {"__VIEWSTATE", form.select("#__VIEWSTATE").val()}, - {"__VIEWSTATEGENERATOR", form.select("#__VIEWSTATEGENERATOR").val()}, - {"__EVENTVALIDATION", form.select("#__EVENTVALIDATION").val()}, - {"__db", form.select("input[name=__db]").val()}, - {"PassiveSignInButton.x", "0"}, - {"PassiveSignInButton.y", "0"}, - {"SubmitButton.x", "0"}, - {"SubmitButton.y", "0"}, - {"UsernameTextBox", email}, - {"PasswordTextBox", password}, - }; - } - - String sendCertificate(Document doc, String defaultSymbol) throws IOException, VulcanException { - client.setSymbol(findSymbol(defaultSymbol, doc.select("input[name=wresult]").val())); - - Document targetDoc = sendCertData(doc); - String title = targetDoc.title(); - - if ("Working...".equals(title)) { // on adfs login - title = sendCertData(targetDoc).title(); - } + String title = client.postPageByUrl(LOGIN_ENDPOINT_PAGE_URL, new String[][]{ + {"wa", "wsignin1.0"}, + {"wresult", certificate} + }).select("title").text(); if ("Logowanie".equals(title)) { - throw new AccountPermissionException("No account access. Try another symbol"); + throw new AccountPermissionException(); } if (!"Uonet+".equals(title)) { - throw new LoginErrorException("Expected page title `UONET+`, got " + title); + throw new LoginErrorException(); } - return client.getSymbol(); + return this.symbol; } - private Document sendCertData(Document doc) throws IOException, VulcanException { - String url = doc.select("form[name=hiddenform]").attr("action"); - - return client.postPageByUrl(url.replaceFirst("Default", "{symbol}"), new String[][]{ - {"wa", "wsignin1.0"}, - {"wresult", doc.select("input[name=wresult]").val()}, - {"wctx", doc.select("input[name=wctx]").val()} - }); - } - - private String findSymbol(String symbol, String certificate) throws AccountPermissionException { + private String findSymbol(String symbol, String certificate) { if ("Default".equals(symbol)) { return findSymbolInCertificate(certificate); } @@ -115,19 +77,15 @@ public class Login { return symbol; } - String findSymbolInCertificate(String certificate) throws AccountPermissionException { - Elements instances = Jsoup + String findSymbolInCertificate(String certificate) { + Elements els = Jsoup .parse(certificate.replaceAll(":", ""), "", Parser.xmlParser()) .select("[AttributeName=\"UserInstance\"] samlAttributeValue"); - if (instances.isEmpty()) { // on adfs login + if (els.isEmpty()) { return ""; } - if (instances.size() < 2) { // 1st index is always `Default` - throw new AccountPermissionException("First login detected, specify symbol"); - } - - return instances.get(1).text(); + return els.get(1).text(); } } diff --git a/api/src/main/java/io/github/wulkanowy/api/login/LoginErrorException.java b/api/src/main/java/io/github/wulkanowy/api/login/LoginErrorException.java index be7439df..e264dc67 100644 --- a/api/src/main/java/io/github/wulkanowy/api/login/LoginErrorException.java +++ b/api/src/main/java/io/github/wulkanowy/api/login/LoginErrorException.java @@ -2,9 +2,5 @@ package io.github.wulkanowy.api.login; import io.github.wulkanowy.api.NotLoggedInErrorException; -class LoginErrorException extends NotLoggedInErrorException { - - LoginErrorException(String message) { - super(message); - } +public class LoginErrorException extends NotLoggedInErrorException { } diff --git a/api/src/main/java/io/github/wulkanowy/api/messages/BadRequestException.java b/api/src/main/java/io/github/wulkanowy/api/messages/BadRequestException.java index 14dca67b..ed407b4d 100644 --- a/api/src/main/java/io/github/wulkanowy/api/messages/BadRequestException.java +++ b/api/src/main/java/io/github/wulkanowy/api/messages/BadRequestException.java @@ -3,8 +3,4 @@ package io.github.wulkanowy.api.messages; import io.github.wulkanowy.api.VulcanException; class BadRequestException extends VulcanException { - - BadRequestException(String message) { - super(message); - } } diff --git a/api/src/main/java/io/github/wulkanowy/api/messages/Messages.java b/api/src/main/java/io/github/wulkanowy/api/messages/Messages.java index ec2a3fba..eb5f8bba 100644 --- a/api/src/main/java/io/github/wulkanowy/api/messages/Messages.java +++ b/api/src/main/java/io/github/wulkanowy/api/messages/Messages.java @@ -59,10 +59,10 @@ public class Messages { messages = new Gson().fromJson(res, MessagesContainer.class).data; } catch (JsonParseException e) { if (res.contains(ERROR_TITLE)) { - throw new BadRequestException(ERROR_TITLE); + throw new BadRequestException(); } - throw new NotLoggedInErrorException("You are probably not logged in"); + throw new NotLoggedInErrorException(); } return messages; @@ -80,10 +80,10 @@ public class Messages { message = new Gson().fromJson(res, MessageContainer.class).data; } catch (JsonParseException e) { if (res.contains(ERROR_TITLE)) { - throw new BadRequestException(ERROR_TITLE); + throw new BadRequestException(); } - throw new NotLoggedInErrorException("You are probably not logged in. Force login"); + throw new NotLoggedInErrorException(); } return message; diff --git a/api/src/main/java/io/github/wulkanowy/api/timetable/Timetable.java b/api/src/main/java/io/github/wulkanowy/api/timetable/Timetable.java index 77ca41bd..f575edb3 100644 --- a/api/src/main/java/io/github/wulkanowy/api/timetable/Timetable.java +++ b/api/src/main/java/io/github/wulkanowy/api/timetable/Timetable.java @@ -14,6 +14,7 @@ import java.util.Locale; import io.github.wulkanowy.api.SnP; import io.github.wulkanowy.api.VulcanException; +import io.github.wulkanowy.api.generic.Day; import io.github.wulkanowy.api.generic.Lesson; import io.github.wulkanowy.api.generic.Week; @@ -27,25 +28,25 @@ public class Timetable { this.snp = snp; } - public Week getWeekTable() throws IOException, ParseException, VulcanException { + public Week getWeekTable() throws IOException, ParseException, VulcanException { return getWeekTable(""); } - public Week getWeekTable(final String tick) throws IOException, ParseException, VulcanException { + public Week getWeekTable(final String tick) throws IOException, ParseException, VulcanException { Element table = snp.getSnPPageDocument(TIMETABLE_PAGE_URL + tick) .select(".mainContainer .presentData").first(); - List days = getDays(table.select("thead th")); + List days = getDays(table.select("thead th")); setLessonToDays(table, days); - return new Week() + return new Week() .setStartDayDate(days.get(0).getDate()) .setDays(days); } - private List getDays(Elements tableHeaderCells) throws ParseException { - List days = new ArrayList<>(); + private List getDays(Elements tableHeaderCells) throws ParseException { + List days = new ArrayList<>(); for (int i = 2; i < 7; i++) { String[] dayHeaderCell = tableHeaderCells.get(i).html().split("
"); @@ -54,7 +55,7 @@ public class Timetable { Date d = sdf.parse(dayHeaderCell[1].trim()); sdf.applyPattern("yyyy-MM-dd"); - TimetableDay day = new TimetableDay(); + Day day = new Day(); day.setDayName(dayHeaderCell[0]); day.setDate(sdf.format(d)); @@ -69,7 +70,7 @@ public class Timetable { return days; } - private void setLessonToDays(Element table, List days) { + private void setLessonToDays(Element table, List days) { for (Element row : table.select("tbody tr")) { Elements hours = row.select("td"); @@ -81,7 +82,7 @@ public class Timetable { lesson.setStartTime(startEndEnd[0]); lesson.setEndTime(startEndEnd[1]); lesson.setDate(days.get(i - 2).getDate()); - lesson.setNumber(Integer.valueOf(hours.get(0).text())); + lesson.setNumber(hours.get(0).text()); addLessonDetails(lesson, hours.get(i).select("div")); @@ -98,14 +99,7 @@ public class Timetable { addLessonInfoFromElement(lesson, e.first()); break; case 2: - Element span = e.last().select("span").first(); - if (span.hasClass(LessonTypes.CLASS_MOVED_OR_CANCELED)) { - lesson.setNewMovedInOrChanged(true); - lesson.setDescription("poprzednio: " + getLessonAndGroupInfoFromSpan(span)[0]); - addLessonInfoFromElement(lesson, e.first()); - } else { - addLessonInfoFromElement(lesson, e.last()); - } + addLessonInfoFromElement(lesson, e.last()); break; case 3: addLessonInfoFromElement(lesson, e.get(1)); @@ -171,8 +165,7 @@ public class Timetable { lesson.setRoom(spans.get(5).text()); lesson.setMovedOrCanceled(false); lesson.setNewMovedInOrChanged(true); - lesson.setDescription(StringUtils.defaultString(StringUtils.substringBetween( - spans.last().text(), "(", ")"), spans.last().text()) + lesson.setDescription(StringUtils.substringBetween(spans.last().text(), "(", ")") + " (poprzednio: " + spans.get(0).text() + ")"); } else if (9 == spans.size()) { String[] subjectAndGroupInfo = getLessonAndGroupInfoFromSpan(spans.get(4)); @@ -183,15 +176,13 @@ public class Timetable { lesson.setMovedOrCanceled(false); lesson.setNewMovedInOrChanged(true); lesson.setDivisionIntoGroups(true); - lesson.setDescription(StringUtils.defaultString(StringUtils.substringBetween( - spans.last().text(), "(", ")"), spans.last().text()) + lesson.setDescription(StringUtils.substringBetween(spans.last().text(), "(", ")") + " (poprzednio: " + getLessonAndGroupInfoFromSpan(spans.get(0))[0] + ")"); } else if (4 <= spans.size()) { lesson.setSubject(spans.get(0).text()); lesson.setTeacher(spans.get(1).text()); lesson.setRoom(spans.get(2).text()); - lesson.setDescription(StringUtils.defaultString(StringUtils.substringBetween( - spans.last().text(), "(", ")"), spans.last().text())); + lesson.setDescription(StringUtils.substringBetween(spans.last().text(), "(", ")")); } } @@ -219,8 +210,7 @@ public class Timetable { return new String[]{ span.text().replace(" " + groupName, ""), - StringUtils.defaultString(StringUtils.substringBetween( - groupName, "[", "]"), groupName) + StringUtils.substringBetween(groupName, "[", "]") }; } } diff --git a/api/src/main/java/io/github/wulkanowy/api/timetable/TimetableDay.java b/api/src/main/java/io/github/wulkanowy/api/timetable/TimetableDay.java deleted file mode 100644 index 1aa29de2..00000000 --- a/api/src/main/java/io/github/wulkanowy/api/timetable/TimetableDay.java +++ /dev/null @@ -1,26 +0,0 @@ -package io.github.wulkanowy.api.timetable; - -import io.github.wulkanowy.api.generic.Day; - -public class TimetableDay extends Day { - - private boolean isFreeDay = false; - - private String freeDayName = ""; - - public boolean isFreeDay() { - return isFreeDay; - } - - public void setFreeDay(boolean freeDay) { - isFreeDay = freeDay; - } - - public String getFreeDayName() { - return freeDayName; - } - - public void setFreeDayName(String freeDayName) { - this.freeDayName = freeDayName; - } -} diff --git a/api/src/test/java/io/github/wulkanowy/api/ClientTest.java b/api/src/test/java/io/github/wulkanowy/api/ClientTest.java index 38f85617..4aa1be91 100644 --- a/api/src/test/java/io/github/wulkanowy/api/ClientTest.java +++ b/api/src/test/java/io/github/wulkanowy/api/ClientTest.java @@ -1,10 +1,13 @@ package io.github.wulkanowy.api; +import org.hamcrest.CoreMatchers; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.junit.Assert; import org.junit.Test; +import io.github.wulkanowy.api.login.Login; + public class ClientTest { private String getFixtureAsString(String fixtureFileName) { @@ -46,6 +49,20 @@ public class ClientTest { client.checkForErrors(doc); } + @Test + public void getClientTest() throws Exception { + Client client = new Client("", "", ""); + + Assert.assertThat(client.getLogin(), CoreMatchers.instanceOf(Login.class)); + } + + @Test + public void getClientTwiceTest() throws Exception { + Client client = new Client("", "", ""); + + Assert.assertEquals(client.getLogin(), client.getLogin()); + } + @Test public void getFilledUrlTest() throws Exception { Client client = new Client("http://fakelog.cf\\\\admin", "", "symbol123"); diff --git a/api/src/test/java/io/github/wulkanowy/api/StudentAndParentTest.java b/api/src/test/java/io/github/wulkanowy/api/StudentAndParentTest.java index 2b3d7250..5cde9b64 100644 --- a/api/src/test/java/io/github/wulkanowy/api/StudentAndParentTest.java +++ b/api/src/test/java/io/github/wulkanowy/api/StudentAndParentTest.java @@ -7,7 +7,6 @@ import org.junit.Before; import org.junit.Test; import org.mockito.Mockito; -import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -23,21 +22,18 @@ public class StudentAndParentTest { client = Mockito.mock(Client.class); Mockito.when(client.getPageByUrl(Mockito.anyString())).thenReturn(gradesPageDocument); - Mockito.when(client.getPageByUrl( - Mockito.anyString(), - Mockito.anyBoolean(), Mockito.anyMap())).thenReturn(gradesPageDocument); } @Test - public void snpTest() { - StudentAndParent snp = new StudentAndParent(client, "id123", null, null); - Assert.assertEquals("id123", snp.getSchoolID()); + public void snpTest() throws Exception { + StudentAndParent snp = new StudentAndParent(client, "id123"); + Assert.assertEquals("id123", snp.getId()); } @Test public void getSnpPageUrlWithIdTest() throws Exception { Assert.assertEquals("{schema}://uonetplus-opiekun.{host}/{symbol}/123456/", - (new StudentAndParent(client, "123456", null, null)).getSnpHomePageUrl()); + (new StudentAndParent(client, "123456")).getSnpHomePageUrl()); } @Test @@ -47,7 +43,7 @@ public class StudentAndParentTest { Mockito.when(client.getHost()).thenReturn("vulcan.net.pl"); Mockito.when(client.getPageByUrl(Mockito.anyString())).thenReturn(startPageDocument); - StudentAndParent snp = new StudentAndParent(client, null, null, null); + StudentAndParent snp = new StudentAndParent(client, null); Assert.assertEquals("https://uonetplus-opiekun.vulcan.net.pl/symbol/534213/Start/Index/", snp.getSnpHomePageUrl()); @@ -60,7 +56,7 @@ public class StudentAndParentTest { ); Mockito.when(client.getPageByUrl(Mockito.anyString())).thenReturn(wrongPageDocument); - StudentAndParent snp = new StudentAndParent(client, null, null, null); + StudentAndParent snp = new StudentAndParent(client, null); snp.getSnpHomePageUrl(); } @@ -68,7 +64,7 @@ public class StudentAndParentTest { @Test public void getExtractedIDStandardTest() throws Exception { Mockito.when(client.getHost()).thenReturn("vulcan.net.pl"); - StudentAndParent snp = new StudentAndParent(client, "symbol", null, null); + StudentAndParent snp = new StudentAndParent(client, "symbol"); Assert.assertEquals("123456", snp.getExtractedIdFromUrl("https://uonetplus-opiekun" + ".vulcan.net.pl/powiat/123456/Start/Index/")); } @@ -76,7 +72,7 @@ public class StudentAndParentTest { @Test public void getExtractedIDDemoTest() throws Exception { Mockito.when(client.getHost()).thenReturn("vulcan.net.pl"); - StudentAndParent snp = new StudentAndParent(client, "symbol", null, null); + StudentAndParent snp = new StudentAndParent(client, "symbol"); Assert.assertEquals("demo12345", snp.getExtractedIdFromUrl("https://uonetplus-opiekun.vulcan.net.pl/demoupowiat/demo12345/Start/Index/")); } @@ -84,73 +80,44 @@ public class StudentAndParentTest { @Test(expected = NotLoggedInErrorException.class) public void getExtractedIDNotLoggedTest() throws Exception { Mockito.when(client.getHost()).thenReturn("vulcan.net.pl"); - StudentAndParent snp = new StudentAndParent(client, "symbol", null, null); + StudentAndParent snp = new StudentAndParent(client, "symbol"); Assert.assertEquals("123", snp.getExtractedIdFromUrl("https://uonetplus.vulcan.net.pl/powiat/")); } @Test public void getSemestersTest() throws Exception { - SnP snp = new StudentAndParent(client, "123456", null, null); + SnP snp = new StudentAndParent(client, "123456"); List semesters = snp.getSemesters(); Assert.assertEquals(2, semesters.size()); - Assert.assertEquals("1", semesters.get(0).getName()); - Assert.assertEquals("1234", semesters.get(0).getId()); + Assert.assertEquals("1", semesters.get(0).getId()); + Assert.assertEquals("1234", semesters.get(0).getNumber()); Assert.assertFalse(semesters.get(0).isCurrent()); - Assert.assertEquals("2", semesters.get(1).getName()); - Assert.assertEquals("1235", semesters.get(1).getId()); + Assert.assertEquals("2", semesters.get(1).getId()); + Assert.assertEquals("1235", semesters.get(1).getNumber()); Assert.assertTrue(semesters.get(1).isCurrent()); } @Test - public void getCurrentSemesterTest() { + public void getCurrentSemesterTest() throws Exception { List semesters = new ArrayList<>(); - semesters.add(new Semester().setName("1500100900").setId("1").setCurrent(false)); - semesters.add(new Semester().setName("1500100901").setId("2").setCurrent(true)); + semesters.add(new Semester().setNumber("1500100900").setId("1").setCurrent(false)); + semesters.add(new Semester().setNumber("1500100901").setId("2").setCurrent(true)); - SnP snp = new StudentAndParent(client, "", null, null); - Semester semester = snp.getCurrent(semesters); - - Assert.assertTrue(semester.isCurrent()); - Assert.assertEquals("2", semester.getId()); - Assert.assertEquals("1500100901", semester.getName()); + SnP snp = new StudentAndParent(client, ""); + Assert.assertTrue(snp.getCurrentSemester(semesters).isCurrent()); + Assert.assertEquals("2", snp.getCurrentSemester(semesters).getId()); + Assert.assertEquals("1500100901", snp.getCurrentSemester(semesters).getNumber()); } @Test - public void getCurrentSemesterFromEmptyTest() { - SnP snp = new StudentAndParent(client, "", null, null); + public void getCurrentSemesterFromEmptyTest() throws Exception { + SnP snp = new StudentAndParent(client, ""); List semesters = new ArrayList<>(); - Assert.assertNull(snp.getCurrent(semesters)); - } - - @Test - public void getDiariesAndStudentTest() throws IOException, VulcanException { - Document snpHome = Jsoup.parse(FixtureHelper.getAsString( - getClass().getResourceAsStream("StudentAndParent.html"))); - - client = Mockito.mock(Client.class); - Mockito.when(client.getPageByUrl(Mockito.anyString())).thenReturn(snpHome); - SnP snp = new StudentAndParent(client, "", null, null); - - snp.setUp(); - - Assert.assertEquals("3Ti 2017", snp.getDiaries().get(0).getName()); - Assert.assertEquals("2Ti 2016", snp.getDiaries().get(1).getName()); - Assert.assertEquals("1Ti 2015", snp.getDiaries().get(2).getName()); - - Assert.assertEquals("1300", snp.getDiaries().get(0).getId()); - Assert.assertEquals("1200", snp.getDiaries().get(1).getId()); - Assert.assertEquals("1100", snp.getDiaries().get(2).getId()); - - Assert.assertTrue(snp.getDiaries().get(0).isCurrent()); - Assert.assertFalse(snp.getDiaries().get(1).isCurrent()); - Assert.assertFalse(snp.getDiaries().get(2).isCurrent()); - - Assert.assertEquals("Jan Kowal", snp.getStudents().get(0).getName()); - Assert.assertEquals("100", snp.getStudents().get(0).getId()); + Assert.assertNull(snp.getCurrentSemester(semesters)); } } diff --git a/api/src/test/java/io/github/wulkanowy/api/StudentAndParentTestCase.java b/api/src/test/java/io/github/wulkanowy/api/StudentAndParentTestCase.java index 8d32291f..b18076cf 100644 --- a/api/src/test/java/io/github/wulkanowy/api/StudentAndParentTestCase.java +++ b/api/src/test/java/io/github/wulkanowy/api/StudentAndParentTestCase.java @@ -16,7 +16,7 @@ public abstract class StudentAndParentTestCase { Mockito.when(snp.getSnPPageDocument(Mockito.anyString())) .thenReturn(tablePageDocument); Mockito.when(snp.getSemesters(Mockito.any(Document.class))).thenCallRealMethod(); - Mockito.when(snp.getCurrent(Mockito.anyList())) + Mockito.when(snp.getCurrentSemester(Mockito.anyList())) .thenCallRealMethod(); Mockito.when(snp.getRowDataChildValue(Mockito.any(Element.class), Mockito.anyInt())).thenCallRealMethod(); diff --git a/api/src/test/java/io/github/wulkanowy/api/VulcanTest.java b/api/src/test/java/io/github/wulkanowy/api/VulcanTest.java index 287935c0..bda66e8d 100644 --- a/api/src/test/java/io/github/wulkanowy/api/VulcanTest.java +++ b/api/src/test/java/io/github/wulkanowy/api/VulcanTest.java @@ -16,7 +16,7 @@ public class VulcanTest { @Test public void getClientTest() throws Exception { Vulcan vulcan = new Vulcan(); - vulcan.setCredentials("email", "password", "symbol", null, null, null); + vulcan.setCredentials("email", "password", "symbol", null); Assert.assertThat(vulcan.getClient(), CoreMatchers.instanceOf(Client.class)); } @@ -24,7 +24,7 @@ public class VulcanTest { @Test public void getClientTwiceTest() throws Exception { Vulcan vulcan = new Vulcan(); - vulcan.setCredentials("email", "password", "symbol", null, null, null); + vulcan.setCredentials("email", "password", "symbol", null); Assert.assertEquals(vulcan.getClient(), vulcan.getClient()); } diff --git a/api/src/test/java/io/github/wulkanowy/api/exams/ExamsWeekTest.java b/api/src/test/java/io/github/wulkanowy/api/exams/ExamsWeekTest.java index 0a99c465..9b57ddd6 100644 --- a/api/src/test/java/io/github/wulkanowy/api/exams/ExamsWeekTest.java +++ b/api/src/test/java/io/github/wulkanowy/api/exams/ExamsWeekTest.java @@ -12,25 +12,20 @@ public class ExamsWeekTest extends StudentAndParentTestCase { private ExamsWeek onePerDay; - private ExamsWeek empty; - @Before public void getCurrent() throws Exception { onePerDay = new ExamsWeek(getSnp("Sprawdziany-one-per-day.html")); - empty = new ExamsWeek(getSnp("Sprawdziany-empty.html")); } @Test public void getWeekTest() throws Exception { - Assert.assertEquals("2017-10-23", onePerDay.getCurrent().getStartDayDate()); - Assert.assertEquals("2018-04-30", empty.getCurrent().getStartDayDate()); + Assert.assertEquals("23.10.2017", onePerDay.getCurrent().getStartDayDate()); } @Test public void getDaysListTest() throws Exception { Assert.assertEquals(3, onePerDay.getCurrent().getDays().size()); Assert.assertEquals(7, onePerDay.getWeek("", false).getDays().size()); - Assert.assertEquals(0, empty.getCurrent().getDays().size()); } @Test @@ -50,18 +45,9 @@ public class ExamsWeekTest extends StudentAndParentTestCase { public void getDayDateTest() throws Exception { List dayList = onePerDay.getCurrent().getDays(); - Assert.assertEquals("2017-10-23", dayList.get(0).getDate()); - Assert.assertEquals("2017-10-24", dayList.get(1).getDate()); - Assert.assertEquals("2017-10-27", dayList.get(2).getDate()); - } - - @Test - public void getDayNameTest() throws Exception { - List dayList = onePerDay.getCurrent().getDays(); - - Assert.assertEquals("Poniedziałek", dayList.get(0).getDayName()); - Assert.assertEquals("Wtorek", dayList.get(1).getDayName()); - Assert.assertEquals("Piątek", dayList.get(2).getDayName()); + Assert.assertEquals("23.10.2017", dayList.get(0).getDate()); + Assert.assertEquals("24.10.2017", dayList.get(1).getDate()); + Assert.assertEquals("27.10.2017", dayList.get(2).getDate()); } @Test @@ -104,8 +90,8 @@ public class ExamsWeekTest extends StudentAndParentTestCase { public void getExamEntryDateTest() throws Exception { List dayList = onePerDay.getCurrent().getDays(); - Assert.assertEquals("2017-10-16", dayList.get(0).getExamList().get(0).getEntryDate()); - Assert.assertEquals("2017-10-17", dayList.get(1).getExamList().get(0).getEntryDate()); - Assert.assertEquals("2017-10-16", dayList.get(2).getExamList().get(0).getEntryDate()); + Assert.assertEquals("16.10.2017", dayList.get(0).getExamList().get(0).getEntryDate()); + Assert.assertEquals("17.10.2017", dayList.get(1).getExamList().get(0).getEntryDate()); + Assert.assertEquals("16.10.2017", dayList.get(2).getExamList().get(0).getEntryDate()); } } diff --git a/api/src/test/java/io/github/wulkanowy/api/grades/GradesListTest.java b/api/src/test/java/io/github/wulkanowy/api/grades/GradesListTest.java index 6eff84c9..bee5b4fe 100644 --- a/api/src/test/java/io/github/wulkanowy/api/grades/GradesListTest.java +++ b/api/src/test/java/io/github/wulkanowy/api/grades/GradesListTest.java @@ -19,7 +19,7 @@ public class GradesListTest extends StudentAndParentTestCase { @Test public void getAllTest() throws Exception { - Assert.assertEquals(7, filled.getAll().size()); // 2 items are skipped + Assert.assertEquals(6, filled.getAll().size()); // 2 items are skipped } @Test @@ -60,7 +60,6 @@ public class GradesListTest extends StudentAndParentTestCase { Assert.assertEquals("BW3", list.get(3).getSymbol()); Assert.assertEquals("STR", list.get(4).getSymbol()); Assert.assertEquals("K", list.get(5).getSymbol()); - Assert.assertEquals("+Odp", list.get(6).getSymbol()); } @Test @@ -71,7 +70,6 @@ public class GradesListTest extends StudentAndParentTestCase { Assert.assertEquals("Writing", list.get(3).getDescription()); Assert.assertEquals("", list.get(4).getDescription()); Assert.assertEquals("Kordian", list.get(5).getDescription()); - Assert.assertEquals("Kordian", list.get(6).getDescription()); } @Test @@ -103,4 +101,14 @@ public class GradesListTest extends StudentAndParentTestCase { Assert.assertEquals("Klaudia Dziedzic", list.get(4).getTeacher()); Assert.assertEquals("Amelia Stępień", list.get(5).getTeacher()); } + + @Test + public void getSemesterTest() throws Exception { + List list = filled.getAll(); + + Assert.assertEquals("7654321", list.get(0).getSemester()); + Assert.assertEquals("7654321", list.get(3).getSemester()); + Assert.assertEquals("7654321", list.get(4).getSemester()); + Assert.assertEquals("7654321", list.get(5).getSemester()); + } } diff --git a/api/src/test/java/io/github/wulkanowy/api/login/LoginTest.java b/api/src/test/java/io/github/wulkanowy/api/login/LoginTest.java index 4a4f8915..69118018 100644 --- a/api/src/test/java/io/github/wulkanowy/api/login/LoginTest.java +++ b/api/src/test/java/io/github/wulkanowy/api/login/LoginTest.java @@ -11,115 +11,86 @@ import io.github.wulkanowy.api.FixtureHelper; public class LoginTest { - private Document getFixtureAsDocument(String fixtureFileName) { - return Jsoup.parse(getFixtureAsString(fixtureFileName)); - } - private String getFixtureAsString(String fixtureFileName) { return FixtureHelper.getAsString(getClass().getResourceAsStream(fixtureFileName)); } private Client getClient(String fixtureFileName) throws Exception { - Document doc = getFixtureAsDocument(fixtureFileName); + Document doc = Jsoup.parse(getFixtureAsString(fixtureFileName)); Client client = Mockito.mock(Client.class); Mockito.when(client.postPageByUrl(Mockito.anyString(), Mockito.any(String[][].class))).thenReturn(doc); - Mockito.when(client.getPageByUrl(Mockito.anyString(), Mockito.anyBoolean())).thenReturn(doc); return client; } @Test public void loginTest() throws Exception { - Client client = getClient("Logowanie-success.html"); - Mockito.when(client.getPageByUrl(Mockito.anyString(), Mockito.anyBoolean())) - .thenReturn(getFixtureAsDocument("Logowanie-error.html")); - Mockito.when(client.postPageByUrl(Mockito.eq(Login.LOGIN_PAGE_URL), Mockito.any(String[][].class))) - .thenReturn(getFixtureAsDocument("Logowanie-certyfikat.html")); - Mockito.doCallRealMethod().when(client).setSymbol(Mockito.anyString()); - Mockito.when(client.getSymbol()).thenCallRealMethod(); - Login login = new Login(client); + Login login = new Login(getClient("Logowanie-success.html")); Assert.assertEquals("d123", login.login("a@a", "pswd", "d123")); } @Test(expected = BadCredentialsException.class) public void sendWrongCredentialsTest() throws Exception { - Client client = getClient("Logowanie-error.html"); - Mockito.when(client.getPageByUrl(Mockito.anyString(), Mockito.anyBoolean())) - .thenReturn(getFixtureAsDocument("Logowanie-error.html")); // -error.html because it html with form used by - Login login = new Login(client); + Login login = new Login(getClient("Logowanie-error.html")); - login.sendCredentials("a@a", "pswd"); + login.sendCredentials("a@a", "pswd", "d123"); } @Test public void sendCredentialsCertificateTest() throws Exception { - Client client = getClient("Logowanie-certyfikat.html"); - Mockito.when(client.getPageByUrl(Mockito.anyString(), Mockito.anyBoolean())) - .thenReturn(getFixtureAsDocument("Logowanie-error.html")); // -error.html because it html with form used by - Login login = new Login(client); + Login login = new Login(getClient("Logowanie-certyfikat.html")); Assert.assertEquals( - getFixtureAsString("cert-stock.xml").replaceAll("\\s+", ""), - login.sendCredentials("a@a", "passwd") - .select("input[name=wresult]") - .attr("value") - .replaceAll("\\s+", "") + getFixtureAsString("cert.xml").replaceAll("\\s+",""), + login.sendCredentials("a@a", "passwd", "d123").replaceAll("\\s+","") ); } @Test public void sendCertificateNotDefaultSymbolSuccessTest() throws Exception { - Client client = getClient("Logowanie-success.html"); - Mockito.doCallRealMethod().when(client).setSymbol(Mockito.anyString()); - Mockito.when(client.getSymbol()).thenCallRealMethod(); - Login login = new Login(client); + Login login = new Login(getClient("Logowanie-success.html")); - Assert.assertEquals("wulkanowyschool321", login.sendCertificate( - getFixtureAsDocument("Logowanie-certyfikat.html"), "wulkanowyschool321")); + Assert.assertEquals("wulkanowyschool321", + login.sendCertificate("", "wulkanowyschool321")); } @Test public void sendCertificateDefaultSymbolSuccessTest() throws Exception { - Client client = getClient("Logowanie-success.html"); - Mockito.doCallRealMethod().when(client).setSymbol(Mockito.anyString()); - Mockito.when(client.getSymbol()).thenCallRealMethod(); - Login login = new Login(client); + Login login = new Login(getClient("Logowanie-success.html")); Assert.assertEquals("demo12345", - login.sendCertificate(getFixtureAsDocument("Logowanie-certyfikat.html"), "Default")); + login.sendCertificate(getFixtureAsString("cert.xml"), "Default")); } @Test(expected = AccountPermissionException.class) public void sendCertificateAccountPermissionTest() throws Exception { - Client client = getClient("Logowanie-brak-dostepu.html"); + Login login = new Login(getClient("Logowanie-brak-dostepu.html")); - Login login = new Login(client); - - login.sendCertificate(getFixtureAsDocument("Logowanie-certyfikat.html"), "demo123"); + login.sendCertificate(getFixtureAsString("cert.xml"), "demo123"); } @Test(expected = LoginErrorException.class) public void sendCertificateLoginErrorTest() throws Exception { Login login = new Login(getClient("Logowanie-certyfikat.html")); // change to other document - login.sendCertificate(getFixtureAsDocument("Logowanie-certyfikat.html"), "demo123"); + login.sendCertificate(getFixtureAsString("cert.xml"), "demo123"); } @Test public void findSymbolInCertificateTest() throws Exception { Login login = new Login(getClient("Logowanie-certyfikat.html")); - String certificate = getFixtureAsString("cert-stock.xml"); + String certificate = getFixtureAsString("cert.xml"); Assert.assertEquals("demo12345", login.findSymbolInCertificate(certificate)); } - @Test(expected = AccountPermissionException.class) - public void findSymbolInCertificateWithoutSecondInstanceTest() throws Exception { + @Test + public void findSymbolInInvalidCertificateTest() throws Exception { Login login = new Login(getClient("Logowanie-certyfikat.html")); - login.findSymbolInCertificate(getFixtureAsString("cert-no-symbols.xml")); + Assert.assertEquals("", login.findSymbolInCertificate("")); // change to real cert with empty symbols } } diff --git a/api/src/test/java/io/github/wulkanowy/api/timetable/TimetableTest.java b/api/src/test/java/io/github/wulkanowy/api/timetable/TimetableTest.java index 8939b10f..65267634 100644 --- a/api/src/test/java/io/github/wulkanowy/api/timetable/TimetableTest.java +++ b/api/src/test/java/io/github/wulkanowy/api/timetable/TimetableTest.java @@ -83,11 +83,11 @@ public class TimetableTest extends StudentAndParentTestCase { @Test public void getLessonNumberTest() throws Exception { - Assert.assertEquals(2, std.getWeekTable().getDay(0).getLesson(1).getNumber()); - Assert.assertEquals(5, std.getWeekTable().getDay(2).getLesson(4).getNumber()); - Assert.assertEquals(0, full.getWeekTable().getDay(0).getLesson(0).getNumber()); - Assert.assertEquals(13, full.getWeekTable().getDay(4).getLesson(13).getNumber()); - Assert.assertEquals(3, holidays.getWeekTable().getDay(3).getLesson(3).getNumber()); + Assert.assertEquals("2", std.getWeekTable().getDay(0).getLesson(1).getNumber()); + Assert.assertEquals("5", std.getWeekTable().getDay(2).getLesson(4).getNumber()); + Assert.assertEquals("0", full.getWeekTable().getDay(0).getLesson(0).getNumber()); + Assert.assertEquals("13", full.getWeekTable().getDay(4).getLesson(13).getNumber()); + Assert.assertEquals("3", holidays.getWeekTable().getDay(3).getLesson(3).getNumber()); } @Test @@ -110,7 +110,6 @@ public class TimetableTest extends StudentAndParentTestCase { Assert.assertEquals("Uroczyste zakończenie roku szkolnego", full.getWeekTable().getDay(4).getLesson(0).getSubject()); Assert.assertEquals("Fizyka", full.getWeekTable().getDay(0).getLesson(0).getSubject()); Assert.assertEquals("Metodologia programowania", full.getWeekTable().getDay(1).getLesson(0).getSubject()); - Assert.assertEquals("Język niemiecki", full.getWeekTable().getDay(4).getLesson(2).getSubject()); Assert.assertEquals("", holidays.getWeekTable().getDay(3).getLesson(3).getSubject()); } @@ -123,7 +122,6 @@ public class TimetableTest extends StudentAndParentTestCase { Assert.assertEquals("Nowak Jadwiga", full.getWeekTable().getDay(2).getLesson(0).getTeacher()); Assert.assertEquals("Nowicka Irena", full.getWeekTable().getDay(3).getLesson(1).getTeacher()); Assert.assertEquals("Baran Małgorzata", full.getWeekTable().getDay(4).getLesson(0).getTeacher()); - Assert.assertEquals("", full.getWeekTable().getDay(4).getLesson(1).getTeacher()); Assert.assertEquals("", holidays.getWeekTable().getDay(3).getLesson(3).getTeacher()); } @@ -150,11 +148,7 @@ public class TimetableTest extends StudentAndParentTestCase { Assert.assertEquals("zastępstwo (poprzednio: Religia)", full.getWeekTable().getDay(2).getLesson(0).getDescription()); Assert.assertEquals("zastępstwo (poprzednio: Wychowanie fizyczne)", full.getWeekTable().getDay(3).getLesson(1).getDescription()); Assert.assertEquals("", full.getWeekTable().getDay(4).getLesson(0).getDescription()); - Assert.assertEquals("", full.getWeekTable().getDay(4).getLesson(1).getDescription()); - Assert.assertEquals("bez nawiasów (poprzednio: Religia)", full.getWeekTable().getDay(4).getLesson(3).getDescription()); - Assert.assertEquals("poprzednio: Wychowanie fizyczne", full.getWeekTable().getDay(4).getLesson(2).getDescription()); Assert.assertEquals("egzamin", full.getWeekTable().getDay(3).getLesson(0).getDescription()); - Assert.assertEquals("", full.getWeekTable().getDay(4).getLesson(1).getDescription()); Assert.assertEquals("", holidays.getWeekTable().getDay(3).getLesson(3).getDescription()); } @@ -243,8 +237,6 @@ public class TimetableTest extends StudentAndParentTestCase { Assert.assertTrue(full.getWeekTable().getDay(1).getLesson(2).isNewMovedInOrChanged()); Assert.assertTrue(full.getWeekTable().getDay(1).getLesson(3).isNewMovedInOrChanged()); Assert.assertTrue(full.getWeekTable().getDay(3).getLesson(1).isNewMovedInOrChanged()); - Assert.assertFalse(full.getWeekTable().getDay(4).getLesson(1).isNewMovedInOrChanged()); - Assert.assertTrue(full.getWeekTable().getDay(4).getLesson(2).isNewMovedInOrChanged()); Assert.assertFalse(holidays.getWeekTable().getDay(3).getLesson(3).isNewMovedInOrChanged()); } } diff --git a/api/src/test/resources/io/github/wulkanowy/api/OcenyWszystkie-semester.html b/api/src/test/resources/io/github/wulkanowy/api/OcenyWszystkie-semester.html index dc7c6c3b..f4b712c1 100644 --- a/api/src/test/resources/io/github/wulkanowy/api/OcenyWszystkie-semester.html +++ b/api/src/test/resources/io/github/wulkanowy/api/OcenyWszystkie-semester.html @@ -15,8 +15,7 @@ - - +
wersja: 17.05.0000.24042
diff --git a/api/src/test/resources/io/github/wulkanowy/api/StudentAndParent.html b/api/src/test/resources/io/github/wulkanowy/api/StudentAndParent.html deleted file mode 100644 index 66e2942f..00000000 --- a/api/src/test/resources/io/github/wulkanowy/api/StudentAndParent.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - - Witryna ucznia i rodzica – Strona główna - - -
    -
  • - - -
  • -
  • - - -
  • -
- -
wersja: 17.09.0008.26553
- - diff --git a/api/src/test/resources/io/github/wulkanowy/api/exams/Sprawdziany-empty.html b/api/src/test/resources/io/github/wulkanowy/api/exams/Sprawdziany-empty.html deleted file mode 100644 index bf1032b4..00000000 --- a/api/src/test/resources/io/github/wulkanowy/api/exams/Sprawdziany-empty.html +++ /dev/null @@ -1,19 +0,0 @@ - - - - - Witryna ucznia i rodzica – Terminarz sprawdzianów - - -
-

Sprawdziany

-

Tydzień 30.04.2018 - 06.05.2018

-

Nie zaplanowano żadnych sprawdzianów na wybrany tydzień

- -
-
wersja: 17.09.0009.26859
- - diff --git a/api/src/test/resources/io/github/wulkanowy/api/grades/OcenyWszystkie-filled.html b/api/src/test/resources/io/github/wulkanowy/api/grades/OcenyWszystkie-filled.html index d0cdb664..a229d1d5 100644 --- a/api/src/test/resources/io/github/wulkanowy/api/grades/OcenyWszystkie-filled.html +++ b/api/src/test/resources/io/github/wulkanowy/api/grades/OcenyWszystkie-filled.html @@ -100,14 +100,6 @@ 06.02.2017 Amelia Stępień - - Język polski - 5 - +Odp, Kordian - 5,00 - 11.05.2017 - Amelia Stępień - diff --git a/api/src/test/resources/io/github/wulkanowy/api/login/Logowanie-certyfikat.html b/api/src/test/resources/io/github/wulkanowy/api/login/Logowanie-certyfikat.html index f53a3485..a8496cd1 100644 --- a/api/src/test/resources/io/github/wulkanowy/api/login/Logowanie-certyfikat.html +++ b/api/src/test/resources/io/github/wulkanowy/api/login/Logowanie-certyfikat.html @@ -3,10 +3,10 @@ Working... -
+ - - + +