1
0
mirror of https://github.com/wulkanowy/wulkanowy.git synced 2024-09-19 20:09:09 -05:00

Migrate to new api (#155)

This commit is contained in:
Rafał Borcz 2018-08-26 00:18:31 +02:00 committed by Mikołaj Pich
parent 0e962c17c2
commit b617957891
224 changed files with 576 additions and 10426 deletions

View File

@ -89,28 +89,6 @@ jobs:
paths:
- "./app/build/jacoco"
api-test:
<<: *container_config
steps:
- *attach_workspace
- restore_cache:
<<: *general_cache_key
- run:
name: Run api tests
command: ./gradlew :api:test :api:jacocoTestReport --no-daemon --stacktrace --console=plain -PdisablePreDex
- run:
name: Upload code coverage to codecov
command: bash <(curl -s https://codecov.io/bash) -F api
- store_artifacts:
path: ./api/build/reports/
destination: reports/
- store_test_results:
path: ./api/build/test-results
- persist_to_workspace:
root: *workspace_root
paths:
- "./api/build/jacoco"
instrumented:
<<: *container_config
steps:
@ -202,12 +180,6 @@ workflows:
only: /.*/
requires:
- build
- api-test:
filters:
tags:
only: /.*/
requires:
- build
- instrumented:
filters:
tags:
@ -222,7 +194,6 @@ workflows:
- build
- lint
- app-test
- api-test
- instrumented
- deploy:
requires:

View File

@ -8,7 +8,6 @@
<option name="modules">
<set>
<option value="$PROJECT_DIR$" />
<option value="$PROJECT_DIR$/api" />
<option value="$PROJECT_DIR$/app" />
</set>
</option>

View File

@ -5,7 +5,6 @@
[![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)
[![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)
[![FOSSA Status](https://app.fossa.io/api/projects/custom%2B5644%2Fgit%40github.com%3Awulkanowy%2Fwulkanowy.git.svg?type=shield)](https://app.fossa.io/projects/custom%2B5644%2Fgit%40github.com%3Awulkanowy%2Fwulkanowy.git?ref=badge_shield)

View File

@ -1,121 +0,0 @@
apply plugin: 'java-library'
apply plugin: 'kotlin'
apply plugin: 'org.sonarqube'
apply plugin: 'jacoco'
apply plugin: 'com.jfrog.bintray'
apply plugin: 'com.github.dcendents.android-maven'
compileJava.options.encoding = "UTF-8"
compileTestJava.options.encoding = "UTF-8"
ext {
PUBLISH_GROUP_ID = GROUP_ID
PUBLISH_ARTIFACT_ID = 'api'
PUBLISH_VERSION = System.getenv('GIT_TAG')
}
test {
testLogging {
events "passed", "skipped", "failed", "standardOut", "standardError"
outputs.upToDateWhen {false}
showStandardStreams = true
}
}
jacocoTestReport {
reports {
xml.enabled true
}
}
dependencies {
implementation "org.jsoup:jsoup:$jsoup"
implementation "org.apache.commons:commons-lang3:$apacheLang"
implementation "com.google.code.gson:gson:$gson"
implementation "org.slf4j:slf4j-api:$slf4jApi"
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
testImplementation "junit:junit:$junit"
testImplementation "org.mockito:mockito-core:$mockito"
}
version = PUBLISH_VERSION
group = GROUP_ID
sonarqube {
properties {
property "sonar.projectName", GROUP_ID + ":api"
property "sonar.projectKey", GROUP_ID + ":wulkanowy-api"
}
}
def siteUrl = 'https://github.com/wulkanowy/wulkanowy'
def gitUrl = 'https://github.com/wulkanowy/wulkanowy.git'
bintray {
user = System.getenv('BINTRAY_USER')
key = System.getenv('BINTRAY_KEY')
configurations = ['archives']
pkg {
repo = 'wulkanowy'
name = 'api'
userOrg = 'wulkanowy'
licenses = ['Apache-2.0']
vcsUrl = gitUrl
labels = ['aar', 'android', 'wulkanowy', 'api']
publicDownloadNumbers = true
publish = true
version {
name = PUBLISH_VERSION
vcsTag = PUBLISH_VERSION
released = new Date()
}
}
}
install {
repositories.mavenInstaller {
pom {
project {
packaging 'aar'
name 'Bintray publish Gradle aar'
url siteUrl
licenses {
license {
name 'The Apache Software License, Version 2.0'
url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
}
}
developers {
developer {
id 'mklkj'
name 'Mikołaj Pich'
email 'm.pich@outlook.com'
}
}
scm {
connection gitUrl
developerConnection gitUrl
url siteUrl
}
}
}
}
}
task sourcesJar(type: Jar, dependsOn: classes) {
classifier = 'sources'
from sourceSets.main.allSource
}
task javadocJar(type: Jar, dependsOn: javadoc) {
classifier = 'javadoc'
from javadoc.destinationDir
}
artifacts {
archives sourcesJar
archives javadocJar
}

View File

@ -1,272 +0,0 @@
package io.github.wulkanowy.api;
import org.jsoup.Connection;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import io.github.wulkanowy.api.generic.School;
import io.github.wulkanowy.api.login.AccountPermissionException;
import io.github.wulkanowy.api.login.Login;
public class Client {
private String protocol = "https";
private String host = "vulcan.net.pl";
private String email;
private String password;
private String symbol;
private String schoolId;
private List<School> schools;
private List<String> symbols;
private Date lastSuccessRequest;
private Cookies cookies = new Cookies();
private static final Logger logger = LoggerFactory.getLogger(Client.class);
Client(String email, String password, String symbol, String schoolId) {
this.email = email;
this.password = password;
this.symbol = symbol;
this.schoolId = schoolId;
setFullEndpointInfo(email);
}
private void setFullEndpointInfo(String info) {
String[] creds = info.split("\\\\");
email = info;
if (creds.length > 2) {
String[] url = creds[0].split("://");
protocol = url[0];
String[] path = url[1].split("/");
host = path[0];
if (path.length > 1) {
symbol = path[1];
}
email = creds[2];
}
}
private void login() throws IOException, VulcanException {
if (isLoggedIn()) {
return;
}
logger.info("Not logged. Login...");
clearCookies();
new Login(this).login(email, password, symbol);
lastSuccessRequest = new Date();
logger.info("Login successful on {} at {}", getHost(), new Date());
}
private boolean isLoggedIn() {
logger.trace("Last success request: {}", lastSuccessRequest);
logger.trace("Cookies: {}", getCookies().size());
return getCookies().size() > 0 && lastSuccessRequest != null &&
5 > TimeUnit.MILLISECONDS.toMinutes(new Date().getTime() - lastSuccessRequest.getTime());
}
public String getSymbol() {
return symbol;
}
public void setSymbol(String symbol) {
this.symbol = symbol;
}
private Map<String, String> getCookies() {
return cookies.getItems();
}
public void clearCookies() {
cookies = new Cookies();
}
public String getHost() {
return host;
}
public void setSchools(List<School> schools) {
this.schools = schools;
this.schoolId = schools.get(0).getId();
}
public List<School> getSchools() throws IOException, VulcanException {
login();
return schools;
}
public void setSymbols(List<String> symbols) {
this.symbols = symbols;
}
public List<String> getSymbols() throws IOException, VulcanException {
try {
login();
} catch (AccountPermissionException e) {
// logger.error(e.getMessage(), e);
}
return symbols;
}
public String getSchoolId() throws IOException, VulcanException {
return schoolId != null ? schoolId : getSchools().get(0).getId();
}
String getFilledUrl(String url) {
return url
.replace("{schema}", protocol)
.replace("{host}", host)
.replace("{symbol}", symbol)
.replace("{ID}", schoolId != null ? schoolId : "");
}
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<String, String> cookies) throws IOException, VulcanException {
if (loginBefore) {
login();
}
if (null != cookies) {
this.cookies.addItems(cookies);
}
url = getFilledUrl(url);
logger.debug("GET {}", url);
Connection.Response response = Jsoup.connect(url)
.followRedirects(true)
.cookies(getCookies())
.execute();
this.cookies.addItems(response.cookies());
Document doc = checkForErrors(response.parse(), response.statusCode());
if (loginBefore) {
lastSuccessRequest = new Date();
}
return doc;
}
public synchronized Document postPageByUrl(String url, String[][] params) throws IOException, VulcanException {
url = getFilledUrl(url);
logger.debug("POST {}", url);
Connection connection = Jsoup.connect(url);
for (String[] data : params) {
connection.data(data[0], data[1]);
}
Connection.Response response = connection
.followRedirects(true)
.method(Connection.Method.POST)
.cookies(getCookies())
.execute();
this.cookies.addItems(response.cookies());
response.bufferUp(); // fixes cert parsing issues #109
return checkForErrors(response.parse(), response.statusCode());
}
public String getJsonStringByUrl(String url) throws IOException, VulcanException {
login();
url = getFilledUrl(url);
logger.debug("GET {}", url);
Connection.Response response = Jsoup.connect(url)
.followRedirects(true)
.ignoreContentType(true)
.cookies(getCookies())
.execute();
this.cookies.addItems(response.cookies());
return response.body();
}
public String postJsonStringByUrl(String url, String[][] params) throws IOException, VulcanException {
login();
url = getFilledUrl(url);
logger.debug("POST {}", url);
Connection connection = Jsoup.connect(url);
for (String[] data : params) {
connection.data(data[0], data[1]);
}
Connection.Response response = connection
.followRedirects(true)
.ignoreContentType(true)
.method(Connection.Method.POST)
.cookies(getCookies())
.execute();
this.cookies.addItems(response.cookies());
return response.body();
}
Document checkForErrors(Document doc, int code) throws VulcanException {
lastSuccessRequest = null;
String title = doc.select("title").text();
if ("Przerwa techniczna".equals(title)) {
throw new VulcanOfflineException(title);
}
String singIn = doc.select(".loginButton").text();
if ("Zaloguj się".equals(singIn)) {
throw new NotLoggedInErrorException(singIn);
}
if ("Błąd strony".equals(title)) {
throw new NotLoggedInErrorException(title + " " + doc.body() + ", status: " + code);
}
return doc;
}
}

View File

@ -1,17 +0,0 @@
package io.github.wulkanowy.api;
import java.util.HashMap;
import java.util.Map;
class Cookies {
private Map<String, String> jar = new HashMap<>();
Map<String, String> getItems() {
return jar;
}
void addItems(Map<String, String> items) {
jar.putAll(items);
}
}

View File

@ -1,54 +0,0 @@
package io.github.wulkanowy.api
import java.text.SimpleDateFormat
import java.util.*
const val LOG_DATE_PATTERN = "dd.MM.yyyy"
const val API_DATE_PATTERN = "yyyy-MM-dd"
const val TICKS_AT_EPOCH = 621355968000000000L
const val TICKS_PER_MILLISECOND = 10000
fun getFormattedDate(date: String?): String {
return getFormattedDate(date, API_DATE_PATTERN)
}
fun getFormattedDate(date: String?, format: String): String {
return getFormattedDate(date, LOG_DATE_PATTERN, format)
}
fun getFormattedDate(date: String?, fromFormat: String, toFormat: String): String {
if (date.isNullOrEmpty()) return ""
val sdf = SimpleDateFormat(fromFormat, Locale.ROOT)
val d = sdf.parse(date)
sdf.applyPattern(toFormat)
return sdf.format(d)
}
fun getDateAsTick(dateString: String?): String {
if (dateString.isNullOrEmpty()) {
return ""
}
return getDateAsTick(dateString as String, API_DATE_PATTERN).toString()
}
fun getDateAsTick(dateString: String, dateFormat: String): Long {
val format = SimpleDateFormat(dateFormat, Locale.ROOT)
format.timeZone = TimeZone.getTimeZone("UTC")
val dateObject = format.parse(dateString)
return getDateAsTick(dateObject)
}
fun getDateAsTick(date: Date): Long {
val calendar = Calendar.getInstance()
calendar.time = date
return calendar.timeInMillis * TICKS_PER_MILLISECOND + TICKS_AT_EPOCH
}
fun getDate(netTicks: Long): Date {
return Date((netTicks - TICKS_AT_EPOCH) / TICKS_PER_MILLISECOND)
}

View File

@ -1,8 +0,0 @@
package io.github.wulkanowy.api;
public class NotLoggedInErrorException extends VulcanException {
public NotLoggedInErrorException(String message) {
super(message);
}
}

View File

@ -1,35 +0,0 @@
package io.github.wulkanowy.api;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import java.io.IOException;
import java.util.List;
import io.github.wulkanowy.api.generic.Diary;
import io.github.wulkanowy.api.generic.ParamItem;
import io.github.wulkanowy.api.generic.Semester;
import io.github.wulkanowy.api.generic.Student;
public interface SnP {
void setDiaryID(String id);
String getStudentID();
List<Student> getStudents() throws IOException, VulcanException;
StudentAndParent setUp() throws IOException, VulcanException;
String getRowDataChildValue(Element e, int index);
Document getSnPPageDocument(String url) throws IOException, VulcanException;
List<Diary> getDiaries() throws IOException, VulcanException;
List<Semester> getSemesters() throws IOException, VulcanException;
List<Semester> getSemesters(Document gradesPage);
<T> T getCurrent(List<? extends ParamItem> list);
}

View File

@ -1,171 +0,0 @@
package io.github.wulkanowy.api;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import io.github.wulkanowy.api.generic.Diary;
import io.github.wulkanowy.api.generic.ParamItem;
import io.github.wulkanowy.api.generic.Semester;
import io.github.wulkanowy.api.generic.Student;
public class StudentAndParent implements SnP {
private static final String BASE_URL = "{schema}://uonetplus-opiekun.{host}/{symbol}/{ID}/";
private static final String GRADES_PAGE_URL = "Oceny/Wszystkie";
private Client client;
private String studentID;
private String diaryID;
private static final Logger logger = LoggerFactory.getLogger(StudentAndParent.class);
StudentAndParent(Client client, String studentID, String diaryID) {
this.client = client;
this.studentID = studentID;
this.diaryID = diaryID;
}
public StudentAndParent setUp() throws IOException, VulcanException {
if (null == getStudentID() || "".equals(getStudentID())) {
Document doc = client.getPageByUrl(BASE_URL);
if (doc.select("#idSection").isEmpty()) {
logger.error("Expected SnP page, got page with title: {} {}", doc.title(), doc.selectFirst("body"));
throw new VulcanException("Nieznany błąd podczas pobierania danych. Strona: " + doc.title());
}
Student student = getCurrent(getStudents(doc));
studentID = student.getId();
Diary diary = getCurrent(getDiaries(doc));
diaryID = diary.getId();
}
return this;
}
public String getStudentID() {
return studentID;
}
public String getRowDataChildValue(Element e, int index) {
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<String, String> cookies = new HashMap<>();
cookies.put("idBiezacyDziennik", diaryID);
cookies.put("idBiezacyUczen", studentID);
Document doc = client.getPageByUrl(BASE_URL + url, true, cookies);
if (!doc.title().startsWith("Witryna ucznia i rodzica")) {
logger.error("Expected SnP page, got page with title: {} {}", doc.title(), doc.selectFirst("body"));
throw new VulcanException("Nieznany błąd podczas pobierania danych. Strona: " + doc.title());
}
if (doc.title().endsWith("Strona główna")) {
throw new VulcanException("Sesja została nieprawidłowo zainicjowana");
}
return doc;
}
public List<Diary> getDiaries() throws IOException, VulcanException {
return getDiaries(client.getPageByUrl(BASE_URL));
}
private List<Diary> getDiaries(Document doc) throws IOException, VulcanException {
return getList(doc.select("#dziennikDropDownList option"), Diary.class);
}
public List<Student> getStudents() throws IOException, VulcanException {
return getStudents(client.getPageByUrl(BASE_URL));
}
private List<Student> getStudents(Document doc) throws IOException, VulcanException {
return getList(doc.select("#uczenDropDownList option"), Student.class);
}
public List<Semester> getSemesters() throws IOException, VulcanException {
return getSemesters(getSnPPageDocument(GRADES_PAGE_URL));
}
public List<Semester> getSemesters(Document gradesPage) {
Elements semesterOptions = gradesPage.select("#okresyKlasyfikacyjneDropDownList option");
List<Semester> semesters = new ArrayList<>();
for (Element e : semesterOptions) {
Semester semester = new Semester()
.setId(e.attr("value"))
.setName(e.text());
if (isCurrent(e)) {
semester.setCurrent(true);
}
semesters.add(semester);
}
return semesters;
}
@SuppressWarnings("unchecked")
private <T> List<T> getList(Elements options, Class<? extends ParamItem> type) throws IOException, VulcanException {
List<T> 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> T getCurrent(List<? extends ParamItem> list) {
ParamItem current = null;
for (ParamItem s : list) {
if (s.isCurrent()) {
current = s;
break;
}
}
return (T) current;
}
private boolean isCurrent(Element e) {
return "selected".equals(e.attr("selected"));
}
}

View File

@ -1,183 +0,0 @@
package io.github.wulkanowy.api;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.util.List;
import io.github.wulkanowy.api.attendance.Attendance;
import io.github.wulkanowy.api.attendance.AttendanceLesson;
import io.github.wulkanowy.api.attendance.AttendanceStatistics;
import io.github.wulkanowy.api.attendance.AttendanceTable;
import io.github.wulkanowy.api.exams.ExamEntry;
import io.github.wulkanowy.api.exams.Exams;
import io.github.wulkanowy.api.exams.ExamsWeek;
import io.github.wulkanowy.api.generic.School;
import io.github.wulkanowy.api.grades.GradeKt;
import io.github.wulkanowy.api.grades.Grades;
import io.github.wulkanowy.api.grades.GradesList;
import io.github.wulkanowy.api.grades.GradesSummary;
import io.github.wulkanowy.api.grades.SubjectsList;
import io.github.wulkanowy.api.grades.Summary;
import io.github.wulkanowy.api.homework.Homework;
import io.github.wulkanowy.api.homework.HomeworkList;
import io.github.wulkanowy.api.messages.Messages;
import io.github.wulkanowy.api.mobile.RegisterDevice;
import io.github.wulkanowy.api.mobile.RegisteredDevices;
import io.github.wulkanowy.api.notes.AchievementsList;
import io.github.wulkanowy.api.notes.NotesList;
import io.github.wulkanowy.api.school.SchoolInfo;
import io.github.wulkanowy.api.school.TeachersInfo;
import io.github.wulkanowy.api.timetable.Timetable;
import io.github.wulkanowy.api.timetable.TimetableKt;
import io.github.wulkanowy.api.timetable.TimetableLesson;
import io.github.wulkanowy.api.user.BasicInformation;
import io.github.wulkanowy.api.user.FamilyInformation;
public class Vulcan {
private SnP snp;
private Client client;
private String studentId;
private String diaryId;
private static final Logger logger = LoggerFactory.getLogger(Vulcan.class);
public void setCredentials(String email, String password, String symbol, String schoolId, String studentId, String diaryId) {
this.studentId = studentId;
this.diaryId = diaryId;
client = new Client(email, password, symbol, schoolId);
logger.debug("Client created with symbol " + symbol);
}
public Client getClient() throws NotLoggedInErrorException {
if (null == client) {
throw new NotLoggedInErrorException("Vulcan must be initialized by calling setCredentials() prior to fetch data");
}
return client;
}
public String getSymbol() throws NotLoggedInErrorException {
return getClient().getSymbol();
}
public List<School> getSchools() throws VulcanException, IOException {
return getClient().getSchools();
}
public List<String> getSymbols() throws VulcanException, IOException {
return getClient().getSymbols();
}
public SnP getStudentAndParent() throws VulcanException, IOException {
if (null != this.snp) {
return this.snp;
}
this.snp = new StudentAndParent(getClient(), studentId, diaryId)
.setUp();
return this.snp;
}
public void logout() {
client = null;
snp = null;
}
public List<AttendanceLesson> getAttendance(String dateStart) throws VulcanException, IOException {
return new Attendance(getStudentAndParent()).getAttendance(dateStart);
}
@Deprecated
public AttendanceTable getAttendanceTable() throws IOException, VulcanException {
return new AttendanceTable(getStudentAndParent());
}
public AttendanceStatistics getAttendanceStatistics() throws IOException, VulcanException {
return new AttendanceStatistics(getStudentAndParent());
}
public List<ExamEntry> getExams(String dateStart) throws VulcanException, IOException {
return new Exams(getStudentAndParent()).getExams(dateStart);
}
@Deprecated
public ExamsWeek getExamsList() throws IOException, VulcanException {
return new ExamsWeek(getStudentAndParent());
}
public List<GradeKt> getGrades(String semester) throws VulcanException, IOException {
return new Grades(getStudentAndParent()).getGrades(semester);
}
@Deprecated
public GradesList getGradesList() throws IOException, VulcanException {
return new GradesList(getStudentAndParent());
}
public List<Summary> getGradesSummary(String semester) throws VulcanException, IOException {
return new GradesSummary(getStudentAndParent()).getSummary(semester);
}
public List<Homework> getHomework(String date) throws VulcanException, IOException {
return new HomeworkList(getStudentAndParent()).getHomework(date);
}
@Deprecated
public SubjectsList getSubjectsList() throws IOException, VulcanException {
return new SubjectsList(getStudentAndParent());
}
public AchievementsList getAchievementsList() throws IOException, VulcanException {
return new AchievementsList(getStudentAndParent());
}
public NotesList getNotesList() throws IOException, VulcanException {
return new NotesList(getStudentAndParent());
}
public SchoolInfo getSchoolInfo() throws IOException, VulcanException {
return new SchoolInfo(getStudentAndParent());
}
public TeachersInfo getTeachersInfo() throws IOException, VulcanException {
return new TeachersInfo(getStudentAndParent());
}
public List<TimetableLesson> getTimetable(String dateStart) throws VulcanException, IOException {
return new TimetableKt(getStudentAndParent()).getTimetable(dateStart);
}
@Deprecated
public Timetable getTimetable() throws IOException, VulcanException {
return new Timetable(getStudentAndParent());
}
public BasicInformation getBasicInformation() throws IOException, VulcanException {
return new BasicInformation(getStudentAndParent());
}
public FamilyInformation getFamilyInformation() throws IOException, VulcanException {
return new FamilyInformation(getStudentAndParent());
}
public RegisteredDevices getRegisteredDevices() throws VulcanException, IOException {
return new RegisteredDevices(getStudentAndParent());
}
public RegisterDevice getRegisterDevice() throws VulcanException, IOException {
return new RegisterDevice(getStudentAndParent());
}
public Messages getMessages() throws VulcanException {
return new Messages(getClient());
}
}

View File

@ -1,12 +0,0 @@
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);
}
}

View File

@ -1,8 +0,0 @@
package io.github.wulkanowy.api;
public class VulcanOfflineException extends VulcanException {
VulcanOfflineException(String message) {
super(message);
}
}

View File

@ -1,69 +0,0 @@
package io.github.wulkanowy.api.attendance
import io.github.wulkanowy.api.SnP
import io.github.wulkanowy.api.getDateAsTick
import io.github.wulkanowy.api.getFormattedDate
import org.jsoup.nodes.Element
import org.jsoup.select.Elements
class Attendance(private val snp: SnP) {
fun getAttendance() = getAttendance("")
fun getAttendance(start: String): List<AttendanceLesson> {
val table = snp.getSnPPageDocument("Frekwencja.mvc?data=" + getDateAsTick(start))
.selectFirst(".mainContainer .presentData")
val days = getDays(table.select("thead th"))
return table.select("tbody tr").map {
val hours = it.select("td")
hours.drop(1).mapIndexed { i, item ->
getLesson(item, days[i], hours[0].text().toInt())
}
}.flatten().sortedBy {
it.date
}.filter {
it.subject.isNotBlank()
}
}
private fun getDays(el: Elements): List<String> {
return el.drop(1).map {
getFormattedDate(it.html().split("<br>")[1])
}
}
private fun getLesson(cell: Element, date: String, number: Int): AttendanceLesson {
val lesson = AttendanceLesson(number = number, date = date, subject = cell.select("span").text())
if (Types.CLASS_NOT_EXIST == cell.attr("class")) {
lesson.notExist = true
return lesson
}
when (cell.select("div").attr("class")) {
Types.CLASS_PRESENCE -> lesson.presence = true
Types.CLASS_ABSENCE_UNEXCUSED -> lesson.absenceUnexcused = true
Types.CLASS_ABSENCE_EXCUSED -> lesson.absenceExcused = true
Types.CLASS_ABSENCE_FOR_SCHOOL_REASONS -> lesson.absenceForSchoolReasons = true
Types.CLASS_UNEXCUSED_LATENESS -> lesson.unexcusedLateness = true
Types.CLASS_EXCUSED_LATENESS -> lesson.excusedLateness = true
Types.CLASS_EXEMPTION -> lesson.exemption = true
}
return lesson
}
private object Types {
const val CLASS_NOT_EXIST = "x-sp-nieobecny-w-oddziale"
const val CLASS_PRESENCE = "x-obecnosc"
const val CLASS_ABSENCE_UNEXCUSED = "x-nieobecnosc-nieuspr"
const val CLASS_ABSENCE_EXCUSED = "x-nieobecnosc-uspr"
const val CLASS_ABSENCE_FOR_SCHOOL_REASONS = "x-nieobecnosc-przycz-szkol"
const val CLASS_UNEXCUSED_LATENESS = "x-sp-nieusprawiedliwione"
const val CLASS_EXCUSED_LATENESS = "x-sp-spr"
const val CLASS_EXEMPTION = "x-sp-zwolnienie"
}
}

View File

@ -1,26 +0,0 @@
package io.github.wulkanowy.api.attendance
data class AttendanceLesson(
val number: Int,
val date: String,
val subject: String,
var notExist: Boolean = false,
var presence: Boolean = false,
var absenceUnexcused: Boolean = false,
var absenceExcused: Boolean = false,
var unexcusedLateness: Boolean = false,
var absenceForSchoolReasons: Boolean = false,
var excusedLateness: Boolean = false,
var exemption: Boolean = false
)

View File

@ -1,89 +0,0 @@
package io.github.wulkanowy.api.attendance;
import org.apache.commons.lang3.math.NumberUtils;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import io.github.wulkanowy.api.SnP;
import io.github.wulkanowy.api.VulcanException;
import io.github.wulkanowy.api.generic.Month;
import io.github.wulkanowy.api.generic.Subject;
public class AttendanceStatistics {
private SnP snp;
private String attendancePageUrl = "Frekwencja.mvc";
public AttendanceStatistics(SnP snp) {
this.snp = snp;
}
public Types getTypesTable() throws IOException, VulcanException {
return getTypesTable("");
}
public Types getTypesTable(String tick) throws IOException, VulcanException {
return getTypesTable(tick, -1);
}
public List<Subject> getSubjectList() throws IOException, VulcanException {
Element mainContainer = snp.getSnPPageDocument(attendancePageUrl)
.select(".mainContainer #idPrzedmiot").first();
List<Subject> subjectList = new ArrayList<>();
for (Element subject : mainContainer.select("option")) {
subjectList.add(new Subject()
.setId(Integer.parseInt(subject.attr("value")))
.setName(subject.text())
);
}
return subjectList;
}
public Types getTypesTable(String tick, Integer subjectId) throws IOException, VulcanException {
Element mainContainer = snp.getSnPPageDocument((attendancePageUrl
+ "?data={tick}&idPrzedmiot={subject}")
.replace("{tick}", tick)
.replace("{subject}", subjectId.toString())
).select(".mainContainer").first();
Element table = mainContainer.select("table:nth-of-type(2)").first();
Elements headerCells = table.select("thead th");
List<Type> typeList = new ArrayList<>();
Elements typesRows = table.select("tbody tr");
// fill types with months
for (Element row : typesRows) {
Elements monthsCells = row.select("td");
List<Month> monthList = new ArrayList<>();
// iterate over month in type, first column is empty, last is `total`; (0, n-1)
for (int i = 1; i < monthsCells.size() - 1; i++) {
monthList.add(new Month()
.setValue(NumberUtils.toInt(monthsCells.get(i).text(), 0))
.setName(headerCells.get(i).text()));
}
typeList.add(new Type()
.setTotal(NumberUtils.toInt(monthsCells.last().text(), 0))
.setName(monthsCells.get(0).text())
.setMonthList(monthList));
}
String total = mainContainer.select("h2").text().split(": ")[1];
return new Types()
.setTotal(NumberUtils.toDouble(total.replace("%", "").replace(",", ".")))
.setTypeList(typeList);
}
}

View File

@ -1,112 +0,0 @@
package io.github.wulkanowy.api.attendance;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
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;
import static io.github.wulkanowy.api.DateTimeUtilsKt.getDateAsTick;
import static io.github.wulkanowy.api.DateTimeUtilsKt.getFormattedDate;
@Deprecated
public class AttendanceTable {
private final static String ATTENDANCE_PAGE_URL = "Frekwencja.mvc?data=";
private SnP snp;
public AttendanceTable(SnP snp) {
this.snp = snp;
}
public Week<Day> getWeekTable() throws IOException, VulcanException {
return getWeekTable("");
}
public Week<Day> getWeekTable(String date) throws IOException, VulcanException {
Element table = snp.getSnPPageDocument(ATTENDANCE_PAGE_URL + getDateAsTick(date))
.select(".mainContainer .presentData").first();
Elements headerCells = table.select("thead th");
List<Day> days = new ArrayList<>();
for (int i = 1; i < headerCells.size(); i++) {
String[] dayHeaderCell = headerCells.get(i).html().split("<br>");
days.add(new Day()
.setDayName(dayHeaderCell[0])
.setDate(getFormattedDate(dayHeaderCell[1].trim()))
);
}
Elements hoursInDays = table.select("tbody tr");
// fill days in week with lessons
for (Element row : hoursInDays) {
Elements hours = row.select("td");
// fill hours in day
int size = hours.size();
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()));
addLessonDetails(lesson, hours.get(i));
days.get(i - 1).setLesson(lesson);
}
}
return new Week<Day>()
.setStartDayDate(days.get(0).getDate())
.setDays(days);
}
private void addLessonDetails(Lesson lesson, Element cell) {
lesson.setSubject(cell.select("span").text());
if (LessonTypes.CLASS_NOT_EXIST.equals(cell.attr("class"))) {
lesson.setNotExist(true);
lesson.setEmpty(true);
return;
}
switch (cell.select("div").attr("class")) {
case LessonTypes.CLASS_PRESENCE:
lesson.setPresence(true);
break;
case LessonTypes.CLASS_ABSENCE_UNEXCUSED:
lesson.setAbsenceUnexcused(true);
break;
case LessonTypes.CLASS_ABSENCE_EXCUSED:
lesson.setAbsenceExcused(true);
break;
case LessonTypes.CLASS_ABSENCE_FOR_SCHOOL_REASONS:
lesson.setAbsenceForSchoolReasons(true);
break;
case LessonTypes.CLASS_UNEXCUSED_LATENESS:
lesson.setUnexcusedLateness(true);
break;
case LessonTypes.CLASS_EXCUSED_LATENESS:
lesson.setExcusedLateness(true);
break;
case LessonTypes.CLASS_EXEMPTION:
lesson.setExemption(true);
break;
default:
lesson.setEmpty(true);
break;
}
}
}

View File

@ -1,25 +0,0 @@
package io.github.wulkanowy.api.attendance;
@Deprecated
class LessonTypes {
static final String CLASS_NOT_EXIST = "x-sp-nieobecny-w-oddziale";
static final String CLASS_PRESENCE = "x-obecnosc";
static final String CLASS_ABSENCE_UNEXCUSED = "x-nieobecnosc-nieuspr";
static final String CLASS_ABSENCE_EXCUSED = "x-nieobecnosc-uspr";
static final String CLASS_ABSENCE_FOR_SCHOOL_REASONS = "x-nieobecnosc-przycz-szkol";
static final String CLASS_UNEXCUSED_LATENESS = "x-sp-nieusprawiedliwione";
static final String CLASS_EXCUSED_LATENESS = "x-sp-spr";
static final String CLASS_EXEMPTION = "x-sp-zwolnienie";
private LessonTypes() {
throw new IllegalStateException("Utility class");
}
}

View File

@ -1,42 +0,0 @@
package io.github.wulkanowy.api.attendance;
import java.util.ArrayList;
import java.util.List;
import io.github.wulkanowy.api.generic.Month;
public class Type {
private String name = "";
private int total = 0;
private List<Month> monthList = new ArrayList<>();
public String getName() {
return name;
}
public Type setName(String name) {
this.name = name;
return this;
}
public int getTotal() {
return total;
}
public Type setTotal(int total) {
this.total = total;
return this;
}
public List<Month> getMonthList() {
return monthList;
}
public Type setMonthList(List<Month> monthList) {
this.monthList = monthList;
return this;
}
}

View File

@ -1,29 +0,0 @@
package io.github.wulkanowy.api.attendance;
import java.util.ArrayList;
import java.util.List;
public class Types {
private double total = 0;
private List<Type> typeList = new ArrayList<>();
public double getTotal() {
return total;
}
public Types setTotal(double total) {
this.total = total;
return this;
}
public List<Type> getTypeList() {
return typeList;
}
public Types setTypeList(List<Type> typeList) {
this.typeList = typeList;
return this;
}
}

View File

@ -1,60 +0,0 @@
package io.github.wulkanowy.api.exams;
@Deprecated
public class Exam {
private String subjectAndGroup = "";
private String type = "";
private String description = "";
private String teacher = "";
private String entryDate = "";
public String getSubjectAndGroup() {
return subjectAndGroup;
}
public Exam setSubjectAndGroup(String subjectAndGroup) {
this.subjectAndGroup = subjectAndGroup;
return this;
}
public String getType() {
return type;
}
public Exam setType(String type) {
this.type = type;
return this;
}
public String getDescription() {
return description;
}
public Exam setDescription(String description) {
this.description = description;
return this;
}
public String getTeacher() {
return teacher;
}
public Exam setTeacher(String teacher) {
this.teacher = teacher;
return this;
}
public String getEntryDate() {
return entryDate;
}
public Exam setEntryDate(String entryDate) {
this.entryDate = entryDate;
return this;
}
}

View File

@ -1,20 +0,0 @@
package io.github.wulkanowy.api.exams;
import java.util.ArrayList;
import java.util.List;
import io.github.wulkanowy.api.generic.Day;
@Deprecated
public class ExamDay extends Day {
private List<Exam> examList = new ArrayList<>();
public List<Exam> getExamList() {
return examList;
}
public void addExam(Exam exam) {
this.examList.add(exam);
}
}

View File

@ -1,20 +0,0 @@
package io.github.wulkanowy.api.exams
data class ExamEntry(
val date: String,
val entryDate: String,
val subject: String,
val group: String,
val type: String,
val description: String,
val teacher: String,
val teacherSymbol: String
)

View File

@ -1,40 +0,0 @@
package io.github.wulkanowy.api.exams
import io.github.wulkanowy.api.SnP
import io.github.wulkanowy.api.getDateAsTick
import io.github.wulkanowy.api.getFormattedDate
import org.jsoup.nodes.Element
class Exams(private val snp: SnP) {
fun getExams() = getExams("")
fun getExams(start: String): List<ExamEntry> {
return snp.getSnPPageDocument("Sprawdziany.mvc/Terminarz?rodzajWidoku=2&data=" + getDateAsTick(start))
.select(".mainContainer > div:not(.navigation)").map {
val date = getFormattedDate(it.selectFirst("h2")?.text()?.split(", ")?.last()?.trim())
it.select("article").mapIndexed { _, element -> getExam(element, date) }
}.flatten()
}
private fun getExam(e: Element, date: String): ExamEntry {
val subjectAndGroup = snp.getRowDataChildValue(e, 1)
val groupAndClass = subjectAndGroup.split(" ").last()
val group = if (groupAndClass.contains("|")) groupAndClass.split("|").last() else ""
val teacherAndDate = snp.getRowDataChildValue(e, 4).split(", ")
val teacherSymbol = teacherAndDate.first().split(" ").last().removeSurrounding("[", "]")
val teacher = teacherAndDate.first().replace(" [$teacherSymbol]", "")
return ExamEntry(
date = date,
entryDate = getFormattedDate(teacherAndDate.last()),
subject = subjectAndGroup.replace(groupAndClass, "").trim(),
group = group,
type = snp.getRowDataChildValue(e, 2),
description = snp.getRowDataChildValue(e, 3),
teacher = teacher,
teacherSymbol = teacherSymbol
)
}
}

View File

@ -1,74 +0,0 @@
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.util.ArrayList;
import java.util.List;
import io.github.wulkanowy.api.SnP;
import io.github.wulkanowy.api.VulcanException;
import io.github.wulkanowy.api.generic.Week;
import static io.github.wulkanowy.api.DateTimeUtilsKt.getDateAsTick;
import static io.github.wulkanowy.api.DateTimeUtilsKt.getFormattedDate;
@Deprecated
public class ExamsWeek {
private static final String EXAMS_PAGE_URL = "Sprawdziany.mvc/Terminarz?rodzajWidoku=2&data=";
private final SnP snp;
public ExamsWeek(SnP snp) {
this.snp = snp;
}
public Week<ExamDay> getCurrent() throws IOException, VulcanException {
return getWeek("", true);
}
public Week<ExamDay> getWeek(String date, final boolean onlyNotEmpty) throws IOException, VulcanException {
Document examsPage = snp.getSnPPageDocument(EXAMS_PAGE_URL + getDateAsTick(date));
Elements examsDays = examsPage.select(".mainContainer > div:not(.navigation)");
List<ExamDay> days = new ArrayList<>();
for (Element item : examsDays) {
ExamDay day = new ExamDay();
Element dayHeading = item.select("h2").first();
if (null == dayHeading && onlyNotEmpty) {
continue;
}
if (null != dayHeading) {
String[] dateHeader = dayHeading.text().split(", ");
day.setDayName(StringUtils.capitalize(dateHeader[0]));
day.setDate(getFormattedDate(dateHeader[1]));
}
Elements exams = item.select("article");
for (Element e : exams) {
day.addExam(new Exam()
.setSubjectAndGroup(snp.getRowDataChildValue(e, 1))
.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]))
);
}
days.add(day);
}
return new Week<ExamDay>()
.setStartDayDate(getFormattedDate(examsPage.select(".mainContainer > h2")
.first().text().split(" ")[1]))
.setDays(days);
}
}

View File

@ -1,45 +0,0 @@
package io.github.wulkanowy.api.generic;
import java.util.ArrayList;
import java.util.List;
@Deprecated
public class Day {
private List<Lesson> lessons = new ArrayList<>();
protected String date = "";
private String dayName = "";
public Lesson getLesson(int index) {
return lessons.get(index);
}
public List<Lesson> getLessons() {
return lessons;
}
public Day setLesson(Lesson lesson) {
this.lessons.add(lesson);
return this;
}
public String getDate() {
return date;
}
public Day setDate(String date) {
this.date = date;
return this;
}
public String getDayName() {
return dayName;
}
public Day setDayName(String dayName) {
this.dayName = dayName;
return this;
}
}

View File

@ -1,38 +0,0 @@
package io.github.wulkanowy.api.generic;
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;
}
}

View File

@ -1,242 +0,0 @@
package io.github.wulkanowy.api.generic;
@Deprecated
public class Lesson {
private int number = 0;
private String subject = "";
private String teacher = "";
private String room = "";
private String description = "";
private String groupName = "";
private String startTime = "";
private String endTime = "";
private String date = "";
private boolean isEmpty = false;
private boolean isDivisionIntoGroups = false;
private boolean isPlanning = false;
private boolean isRealized = false;
private boolean isMovedOrCanceled = false;
private boolean isNewMovedInOrChanged = false;
private boolean isNotExist = false;
private boolean isPresence = false;
private boolean isAbsenceUnexcused = false;
private boolean isAbsenceExcused = false;
private boolean isUnexcusedLateness = false;
private boolean isAbsenceForSchoolReasons = false;
private boolean isExcusedLateness = false;
private boolean isExemption = false;
public int getNumber() {
return number;
}
public Lesson setNumber(int number) {
this.number = number;
return this;
}
public String getSubject() {
return subject;
}
public Lesson setSubject(String subject) {
this.subject = subject;
return this;
}
public String getTeacher() {
return teacher;
}
public Lesson setTeacher(String teacher) {
this.teacher = teacher;
return this;
}
public String getRoom() {
return room;
}
public Lesson setRoom(String room) {
this.room = room;
return this;
}
public String getDescription() {
return description;
}
public Lesson setDescription(String description) {
this.description = description;
return this;
}
public String getGroupName() {
return groupName;
}
public void setGroupName(String groupName) {
this.groupName = groupName;
}
public String getStartTime() {
return startTime;
}
public void setStartTime(String startTime) {
this.startTime = startTime;
}
public String getEndTime() {
return endTime;
}
public void setEndTime(String endTime) {
this.endTime = endTime;
}
public String getDate() {
return date;
}
public Lesson setDate(String date) {
this.date = date;
return this;
}
public boolean isEmpty() {
return isEmpty;
}
public Lesson setEmpty(boolean empty) {
isEmpty = empty;
return this;
}
public boolean isDivisionIntoGroups() {
return isDivisionIntoGroups;
}
public void setDivisionIntoGroups(boolean divisionIntoGroups) {
isDivisionIntoGroups = divisionIntoGroups;
}
public boolean isPlanning() {
return isPlanning;
}
public void setPlanning(boolean planning) {
isPlanning = planning;
}
public boolean isRealized() {
return isRealized;
}
public void setRealized(boolean realized) {
isRealized = realized;
}
public boolean isMovedOrCanceled() {
return isMovedOrCanceled;
}
public void setMovedOrCanceled(boolean movedOrCanceled) {
isMovedOrCanceled = movedOrCanceled;
}
public boolean isNewMovedInOrChanged() {
return isNewMovedInOrChanged;
}
public void setNewMovedInOrChanged(boolean newMovedInOrChanged) {
isNewMovedInOrChanged = newMovedInOrChanged;
}
public boolean isNotExist() {
return isNotExist;
}
public void setNotExist(boolean notExist) {
isNotExist = notExist;
}
public boolean isPresence() {
return isPresence;
}
public void setPresence(boolean presence) {
isPresence = presence;
}
public boolean isAbsenceUnexcused() {
return isAbsenceUnexcused;
}
public void setAbsenceUnexcused(boolean absenceUnexcused) {
isAbsenceUnexcused = absenceUnexcused;
}
public boolean isAbsenceExcused() {
return isAbsenceExcused;
}
public void setAbsenceExcused(boolean absenceExcused) {
isAbsenceExcused = absenceExcused;
}
public boolean isUnexcusedLateness() {
return isUnexcusedLateness;
}
public void setUnexcusedLateness(boolean unexcusedLateness) {
isUnexcusedLateness = unexcusedLateness;
}
public boolean isAbsenceForSchoolReasons() {
return isAbsenceForSchoolReasons;
}
public void setAbsenceForSchoolReasons(boolean absenceForSchoolReasons) {
isAbsenceForSchoolReasons = absenceForSchoolReasons;
}
public boolean isExcusedLateness() {
return isExcusedLateness;
}
public void setExcusedLateness(boolean excusedLateness) {
isExcusedLateness = excusedLateness;
}
public boolean isExemption() {
return isExemption;
}
public void setExemption(boolean exemption) {
isExemption = exemption;
}
}

View File

@ -1,26 +0,0 @@
package io.github.wulkanowy.api.generic;
public class Month {
private String name = "";
private int value = 0;
public String getName() {
return name;
}
public Month setName(String name) {
this.name = name;
return this;
}
public int getValue() {
return value;
}
public Month setValue(int value) {
this.value = value;
return this;
}
}

View File

@ -1,12 +0,0 @@
package io.github.wulkanowy.api.generic;
public interface ParamItem {
ParamItem setId(String id);
ParamItem setName(String name);
ParamItem setCurrent(boolean isCurrent);
boolean isCurrent();
}

View File

@ -1,7 +0,0 @@
package io.github.wulkanowy.api.generic
data class School(
val name: String,
val id: String,
val current: Boolean
)

View File

@ -1,37 +0,0 @@
package io.github.wulkanowy.api.generic;
public class Semester implements ParamItem {
private String id = "";
private String name = "";
private boolean current = false;
public String getId() {
return id;
}
public Semester setId(String id) {
this.id = id;
return this;
}
public String getName() {
return name;
}
public Semester setName(String number) {
this.name = number;
return this;
}
public boolean isCurrent() {
return current;
}
public Semester setCurrent(boolean current) {
this.current = current;
return this;
}
}

View File

@ -1,37 +0,0 @@
package io.github.wulkanowy.api.generic;
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;
}
}

View File

@ -1,26 +0,0 @@
package io.github.wulkanowy.api.generic;
public class Subject {
private int id = -1;
private String name = "";
public int getId() {
return id;
}
public Subject setId(int id) {
this.id = id;
return this;
}
public String getName() {
return name;
}
public Subject setName(String name) {
this.name = name;
return this;
}
}

View File

@ -1,34 +0,0 @@
package io.github.wulkanowy.api.generic;
import java.util.ArrayList;
import java.util.List;
@Deprecated
public class Week<T> {
private List<T> days = new ArrayList<>();
private String startDayDate = "";
public T getDay(int index) {
return days.get(index);
}
public List<T> getDays() {
return days;
}
public Week<T> setDays(List<T> days) {
this.days = days;
return this;
}
public String getStartDayDate() {
return startDayDate;
}
public Week<T> setStartDayDate(String startDayDate) {
this.startDayDate = startDayDate;
return this;
}
}

View File

@ -1,101 +0,0 @@
package io.github.wulkanowy.api.grades;
@Deprecated
public class Grade {
protected String value = "";
private String subject = "";
private String color = "";
private String symbol = "";
private String description = "";
private String weight = "";
private String date = "";
private String teacher = "";
public String getSubject() {
return subject;
}
public Grade setSubject(String subject) {
this.subject = subject;
return this;
}
public String getValue() {
return value;
}
public Grade setValue(String value) {
this.value = value;
return this;
}
public String getColor() {
return color;
}
public Grade setColor(String color) {
this.color = color;
return this;
}
public String getSymbol() {
return symbol;
}
public Grade setSymbol(String symbol) {
this.symbol = symbol;
return this;
}
public String getDescription() {
return description;
}
public Grade setDescription(String description) {
this.description = description;
return this;
}
public String getWeight() {
return weight;
}
public Grade setWeight(String weight) {
this.weight = weight;
return this;
}
public String getDate() {
return date;
}
public Grade setDate(String date) {
this.date = date;
return this;
}
public String getTeacher() {
return teacher;
}
public Grade setTeacher(String teacher) {
this.teacher = teacher;
return this;
}
}

View File

@ -1,20 +0,0 @@
package io.github.wulkanowy.api.grades
data class GradeKt(
val subject: String,
val value: String,
val color: String,
val symbol: String,
val description: String,
val weight: String,
val date: String,
val teacher: String
)

View File

@ -1,45 +0,0 @@
package io.github.wulkanowy.api.grades
import io.github.wulkanowy.api.SnP
import io.github.wulkanowy.api.getFormattedDate
import org.jsoup.nodes.Element
import java.util.regex.Pattern
class Grades(private val snp: SnP) {
private val colorPattern by lazy { Pattern.compile("#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})") }
fun getGrades() = getGrades("")
fun getGrades(semester: String): List<GradeKt> {
return snp.getSnPPageDocument("Oceny/Wszystkie?details=2&okres=$semester")
.select(".ocenySzczegoly-table > tbody > tr").map { getGrade(it) }.filter {
it.value != "Brak ocen"
}
}
private fun getGrade(e: Element): GradeKt {
val tds = e.select("td")
val symbol = tds[2].text().split(", ").first()
return GradeKt(
subject = tds[0].text(),
value = tds[1].text(),
color = getColor(tds[1].select(".ocenaCzastkowa").attr("style")),
symbol = symbol,
description = tds[2].text().replaceFirst(symbol, "").replaceFirst(", ", ""),
weight = tds[3].text(),
date = getFormattedDate(tds[4].text()),
teacher = tds[5].text()
)
}
private fun getColor(styleAttr: String): String {
val matcher = colorPattern.matcher(styleAttr)
while (matcher.find()) {
return matcher.group(1)
}
return ""
}
}

View File

@ -1,76 +0,0 @@
package io.github.wulkanowy.api.grades;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import io.github.wulkanowy.api.SnP;
import io.github.wulkanowy.api.VulcanException;
import static io.github.wulkanowy.api.DateTimeUtilsKt.getFormattedDate;
@Deprecated
public class GradesList {
private static final String GRADES_PAGE_URL = "Oceny/Wszystkie?details=2&okres=";
private SnP snp;
public GradesList(SnP snp) {
this.snp = snp;
}
public List<Grade> getAll(String semester) throws IOException, VulcanException {
Document gradesPage = snp.getSnPPageDocument(GRADES_PAGE_URL + semester);
Elements gradesRows = gradesPage.select(".ocenySzczegoly-table > tbody > tr");
List<Grade> grades = new ArrayList<>();
for (Element row : gradesRows) {
if ("Brak ocen".equals(row.select("td:nth-child(2)").text())) {
continue;
}
grades.add(getGrade(row));
}
return grades;
}
private Grade getGrade(Element row) {
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 = getFormattedDate(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;
}
}

View File

@ -1,22 +0,0 @@
package io.github.wulkanowy.api.grades
import io.github.wulkanowy.api.SnP
class GradesSummary(private val snp: SnP) {
fun getSummary() = getSummary("")
fun getSummary(semester: String): List<Summary> {
val subjects = snp.getSnPPageDocument("Oceny/Wszystkie?details=2&okres=$semester")
.select(".ocenyZwykle-table > tbody > tr")
return subjects.map {
val tds = it.select("td")
Summary(
name = tds[0].text(),
predicted = tds[tds.size - 2].text(),
final = tds[tds.size - 1].text()
)
}
}
}

View File

@ -1,41 +0,0 @@
package io.github.wulkanowy.api.grades;
@Deprecated
public class Subject {
private String name;
private String predictedRating;
private String finalRating;
public String getName() {
return name;
}
public Subject setName(String name) {
this.name = name;
return this;
}
public String getPredictedRating() {
return predictedRating;
}
public Subject setPredictedRating(String predictedRating) {
this.predictedRating = predictedRating;
return this;
}
public String getFinalRating() {
return finalRating;
}
public Subject setFinalRating(String finalRating) {
this.finalRating = finalRating;
return this;
}
}

View File

@ -1,47 +0,0 @@
package io.github.wulkanowy.api.grades;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import io.github.wulkanowy.api.SnP;
import io.github.wulkanowy.api.VulcanException;
@Deprecated
public class SubjectsList {
private static final String SUBJECTS_PAGE_URL = "Oceny/Wszystkie?details=1&okres=";
private SnP snp;
public SubjectsList(SnP snp) {
this.snp = snp;
}
public List<Subject> getAll() throws IOException, VulcanException {
return getAll("");
}
public List<Subject> getAll(String semester) throws IOException, VulcanException {
Document subjectPage = snp.getSnPPageDocument(SUBJECTS_PAGE_URL + semester);
Elements rows = subjectPage.select(".ocenyZwykle-table > tbody > tr");
List<Subject> subjects = new ArrayList<>();
for (Element subjectRow : rows) {
subjects.add(new Subject()
.setName(subjectRow.select("td:nth-child(1)").text())
.setPredictedRating(subjectRow.select("td:nth-last-child(2)").text())
.setFinalRating(subjectRow.select("td:nth-last-child(1)").text())
);
}
return subjects;
}
}

View File

@ -1,10 +0,0 @@
package io.github.wulkanowy.api.grades
data class Summary(
val name: String,
val predicted: String,
val final: String
)

View File

@ -1,16 +0,0 @@
package io.github.wulkanowy.api.homework
data class Homework(
val date: String,
val subject: String,
val content: String,
val teacher: String,
val teacherSymbol: String,
val entryDate: String
)

View File

@ -1,28 +0,0 @@
package io.github.wulkanowy.api.homework
import io.github.wulkanowy.api.SnP
import io.github.wulkanowy.api.getDateAsTick
import io.github.wulkanowy.api.getFormattedDate
import org.jsoup.nodes.Element
class HomeworkList(private val snp: SnP) {
fun getHomework(date: String = ""): List<Homework> {
return snp.getSnPPageDocument("ZadaniaDomowe.mvc?data=${getDateAsTick(date)}&rodzajWidoku=Dzien")
.select(".mainContainer article").map {
getItem(it, date)
}
}
private fun getItem(e: Element, date: String): Homework {
val teacherAndDate = snp.getRowDataChildValue(e, 3).split(", ")
return Homework(
date = date,
subject = snp.getRowDataChildValue(e, 1),
teacher = teacherAndDate.first().split(" [").first(),
teacherSymbol = teacherAndDate.first().split(" [").last().replace("]", ""),
content = snp.getRowDataChildValue(e, 2),
entryDate = getFormattedDate(teacherAndDate.last())
)
}
}

View File

@ -1,10 +0,0 @@
package io.github.wulkanowy.api.login;
import io.github.wulkanowy.api.VulcanException;
public class AccountPermissionException extends VulcanException {
AccountPermissionException(String message) {
super(message);
}
}

View File

@ -1,10 +0,0 @@
package io.github.wulkanowy.api.login;
import io.github.wulkanowy.api.VulcanException;
public class BadCredentialsException extends VulcanException {
BadCredentialsException(String message) {
super(message);
}
}

View File

@ -1,162 +0,0 @@
package io.github.wulkanowy.api.login;
import org.apache.commons.lang3.StringUtils;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.parser.Parser;
import org.jsoup.select.Elements;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import io.github.wulkanowy.api.Client;
import io.github.wulkanowy.api.NotLoggedInErrorException;
import io.github.wulkanowy.api.VulcanException;
public class Login {
protected static final String LOGIN_PAGE_URL = "{schema}://cufs.{host}/{symbol}/Account/LogOn";
private static final String LOGIN_PAGE_URL_QUERY = "?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 Client client;
private static final Logger logger = LoggerFactory.getLogger(Login.class);
public Login(Client client) {
this.client = client;
}
public void login(String email, String password, String symbol) throws VulcanException, IOException {
Document certDoc = sendCredentials(email, password);
if ("Błąd".equals(certDoc.title())) {
client.clearCookies();
throw new NotLoggedInErrorException(certDoc.body().text());
}
sendCertificate(certDoc, symbol);
}
Document sendCredentials(String email, String password) throws IOException, VulcanException {
String[][] credentials = new String[][]{
{"LoginName", email},
{"Password", password}
};
Document nextDoc = sendCredentialsData(credentials, LOGIN_PAGE_URL + LOGIN_PAGE_URL_QUERY.replace(":", "%253A"));
Element errorMessage = nextDoc.selectFirst(".ErrorMessage, #ErrorTextLabel");
if (null != errorMessage) {
throw new BadCredentialsException(errorMessage.text());
}
return nextDoc;
}
private Document sendCredentialsData(String[][] credentials, String nextUrl) throws IOException, VulcanException {
Element formFirst = client.getPageByUrl(nextUrl, false).selectFirst("#form1");
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},
};
}
void 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
logger.info("ADFS login");
title = sendCertData(targetDoc).title();
}
if ("Logowanie".equals(title)) {
throw new AccountPermissionException("No account access. Try another symbol");
}
if (!"Uonet+".equals(title)) {
logger.debug("Login failed. Body: {}", targetDoc.body());
throw new LoginErrorException("Expected page title `UONET+`, got " + title);
}
client.setSchools(new StartPage(client).getSchools(targetDoc));
}
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 {
List<String> symbols = getSymbolsFromCertificate(certificate);
client.setSymbols(symbols);
if ("Default".equals(symbol)) {
return getLastSymbol(symbols);
}
return symbol;
}
List<String> getSymbolsFromCertificate(String certificate) {
Elements instances = Jsoup
.parse(certificate.replaceAll(":", ""), "", Parser.xmlParser())
.select("[AttributeName=\"UserInstance\"] samlAttributeValue");
List<String> symbols = new ArrayList<>();
for (Element e : instances) {
symbols.add(e.text());
}
return symbols;
}
String getLastSymbol(List<String> symbols) throws AccountPermissionException {
if (symbols.isEmpty()) { // on adfs login
return "";
}
if (symbols.size() < 2) { // 1st index is always `Default`
throw new AccountPermissionException("First login detected, specify symbol");
}
return StringUtils.stripAccents(symbols.get(1).replaceAll("\\s", ""));
}
}

View File

@ -1,10 +0,0 @@
package io.github.wulkanowy.api.login;
import io.github.wulkanowy.api.NotLoggedInErrorException;
class LoginErrorException extends NotLoggedInErrorException {
LoginErrorException(String message) {
super(message);
}
}

View File

@ -1,45 +0,0 @@
package io.github.wulkanowy.api.login
import io.github.wulkanowy.api.Client
import io.github.wulkanowy.api.VulcanException
import io.github.wulkanowy.api.generic.School
import org.jsoup.nodes.Document
import org.slf4j.LoggerFactory
class StartPage(val client: Client) {
private val logger = LoggerFactory.getLogger(StartPage::class.java)
fun getSchools(startPage: Document): MutableList<School> {
val schoolList = mutableListOf<School>()
val snpLinks = startPage.select(".panel.linkownia.pracownik.klient a")
logger.debug("SnP links: {}", snpLinks.size)
if (snpLinks.isEmpty()) {
throw VulcanException("Na pewno używasz konta z dostępem do Witryny ucznia i rodzica?")
}
snpLinks.map {
schoolList.add(School(
it.text(),
getExtractedIdFromUrl(it.attr("href")),
it == snpLinks.first()
))
}
return schoolList
}
internal fun getExtractedIdFromUrl(snpPageUrl: String): String {
val path = snpPageUrl.split(client.host).getOrNull(1)?.split("/")
if (6 != path?.size) {
logger.error("Expected snp url, got {}", snpPageUrl)
throw VulcanException("Na pewno używasz konta z dostępem do Witryny ucznia i rodzica?")
}
return path[2]
}
}

View File

@ -1,10 +0,0 @@
package io.github.wulkanowy.api.messages;
import io.github.wulkanowy.api.VulcanException;
class BadRequestException extends VulcanException {
BadRequestException(String message) {
super(message);
}
}

View File

@ -1,30 +0,0 @@
package io.github.wulkanowy.api.messages;
import com.google.gson.annotations.SerializedName;
public class Message {
@SerializedName("Nieprzeczytana")
public boolean unread;
@SerializedName("Data")
public String date;
@SerializedName("Tresc")
public String content;
@SerializedName("Temat")
public String subject;
@SerializedName("NadawcaNazwa")
public String sender;
@SerializedName("IdWiadomosci")
public int messageID;
@SerializedName("IdNadawca")
public int senderID;
@SerializedName("Id")
public int id;
}

View File

@ -1,99 +0,0 @@
package io.github.wulkanowy.api.messages;
import com.google.gson.Gson;
import com.google.gson.JsonParseException;
import java.io.IOException;
import java.util.List;
import io.github.wulkanowy.api.Client;
import io.github.wulkanowy.api.NotLoggedInErrorException;
import io.github.wulkanowy.api.VulcanException;
public class Messages {
private static final String BASE_URL = "{schema}://uonetplus-uzytkownik.{host}/{symbol}/";
private static final String LIST_BASE_URL = BASE_URL + "Wiadomosc.mvc/";
private static final String RECEIVED_URL = LIST_BASE_URL + "GetWiadomosciOdebrane";
private static final String SENT_URL = LIST_BASE_URL + "GetWiadomosciWyslane";
private static final String DELETED_URL = LIST_BASE_URL + "GetWiadomosciUsuniete";
private static final String MESSAGE_URL = LIST_BASE_URL + "GetTrescWiadomosci";
public static final int RECEIVED_FOLDER = 1;
public static final int SENT_FOLDER = 2;
public static final int DELETED_FOLDER = 3;
private static final String ERROR_TITLE = "Błąd strony";
private Client client;
public Messages(Client client) {
this.client = client;
}
public List<Message> getReceived() throws IOException, VulcanException {
return getMessages(RECEIVED_URL);
}
public List<Message> getSent() throws IOException, VulcanException {
return getMessages(SENT_URL);
}
public List<Message> getDeleted() throws IOException, VulcanException {
return getMessages(DELETED_URL);
}
private List<Message> getMessages(String url) throws IOException, VulcanException {
String res = client.getJsonStringByUrl(url);
List<Message> messages;
try {
messages = new Gson().fromJson(res, MessagesContainer.class).data;
} catch (JsonParseException e) {
if (res.contains(ERROR_TITLE)) {
throw new BadRequestException(ERROR_TITLE);
}
throw new NotLoggedInErrorException("You are probably not logged in");
}
return messages;
}
public Message getMessage(int id, int folder) throws IOException, VulcanException {
String res = client.postJsonStringByUrl(MESSAGE_URL, new String[][]{
{"idWiadomosc", String.valueOf(id)},
{"Folder", String.valueOf(folder)}
});
Message message;
try {
message = new Gson().fromJson(res, MessageContainer.class).data;
} catch (JsonParseException e) {
if (res.contains(ERROR_TITLE)) {
throw new BadRequestException(ERROR_TITLE);
}
throw new NotLoggedInErrorException("You are probably not logged in. Force login");
}
return message;
}
private static class MessagesContainer {
private List<Message> data;
}
private static class MessageContainer {
private Message data;
}
}

View File

@ -1,33 +0,0 @@
package io.github.wulkanowy.api.mobile
import io.github.wulkanowy.api.SnP
import org.jsoup.nodes.Element
class RegisterDevice(private val snp: SnP) {
companion object {
const val REGISTER_URL = "DostepMobilny.mvc/Rejestruj"
}
data class Token(
val token: String,
val symbol: String,
val pin: String
)
fun getToken(): Token {
val form = snp.getSnPPageDocument(REGISTER_URL).selectFirst("#rejestracja-formularz")
val fields = form.select(".blockElement")
return Token(
getValue(fields[1]),
getValue(fields[2]),
getValue(fields[3])
)
}
fun getValue(e: Element): String {
return e.text().split(":")[1].trim()
}
}

View File

@ -1,38 +0,0 @@
package io.github.wulkanowy.api.mobile
import io.github.wulkanowy.api.SnP
import io.github.wulkanowy.api.getFormattedDate
class RegisteredDevices(private val snp: SnP) {
companion object {
const val DEVICES_LIST_URL = "DostepMobilny.mvc"
}
data class Device(
val name: String,
val system: String,
val date: String,
val id: Int
)
fun getList(): List<Device> {
val items = snp.getSnPPageDocument(DEVICES_LIST_URL).select("table tbody tr")
val devices: MutableList<Device> = mutableListOf()
for (item in items) {
val cells = item.select("td")
val system = cells[0].text().split("(").last().removeSuffix(")")
devices.add(Device(
cells[0].text().replace(" ($system)", ""),
system,
getFormattedDate(cells[1].text(), "dd.MM.yyyy 'godz:' HH:mm:ss", "yyyy-MM-dd HH:mm:ss"),
cells[2].select("a").attr("href")
.split("/").last().toInt()
))
}
return devices
}
}

View File

@ -1,36 +0,0 @@
package io.github.wulkanowy.api.notes;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import io.github.wulkanowy.api.SnP;
import io.github.wulkanowy.api.VulcanException;
public class AchievementsList {
private static final String NOTES_PAGE_URL = "UwagiOsiagniecia.mvc/Wszystkie";
private SnP snp;
public AchievementsList(SnP snp) {
this.snp = snp;
}
public List<String> getAllAchievements() throws IOException, VulcanException {
Element pageFragment = snp.getSnPPageDocument(NOTES_PAGE_URL)
.select(".mainContainer > div").get(1);
Elements items = pageFragment.select("article");
List<String> achievements = new ArrayList<>();
for (Element item : items) {
achievements.add(item.text());
}
return achievements;
}
}

View File

@ -1,48 +0,0 @@
package io.github.wulkanowy.api.notes;
public class Note {
private String date;
private String teacher;
private String category;
private String content;
public String getDate() {
return date;
}
public Note setDate(String date) {
this.date = date;
return this;
}
public String getTeacher() {
return teacher;
}
public Note setTeacher(String teacher) {
this.teacher = teacher;
return this;
}
public String getCategory() {
return category;
}
public Note setCategory(String category) {
this.category = category;
return this;
}
public String getContent() {
return content;
}
public Note setContent(String content) {
this.content = content;
return this;
}
}

View File

@ -1,45 +0,0 @@
package io.github.wulkanowy.api.notes;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import io.github.wulkanowy.api.SnP;
import io.github.wulkanowy.api.VulcanException;
import static io.github.wulkanowy.api.DateTimeUtilsKt.getFormattedDate;
public class NotesList {
private static final String NOTES_PAGE_URL = "UwagiOsiagniecia.mvc/Wszystkie";
private SnP snp;
public NotesList(SnP snp) {
this.snp = snp;
}
public List<Note> getAllNotes() throws IOException, VulcanException {
Element pageFragment = snp.getSnPPageDocument(NOTES_PAGE_URL)
.select(".mainContainer > div").get(0);
Elements items = pageFragment.select("article");
Elements dates = pageFragment.select("h2");
List<Note> notes = new ArrayList<>();
int index = 0;
for (Element item : items) {
notes.add(new Note()
.setDate(getFormattedDate(dates.get(index++).text()))
.setTeacher(snp.getRowDataChildValue(item, 1))
.setCategory(snp.getRowDataChildValue(item, 2))
.setContent(snp.getRowDataChildValue(item, 3))
);
}
return notes;
}
}

View File

@ -1,59 +0,0 @@
package io.github.wulkanowy.api.school;
public class SchoolData {
private String name = "";
private String address = "";
private String phoneNumber = "";
private String headmaster = "";
private String[] pedagogue;
public String getName() {
return name;
}
public SchoolData setName(String name) {
this.name = name;
return this;
}
public String getAddress() {
return address;
}
public SchoolData setAddress(String address) {
this.address = address;
return this;
}
public String getPhoneNumber() {
return phoneNumber;
}
public SchoolData setPhoneNumber(String phoneNumber) {
this.phoneNumber = phoneNumber;
return this;
}
public String getHeadmaster() {
return headmaster;
}
public SchoolData setHeadmaster(String headmaster) {
this.headmaster = headmaster;
return this;
}
public String[] getPedagogues() {
return pedagogue;
}
public SchoolData setPedagogue(String[] pedagogue) {
this.pedagogue = pedagogue;
return this;
}
}

View File

@ -1,31 +0,0 @@
package io.github.wulkanowy.api.school;
import org.jsoup.nodes.Element;
import java.io.IOException;
import io.github.wulkanowy.api.SnP;
import io.github.wulkanowy.api.VulcanException;
public class SchoolInfo {
private static final String SCHOOL_PAGE_URL = "Szkola.mvc/Nauczyciele";
private SnP snp;
public SchoolInfo(SnP snp) {
this.snp = snp;
}
public SchoolData getSchoolData() throws IOException, VulcanException {
Element e = snp.getSnPPageDocument(SCHOOL_PAGE_URL)
.select(".mainContainer > article").get(0);
return new SchoolData()
.setName(snp.getRowDataChildValue(e, 1))
.setAddress(snp.getRowDataChildValue(e, 2))
.setPhoneNumber(snp.getRowDataChildValue(e, 3))
.setHeadmaster(snp.getRowDataChildValue(e, 4))
.setPedagogue(snp.getRowDataChildValue(e, 5).split(", "));
}
}

View File

@ -1,26 +0,0 @@
package io.github.wulkanowy.api.school;
public class Subject {
private String name = "";
private String[] teachers;
public String getName() {
return name;
}
public Subject setName(String name) {
this.name = name;
return this;
}
public String[] getTeachers() {
return teachers;
}
public Subject setTeachers(String[] teachers) {
this.teachers = teachers;
return this;
}
}

View File

@ -1,39 +0,0 @@
package io.github.wulkanowy.api.school;
import java.util.List;
public class TeachersData {
private String className = "";
private String[] classTeacher;
private List<Subject> subjects;
public String getClassName() {
return className;
}
public TeachersData setClassName(String className) {
this.className = className;
return this;
}
public String[] getClassTeacher() {
return classTeacher;
}
public TeachersData setClassTeacher(String[] classTeacher) {
this.classTeacher = classTeacher;
return this;
}
public List<Subject> getSubjects() {
return subjects;
}
public TeachersData setSubjects(List<Subject> subjects) {
this.subjects = subjects;
return this;
}
}

View File

@ -1,43 +0,0 @@
package io.github.wulkanowy.api.school;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import io.github.wulkanowy.api.SnP;
import io.github.wulkanowy.api.VulcanException;
public class TeachersInfo {
private static final String SCHOOL_PAGE_URL = "Szkola.mvc/Nauczyciele";
private SnP snp;
public TeachersInfo(SnP snp) {
this.snp = snp;
}
public TeachersData getTeachersData() throws IOException, VulcanException {
Document doc = snp.getSnPPageDocument(SCHOOL_PAGE_URL);
Elements rows = doc.select(".mainContainer > table tbody tr");
String description = doc.select(".mainContainer > p").first().text();
List<Subject> subjects = new ArrayList<>();
for (Element subject : rows) {
subjects.add(new Subject()
.setName(subject.select("td").get(1).text())
.setTeachers(subject.select("td").get(2).text().split(", "))
);
}
return new TeachersData()
.setClassName(description.split(", ")[0].split(": ")[1].trim())
.setClassTeacher(description.split("Wychowawcy:")[1].trim().split(", "))
.setSubjects(subjects);
}
}

View File

@ -1,17 +0,0 @@
package io.github.wulkanowy.api.timetable;
@Deprecated
class LessonTypes {
static final String CLASS_PLANNING = "x-treelabel-ppl";
static final String CLASS_REALIZED = "x-treelabel-rlz";
static final String CLASS_MOVED_OR_CANCELED = "x-treelabel-inv";
static final String CLASS_NEW_MOVED_IN_OR_CHANGED = "x-treelabel-zas";
private LessonTypes() {
throw new IllegalStateException("Utility class");
}
}

View File

@ -1,244 +0,0 @@
package io.github.wulkanowy.api.timetable;
import org.apache.commons.lang3.StringUtils;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import io.github.wulkanowy.api.SnP;
import io.github.wulkanowy.api.VulcanException;
import io.github.wulkanowy.api.generic.Lesson;
import io.github.wulkanowy.api.generic.Week;
import static io.github.wulkanowy.api.DateTimeUtilsKt.getDateAsTick;
import static io.github.wulkanowy.api.DateTimeUtilsKt.getFormattedDate;
@Deprecated
public class Timetable {
private static final String TIMETABLE_PAGE_URL = "Lekcja.mvc/PlanZajec?data=";
private SnP snp;
private static final Logger logger = LoggerFactory.getLogger(Timetable.class);
public Timetable(SnP snp) {
this.snp = snp;
}
public Week<TimetableDay> getWeekTable() throws IOException, VulcanException {
return getWeekTable("");
}
public Week<TimetableDay> getWeekTable(final String date) throws IOException, VulcanException {
Element table = snp.getSnPPageDocument(TIMETABLE_PAGE_URL + getDateAsTick(date))
.select(".mainContainer .presentData").first();
List<TimetableDay> days = getDays(table.select("thead th"));
setLessonToDays(table, days);
return new Week<TimetableDay>()
.setStartDayDate(days.get(0).getDate())
.setDays(days);
}
private List<TimetableDay> getDays(Elements tableHeaderCells) {
List<TimetableDay> days = new ArrayList<>();
int numberOfDays = tableHeaderCells.size();
if (numberOfDays > 7) {
logger.info("Number of days: {}", numberOfDays);
}
for (int i = 2; i < numberOfDays; i++) {
String[] dayHeaderCell = tableHeaderCells.get(i).html().split("<br>");
TimetableDay day = new TimetableDay();
day.setDayName(dayHeaderCell[0]);
day.setDate(getFormattedDate(dayHeaderCell[1].trim()));
if (tableHeaderCells.get(i).hasClass("free-day")) {
day.setFreeDay(true);
day.setFreeDayName(dayHeaderCell[2]);
}
days.add(day);
}
return days;
}
private void setLessonToDays(Element table, List<TimetableDay> days) {
for (Element row : table.select("tbody tr")) {
Elements hours = row.select("td");
// fill hours in day
for (int i = 2; i < hours.size(); i++) {
Lesson lesson = new Lesson();
String[] startEndEnd = hours.get(1).text().split(" ");
lesson.setStartTime(startEndEnd[0]);
lesson.setEndTime(startEndEnd[1]);
lesson.setDate(days.get(i - 2).getDate());
lesson.setNumber(Integer.valueOf(hours.get(0).text()));
addLessonDetails(lesson, hours.get(i).select("div"));
days.get(i - 2).setLesson(lesson);
}
}
}
private void addLessonDetails(Lesson lesson, Elements e) {
moveWarningToLessonNode(e);
switch (e.size()) {
case 1:
addLessonInfoFromElement(lesson, e.first());
break;
case 2:
Element span = e.last().selectFirst("span");
if (null == span) {
addLessonInfoFromElement(lesson, e.first());
} else 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());
}
break;
case 3:
addLessonInfoFromElement(lesson, e.get(1));
break;
default:
lesson.setEmpty(true);
break;
}
}
private void moveWarningToLessonNode(Elements e) {
Elements warn = e.select(".uwaga-panel");
if (!warn.isEmpty()) {
e.select("span").last()
.addClass("x-treelabel-rlz")
.text(warn.text());
e.remove(1);
}
}
private void addLessonInfoFromElement(Lesson lesson, Element e) {
Elements spans = e.select("span");
if (spans.isEmpty()) {
logger.warn("Lesson span is empty");
return;
}
addTypeInfo(lesson, spans);
addNormalLessonInfo(lesson, spans);
addChangesInfo(lesson, spans);
addGroupLessonInfo(lesson, spans);
}
private void addTypeInfo(Lesson lesson, Elements spans) {
if (spans.first().hasClass(LessonTypes.CLASS_PLANNING)) {
lesson.setPlanning(true);
}
if (spans.first().hasClass(LessonTypes.CLASS_MOVED_OR_CANCELED)) {
lesson.setMovedOrCanceled(true);
}
if (spans.first().hasClass(LessonTypes.CLASS_NEW_MOVED_IN_OR_CHANGED)) {
lesson.setNewMovedInOrChanged(true);
}
if (spans.last().hasClass(LessonTypes.CLASS_REALIZED) || "".equals(spans.first().attr("class"))) {
lesson.setRealized(true);
}
}
private void addNormalLessonInfo(Lesson lesson, Elements spans) {
if (3 == spans.size()) {
lesson.setSubject(spans.get(0).text());
lesson.setTeacher(spans.get(1).text());
lesson.setRoom(spans.get(2).text());
}
}
private void addChangesInfo(Lesson lesson, Elements spans) {
if (!spans.last().hasClass(LessonTypes.CLASS_REALIZED)) {
return;
}
if (7 == spans.size()) {
lesson.setSubject(spans.get(3).text());
lesson.setTeacher(spans.get(4).text());
lesson.setRoom(spans.get(5).text());
lesson.setMovedOrCanceled(false);
lesson.setNewMovedInOrChanged(true);
lesson.setDescription(StringUtils.defaultString(StringUtils.substringBetween(
spans.last().text(), "(", ")"), spans.last().text())
+ " (poprzednio: " + spans.get(0).text() + ")");
} else if (9 == spans.size()) {
String[] subjectAndGroupInfo = getLessonAndGroupInfoFromSpan(spans.get(4));
lesson.setSubject(subjectAndGroupInfo[0]);
lesson.setGroupName(subjectAndGroupInfo[1]);
lesson.setTeacher(spans.get(6).text());
lesson.setRoom(spans.get(7).text());
lesson.setMovedOrCanceled(false);
lesson.setNewMovedInOrChanged(true);
lesson.setDivisionIntoGroups(true);
lesson.setDescription(StringUtils.defaultString(StringUtils.substringBetween(
spans.last().text(), "(", ")"), 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()));
}
}
private void addGroupLessonInfo(Lesson lesson, Elements spans) {
if (4 == spans.size() && !spans.last().hasClass(LessonTypes.CLASS_REALIZED)) {
lesson.setRoom(spans.last().text());
}
if ((4 == spans.size() && !spans.last().hasClass(LessonTypes.CLASS_REALIZED) || 5 == spans.size())) {
String[] subjectAndGroupInfo = getLessonAndGroupInfoFromSpan(spans.get(0));
lesson.setSubject(subjectAndGroupInfo[0]);
lesson.setGroupName(subjectAndGroupInfo[1]);
lesson.setTeacher(spans.get(2).text());
lesson.setDivisionIntoGroups(true);
}
if (5 == spans.size()) {
lesson.setRoom(spans.get(3).text());
}
}
private String[] getLessonAndGroupInfoFromSpan(Element span) {
if (!span.text().contains("[")) {
return new String[] {span.text(), ""};
}
String[] subjectNameArray = span.text().split(" ");
String groupName = subjectNameArray[subjectNameArray.length - 1];
return new String[]{
span.text().replace(" " + groupName, ""),
StringUtils.defaultString(StringUtils.substringBetween(
groupName, "[", "]"), groupName)
};
}
}

View File

@ -1,27 +0,0 @@
package io.github.wulkanowy.api.timetable;
import io.github.wulkanowy.api.generic.Day;
@Deprecated
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;
}
}

View File

@ -1,201 +0,0 @@
package io.github.wulkanowy.api.timetable
import io.github.wulkanowy.api.SnP
import io.github.wulkanowy.api.getDateAsTick
import io.github.wulkanowy.api.getFormattedDate
import org.apache.commons.lang3.StringUtils
import org.jsoup.nodes.Element
import org.jsoup.select.Elements
class TimetableKt(private val snp: SnP) {
fun getTimetable() = getTimetable("")
fun getTimetable(start: String): List<TimetableLesson> {
val table = snp.getSnPPageDocument("Lekcja.mvc/PlanZajec?data=" + getDateAsTick(start))
.select(".mainContainer .presentData").first()
val days = getDays(table.select("thead th"))
return table.select("tbody tr").map {
val hours = it.select("td")
hours.drop(2).mapIndexed { i, item ->
getLesson(item, days[i], hours[1].text().split(" "), hours[0].text().toInt())
}
}.flatten().sortedBy {
it.date
}.filter {
it.subject.isNotBlank()
}
}
private fun getDays(el: Elements): List<Pair<String, String>> {
return el.drop(2).map {
val info = it.html().split("<br>")
Pair(getFormattedDate(info[1].trim()), info.getOrElse(2) { "" }.trim())
}
}
private fun getLesson(cell: Element, day: Pair<String, String>, hours: List<String>, number: Int): TimetableLesson {
val lesson = TimetableLesson(
number = number,
date = day.first,
freeDayName = day.second,
startTime = hours[0],
endTime = hours[1]
)
addLessonDetails(lesson, cell.select("div"))
return lesson
}
private fun addLessonDetails(lesson: TimetableLesson, e: Elements) {
moveWarningToLessonNode(e)
when (e.size) {
1 -> addLessonInfoFromElement(lesson, e.first())
2 -> {
val span = e.last().selectFirst("span")
when {
null == span -> addLessonInfoFromElement(lesson, e.first())
span.hasClass(Types.CLASS_MOVED_OR_CANCELED) -> {
lesson.newMovedInOrChanged = true
lesson.description = "poprzednio: " + getLessonAndGroupInfoFromSpan(span)[0]
addLessonInfoFromElement(lesson, e.first())
}
else -> addLessonInfoFromElement(lesson, e.last())
}
}
3 -> addLessonInfoFromElement(lesson, e[1])
else -> lesson.empty = true
}
}
private fun moveWarningToLessonNode(e: Elements) {
val warn = e.select(".uwaga-panel")
if (!warn.isEmpty()) {
e.select("span").last()
.addClass("x-treelabel-rlz")
.text(warn.text())
e.removeAt(1)
}
}
private fun addLessonInfoFromElement(lesson: TimetableLesson, e: Element) {
val spans = e.select("span")
if (spans.isEmpty()) {
return
}
addTypeInfo(lesson, spans)
addNormalLessonInfo(lesson, spans)
addChangesInfo(lesson, spans)
addGroupLessonInfo(lesson, spans)
}
private fun addTypeInfo(lesson: TimetableLesson, spans: Elements) {
if (spans.first().hasClass(Types.CLASS_PLANNING)) {
lesson.planning = true
}
if (spans.first().hasClass(Types.CLASS_MOVED_OR_CANCELED)) {
lesson.movedOrCanceled = true
}
if (spans.first().hasClass(Types.CLASS_NEW_MOVED_IN_OR_CHANGED)) {
lesson.newMovedInOrChanged = true
}
if (spans.last().hasClass(Types.CLASS_REALIZED) || "" == spans.first().attr("class")) {
lesson.realized = true
}
}
private fun addNormalLessonInfo(lesson: TimetableLesson, spans: Elements) {
if (3 == spans.size) {
lesson.subject = spans[0].text()
lesson.teacher = spans[1].text()
lesson.room = spans[2].text()
}
}
private fun addChangesInfo(lesson: TimetableLesson, spans: Elements) {
if (!spans.last().hasClass(Types.CLASS_REALIZED)) {
return
}
when {
7 == spans.size -> {
lesson.subject = spans[3].text()
lesson.teacher = spans[4].text()
lesson.room = spans[5].text()
lesson.movedOrCanceled = false
lesson.newMovedInOrChanged = true
lesson.description = (StringUtils.defaultString(StringUtils.substringBetween(
spans.last().text(), "(", ")"), spans.last().text())
+ " (poprzednio: " + spans[0].text() + ")")
}
9 == spans.size -> {
val subjectAndGroupInfo = getLessonAndGroupInfoFromSpan(spans[4])
lesson.subject = subjectAndGroupInfo[0]
lesson.groupName = subjectAndGroupInfo[1]
lesson.teacher = spans[6].text()
lesson.room = spans[7].text()
lesson.movedOrCanceled = false
lesson.newMovedInOrChanged = true
lesson.divisionIntoGroups = true
lesson.description = (StringUtils.defaultString(StringUtils.substringBetween(
spans.last().text(), "(", ")"), spans.last().text())
+ " (poprzednio: " + getLessonAndGroupInfoFromSpan(spans[0])[0] + ")")
}
4 <= spans.size -> {
lesson.subject = spans[0].text()
lesson.teacher = spans[1].text()
lesson.room = spans[2].text()
lesson.description = StringUtils.defaultString(StringUtils.substringBetween(
spans.last().text(), "(", ")"), spans.last().text())
}
}
}
private fun addGroupLessonInfo(lesson: TimetableLesson, spans: Elements) {
if (4 == spans.size && !spans.last().hasClass(Types.CLASS_REALIZED)) {
lesson.room = spans.last().text()
}
if (4 == spans.size && !spans.last().hasClass(Types.CLASS_REALIZED) || 5 == spans.size) {
val subjectAndGroupInfo = getLessonAndGroupInfoFromSpan(spans[0])
lesson.subject = subjectAndGroupInfo[0]
lesson.groupName = subjectAndGroupInfo[1]
lesson.teacher = spans[2].text()
lesson.divisionIntoGroups = true
}
if (5 == spans.size) {
lesson.room = spans[3].text()
}
}
private fun getLessonAndGroupInfoFromSpan(span: Element): Array<String> {
if (!span.text().contains("[")) {
return arrayOf(span.text(), "")
}
val subjectNameArray = span.text().split(" ".toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray()
val groupName = subjectNameArray[subjectNameArray.size - 1]
return arrayOf(span.text().replace(" $groupName", ""), StringUtils.defaultString(StringUtils.substringBetween(
groupName, "[", "]"), groupName))
}
private object Types {
const val CLASS_PLANNING = "x-treelabel-ppl"
const val CLASS_REALIZED = "x-treelabel-rlz"
const val CLASS_MOVED_OR_CANCELED = "x-treelabel-inv"
const val CLASS_NEW_MOVED_IN_OR_CHANGED = "x-treelabel-zas"
}
}

View File

@ -1,36 +0,0 @@
package io.github.wulkanowy.api.timetable
data class TimetableLesson(
val number: Int,
val date: String,
val freeDayName: String,
val startTime: String,
val endTime: String,
var subject: String = "",
var teacher: String = "",
var room: String = "",
var description: String = "",
var groupName: String = "",
var empty: Boolean = false,
var divisionIntoGroups: Boolean = false,
var planning: Boolean = false,
var realized: Boolean = false,
var movedOrCanceled: Boolean = false,
var newMovedInOrChanged: Boolean = false
)

View File

@ -1,40 +0,0 @@
package io.github.wulkanowy.api.user;
public class AddressData {
private String address = "";
private String registeredAddress = "";
private String correspondenceAddress = "";
public String getAddress() {
return address;
}
public AddressData setAddress(String address) {
this.address = address;
return this;
}
public String getRegisteredAddress() {
return registeredAddress;
}
public AddressData setRegisteredAddress(String registeredAddress) {
this.registeredAddress = registeredAddress;
return this;
}
public String getCorrespondenceAddress() {
return correspondenceAddress;
}
public AddressData setCorrespondenceAddress(String correspondenceAddress) {
this.correspondenceAddress = correspondenceAddress;
return this;
}
}

View File

@ -1,70 +0,0 @@
package io.github.wulkanowy.api.user;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import java.io.IOException;
import io.github.wulkanowy.api.SnP;
import io.github.wulkanowy.api.VulcanException;
public class BasicInformation {
private static final String STUDENT_DATA_PAGE_URL = "Uczen.mvc/DanePodstawowe";
private static final String CONTENT_QUERY = ".mainContainer > article";
private Document studentDataPageDocument;
private SnP snp;
public BasicInformation(SnP snp) {
this.snp = snp;
}
public Document getStudentDataPageDocument() throws IOException, VulcanException {
if (null == studentDataPageDocument) {
studentDataPageDocument = snp.getSnPPageDocument(STUDENT_DATA_PAGE_URL);
}
return studentDataPageDocument;
}
public PersonalData getPersonalData() throws IOException, VulcanException {
Element e = getStudentDataPageDocument().select(CONTENT_QUERY).get(0);
String name = snp.getRowDataChildValue(e, 1);
String[] names = name.split(" ");
return new PersonalData()
.setName(name)
.setFirstName(names[0])
.setSurname(names[names.length - 1])
.setFirstAndLastName(names[0] + " " + names[names.length - 1])
.setDateAndBirthPlace(snp.getRowDataChildValue(e, 2))
.setPesel(snp.getRowDataChildValue(e, 3))
.setGender(snp.getRowDataChildValue(e, 4))
.setPolishCitizenship("Tak".equals(snp.getRowDataChildValue(e, 5)))
.setFamilyName(snp.getRowDataChildValue(e, 6))
.setParentsNames(snp.getRowDataChildValue(e, 7));
}
public AddressData getAddressData() throws IOException, VulcanException {
Element e = getStudentDataPageDocument().select(CONTENT_QUERY).get(1);
return new AddressData()
.setAddress(snp.getRowDataChildValue(e, 1))
.setRegisteredAddress(snp.getRowDataChildValue(e, 2))
.setCorrespondenceAddress(snp.getRowDataChildValue(e, 3));
}
public ContactDetails getContactDetails() throws IOException, VulcanException {
Element e = getStudentDataPageDocument().select(CONTENT_QUERY).get(2);
return new ContactDetails()
.setPhoneNumber(snp.getRowDataChildValue(e, 1))
.setCellPhoneNumber(snp.getRowDataChildValue(e, 2))
.setEmail(snp.getRowDataChildValue(e, 3));
}
}

View File

@ -1,37 +0,0 @@
package io.github.wulkanowy.api.user;
public class ContactDetails {
private String phoneNumber = "";
private String cellPhoneNumber = "";
private String email = "";
public String getPhoneNumber() {
return phoneNumber;
}
public ContactDetails setPhoneNumber(String phoneNumber) {
this.phoneNumber = phoneNumber;
return this;
}
public String getCellPhoneNumber() {
return cellPhoneNumber;
}
public ContactDetails setCellPhoneNumber(String cellPhoneNumber) {
this.cellPhoneNumber = cellPhoneNumber;
return this;
}
public String getEmail() {
return email;
}
public ContactDetails setEmail(String email) {
this.email = email;
return this;
}
}

View File

@ -1,41 +0,0 @@
package io.github.wulkanowy.api.user;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import io.github.wulkanowy.api.SnP;
import io.github.wulkanowy.api.VulcanException;
public class FamilyInformation {
private static final String STUDENT_DATA_PAGE_URL = "Uczen.mvc/DanePodstawowe";
private SnP snp;
public FamilyInformation(SnP snp) {
this.snp = snp;
}
public List<FamilyMember> getFamilyMembers() throws IOException, VulcanException {
Elements membersElements = snp.getSnPPageDocument(STUDENT_DATA_PAGE_URL)
.select(".mainContainer > article:nth-of-type(n+4)");
List<FamilyMember> familyMembers = new ArrayList<>();
for (Element e : membersElements) {
familyMembers.add(new FamilyMember()
.setName(snp.getRowDataChildValue(e, 1))
.setKinship(snp.getRowDataChildValue(e, 2))
.setAddress(snp.getRowDataChildValue(e, 3))
.setTelephones(snp.getRowDataChildValue(e, 4))
.setEmail(snp.getRowDataChildValue(e, 5))
);
}
return familyMembers;
}
}

View File

@ -1,59 +0,0 @@
package io.github.wulkanowy.api.user;
public class FamilyMember {
private String name = "";
private String kinship = "";
private String address = "";
private String telephones = "";
private String email = "";
public String getName() {
return name;
}
public FamilyMember setName(String name) {
this.name = name;
return this;
}
public String getKinship() {
return kinship;
}
public FamilyMember setKinship(String kinship) {
this.kinship = kinship;
return this;
}
public String getAddress() {
return address;
}
public FamilyMember setAddress(String address) {
this.address = address;
return this;
}
public String getTelephones() {
return telephones;
}
public FamilyMember setTelephones(String telephones) {
this.telephones = telephones;
return this;
}
public String getEmail() {
return email;
}
public FamilyMember setEmail(String email) {
this.email = email;
return this;
}
}

View File

@ -1,114 +0,0 @@
package io.github.wulkanowy.api.user;
public class PersonalData {
private String name = "";
private String firstName = "";
private String surname = "";
private String firstAndLastName = "";
private String dateAndBirthPlace = "";
private String pesel = "";
private String gender = "";
private boolean isPolishCitizenship;
private String familyName = "";
private String parentsNames = "";
public String getName() {
return name;
}
public PersonalData setName(String name) {
this.name = name;
return this;
}
public String getFirstName() {
return firstName;
}
public PersonalData setFirstName(String firstName) {
this.firstName = firstName;
return this;
}
public String getSurname() {
return surname;
}
public PersonalData setSurname(String surname) {
this.surname = surname;
return this;
}
public String getFirstAndLastName() {
return firstAndLastName;
}
public PersonalData setFirstAndLastName(String firstAndLastName) {
this.firstAndLastName = firstAndLastName;
return this;
}
public String getDateAndBirthPlace() {
return dateAndBirthPlace;
}
public PersonalData setDateAndBirthPlace(String dateAndBirthPlace) {
this.dateAndBirthPlace = dateAndBirthPlace;
return this;
}
public String getPesel() {
return pesel;
}
public PersonalData setPesel(String pesel) {
this.pesel = pesel;
return this;
}
public String getGender() {
return gender;
}
public PersonalData setGender(String gender) {
this.gender = gender;
return this;
}
public boolean isPolishCitizenship() {
return isPolishCitizenship;
}
public PersonalData setPolishCitizenship(boolean polishCitizenship) {
isPolishCitizenship = polishCitizenship;
return this;
}
public String getFamilyName() {
return familyName;
}
public PersonalData setFamilyName(String familyName) {
this.familyName = familyName;
return this;
}
public String getParentsNames() {
return parentsNames;
}
public PersonalData setParentsNames(String parentsNames) {
this.parentsNames = parentsNames;
return this;
}
}

View File

@ -1,78 +0,0 @@
package io.github.wulkanowy.api;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.junit.Assert;
import org.junit.Test;
public class ClientTest {
private String getFixtureAsString(String fixtureFileName) {
return FixtureHelper.getAsString(getClass().getResourceAsStream(fixtureFileName));
}
@Test
public void setFullEndpointInfoTest() {
Client client = new Client("http://fakelog.cf\\\\admin", "pass", "Default", "123");
Assert.assertEquals("fakelog.cf", client.getHost());
Assert.assertEquals("Default", client.getSymbol());
}
@Test
public void setFullEndpointInfoWithSymbolTest() {
Client client = new Client("http://fakelog.cf/notdefault\\\\admin", "pass", "Default", "123");
Assert.assertEquals("fakelog.cf", client.getHost());
Assert.assertEquals("notdefault", client.getSymbol()); //
}
@Test
public void checkForNoErrorsTest() throws Exception {
Client client = new Client("", "", "", "123");
Document doc = Jsoup.parse(getFixtureAsString("login/Logowanie-success.html"));
Assert.assertEquals(doc, client.checkForErrors(doc, 200));
}
@Test(expected = VulcanOfflineException.class)
public void checkForErrorsOffline() throws Exception {
Client client = new Client("", "", "", "123");
Document doc = Jsoup.parse(getFixtureAsString("login/PrzerwaTechniczna.html"));
client.checkForErrors(doc, 200);
}
@Test(expected = NotLoggedInErrorException.class)
public void checkForErrors() throws Exception {
Client client = new Client("", "", "", "123");
Document doc = Jsoup.parse(getFixtureAsString("login/Logowanie-notLoggedIn.html"));
client.checkForErrors(doc, 200);
}
@Test
public void getFilledUrlTest() throws Exception {
Client client = new Client("http://fakelog.cf\\\\admin", "", "symbol123", "321");
Assert.assertEquals("http://uonetplus-opiekun.fakelog.cf/symbol123/321/Oceny/Wszystkie",
client.getFilledUrl("{schema}://uonetplus-opiekun.{host}/{symbol}/{ID}/Oceny/Wszystkie"));
}
@Test
public void getSymbolTest() {
Client client = new Client("", "", "symbol4321", "123");
Assert.assertEquals("symbol4321", client.getSymbol());
}
@Test
public void getSchoolIdTest() throws Exception {
Client client = new Client("", "", "1", "123456");
Assert.assertEquals("123456", client.getSchoolId());
}
}

View File

@ -1,53 +0,0 @@
package io.github.wulkanowy.api
import org.junit.Assert
import org.junit.Test
import java.text.ParseException
import java.text.SimpleDateFormat
import java.util.*
class DateTimeUtilsTest {
@Test
fun getTicksDateObjectTest() {
val format = SimpleDateFormat("dd.MM.yyyy", Locale.ROOT)
format.timeZone = TimeZone.getTimeZone("UTC")
val date = format.parse("31.07.2017")
Assert.assertEquals(636370560000000000L, getDateAsTick(date))
val calendar = Calendar.getInstance()
calendar.time = date
calendar.add(Calendar.DAY_OF_YEAR, -14)
val dateTwoWeekBefore = calendar.time
Assert.assertEquals(636358464000000000L, getDateAsTick(dateTwoWeekBefore))
}
@Test(expected = ParseException::class)
fun getTicsStringInvalidFormatTest() {
Assert.assertEquals(636370560000000000L, getDateAsTick("31.07.2017", "dd.MMM.yyyy"))
}
@Test
fun getTicsStringFormatTest() {
Assert.assertEquals(636370560000000000L, getDateAsTick("31.07.2017", "dd.MM.yyyy"))
}
@Test
fun getTicsStringTest() {
Assert.assertEquals("636370560000000000", getDateAsTick("2017-07-31"))
Assert.assertEquals("636334272000000000", getDateAsTick("2017-06-19"))
Assert.assertEquals("636189120000000000", getDateAsTick("2017-01-02"))
Assert.assertEquals("636080256000000000", getDateAsTick("2016-08-29"))
}
@Test
fun getDateTest() {
val format = SimpleDateFormat("dd.MM.yyyy", Locale.ROOT)
format.timeZone = TimeZone.getTimeZone("UTC")
val date = format.parse("31.07.2017")
Assert.assertEquals(date, getDate(636370560000000000L))
}
}

View File

@ -1,12 +0,0 @@
package io.github.wulkanowy.api;
import java.io.InputStream;
import java.util.Scanner;
public class FixtureHelper {
public static String getAsString(InputStream inputStream) {
Scanner s = new Scanner(inputStream).useDelimiter("\\A");
return s.hasNext() ? s.next() : "";
}
}

View File

@ -1,103 +0,0 @@
package io.github.wulkanowy.api;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mockito;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import io.github.wulkanowy.api.generic.Semester;
public class StudentAndParentTest {
private Client client;
@Before
public void setUp() throws Exception {
String input = FixtureHelper.getAsString(
getClass().getResourceAsStream("OcenyWszystkie-semester.html"));
Document gradesPageDocument = Jsoup.parse(input);
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, "1234", null);
Assert.assertEquals("1234", snp.getStudentID());
}
@Test
public void getSemestersTest() throws Exception {
SnP snp = new StudentAndParent(client, null, null);
List<Semester> semesters = snp.getSemesters();
Assert.assertEquals(2, semesters.size());
Assert.assertEquals("1", semesters.get(0).getName());
Assert.assertEquals("1234", semesters.get(0).getId());
Assert.assertFalse(semesters.get(0).isCurrent());
Assert.assertEquals("2", semesters.get(1).getName());
Assert.assertEquals("1235", semesters.get(1).getId());
Assert.assertTrue(semesters.get(1).isCurrent());
}
@Test
public void getCurrentSemesterTest() {
List<Semester> semesters = new ArrayList<>();
semesters.add(new Semester().setName("1500100900").setId("1").setCurrent(false));
semesters.add(new Semester().setName("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());
}
@Test
public void getCurrentSemesterFromEmptyTest() {
SnP snp = new StudentAndParent(client, null, null);
List<Semester> semesters = new ArrayList<>();
Assert.assertNull(snp.getCurrent(semesters));
}
@Test
public void getDiariesAndStudentTest() throws IOException, VulcanException {
String input = FixtureHelper.getAsString(getClass().getResourceAsStream("WitrynaUczniaIRodzica.html"));
Document snpHome = Jsoup.parse(input);
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());
}
}

View File

@ -1,28 +0,0 @@
package io.github.wulkanowy.api;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.mockito.Mockito;
import io.github.wulkanowy.api.generic.Semester;
public abstract class StudentAndParentTestCase {
protected StudentAndParent getSnp(String fixtureFileName) throws Exception {
String input = FixtureHelper.getAsString(getClass().getResourceAsStream(fixtureFileName));
Document tablePageDocument = Jsoup.parse(input);
StudentAndParent snp = Mockito.mock(StudentAndParent.class);
Mockito.when(snp.getSnPPageDocument(Mockito.anyString()))
.thenReturn(tablePageDocument);
Mockito.when(snp.getSemesters(Mockito.any(Document.class))).thenCallRealMethod();
Mockito.when(snp.getCurrent(Mockito.<Semester>anyList()))
.thenCallRealMethod();
Mockito.when(snp.getRowDataChildValue(Mockito.any(Element.class),
Mockito.anyInt())).thenCallRealMethod();
return snp;
}
}

View File

@ -1,31 +0,0 @@
package io.github.wulkanowy.api;
import org.hamcrest.CoreMatchers;
import org.junit.Assert;
import org.junit.Test;
public class VulcanTest {
@Test(expected = NotLoggedInErrorException.class)
public void getClientWithoutLoginTest() throws Exception {
Vulcan vulcan = new Vulcan();
vulcan.getClient();
}
@Test
public void getClientTest() throws Exception {
Vulcan vulcan = new Vulcan();
vulcan.setCredentials("email", "password", "symbol", null, null, null);
Assert.assertThat(vulcan.getClient(), CoreMatchers.instanceOf(Client.class));
}
@Test
public void getClientTwiceTest() throws Exception {
Vulcan vulcan = new Vulcan();
vulcan.setCredentials("email", "password", "symbol", null, null, null);
Assert.assertEquals(vulcan.getClient(), vulcan.getClient());
}
}

View File

@ -1,144 +0,0 @@
package io.github.wulkanowy.api.attendance;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import java.util.List;
import io.github.wulkanowy.api.StudentAndParentTestCase;
import io.github.wulkanowy.api.generic.Month;
public class AttendanceStatisticsTest extends StudentAndParentTestCase {
private AttendanceStatistics excellent;
private AttendanceStatistics full;
@Before
public void setUp() throws Exception {
this.excellent = new AttendanceStatistics(getSnp("Frekwencja-excellent.html"));
this.full = new AttendanceStatistics(getSnp("Frekwencja-full.html"));
}
@Test
public void getSubjectList() throws Exception {
Assert.assertEquals(26, excellent.getSubjectList().size());
Assert.assertEquals(23, full.getSubjectList().size());
}
@Test
public void getSubjectListId() throws Exception {
Assert.assertEquals(-1, excellent.getSubjectList().get(0).getId());
Assert.assertEquals(63, excellent.getSubjectList().get(10).getId());
Assert.assertEquals(0, excellent.getSubjectList().get(25).getId());
Assert.assertEquals(-1, full.getSubjectList().get(0).getId());
Assert.assertEquals(108, full.getSubjectList().get(14).getId());
Assert.assertEquals(492, full.getSubjectList().get(21).getId());
}
@Test
public void getSubjectListName() throws Exception {
Assert.assertEquals("Wszystkie", excellent.getSubjectList().get(0).getName());
Assert.assertEquals("Fizyka", excellent.getSubjectList().get(8).getName());
Assert.assertEquals("Sieci komputerowe i administrowanie sieciami",
excellent.getSubjectList().get(21).getName());
Assert.assertEquals("Praktyka zawodowa", full.getSubjectList().get(11).getName());
Assert.assertEquals("Użytkowanie urządzeń peryferyjnych komputera",
full.getSubjectList().get(16).getName());
Assert.assertEquals("Brak opisu lekcji", full.getSubjectList().get(22).getName());
}
@Test
public void getTypesTotal() throws Exception {
Assert.assertEquals(100.0, excellent.getTypesTable().getTotal(), 0);
Assert.assertEquals(80.94, full.getTypesTable().getTotal(), 0);
}
@Test
public void getTypeName() throws Exception {
List<Type> typeList1 = excellent.getTypesTable().getTypeList();
Assert.assertEquals("Obecność", typeList1.get(0).getName());
Assert.assertEquals("Nieobecność nieusprawiedliwiona", typeList1.get(1).getName());
Assert.assertEquals("Nieobecność usprawiedliwiona", typeList1.get(2).getName());
Assert.assertEquals("Nieobecność z przyczyn szkolnych", typeList1.get(3).getName());
List<Type> typeList2 = full.getTypesTable().getTypeList();
Assert.assertEquals("Spóźnienie nieusprawiedliwione", typeList2.get(4).getName());
Assert.assertEquals("Spóźnienie usprawiedliwione", typeList2.get(5).getName());
Assert.assertEquals("Zwolnienie", typeList2.get(6).getName());
}
@Test
public void getTypeTotal() throws Exception {
List<Type> typeList1 = excellent.getTypesTable().getTypeList();
Assert.assertEquals(1211, typeList1.get(0).getTotal());
Assert.assertEquals(0, typeList1.get(1).getTotal());
Assert.assertEquals(0, typeList1.get(2).getTotal());
Assert.assertEquals(0, typeList1.get(3).getTotal());
Assert.assertEquals(0, typeList1.get(4).getTotal());
Assert.assertEquals(0, typeList1.get(5).getTotal());
Assert.assertEquals(0, typeList1.get(6).getTotal());
List<Type> typeList2 = full.getTypesTable().getTypeList();
Assert.assertEquals(822, typeList2.get(0).getTotal());
Assert.assertEquals(6, typeList2.get(1).getTotal());
Assert.assertEquals(192, typeList2.get(2).getTotal());
Assert.assertEquals(7, typeList2.get(3).getTotal());
Assert.assertEquals(12, typeList2.get(4).getTotal());
Assert.assertEquals(1, typeList2.get(5).getTotal());
Assert.assertEquals(2, typeList2.get(6).getTotal());
}
@Test
public void getTypeList() throws Exception {
List<Type> typesList1 = excellent.getTypesTable().getTypeList();
Assert.assertEquals(12, typesList1.get(0).getMonthList().size());
Assert.assertEquals(12, typesList1.get(5).getMonthList().size());
List<Type> typesList2 = full.getTypesTable().getTypeList();
Assert.assertEquals(12, typesList2.get(0).getMonthList().size());
Assert.assertEquals(12, typesList2.get(5).getMonthList().size());
}
@Test
public void getMonthList() throws Exception {
List<Type> typeList1 = excellent.getTypesTable().getTypeList();
Assert.assertEquals(12, typeList1.get(0).getMonthList().size());
List<Type> typeList2 = full.getTypesTable().getTypeList();
Assert.assertEquals(12, typeList2.get(0).getMonthList().size());
}
@Test
public void getMonthName() throws Exception {
List<Month> monthsList1 = excellent.getTypesTable().getTypeList().get(0).getMonthList();
Assert.assertEquals("IX", monthsList1.get(0).getName());
Assert.assertEquals("III", monthsList1.get(6).getName());
Assert.assertEquals("VIII", monthsList1.get(11).getName());
List<Month> monthsList2 = full.getTypesTable().getTypeList().get(0).getMonthList();
Assert.assertEquals("XI", monthsList2.get(2).getName());
Assert.assertEquals("II", monthsList2.get(5).getName());
Assert.assertEquals("VI", monthsList2.get(9).getName());
}
@Test
public void getMonthValue() throws Exception {
List<Month> monthsList1 = excellent.getTypesTable().getTypeList().get(0).getMonthList();
Assert.assertEquals(142, monthsList1.get(0).getValue());
Assert.assertEquals(131, monthsList1.get(4).getValue());
Assert.assertEquals(139, monthsList1.get(7).getValue());
Assert.assertEquals(114, monthsList1.get(9).getValue());
Assert.assertEquals(0, monthsList1.get(11).getValue());
List<Type> typeList1 = full.getTypesTable().getTypeList();
Assert.assertEquals(135, typeList1.get(0).getMonthList().get(0).getValue());
Assert.assertEquals(7, typeList1.get(3).getMonthList().get(5).getValue());
Assert.assertEquals(1, typeList1.get(5).getMonthList().get(0).getValue());
Assert.assertEquals(27, typeList1.get(2).getMonthList().get(9).getValue());
Assert.assertEquals(0, typeList1.get(0).getMonthList().get(11).getValue());
}
}

View File

@ -1,165 +0,0 @@
package io.github.wulkanowy.api.attendance;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import io.github.wulkanowy.api.StudentAndParentTestCase;
public class AttendanceTableTest extends StudentAndParentTestCase {
private AttendanceTable excellent;
private AttendanceTable full;
@Before
public void setUp() throws Exception {
excellent = new AttendanceTable(getSnp("Frekwencja-excellent.html"));
full = new AttendanceTable(getSnp("Frekwencja-full.html"));
}
@Test
public void getWeekStartByDate() throws Exception {
Assert.assertEquals("2015-08-31", excellent.getWeekTable().getStartDayDate());
Assert.assertEquals("2016-09-05", full.getWeekTable().getStartDayDate());
}
@Test
public void getWeekDaysNumber() throws Exception {
Assert.assertEquals(5, excellent.getWeekTable().getDays().size());
Assert.assertEquals(5, full.getWeekTable().getDays().size());
}
@Test
public void getDayLessonsNumber() throws Exception {
Assert.assertEquals(14, excellent.getWeekTable().getDay(0).getLessons().size());
Assert.assertEquals(14, full.getWeekTable().getDay(0).getLessons().size());
}
@Test
public void getDayDate() throws Exception {
Assert.assertEquals("2015-08-31", excellent.getWeekTable().getDay(0).getDate());
Assert.assertEquals("2015-09-02", excellent.getWeekTable().getDay(2).getDate());
Assert.assertEquals("2015-09-04", excellent.getWeekTable().getDay(4).getDate());
Assert.assertEquals("2016-09-05", full.getWeekTable().getDay(0).getDate());
Assert.assertEquals("2016-09-07", full.getWeekTable().getDay(2).getDate());
Assert.assertEquals("2016-09-09", full.getWeekTable().getDay(4).getDate());
}
@Test
public void getLessonSubject() throws Exception {
Assert.assertEquals("",
excellent.getWeekTable().getDay(0).getLesson(7).getSubject());
Assert.assertEquals("Uroczyste rozpoczęcie roku szkolnego 2015/2016",
excellent.getWeekTable().getDay(1).getLesson(1).getSubject());
Assert.assertEquals("Geografia",
excellent.getWeekTable().getDay(3).getLesson(4).getSubject());
Assert.assertEquals("Naprawa komputera",
full.getWeekTable().getDay(1).getLesson(8).getSubject());
Assert.assertEquals("Religia",
full.getWeekTable().getDay(3).getLesson(1).getSubject());
Assert.assertEquals("Metodologia programowania",
full.getWeekTable().getDay(4).getLesson(5).getSubject());
}
@Test
public void getLessonIsNotExist() throws Exception {
Assert.assertTrue(excellent.getWeekTable().getDay(0).getLesson(5).isNotExist());
Assert.assertFalse(excellent.getWeekTable().getDay(2).getLesson(1).isNotExist());
Assert.assertFalse(excellent.getWeekTable().getDay(4).getLesson(12).isNotExist());
Assert.assertFalse(full.getWeekTable().getDay(1).getLesson(12).isAbsenceUnexcused());
Assert.assertFalse(full.getWeekTable().getDay(3).getLesson(1).isAbsenceUnexcused());
Assert.assertFalse(full.getWeekTable().getDay(4).getLesson(5).isAbsenceUnexcused());
}
@Test
public void getLessonIsEmpty() throws Exception {
Assert.assertTrue(excellent.getWeekTable().getDay(0).getLesson(0).isEmpty());
Assert.assertFalse(excellent.getWeekTable().getDay(2).getLesson(6).isEmpty());
Assert.assertTrue(excellent.getWeekTable().getDay(4).getLesson(12).isEmpty());
Assert.assertTrue(full.getWeekTable().getDay(1).getLesson(9).isEmpty());
Assert.assertFalse(full.getWeekTable().getDay(2).getLesson(5).isEmpty());
Assert.assertFalse(full.getWeekTable().getDay(4).getLesson(2).isEmpty());
}
@Test
public void getLessonIsPresence() throws Exception {
Assert.assertFalse(excellent.getWeekTable().getDay(0).getLesson(7).isPresence());
Assert.assertTrue(excellent.getWeekTable().getDay(1).getLesson(1).isPresence());
Assert.assertTrue(excellent.getWeekTable().getDay(3).getLesson(7).isPresence());
Assert.assertTrue(full.getWeekTable().getDay(0).getLesson(1).isPresence());
Assert.assertTrue(full.getWeekTable().getDay(2).getLesson(6).isPresence());
Assert.assertFalse(full.getWeekTable().getDay(4).getLesson(7).isPresence());
}
@Test
public void getLessonIsAbsenceUnexcused() throws Exception {
Assert.assertFalse(excellent.getWeekTable().getDay(0).getLesson(7).isAbsenceUnexcused());
Assert.assertFalse(excellent.getWeekTable().getDay(2).getLesson(0).isAbsenceUnexcused());
Assert.assertFalse(excellent.getWeekTable().getDay(4).getLesson(4).isAbsenceUnexcused());
Assert.assertTrue(full.getWeekTable().getDay(1).getLesson(8).isAbsenceUnexcused());
Assert.assertFalse(full.getWeekTable().getDay(3).getLesson(1).isAbsenceUnexcused());
Assert.assertFalse(full.getWeekTable().getDay(4).getLesson(8).isAbsenceUnexcused());
}
@Test
public void getLessonIsAbsenceExcused() throws Exception {
Assert.assertFalse(excellent.getWeekTable().getDay(0).getLesson(7).isAbsenceExcused());
Assert.assertFalse(excellent.getWeekTable().getDay(2).getLesson(0).isAbsenceExcused());
Assert.assertFalse(excellent.getWeekTable().getDay(4).getLesson(4).isAbsenceExcused());
Assert.assertFalse(full.getWeekTable().getDay(2).getLesson(5).isAbsenceExcused());
Assert.assertFalse(full.getWeekTable().getDay(3).getLesson(1).isAbsenceExcused());
Assert.assertTrue(full.getWeekTable().getDay(4).getLesson(3).isAbsenceExcused());
}
@Test
public void getLessonIsAbsenceForSchoolReasons() throws Exception {
Assert.assertFalse(excellent.getWeekTable().getDay(0).getLesson(4).isAbsenceForSchoolReasons());
Assert.assertFalse(excellent.getWeekTable().getDay(2).getLesson(8).isAbsenceForSchoolReasons());
Assert.assertFalse(excellent.getWeekTable().getDay(4).getLesson(12).isAbsenceForSchoolReasons());
Assert.assertTrue(full.getWeekTable().getDay(2).getLesson(5).isAbsenceForSchoolReasons());
Assert.assertFalse(full.getWeekTable().getDay(3).getLesson(1).isAbsenceForSchoolReasons());
Assert.assertFalse(full.getWeekTable().getDay(4).getLesson(8).isAbsenceForSchoolReasons());
}
@Test
public void getLessonIsUnexcusedLateness() throws Exception {
Assert.assertFalse(excellent.getWeekTable().getDay(0).getLesson(4).isUnexcusedLateness());
Assert.assertFalse(excellent.getWeekTable().getDay(2).getLesson(8).isUnexcusedLateness());
Assert.assertFalse(excellent.getWeekTable().getDay(4).getLesson(12).isUnexcusedLateness());
Assert.assertTrue(full.getWeekTable().getDay(1).getLesson(6).isUnexcusedLateness());
Assert.assertFalse(full.getWeekTable().getDay(3).getLesson(1).isUnexcusedLateness());
Assert.assertFalse(full.getWeekTable().getDay(4).getLesson(8).isUnexcusedLateness());
}
@Test
public void getLessonIsExcusedLateness() throws Exception {
Assert.assertFalse(excellent.getWeekTable().getDay(0).getLesson(4).isExcusedLateness());
Assert.assertFalse(excellent.getWeekTable().getDay(2).getLesson(8).isExcusedLateness());
Assert.assertFalse(excellent.getWeekTable().getDay(4).getLesson(12).isExcusedLateness());
Assert.assertTrue(full.getWeekTable().getDay(1).getLesson(7).isExcusedLateness());
Assert.assertFalse(full.getWeekTable().getDay(3).getLesson(1).isExcusedLateness());
Assert.assertFalse(full.getWeekTable().getDay(4).getLesson(8).isExcusedLateness());
}
@Test
public void getLessonIsExemption() throws Exception {
Assert.assertFalse(excellent.getWeekTable().getDay(0).getLesson(4).isExemption());
Assert.assertFalse(excellent.getWeekTable().getDay(2).getLesson(8).isExemption());
Assert.assertFalse(excellent.getWeekTable().getDay(4).getLesson(12).isExemption());
Assert.assertFalse(full.getWeekTable().getDay(2).getLesson(5).isExemption());
Assert.assertFalse(full.getWeekTable().getDay(3).getLesson(1).isExemption());
Assert.assertTrue(full.getWeekTable().getDay(4).getLesson(8).isExemption());
}
}

View File

@ -1,90 +0,0 @@
package io.github.wulkanowy.api.attendance
import io.github.wulkanowy.api.StudentAndParentTestCase
import org.junit.Assert.*
import org.junit.Test
class AttendanceTest : StudentAndParentTestCase() {
private val full by lazy { Attendance(getSnp("Frekwencja-full.html")) }
private val excellent by lazy { Attendance(getSnp("Frekwencja-excellent.html")) }
@Test fun getAttendanceFull() {
assertTrue(full.getAttendance().isNotEmpty())
assertEquals(38, full.getAttendance().size)
}
@Test fun getAttendanceExcellent() {
assertTrue(excellent.getAttendance().isNotEmpty())
assertEquals(22, excellent.getAttendance().size)
}
@Test fun getLessonSubject() {
assertEquals("Uroczyste rozpoczęcie roku szkolnego 2015/2016", excellent.getAttendance()[0].subject)
assertEquals("Geografia", excellent.getAttendance()[11].subject)
assertEquals("Naprawa komputera", full.getAttendance()[14].subject)
assertEquals("Religia", full.getAttendance()[23].subject)
assertEquals("Metodologia programowania", full.getAttendance()[34].subject)
}
@Test fun getLessonIsPresence() {
assertTrue(excellent.getAttendance()[0].presence)
assertTrue(excellent.getAttendance()[15].presence)
assertTrue(full.getAttendance()[0].presence)
assertTrue(full.getAttendance()[21].presence)
assertFalse(full.getAttendance()[36].presence)
assertFalse(full.getAttendance()[37].presence)
}
@Test fun getLessonIsAbsenceUnexcused() {
assertFalse(excellent.getAttendance()[0].absenceUnexcused)
assertTrue(full.getAttendance()[14].absenceUnexcused)
assertFalse(full.getAttendance()[24].absenceUnexcused)
assertFalse(full.getAttendance()[37].absenceUnexcused)
}
@Test fun getLessonIsAbsenceExcused() {
assertFalse(excellent.getAttendance()[0].absenceExcused)
assertFalse(full.getAttendance()[5].absenceExcused)
assertFalse(full.getAttendance()[10].absenceExcused)
assertTrue(full.getAttendance()[36].absenceExcused)
}
@Test fun getLessonIsAbsenceForSchoolReasons() {
assertFalse(excellent.getAttendance()[6].absenceForSchoolReasons)
assertTrue(full.getAttendance()[19].absenceForSchoolReasons)
assertFalse(full.getAttendance()[0].absenceForSchoolReasons)
assertFalse(full.getAttendance()[37].absenceForSchoolReasons)
}
@Test fun getLessonIsUnexcusedLateness() {
assertFalse(excellent.getAttendance()[7].unexcusedLateness)
assertTrue(full.getAttendance()[12].unexcusedLateness)
assertFalse(full.getAttendance()[13].unexcusedLateness)
assertFalse(full.getAttendance()[36].unexcusedLateness)
}
@Test fun getLessonIsExcusedLateness() {
assertFalse(excellent.getAttendance()[8].excusedLateness)
assertTrue(full.getAttendance()[13].excusedLateness)
assertFalse(full.getAttendance()[14].excusedLateness)
assertFalse(full.getAttendance()[35].excusedLateness)
}
@Test fun getLessonIsExemption() {
assertFalse(excellent.getAttendance()[9].exemption)
assertFalse(full.getAttendance()[0].exemption)
assertFalse(full.getAttendance()[15].exemption)
assertTrue(full.getAttendance()[37].exemption)
}
}

View File

@ -1,70 +0,0 @@
package io.github.wulkanowy.api.exams
import io.github.wulkanowy.api.StudentAndParentTestCase
import org.junit.Assert.assertEquals
import org.junit.Test
class ExamsTest : StudentAndParentTestCase() {
private val onePerDay by lazy { Exams(getSnp("Sprawdziany-one-per-day.html")) }
private val empty by lazy { Exams(getSnp("Sprawdziany-empty.html")) }
@Test fun getExamsSizeTest() {
assertEquals(6, onePerDay.getExams().size)
assertEquals(0, empty.getExams().size)
}
@Test fun getExamsDateTest() {
assertEquals("2017-10-23", onePerDay.getExams()[0].date)
assertEquals("2017-10-24", onePerDay.getExams()[1].date)
assertEquals("2017-10-25", onePerDay.getExams()[2].date)
assertEquals("2017-10-25", onePerDay.getExams()[3].date)
assertEquals("2017-10-26", onePerDay.getExams()[4].date)
assertEquals("2017-10-27", onePerDay.getExams()[5].date)
}
@Test fun getExamSubjectTest() {
assertEquals("Sieci komputerowe", onePerDay.getExams()[0].subject)
assertEquals("Język angielski", onePerDay.getExams()[1].subject)
assertEquals("Język polski", onePerDay.getExams()[4].subject)
assertEquals("Metodologia programowania", onePerDay.getExams()[5].subject)
}
@Test fun getExamGroupTest() {
assertEquals("zaw2", onePerDay.getExams()[0].group)
assertEquals("J1", onePerDay.getExams()[1].group)
assertEquals("", onePerDay.getExams()[4].group)
}
@Test fun getExamTypeTest() {
assertEquals("Sprawdzian", onePerDay.getExams()[0].type)
assertEquals("Sprawdzian", onePerDay.getExams()[1].type)
assertEquals("Sprawdzian", onePerDay.getExams()[2].type)
assertEquals("Kartkówka", onePerDay.getExams()[3].type)
}
@Test fun getExamDescriptionTest() {
assertEquals("Łącza danych", onePerDay.getExams()[0].description)
assertEquals("Czasy teraźniejsze", onePerDay.getExams()[1].description)
assertEquals("", onePerDay.getExams()[5].description)
}
@Test fun getExamTeacherTest() {
assertEquals("Adam Wiśniewski", onePerDay.getExams()[0].teacher)
assertEquals("Natalia Nowak", onePerDay.getExams()[1].teacher)
assertEquals("Małgorzata Nowacka", onePerDay.getExams()[5].teacher)
}
@Test fun getExamTeacherSymbolTest() {
assertEquals("AW", onePerDay.getExams()[0].teacherSymbol)
assertEquals("NN", onePerDay.getExams()[1].teacherSymbol)
assertEquals("MN", onePerDay.getExams()[5].teacherSymbol)
}
@Test fun getExamEntryDateTest() {
assertEquals("2017-10-16", onePerDay.getExams()[0].entryDate)
assertEquals("2017-10-17", onePerDay.getExams()[1].entryDate)
assertEquals("2017-10-16", onePerDay.getExams()[5].entryDate)
}
}

View File

@ -1,111 +0,0 @@
package io.github.wulkanowy.api.exams;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import java.util.List;
import io.github.wulkanowy.api.StudentAndParentTestCase;
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());
}
@Test
public void getDaysListTest() throws Exception {
Assert.assertEquals(5, onePerDay.getCurrent().getDays().size());
Assert.assertEquals(7, onePerDay.getWeek("", false).getDays().size());
Assert.assertEquals(0, empty.getCurrent().getDays().size());
}
@Test
public void getExamsListTest() throws Exception {
List<ExamDay> notEmpty = onePerDay.getCurrent().getDays();
Assert.assertEquals(1, notEmpty.get(0).getExamList().size());
Assert.assertEquals(1, notEmpty.get(1).getExamList().size());
Assert.assertEquals(1, notEmpty.get(4).getExamList().size());
List<ExamDay> emptyToo = onePerDay.getWeek("", false).getDays();
Assert.assertEquals(1, emptyToo.get(0).getExamList().size());
Assert.assertEquals(1, emptyToo.get(1).getExamList().size());
Assert.assertEquals(1, emptyToo.get(4).getExamList().size());
}
@Test
public void getDayDateTest() throws Exception {
List<ExamDay> 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(4).getDate());
}
@Test
public void getDayNameTest() throws Exception {
List<ExamDay> 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(4).getDayName());
}
@Test
public void getExamSubjectAndGroupTest() throws Exception {
List<ExamDay> dayList = onePerDay.getCurrent().getDays();
Assert.assertEquals("Sieci komputerowe 3Ti|zaw2", dayList.get(0).getExamList().get(0).getSubjectAndGroup());
Assert.assertEquals("Język angielski 3Ti|J1", dayList.get(1).getExamList().get(0).getSubjectAndGroup());
Assert.assertEquals("Metodologia programowania 3Ti|zaw2", dayList.get(4).getExamList().get(0).getSubjectAndGroup());
}
@Test
public void getExamTypeTest() throws Exception {
List<ExamDay> dayList = onePerDay.getCurrent().getDays();
Assert.assertEquals("Sprawdzian", dayList.get(0).getExamList().get(0).getType());
Assert.assertEquals("Sprawdzian", dayList.get(1).getExamList().get(0).getType());
Assert.assertEquals("Sprawdzian", dayList.get(4).getExamList().get(0).getType());
}
@Test
public void getExamDescriptionTest() throws Exception {
List<ExamDay> dayList = onePerDay.getCurrent().getDays();
Assert.assertEquals("Łącza danych", dayList.get(0).getExamList().get(0).getDescription());
Assert.assertEquals("Czasy teraźniejsze", dayList.get(1).getExamList().get(0).getDescription());
Assert.assertEquals("", dayList.get(4).getExamList().get(0).getDescription());
}
@Test
public void getExamTeacherTest() throws Exception {
List<ExamDay> dayList = onePerDay.getCurrent().getDays();
Assert.assertEquals("Adam Wiśniewski [AW]", dayList.get(0).getExamList().get(0).getTeacher());
Assert.assertEquals("Natalia Nowak [NN]", dayList.get(1).getExamList().get(0).getTeacher());
Assert.assertEquals("Małgorzata Nowacka [MN]", dayList.get(4).getExamList().get(0).getTeacher());
}
@Test
public void getExamEntryDateTest() throws Exception {
List<ExamDay> 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(4).getExamList().get(0).getEntryDate());
}
}

View File

@ -1,106 +0,0 @@
package io.github.wulkanowy.api.grades;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import java.util.List;
import io.github.wulkanowy.api.StudentAndParentTestCase;
public class GradesListTest extends StudentAndParentTestCase {
private GradesList filled;
@Before
public void setUp() throws Exception {
filled = new GradesList(getSnp("OcenyWszystkie-filled.html"));
}
@Test
public void getAllTest() throws Exception {
Assert.assertEquals(7, filled.getAll("").size()); // 2 items are skipped
}
@Test
public void getSubjectTest() throws Exception {
List<Grade> list = filled.getAll("");
Assert.assertEquals("Zajęcia z wychowawcą", list.get(0).getSubject());
Assert.assertEquals("Język angielski", list.get(3).getSubject());
Assert.assertEquals("Wychowanie fizyczne", list.get(4).getSubject());
Assert.assertEquals("Język polski", list.get(5).getSubject());
}
@Test
public void getValueTest() throws Exception {
List<Grade> list = filled.getAll("");
Assert.assertEquals("5", list.get(0).getValue());
Assert.assertEquals("5", list.get(3).getValue());
Assert.assertEquals("1", list.get(4).getValue());
Assert.assertEquals("1", list.get(5).getValue());
}
@Test
public void getColorTest() throws Exception {
List<Grade> list = filled.getAll("");
Assert.assertEquals("000000", list.get(0).getColor());
Assert.assertEquals("1289F7", list.get(3).getColor());
Assert.assertEquals("6ECD07", list.get(4).getColor());
Assert.assertEquals("6ECD07", list.get(5).getColor());
}
@Test
public void getSymbolTest() throws Exception {
List<Grade> list = filled.getAll("");
Assert.assertEquals("A1", list.get(0).getSymbol());
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
public void getDescriptionTest() throws Exception {
List<Grade> list = filled.getAll("");
Assert.assertEquals("Dzień Kobiet w naszej klasie", list.get(0).getDescription());
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
public void getWeightTest() throws Exception {
List<Grade> list = filled.getAll("");
Assert.assertEquals("1,00", list.get(0).getWeight());
Assert.assertEquals("3,00", list.get(3).getWeight());
Assert.assertEquals("8,00", list.get(4).getWeight());
Assert.assertEquals("5,00", list.get(5).getWeight());
}
@Test
public void getDateTest() throws Exception {
List<Grade> list = filled.getAll("");
Assert.assertEquals("2017-03-21", list.get(0).getDate());
Assert.assertEquals("2017-06-02", list.get(3).getDate());
Assert.assertEquals("2017-04-02", list.get(4).getDate());
Assert.assertEquals("2017-02-06", list.get(5).getDate());
}
@Test
public void getTeacherTest() throws Exception {
List<Grade> list = filled.getAll("");
Assert.assertEquals("Patryk Maciejewski", list.get(0).getTeacher());
Assert.assertEquals("Oliwia Woźniak", list.get(3).getTeacher());
Assert.assertEquals("Klaudia Dziedzic", list.get(4).getTeacher());
Assert.assertEquals("Amelia Stępień", list.get(5).getTeacher());
}
}

View File

@ -1,59 +0,0 @@
package io.github.wulkanowy.api.grades
import io.github.wulkanowy.api.StudentAndParentTestCase
import org.junit.Assert.assertEquals
import org.junit.Test
class GradesSummaryTest : StudentAndParentTestCase() {
private val std by lazy { GradesSummary(getSnp("OcenyWszystkie-subjects.html")) }
private val average by lazy { GradesSummary(getSnp("OcenyWszystkie-subjects-average.html")) }
@Test fun getSummaryTest() {
assertEquals(5, std.getSummary().size)
assertEquals(5, average.getSummary().size)
}
@Test fun getNameTest() {
assertEquals("Zachowanie", std.getSummary()[0].name)
assertEquals("Praktyka zawodowa", std.getSummary()[1].name)
assertEquals("Metodologia programowania", std.getSummary()[2].name)
assertEquals("Podstawy przedsiębiorczości", std.getSummary()[3].name)
assertEquals("Wychowanie do życia w rodzinie", std.getSummary()[4].name)
assertEquals("Zachowanie", average.getSummary()[0].name)
assertEquals("Język polski", average.getSummary()[1].name)
assertEquals("Wychowanie fizyczne", average.getSummary()[2].name)
assertEquals("Język angielski", average.getSummary()[3].name)
assertEquals("Wiedza o społeczeństwie", average.getSummary()[4].name)
}
@Test fun getPredictedRatingTest() {
assertEquals("bardzo dobre", std.getSummary()[0].predicted)
assertEquals("-", std.getSummary()[1].predicted)
assertEquals("bardzo dobry", std.getSummary()[2].predicted)
assertEquals("3/4", std.getSummary()[3].predicted)
assertEquals("-", std.getSummary()[4].predicted)
assertEquals("bardzo dobre", average.getSummary()[0].predicted)
assertEquals("-", average.getSummary()[1].predicted)
assertEquals("bardzo dobry", average.getSummary()[2].predicted)
assertEquals("4/5", average.getSummary()[3].predicted)
assertEquals("-", average.getSummary()[4].predicted)
}
@Test fun getFinalRatingTest() {
assertEquals("bardzo dobre", std.getSummary()[0].final)
assertEquals("celujący", std.getSummary()[1].final)
assertEquals("celujący", std.getSummary()[2].final)
assertEquals("dostateczny", std.getSummary()[3].final)
assertEquals("-", std.getSummary()[4].final)
assertEquals("bardzo dobre", average.getSummary()[0].final)
assertEquals("dobry", average.getSummary()[1].final)
assertEquals("celujący", average.getSummary()[2].final)
assertEquals("bardzo dobry", average.getSummary()[3].final)
assertEquals("-", average.getSummary()[4].final)
}
}

View File

@ -1,74 +0,0 @@
package io.github.wulkanowy.api.grades
import io.github.wulkanowy.api.StudentAndParentTestCase
import org.junit.Assert
import org.junit.Test
import org.junit.Assert.*
class GradesTest : StudentAndParentTestCase() {
private val filled by lazy { Grades(getSnp("OcenyWszystkie-filled.html")) }
@Test fun getAllTest() {
Assert.assertEquals(7, filled.getGrades().size) // 2 items are skipped
}
@Test fun getSubjectTest() {
assertEquals("Zajęcia z wychowawcą", filled.getGrades()[0].subject)
assertEquals("Język angielski", filled.getGrades()[3].subject)
assertEquals("Wychowanie fizyczne", filled.getGrades()[4].subject)
assertEquals("Język polski", filled.getGrades()[5].subject)
}
@Test fun getValueTest() {
assertEquals("5", filled.getGrades()[0].value)
assertEquals("5", filled.getGrades()[3].value)
assertEquals("1", filled.getGrades()[4].value)
assertEquals("1", filled.getGrades()[5].value)
}
@Test fun getColorTest() {
assertEquals("000000", filled.getGrades()[0].color)
assertEquals("1289F7", filled.getGrades()[3].color)
assertEquals("6ECD07", filled.getGrades()[4].color)
assertEquals("6ECD07", filled.getGrades()[5].color)
}
@Test fun getSymbolTest() {
assertEquals("A1", filled.getGrades()[0].symbol)
assertEquals("BW3", filled.getGrades()[3].symbol)
assertEquals("STR", filled.getGrades()[4].symbol)
assertEquals("K", filled.getGrades()[5].symbol)
assertEquals("+Odp", filled.getGrades()[6].symbol)
}
@Test fun getDescriptionTest() {
assertEquals("Dzień Kobiet w naszej klasie", filled.getGrades()[0].description)
assertEquals("Writing", filled.getGrades()[3].description)
assertEquals("", filled.getGrades()[4].description)
assertEquals("Kordian", filled.getGrades()[5].description)
assertEquals("Kordian", filled.getGrades()[6].description)
}
@Test fun getWeightTest() {
assertEquals("1,00", filled.getGrades()[0].weight)
assertEquals("3,00", filled.getGrades()[3].weight)
assertEquals("8,00", filled.getGrades()[4].weight)
assertEquals("5,00", filled.getGrades()[5].weight)
}
@Test fun getDateTest() {
assertEquals("2017-03-21", filled.getGrades()[0].date)
assertEquals("2017-06-02", filled.getGrades()[3].date)
assertEquals("2017-04-02", filled.getGrades()[4].date)
assertEquals("2017-02-06", filled.getGrades()[5].date)
}
@Test fun getTeacherTest() {
assertEquals("Patryk Maciejewski", filled.getGrades()[0].teacher)
assertEquals("Oliwia Woźniak", filled.getGrades()[3].teacher)
assertEquals("Klaudia Dziedzic", filled.getGrades()[4].teacher)
assertEquals("Amelia Stępień", filled.getGrades()[5].teacher)
}
}

View File

@ -1,82 +0,0 @@
package io.github.wulkanowy.api.grades;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import java.util.List;
import io.github.wulkanowy.api.StudentAndParentTestCase;
public class SubjectsListTest extends StudentAndParentTestCase {
private SubjectsList std;
private SubjectsList average;
@Before
public void setUp() throws Exception {
std = new SubjectsList(getSnp("OcenyWszystkie-subjects.html"));
average = new SubjectsList(getSnp("OcenyWszystkie-subjects-average.html"));
}
@Test
public void getAllTest() throws Exception {
Assert.assertEquals(5, std.getAll().size());
Assert.assertEquals(5, average.getAll().size());
}
@Test
public void getNameTest() throws Exception {
List<Subject> stdList = std.getAll();
Assert.assertEquals("Zachowanie", stdList.get(0).getName());
Assert.assertEquals("Praktyka zawodowa", stdList.get(1).getName());
Assert.assertEquals("Metodologia programowania", stdList.get(2).getName());
Assert.assertEquals("Podstawy przedsiębiorczości", stdList.get(3).getName());
Assert.assertEquals("Wychowanie do życia w rodzinie", stdList.get(4).getName());
List<Subject> averageList = average.getAll();
Assert.assertEquals("Zachowanie", averageList.get(0).getName());
Assert.assertEquals("Język polski", averageList.get(1).getName());
Assert.assertEquals("Wychowanie fizyczne", averageList.get(2).getName());
Assert.assertEquals("Język angielski", averageList.get(3).getName());
Assert.assertEquals("Wiedza o społeczeństwie", averageList.get(4).getName());
}
@Test
public void getPredictedRatingTest() throws Exception {
List<Subject> stdList = std.getAll();
Assert.assertEquals("bardzo dobre", stdList.get(0).getPredictedRating());
Assert.assertEquals("-", stdList.get(1).getPredictedRating());
Assert.assertEquals("bardzo dobry", stdList.get(2).getPredictedRating());
Assert.assertEquals("3/4", stdList.get(3).getPredictedRating());
Assert.assertEquals("-", stdList.get(4).getPredictedRating());
List<Subject> averageList = average.getAll();
Assert.assertEquals("bardzo dobre", averageList.get(0).getPredictedRating());
Assert.assertEquals("-", averageList.get(1).getPredictedRating());
Assert.assertEquals("bardzo dobry", averageList.get(2).getPredictedRating());
Assert.assertEquals("4/5", averageList.get(3).getPredictedRating());
Assert.assertEquals("-", averageList.get(4).getPredictedRating());
}
@Test
public void getFinalRatingTest() throws Exception {
List<Subject> stdList = std.getAll();
Assert.assertEquals("bardzo dobre", stdList.get(0).getFinalRating());
Assert.assertEquals("celujący", stdList.get(1).getFinalRating());
Assert.assertEquals("celujący", stdList.get(2).getFinalRating());
Assert.assertEquals("dostateczny", stdList.get(3).getFinalRating());
Assert.assertEquals("-", stdList.get(4).getFinalRating());
List<Subject> averageList = average.getAll();
Assert.assertEquals("bardzo dobre", averageList.get(0).getFinalRating());
Assert.assertEquals("dobry", averageList.get(1).getFinalRating());
Assert.assertEquals("celujący", averageList.get(2).getFinalRating());
Assert.assertEquals("bardzo dobry", averageList.get(3).getFinalRating());
Assert.assertEquals("-", averageList.get(4).getFinalRating());
}
}

View File

@ -1,44 +0,0 @@
package io.github.wulkanowy.api.homework
import io.github.wulkanowy.api.StudentAndParentTestCase
import org.junit.Assert.assertEquals
import org.junit.Test
class HomeworkListTest : StudentAndParentTestCase() {
private val snp by lazy { getSnp("ZadaniaDomowe.html") }
@Test fun getHomework() {
assertEquals(2, HomeworkList(snp).getHomework().size)
}
@Test fun getDate() {
assertEquals("2018-08-13", HomeworkList(snp).getHomework("2018-08-13")[0].date)
assertEquals("1970-01-01", HomeworkList(snp).getHomework("1970-01-01")[1].date)
}
@Test fun getSubject() {
assertEquals("Sieci komputerowe i administrowanie sieciami", HomeworkList(snp).getHomework()[0].subject)
assertEquals("Naprawa komputera", HomeworkList(snp).getHomework()[1].subject)
}
@Test fun getContent() {
assertEquals("Zadania egzaminacyjne", HomeworkList(snp).getHomework()[0].content)
assertEquals("Test diagnozujący", HomeworkList(snp).getHomework()[1].content)
}
@Test fun getTeacher() {
assertEquals("Słowacki Juliusz", HomeworkList(snp).getHomework()[0].teacher)
assertEquals("Mickiewicz Adam", HomeworkList(snp).getHomework()[1].teacher)
}
@Test fun getTeacherSymbol() {
assertEquals("SJ", HomeworkList(snp).getHomework()[0].teacherSymbol)
assertEquals("MA", HomeworkList(snp).getHomework()[1].teacherSymbol)
}
@Test fun getEntryDate() {
assertEquals("2017-10-16", HomeworkList(snp).getHomework()[0].entryDate)
assertEquals("2017-10-25", HomeworkList(snp).getHomework()[1].entryDate)
}
}

View File

@ -1,136 +0,0 @@
package io.github.wulkanowy.api.login;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.junit.Assert;
import org.junit.Test;
import org.mockito.Mockito;
import java.util.List;
import io.github.wulkanowy.api.Client;
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);
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();
Mockito.when(client.getHost()).thenReturn("fakelog.cf");
Login login = new Login(client);
login.login("a@a", "pswd", "d123");
Assert.assertEquals("d123", client.getSymbol());
}
@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.sendCredentials("a@a", "pswd");
}
@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);
Assert.assertEquals(
getFixtureAsString("cert-stock.xml").replaceAll("\\s+", ""),
login.sendCredentials("a@a", "passwd")
.select("input[name=wresult]")
.attr("value")
.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();
Mockito.when(client.getHost()).thenReturn("fakelog.cf");
Login login = new Login(client);
login.sendCertificate(getFixtureAsDocument("Logowanie-certyfikat.html"), "wulkanowyschool321");
Assert.assertEquals("wulkanowyschool321", client.getSymbol());
}
@Test
public void sendCertificateDefaultSymbolSuccessTest() throws Exception {
Client client = getClient("Logowanie-success.html");
Mockito.doCallRealMethod().when(client).setSymbol(Mockito.anyString());
Mockito.when(client.getSymbol()).thenCallRealMethod();
Mockito.when(client.getHost()).thenReturn("fakelog.cf");
Login login = new Login(client);
login.sendCertificate(getFixtureAsDocument("Logowanie-certyfikat.html"), "Default");
Assert.assertEquals("demo12345", client.getSymbol());
}
@Test(expected = AccountPermissionException.class)
public void sendCertificateAccountPermissionTest() throws Exception {
Client client = getClient("Logowanie-brak-dostepu.html");
Login login = new Login(client);
login.sendCertificate(getFixtureAsDocument("Logowanie-certyfikat.html"), "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");
}
@Test
public void findSymbolInCertificateTest() throws Exception {
Login login = new Login(getClient("Logowanie-certyfikat.html"));
String certificate = getFixtureAsString("cert-stock.xml");
List<String> symbols = login.getSymbolsFromCertificate(certificate);
Assert.assertEquals("demo12345", login.getLastSymbol(symbols));
}
@Test(expected = AccountPermissionException.class)
public void findSymbolInCertificateWithoutSecondInstanceTest() throws Exception {
Login login = new Login(getClient("Logowanie-certyfikat.html"));
List<String> symbols = login.getSymbolsFromCertificate(getFixtureAsString("cert-no-symbols.xml"));
login.getLastSymbol(symbols);
}
}

View File

@ -1,68 +0,0 @@
package io.github.wulkanowy.api.login
import io.github.wulkanowy.api.Client
import io.github.wulkanowy.api.FixtureHelper
import io.github.wulkanowy.api.VulcanException
import org.jsoup.Jsoup
import org.jsoup.nodes.Document
import org.junit.Assert.assertEquals
import org.junit.Before
import org.junit.Test
import org.mockito.Mockito
import org.mockito.Mockito.mock
class StartPageTest {
private val client: Client = mock(Client::class.java)
@Before fun setUp() {
Mockito.`when`(client.host).thenReturn("fakelog.cf")
}
private fun getDoc(name: String): Document = Jsoup.parse(FixtureHelper.getAsString(javaClass.getResourceAsStream(name)))
@Test fun getSchoolTest() {
assertEquals("534213", StartPage(client).getSchools(getDoc("../Start-std.html"))[0].id)
}
@Test fun getMultiSchoolTest() {
val schools = StartPage(client).getSchools(getDoc("../Start-multi.html"))
assertEquals("123456", schools[0].id)
assertEquals("123457", schools[1].id)
}
@Test fun getSchoolNameTest() {
assertEquals("Uczeń", StartPage(client).getSchools(getDoc("../Start-std.html"))[0].name)
}
@Test fun getMultiSchoolNameTest() {
val schools = StartPage(client).getSchools(getDoc("../Start-multi.html"))
assertEquals("GIMBB", schools[0].name)
assertEquals("SPBB", schools[1].name)
}
@Test(expected = VulcanException::class)
fun getSnpPageUrlWithWrongPage() {
StartPage(client).getSchools(getDoc("../OcenyWszystkie-semester.html"))
}
@Test
fun getExtractedIDStandardTest() {
assertEquals("123456", StartPage(client)
.getExtractedIdFromUrl("https://uonetplus-opiekun.fakelog.cf/powiat/123456/Start/Index/"))
}
@Test
fun getExtractedIDDemoTest() {
assertEquals("demo12345", StartPage(client)
.getExtractedIdFromUrl("https://uonetplus-opiekun.fakelog.cf/demoupowiat/demo12345/Start/Index/"))
}
@Test(expected = VulcanException::class)
fun getExtractedIDNotLoggedTest() {
assertEquals("123", StartPage(client)
.getExtractedIdFromUrl("https://uonetplus.NOTfakelog.cf/powiat/"))
}
}

View File

@ -1,89 +0,0 @@
package io.github.wulkanowy.api.messages;
import org.junit.Assert;
import org.junit.Test;
import org.mockito.Mockito;
import java.util.List;
import io.github.wulkanowy.api.Client;
import io.github.wulkanowy.api.FixtureHelper;
import io.github.wulkanowy.api.NotLoggedInErrorException;
public class MessagesTest {
private Client getFixtureAsString(String fixtureFileName) throws Exception {
Client client = Mockito.mock(Client.class);
Mockito.when(client.getJsonStringByUrl(Mockito.anyString()))
.thenReturn(FixtureHelper.getAsString(getClass().getResourceAsStream(fixtureFileName)));
Mockito.when(client.postJsonStringByUrl(Mockito.anyString(), Mockito.any()))
.thenReturn(FixtureHelper.getAsString(getClass().getResourceAsStream(fixtureFileName)));
return client;
}
@Test
public void getMessages() throws Exception {
Client client = getFixtureAsString("GetWiadomosciOdebrane.json");
Messages messages = new Messages(client);
List<Message> messageList = messages.getReceived();
Assert.assertEquals(true, messageList.get(1).unread);
Assert.assertEquals("2016-03-15 09:00:00", messageList.get(0).date);
Assert.assertEquals(null, messageList.get(0).content);
Assert.assertEquals("Kowalski Jan", messageList.get(0).sender);
Assert.assertEquals(12347, messageList.get(2).id);
}
@Test
public void getMessagesEmpty() throws Exception {
Client client = getFixtureAsString("GetWiadomosciUsuniete-empty.json");
Messages messages = new Messages(client);
List<Message> messageList = messages.getSent();
Assert.assertTrue(messageList.isEmpty());
}
@Test(expected = NotLoggedInErrorException.class)
public void getMessagesError() throws Exception {
Client client = getFixtureAsString("UndefinedError.txt");
Messages messages = new Messages(client);
messages.getDeleted();
}
@Test(expected = BadRequestException.class)
public void getMessagesBadRequest() throws Exception {
Client client = getFixtureAsString("PageError.html");
Messages messages = new Messages(client);
messages.getDeleted();
}
@Test
public void getMessage() throws Exception {
Client client = getFixtureAsString("GetTrescWiadomosci.json");
Messages messages = new Messages(client);
Message message = messages.getMessage(123, Messages.RECEIVED_FOLDER);
Assert.assertEquals(12345, message.id);
Assert.assertEquals("Witam, …. \nPozdrawiam Krzysztof Czerkas", message.content);
}
@Test(expected = NotLoggedInErrorException.class)
public void getMessageError() throws Exception {
Client client = getFixtureAsString("UndefinedError.txt");
Messages messages = new Messages(client);
messages.getMessage(321, Messages.SENT_FOLDER);
}
@Test(expected = BadRequestException.class)
public void getMessageBadRequest() throws Exception {
Client client = getFixtureAsString("PageError.html");
Messages messages = new Messages(client);
messages.getMessage(1, Messages.DELETED_FOLDER);
}
}

View File

@ -1,17 +0,0 @@
package io.github.wulkanowy.api.mobile
import io.github.wulkanowy.api.StudentAndParentTestCase
import org.junit.Assert.assertEquals
import org.junit.Test
class RegisterDeviceTest : StudentAndParentTestCase() {
@Test
fun getTokenTest() {
val registration = RegisterDevice(getSnp("Rejestruj.html"))
assertEquals("3S1A1B2C", registration.getToken().token)
assertEquals("Default", registration.getToken().symbol)
assertEquals("1234567", registration.getToken().pin)
}
}

View File

@ -1,37 +0,0 @@
package io.github.wulkanowy.api.mobile
import io.github.wulkanowy.api.StudentAndParentTestCase
import org.junit.Assert.assertEquals
import org.junit.Test
class RegisteredDevicesListTest : StudentAndParentTestCase() {
private val filled = RegisteredDevices(getSnp("DostepMobilny-filled.html"))
@Test
fun getListTest() {
assertEquals(2, filled.getList().size)
}
@Test
fun getNameTest() {
assertEquals("google Android SDK built for x86", filled.getList()[0].name)
assertEquals("google (Android SDK) built for x86", filled.getList()[1].name)
}
@Test
fun getSystemTest() {
assertEquals("Android 8.1.0", filled.getList()[0].system)
assertEquals("Android 8.1.0", filled.getList()[1].system)
}
@Test
fun getDateTest() {
assertEquals("2018-01-20 22:35:30", filled.getList()[0].date)
}
@Test
fun getIdTest() {
assertEquals(321, filled.getList()[0].id)
}
}

View File

@ -1,36 +0,0 @@
package io.github.wulkanowy.api.notes;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import java.util.List;
import io.github.wulkanowy.api.StudentAndParentTestCase;
public class AchievementsListTest extends StudentAndParentTestCase {
private AchievementsList filledAchievementsList;
private AchievementsList emptyAchievementsList;
@Before
public void setUp() throws Exception {
filledAchievementsList = new AchievementsList(getSnp("UwagiOsiagniecia-filled.html"));
emptyAchievementsList = new AchievementsList(getSnp("UwagiOsiagniecia-empty.html"));
}
@Test
public void getAllAchievementsTest() throws Exception {
Assert.assertEquals(2, filledAchievementsList.getAllAchievements().size());
Assert.assertEquals(0, emptyAchievementsList.getAllAchievements().size());
}
@Test
public void getAchievements() throws Exception {
List<String> filledList = filledAchievementsList.getAllAchievements();
Assert.assertEquals("I miejsce w ogólnopolskim konkursie ortograficznym", filledList.get(0));
Assert.assertEquals("III miejsce w ogólnopolskim konkursie plastycznym", filledList.get(1));
}
}

View File

@ -1,60 +0,0 @@
package io.github.wulkanowy.api.notes;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import java.util.List;
import io.github.wulkanowy.api.StudentAndParentTestCase;
public class NotesListTest extends StudentAndParentTestCase {
private NotesList filled;
private NotesList empty;
@Before
public void setUp() throws Exception {
filled = new NotesList(getSnp("UwagiOsiagniecia-filled.html"));
empty = new NotesList(getSnp("UwagiOsiagniecia-empty.html"));
}
@Test
public void getAllNotesTest() throws Exception {
Assert.assertEquals(3, filled.getAllNotes().size());
Assert.assertEquals(0, empty.getAllNotes().size());
}
@Test
public void getDateTest() throws Exception {
List<Note> filledList = filled.getAllNotes();
Assert.assertEquals("2017-06-06", filledList.get(0).getDate());
Assert.assertEquals("2016-10-01", filledList.get(2).getDate());
}
@Test
public void getTeacherTest() throws Exception {
List<Note> filledList = filled.getAllNotes();
Assert.assertEquals("Jan Kowalski [JK]", filledList.get(0).getTeacher());
Assert.assertEquals("Kochański Leszek [KL]", filledList.get(2).getTeacher());
}
@Test
public void getCategoryTest() throws Exception {
List<Note> filledList = filled.getAllNotes();
Assert.assertEquals("Zaangażowanie społeczne", filledList.get(0).getCategory());
Assert.assertEquals("Zachowanie na lekcji", filledList.get(2).getCategory());
}
@Test
public void getContentTest() throws Exception {
List<Note> filledList = filled.getAllNotes();
Assert.assertEquals("Pomoc przy pikniku charytatywnym", filledList.get(0).getContent());
Assert.assertEquals("Przeszkadzanie w prowadzeniu lekcji", filledList.get(2).getContent());
}
}

View File

@ -1,48 +0,0 @@
package io.github.wulkanowy.api.school;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import io.github.wulkanowy.api.StudentAndParentTestCase;
public class SchoolInfoTest extends StudentAndParentTestCase {
private SchoolInfo schoolInfo;
@Before
public void setUp() throws Exception {
schoolInfo = new SchoolInfo(getSnp("Szkola.html"));
}
@Test
public void getNameTest() throws Exception {
Assert.assertEquals("Zespół Szkół nr 64", schoolInfo.getSchoolData().getName());
}
@Test
public void getAddressTest() throws Exception {
Assert.assertEquals("ul. Wiśniowa 128, 01-234 Rogalowo, Nibylandia",
schoolInfo.getSchoolData().getAddress());
}
@Test
public void getPhoneNumberTest() throws Exception {
Assert.assertEquals("55 5555555", schoolInfo.getSchoolData().getPhoneNumber());
}
@Test
public void getHeadmasterTest() throws Exception {
Assert.assertEquals("Antoni Sobczyk", schoolInfo.getSchoolData().getHeadmaster());
}
@Test
public void getPedagoguesTest() throws Exception {
Assert.assertArrayEquals(new String[]{
"Zofia Czerwińska [ZC]",
"Aleksander Krzemiński [AK]",
"Karolina Kowalska [KK]",
"Bartek Dąbrowski [BD]"
}, schoolInfo.getSchoolData().getPedagogues());
}
}

View File

@ -1,56 +0,0 @@
package io.github.wulkanowy.api.school;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import java.util.List;
import io.github.wulkanowy.api.StudentAndParentTestCase;
public class TeachersInfoTest extends StudentAndParentTestCase {
private TeachersInfo teachersInfo;
@Before
public void setUp() throws Exception {
teachersInfo = new TeachersInfo(getSnp("Szkola.html"));
}
@Test
public void getClassNameTest() throws Exception {
Assert.assertEquals("1a", teachersInfo.getTeachersData().getClassName());
}
@Test
public void getClassTeacherTest() throws Exception {
Assert.assertArrayEquals(new String[]{
"Karolina Kowalska [AN]",
"Antoni Sobczyk [AS]"
}, teachersInfo.getTeachersData().getClassTeacher());
}
@Test
public void getTeachersDataSubjectsNameTest() throws Exception {
List<Subject> subjects = teachersInfo.getTeachersData().getSubjects();
Assert.assertEquals("Biologia", subjects.get(0).getName());
Assert.assertEquals("Język angielski", subjects.get(6).getName());
}
@Test
public void getTeachersDataSubjectsTeachersTest() throws Exception {
List<Subject> subjects = teachersInfo.getTeachersData().getSubjects();
Assert.assertArrayEquals(new String[]{"Karolina Kowalska [AN]"},
subjects.get(0).getTeachers());
Assert.assertEquals("Karolina Kowalska [AN]",
subjects.get(0).getTeachers()[0]);
Assert.assertArrayEquals(new String[]{
"Karolina Kowalska [AN]",
"Mateusz Kowal [MK]",
"Amelia Mazur [AM]"
}, subjects.get(6).getTeachers());
}
}

View File

@ -1,183 +0,0 @@
package io.github.wulkanowy.api.timetable
import io.github.wulkanowy.api.StudentAndParentTestCase
import org.junit.Assert.*
import org.junit.Test
class TimetableKtTest : StudentAndParentTestCase() {
private val std by lazy { TimetableKt(getSnp("PlanLekcji-std.html")) }
private val full by lazy { TimetableKt(getSnp("PlanLekcji-full.html")) }
private val holidays by lazy { TimetableKt(getSnp("PlanLekcji-holidays.html")) }
@Test fun getTimetableTest() {
assertEquals(32, std.getTimetable().size)
assertEquals(43, full.getTimetable().size)
assertEquals(0, holidays.getTimetable().size)
}
@Test fun getStartDayDateTest() {
assertEquals("2017-06-19", std.getTimetable()[0].date)
assertEquals("2017-06-20", std.getTimetable()[8].date)
assertEquals("2017-06-21", std.getTimetable()[16].date)
assertEquals("2017-06-19", full.getTimetable()[0].date)
assertEquals("2017-06-20", full.getTimetable()[10].date)
assertEquals("2017-06-22", full.getTimetable()[30].date)
}
@Test fun getDayIsFreeTest() {
assertFalse(std.getTimetable().first().freeDayName.isNotEmpty())
assertFalse(full.getTimetable().last().freeDayName.isNotEmpty())
}
@Test fun getDayFreeDayName() {
assertNotEquals("Wakacje", std.getTimetable()[0].freeDayName)
assertNotEquals("Ferie letnie", full.getTimetable()[15].freeDayName)
}
@Test fun getLessonNumberTest() {
assertEquals(2, std.getTimetable()[1].number)
assertEquals(5, std.getTimetable()[10].number)
assertEquals(0, full.getTimetable()[0].number)
assertEquals(9, full.getTimetable()[19].number)
}
@Test fun getLessonSubjectTest() {
assertEquals("Historia", std.getTimetable()[1].subject)
assertEquals("Zajęcia techniczne", std.getTimetable()[17].subject)
assertEquals("Wychowanie fizyczne", std.getTimetable()[7].subject)
assertEquals("Fizyka", full.getTimetable()[0].subject)
assertEquals("Język angielski", full.getTimetable()[1].subject)
assertEquals("Wychowanie fizyczne", full.getTimetable()[9].subject)
assertEquals("Metodologia programowania", full.getTimetable()[10].subject)
assertEquals("Wychowanie do życia w rodzinie", full.getTimetable()[20].subject)
assertEquals("Wychowanie fizyczne", full.getTimetable()[30].subject)
assertEquals("Uroczyste zakończenie roku szkolnego", full.getTimetable()[37].subject)
assertEquals("Język niemiecki", full.getTimetable()[39].subject)
}
@Test fun getLessonTeacherTest() {
assertEquals("Bogatka Katarzyna", std.getTimetable()[1].teacher)
assertEquals("Chlebowski Stanisław", std.getTimetable()[17].teacher)
assertEquals("Kobczyk Iwona", full.getTimetable()[1].teacher)
assertEquals("Bączek Grzegorz", full.getTimetable()[7].teacher)
assertEquals("Nowak Jadwiga", full.getTimetable()[20].teacher)
assertEquals("Nowicka Irena", full.getTimetable()[30].teacher)
assertEquals("Baran Małgorzata", full.getTimetable()[37].teacher)
assertEquals("", full.getTimetable()[38].teacher)
}
@Test fun getLessonRoomTest() {
assertEquals("", std.getTimetable()[15].room)
assertEquals("19", full.getTimetable()[0].room)
assertEquals("33", full.getTimetable()[7].room)
assertEquals("32", full.getTimetable()[10].room)
assertEquals("32", full.getTimetable()[18].room)
assertEquals("32", full.getTimetable()[28].room)
assertEquals("G4", full.getTimetable()[30].room)
assertEquals("37", full.getTimetable()[37].room)
}
@Test fun getLessonDescriptionTest() {
assertEquals("", std.getTimetable()[15].description)
assertEquals("okienko dla uczniów", full.getTimetable()[7].description)
assertEquals("przeniesiona z lekcji 7, 01.12.2017", full.getTimetable()[11].description)
assertEquals("przeniesiona z lekcji 7, 20.06.2017", full.getTimetable()[12].description)
assertEquals("przeniesiona z lekcji 4, 20.06.2017", full.getTimetable()[13].description)
assertEquals("zastępstwo (poprzednio: Religia)", full.getTimetable()[20].description)
assertEquals("egzamin", full.getTimetable()[29].description)
assertEquals("zastępstwo (poprzednio: Wychowanie fizyczne)", full.getTimetable()[30].description)
assertEquals("", full.getTimetable()[37].description)
assertEquals("", full.getTimetable()[38].description)
assertEquals("poprzednio: Wychowanie fizyczne", full.getTimetable()[39].description)
assertEquals("bez nawiasów (poprzednio: Religia)", full.getTimetable()[40].description)
assertEquals("opis w uwadze bez klasy w spanie", full.getTimetable()[41].description)
assertEquals("poprzednio: Zajęcia z wychowawcą", full.getTimetable()[42].description)
}
@Test fun getLessonGroupNameTest() {
assertEquals("CH", std.getTimetable()[2].groupName)
assertEquals("JNPW", std.getTimetable()[26].groupName)
assertEquals("", full.getTimetable()[7].groupName)
assertEquals("zaw2", full.getTimetable()[10].groupName)
assertEquals("wf2", full.getTimetable()[13].groupName)
assertEquals("zaw1", full.getTimetable()[30].groupName)
}
@Test fun getLessonStartTimeTest() {
assertEquals("08:00", std.getTimetable()[0].startTime)
assertEquals("13:20", std.getTimetable()[12].startTime)
assertEquals("07:10", full.getTimetable()[0].startTime)
assertEquals("12:20", full.getTimetable()[26].startTime)
}
@Test fun getLessonEndTimeTest() {
assertEquals("08:45", std.getTimetable()[0].endTime)
assertEquals("14:05", std.getTimetable()[12].endTime)
assertEquals("07:55", full.getTimetable()[10].endTime)
assertEquals("13:55", full.getTimetable()[36].endTime)
}
@Test fun getLessonIsEmptyTest() {
assertFalse(std.getTimetable()[9].empty)
assertFalse(full.getTimetable()[7].empty)
assertFalse(full.getTimetable()[10].empty)
assertFalse(full.getTimetable()[12].empty)
}
@Test fun getLessonIsDivisionIntoGroupsTest() {
assertTrue(std.getTimetable()[2].divisionIntoGroups)
assertTrue(std.getTimetable()[26].divisionIntoGroups)
assertFalse(full.getTimetable()[7].divisionIntoGroups)
assertTrue(full.getTimetable()[13].divisionIntoGroups)
assertTrue(full.getTimetable()[30].divisionIntoGroups)
}
@Test fun getLessonIsPlanningTest() {
assertFalse(std.getTimetable()[30].planning)
assertFalse(full.getTimetable()[1].planning)
assertTrue(full.getTimetable()[13].planning)
assertTrue(full.getTimetable()[37].planning)
}
@Test fun getLessonIsRealizedTest() {
assertTrue(std.getTimetable()[15].realized)
assertTrue(full.getTimetable()[1].realized)
assertTrue(full.getTimetable()[13].realized)
assertFalse(full.getTimetable()[37].realized)
}
@Test fun getLessonIsMovedOrCanceledTest() {
assertFalse(std.getTimetable()[15].movedOrCanceled)
assertTrue(full.getTimetable()[7].movedOrCanceled)
assertFalse(full.getTimetable()[13].movedOrCanceled)
assertFalse(full.getTimetable()[37].movedOrCanceled)
}
@Test fun getLessonIsNewMovedInOrChangedTest() {
assertFalse(std.getTimetable()[15].newMovedInOrChanged)
assertFalse(full.getTimetable()[1].newMovedInOrChanged)
assertTrue(full.getTimetable()[12].newMovedInOrChanged)
assertTrue(full.getTimetable()[13].newMovedInOrChanged)
assertTrue(full.getTimetable()[30].newMovedInOrChanged)
assertFalse(full.getTimetable()[38].newMovedInOrChanged)
assertTrue(full.getTimetable()[39].newMovedInOrChanged)
}
}

Some files were not shown because too many files have changed in this diff Show More