1
0

Compare commits

...

236 Commits
0.4.0 ... 0.8.1

Author SHA1 Message Date
a191f03cdf Version 0.8.1 2019-04-30 23:56:22 +02:00
63404b8576 Fix entity list comparing (#335) 2019-04-30 19:04:05 +02:00
1b7760ff88 Fix dark theme background with custom theme engine (#334) 2019-04-30 17:45:37 +02:00
24f58835e7 Fix menu view initialization and restoration (#333) 2019-04-30 17:28:09 +02:00
b032c459d1 Fix theme on release build (#332) 2019-04-30 11:16:23 +02:00
df0a1e59cc Version 0.8.0 2019-04-29 20:39:35 +02:00
dbbc8069b1 Add showing proper fragment in notifications (#331) 2019-04-29 19:56:23 +02:00
f84040109c Add lucky number widget (#292) 2019-04-29 14:33:33 +02:00
baf1420193 Improve login student selection layout (#329) 2019-04-29 00:55:30 +02:00
4a36d78709 Add activity and fragment lifecycle logging (#327) 2019-04-26 23:53:02 +02:00
4464812651 Fix configure activity's theme (#325) 2019-04-22 09:27:25 +02:00
72a35481e5 Fix showing last message after update (#326) 2019-04-22 09:13:26 +02:00
017c200115 Fix grade summary final grade string (#324) 2019-04-20 22:19:06 +02:00
2bf7755157 Add AMOLED mode (#279) 2019-04-19 23:52:34 +02:00
269af4b7ba Update dependencies (#323) 2019-04-18 16:38:49 +02:00
7431738366 Add a selection of multiple students to login (#318) 2019-04-18 12:18:58 +02:00
034b99c7ab Add counting of the full-year average to the summary of grades (#322) 2019-04-18 00:32:43 +02:00
74e98e4430 Change style of privacy policy link (#321) 2019-04-09 23:33:53 +02:00
cbf3215dd1 Merge branch '0.7.x' 2019-04-08 13:51:02 +02:00
c18877466f Add account picker for timetable widget (#314)
Close #281
2019-04-08 00:18:45 +02:00
6cd6cae1e0 Version 0.7.6 2019-04-07 11:08:46 +02:00
333f7bfa16 Add privacy policy link (#320) 2019-04-07 10:59:27 +02:00
aa6dcaff94 Merge branch '0.7.x' 2019-04-06 01:18:03 +02:00
f2fa04105d Version 0.7.5 2019-04-06 01:06:11 +02:00
7d97d71066 Fix message loading if student and parent are logged in (#319)
Fixes #316
2019-04-05 19:35:21 +02:00
8daea5c900 Add class name to student (#315) 2019-04-04 13:00:07 +02:00
2bff468e56 Add deleting messages (#290) 2019-03-31 22:01:04 +02:00
f2855d598d Merge branch '0.7.x' 2019-03-30 20:19:34 +01:00
297a2909ba Version 0.7.4 2019-03-30 19:45:57 +01:00
935bec3f5b Add 0,75 grade modifier (#313) 2019-03-30 19:26:19 +01:00
e71dd55066 Fix more than one current semester (#307) 2019-03-30 18:28:37 +01:00
4e3864f26f Add opening login view on no current student (#312) 2019-03-30 09:31:30 +01:00
8601093725 Again fix rejected execution in sync worker (#310) 2019-03-28 23:30:30 +01:00
b97b94ae29 Fix more than one current student (#311)
Fix #309
2019-03-28 23:07:59 +01:00
c6c7357623 Fix black spinner in login form (#308) 2019-03-28 18:27:17 +01:00
1ebc296bfe Merge branch '0.7.x' 2019-03-26 21:22:17 +01:00
c2ab53cfeb Version 0.7.3 2019-03-26 19:46:59 +01:00
87268b3ef6 Fix rejected execution in sync worker (#305) 2019-03-26 16:47:14 +01:00
b3cd7e8ac1 Fix undeliverable network exceptions (#306)
* Remove unnecessary this
2019-03-26 14:32:23 +01:00
a2a18e5652 Merge branch '0.7.x' 2019-03-24 23:22:44 +01:00
5a997dacb7 Version 0.7.2 2019-03-24 22:42:09 +01:00
ed9458d9a5 Fix more than one current semester in database (#304) 2019-03-24 20:21:05 +01:00
3656d3161f Fix crash on duplicate items (#303) 2019-03-24 17:31:39 +01:00
d178c15d2f Update dependencies (#302) 2019-03-24 16:03:51 +01:00
1f65b8465e Add logging to sync worker (#300) 2019-03-23 18:35:56 +01:00
6bb03b3be8 Fix day navigation unevenition (#301) 2019-03-23 17:29:34 +01:00
68b9847927 Fix reselecting root fragments (#299) 2019-03-23 16:35:33 +01:00
e1a83927c4 Fix reset button in timetable widget (#298) 2019-03-23 14:44:52 +01:00
fc9981aa5d Fix issues when loading lucky number (#297) 2019-03-23 13:01:01 +01:00
2d6610e05c Set max concurrency in sync worker (#296) 2019-03-23 01:12:17 +01:00
316cd2f7f9 Add checking current student in background services (#295) 2019-03-23 00:37:13 +01:00
36785f019a Fix restoring the grade fragment (#293) 2019-03-22 23:54:58 +01:00
4b78862486 Remove retry sync work when completed lessons is disabled (#294) 2019-03-22 23:41:41 +01:00
cd1ceea860 Add messages forwarding (#288) 2019-03-21 22:55:47 +01:00
20d0abba29 Fix empty container id in grade fragemnt adapter (#289) 2019-03-21 22:34:41 +01:00
5add95ece1 Version 0.7.1 2019-03-20 21:02:09 +01:00
575e244b3a Add swipe refresh to grade fragment (#287) 2019-03-20 20:45:26 +01:00
8db73e9459 Fix the application finish after selecting an account (#286) 2019-03-19 18:14:55 +01:00
040857ba20 Change grade weightValue type to double (#285) 2019-03-19 13:23:52 +01:00
4b0f0de52c Version 0.7.0 2019-03-17 21:20:37 +01:00
ba76453e45 Add replying to messages (#263) 2019-03-17 21:02:41 +01:00
824ed3f282 Centre the login form (#283) 2019-03-17 19:57:25 +01:00
d27d069ce2 Change homework view to weekly (#284) 2019-03-17 00:17:16 +01:00
38aa26a3ff Add homepage button in about fragment (#280) 2019-03-16 14:22:51 +01:00
be807cb6c8 Change settings for checking the internet connection (#282) 2019-03-15 21:33:14 +01:00
35f1fe8d61 Follow current grade scheme in stats chart (#277) 2019-03-12 17:34:04 +01:00
2621e5680d Improve the display of changes in the timetable (#275)
Closes #264
2019-03-11 20:56:47 +01:00
475e7dd6a3 Update dependencies (#274) 2019-03-10 20:18:40 +01:00
feb38b97e4 Change login progress bars (#272) 2019-03-10 11:57:11 +01:00
f773310cdb Disable swipe to refresh on data loading (#270) 2019-03-09 21:40:20 +01:00
f21feabc49 Add debug notification for worker (#271) 2019-03-09 20:34:30 +01:00
ca23f92096 Add missing text when no grade description (#269) 2019-03-09 17:16:30 +01:00
919680c766 Migration to WorkManager (#254)
Closes #241
2019-03-09 10:13:36 +01:00
722f8d691a Fix timetable widget automatic day switching (#267) 2019-03-07 16:38:34 +01:00
4f0021919c Fix grade stats loading issues (#266) 2019-03-07 13:08:59 +01:00
1b7db4bfbb Mitigate disappearing room numbers in timetable (#265) 2019-03-07 13:08:11 +01:00
dcab8df4b9 Add grade statistics (#251) 2019-03-04 12:13:37 +01:00
cae4f140e6 Add option to change grade (background) color scheme (#259) 2019-03-03 15:11:20 +01:00
1b30b00bb8 Settings rename view section (#262) 2019-03-02 19:55:32 +01:00
514d1e11aa Update grade colors (#231) 2019-03-02 19:41:38 +01:00
66bd566526 Update login error message (#260) 2019-03-02 19:18:26 +01:00
e910c7a48e Mitigate notifications from old grades (#258)
Fixes #257
2019-03-02 19:15:37 +01:00
f8ee5cb062 Add lucky number logging (#256) 2019-02-24 19:23:03 +01:00
c72c301039 Add sending messages (#232) 2019-02-24 15:11:32 +01:00
5ba12cf8c6 Fill login credentials with default values upon fakelog selection (#255)
Resolves #245
2019-02-23 14:39:22 +01:00
82d7cf94e8 Mark as read items older than student registration date (#253) 2019-02-20 15:34:24 +01:00
c365564a77 Login form style fix (#252) 2019-02-17 19:15:26 +01:00
5526691cb6 Fix timetable widget crash on update (#250) 2019-02-17 17:32:22 +01:00
1d7585071d Update login form to Material Design 2 (#229) 2019-02-17 00:42:09 +01:00
11b6c00e4a Entities unification (#248)
* Remove default entieties params

* Change var to vals

* Fix indent in data classes

* Change message unread to val

* Make all fields in Message non-nullable

* Add destructive db migrations #246

* Fix password decrypting

* Fix tests

* Fix student logout

* Use orEmpty() on nullable strings

* Use var in Student password and Message unread
2019-02-16 21:20:23 +01:00
c56cfec564 Apply ripple effect on grade details header only if item is expandable (#239)
Resolves #234
2019-02-14 22:23:52 +01:00
f305a7a599 Sort repositories (#244) 2019-02-13 21:44:40 +01:00
ad9b6d42f0 Fix no current student (#243) 2019-02-13 20:49:19 +01:00
297502056c Add completed lessons (#236) 2019-02-13 19:21:27 +01:00
52ed7dcb6c Fix lucky number crash (#242) 2019-02-13 14:10:21 +01:00
9fcf245ecd Fix uninitialized fragment after restoring the activity (#237) 2019-02-12 00:41:02 +01:00
1b1f2ae3bb Split login form for two fragments (#230) 2019-02-11 02:04:24 +01:00
2f87779647 Add Firebase Analytics for the loaded lucky number (#233) 2019-02-05 18:18:49 +01:00
79093ca6f2 Merge branch '0.6.x' 2019-01-26 00:04:11 +01:00
7f162441e2 Version 0.6.6 2019-01-25 22:12:19 +01:00
4da812af39 Add lucky numbers (#216) 2019-01-25 20:54:27 +01:00
43f6048c27 Upgrade to Gradle Play Publisher v2 (#228) 2019-01-25 20:41:03 +01:00
ffc2ef9a4e Remove renaming source file in R8 (#227) 2019-01-25 19:20:13 +01:00
d3c13b8fc3 Fix empty fragment list in fragment manager (#226) 2019-01-24 21:16:22 +01:00
c78fb83774 Fix receiving a lot of notifications after turning them off for a while (#225) 2019-01-24 18:32:51 +01:00
941765a3a3 Fix empty Maybe in student repository (#224) 2019-01-23 18:28:51 +01:00
189830e0f4 Version 0.6.5 2019-01-20 23:38:02 +01:00
2061d6408f Change icon of semester switch (#223) 2019-01-20 23:36:16 +01:00
e29886560e Disable obfuscate in R8 (#222) 2019-01-20 22:43:50 +01:00
20d9313257 Version 0.6.4 2019-01-20 15:39:11 +01:00
8476f0e62e Update dependencies (#221) 2019-01-20 15:00:33 +01:00
a174ae998d Add api initialization to the message repository (#220) 2019-01-20 14:16:24 +01:00
c5bab52fa2 Add more logging (#219) 2019-01-19 23:15:14 +01:00
e6d60e670e Fix crash on duplicate notes (#218) 2019-01-18 19:10:14 +01:00
c0ddd82e03 Fix exam_no_items english translation (#217)
Changed `exam_no_items` from **No exams in this week** to **No exams this week**
2019-01-18 12:41:11 +01:00
28f1430be0 Fix crash on Meizu devices (#215) 2019-01-13 23:53:01 +01:00
840b21a213 Fix dialog state (#214) 2019-01-13 23:25:07 +01:00
65230a31ec Version 0.6.3 2019-01-12 14:41:23 +01:00
c2bcbfaaa9 Add grade id to equals (#213) 2019-01-12 14:16:59 +01:00
c3d354cd5b Add chucker okhttp inspector (#205) 2019-01-10 17:10:10 +01:00
ed49eb4c9c Fix stable id in grade fragment (#211) 2019-01-09 17:30:31 +01:00
7d1866c304 Fix NPE on error dialog (#212) 2019-01-09 17:29:55 +01:00
d2a736295a Version 0.6.2 2019-01-07 13:31:49 +01:00
a9e788f7ff Fix scroll to start in grade fragment (#210) 2019-01-07 12:52:55 +01:00
ea6a928cb4 Fix spinner dropdown arrow not displaying in attendance summary (#207) 2019-01-07 00:56:32 +01:00
b9ac592ea9 Fix broken grade summary view (#208) 2019-01-07 00:55:39 +01:00
450ae4e124 Fix item sorting in grades details (#209) 2019-01-06 23:56:01 +01:00
ca504f6efc Change icon of the attendance summary (#206) 2019-01-06 23:53:20 +01:00
4e1fd6b2cf English translation fix (#204) 2019-01-03 09:49:54 +01:00
3ab15e0e00 Added icon for the DEV version (#203) 2018-12-20 15:03:42 +01:00
504a73ee6c Version 0.6.1 2018-12-18 16:24:45 +01:00
24e4870baf Fix firebase crashlytics (#202) 2018-12-18 16:12:15 +01:00
30388fffd7 Version 0.6.0 2018-12-17 02:19:50 +01:00
04f386ea3d Fix error message snackbar (#201) 2018-12-17 00:17:21 +01:00
9c94305ba5 Configure code shrinking (#200) 2018-12-15 21:29:57 +01:00
765eac5251 Fix blank number and change strikethrough lesson in widget (#198) 2018-12-14 22:36:21 +01:00
2d4ada6c9e Add new app icon (#199) 2018-12-14 21:09:15 +01:00
5ee979447f Migrate to firebase (#196) 2018-12-14 00:20:54 +01:00
229bfe8d22 Adjustment login layout to material design (#197) 2018-12-11 15:54:26 +01:00
175f2d7b57 Update dependencies (#195) 2018-12-08 14:30:10 +01:00
247e81ba00 Show full subject name on expand (#193) 2018-12-08 12:27:00 +01:00
6fd70a0194 Add mark as read to grade menu (#194) 2018-12-08 12:24:52 +01:00
f96d0ebed9 Add a summary of attendance (#132) 2018-12-07 19:01:19 +01:00
900065d758 Add option to change plus and minus modifier separately (#192) 2018-12-07 00:19:04 +01:00
92baecbd0d Add messages (#148) 2018-12-06 18:35:02 +01:00
48f96b5932 Avoid re-loading fragments on the current week/day (#191) 2018-12-02 15:23:46 +01:00
9a298833f5 Add workaround password decryption error (#189) 2018-12-01 15:59:03 +01:00
11cc85e37c Fix the deformed settings icon (#190) 2018-11-30 23:15:13 +01:00
60c7316742 Add version text to login form (#188) 2018-11-29 19:07:44 +01:00
834ef7c297 Fix login when an error occurs (#187) 2018-11-28 20:06:08 +01:00
7686228e01 Add details to error message (#186) 2018-11-25 15:03:47 +01:00
7a3c0de7ad Add account manager (#183) 2018-11-24 18:51:41 +01:00
1f30deb36e Add config for travis ci (#185) 2018-11-23 12:38:55 +01:00
c2b8f85ad9 Fix no expandable grades (#184) 2018-11-15 17:33:12 +01:00
9f04dbf60f Add homework (#181) 2018-11-14 09:18:00 +01:00
24f59b45c3 Fix crash on restore LoginActivity (#182) 2018-11-11 23:24:49 +01:00
cb7e70471b Add notes (#179) 2018-11-11 17:45:58 +01:00
240e61df0e Add preference for the expandable grades (#178) 2018-11-10 23:29:18 +01:00
2b60f555e9 Move night mode initialization to WulkanowyApp (#180)
Fixes #162
2018-11-10 23:24:33 +01:00
2f24b25399 Add preference for the grades modifier (#177)
Resolve #163
2018-11-04 13:23:34 +01:00
533637d32a Add vibrate permission (#176) 2018-11-03 15:21:29 +01:00
fd6c0b6c74 Merge pull request #153 from wulkanowy/app-modules-refactor
Refactor app modules
2018-11-03 15:01:30 +01:00
5e30c8e949 Logger refactor (#175) 2018-11-03 14:49:20 +01:00
7f6f632b73 Timetable widget refactor (#171) 2018-11-02 17:38:20 +01:00
70879945f2 Services refactor (#168) 2018-11-01 19:27:02 +01:00
ab71dd3fde Sort lessons by number (#174) 2018-10-30 22:07:44 +01:00
0a7f09077f Dark theme refactor (#173) 2018-10-30 22:06:29 +01:00
745894f3a3 Fix range of days in exam navigation (#172) 2018-10-24 16:31:08 +02:00
0211a7f0a0 Refactor packages hierarchy (#170) 2018-10-23 17:12:57 +02:00
837bce7286 Settings refactor (#166) 2018-10-22 22:47:54 +02:00
b680cc4366 Migrate to AndroidX (#169) 2018-10-20 20:59:46 +02:00
f35d9d4b93 Change all entities ids from string to int (#167) 2018-10-20 17:57:24 +02:00
27f6fc7e04 Modules improvements (#164) 2018-10-14 22:16:58 +02:00
bb69d1b643 Refactor multi logs support (#165) 2018-10-14 15:42:36 +02:00
5cd8ed88c0 Refactor timetable module (#160) 2018-10-06 10:53:34 +02:00
f2b7c0e781 Refactor grade module (#156) 2018-10-03 21:28:23 +02:00
357b2350cb Refactor attendance module (#161) 2018-10-01 19:41:09 +02:00
a1f64baca4 Refactor exam module (#157) 2018-09-24 15:21:47 +02:00
6b07a56a1b Created issue template (#159) 2018-09-22 23:01:19 +02:00
b617957891 Migrate to new api (#155) 2018-08-26 00:18:31 +02:00
0e962c17c2 Refactor main module (#154) 2018-08-24 15:48:29 +02:00
a90d5cb9c3 Refactor login module (#151) 2018-08-22 22:31:17 +02:00
64b0919b7f Add license scan report and status (#152) 2018-08-17 14:35:41 +02:00
0f5a801464 Add homework api (#150) 2018-08-16 12:27:32 +02:00
d7eac45e96 Make API responses structure flat (#149) 2018-07-27 13:28:32 +02:00
ef5d3aead9 Refactoring password encryption (#147) 2018-07-18 21:13:57 +02:00
5dcd4f9b72 Version 0.5.2 2018-07-15 19:09:31 +02:00
c4792289ef Fix 29 migration (#146) 2018-07-15 19:02:49 +02:00
4b93a76693 Version 0.5.1 2018-07-15 15:40:07 +02:00
d44a1dbce1 Add weight on grades list (#145) 2018-07-15 15:15:19 +02:00
083765b020 Adjust colors of grades in dark theme (#143) 2018-07-15 14:20:22 +02:00
b8a31c3faf Upgrade android SDK (#144) 2018-07-14 20:09:58 +02:00
378aba9716 Add support for multiple SnP sites (#140) 2018-07-14 16:52:09 +02:00
5a4b8b22f3 Stop synchronization on holidays (#142) 2018-07-14 14:06:57 +02:00
8725640168 User short grade names in grades summary (#141) 2018-06-29 11:27:18 +02:00
dab1bd4ac6 Version 0.5.0 2018-06-14 14:45:32 +02:00
11578aa735 Add dark theme (#133) 2018-06-14 11:40:46 +02:00
b63e28f9a9 Separate synchronization from login (#137) 2018-06-13 18:53:42 +02:00
072c504d2b Clean data user on bad user credentials (#138) 2018-06-13 03:07:34 +02:00
7b7be1eef1 API fixes (#136) 2018-06-10 19:46:34 +02:00
81d177c270 Hide actionbar on scroll (#135) 2018-06-09 00:59:39 +02:00
8d014ab7e9 Fix displaying the replacements in widget (#134) 2018-06-07 08:13:49 +02:00
a06d114127 Add logger (#131) 2018-06-06 19:38:54 +02:00
0e16519baf Add a summary of grades (#127) 2018-06-04 21:47:46 +02:00
dde5775a41 Move ticks converter to api (#130) 2018-06-01 12:52:03 +02:00
e2003e2538 Expand current day on startup (#129) 2018-05-31 23:54:59 +02:00
228f680e5d Hide empty fields in summary (#128) 2018-05-31 23:01:52 +02:00
306092ce45 Add mobile access API (#126) 2018-05-30 11:57:29 +02:00
d4b172e022 Version 0.4.5 2018-05-28 11:32:39 +02:00
b4c765b482 [API] Fix timetable endpoint (#125) 2018-05-28 11:29:43 +02:00
3f1fff6d96 Implementation of a new Dagger injection (#103) 2018-05-26 20:44:06 +02:00
b59008a90f Version 0.4.4 2018-05-25 20:33:45 +02:00
74c0dda999 Fix lesson description from warning (#124) 2018-05-25 20:14:16 +02:00
2288ceffb8 Stop refreshing while semester switching window open (#123) 2018-05-25 19:10:34 +02:00
ffe8511e3f Add some fabric answers (#120) 2018-05-25 16:35:12 +02:00
34205e4a8b Fix autofill on api lvl 26 (#122) 2018-05-25 11:49:53 +02:00
ef648c7f8b Clear db before register (#121) 2018-05-24 22:25:24 +02:00
3592946e6f Fix api login(#119) 2018-05-23 19:21:35 +02:00
859f8dc319 Avoid null if cell second div not contain span (#118) 2018-05-23 18:44:04 +02:00
9c97962e89 Version 0.4.3 2018-05-19 23:37:32 +02:00
a4445a8a97 Fix api login error (#115) 2018-05-19 23:02:54 +02:00
3f54d13b6b Add condition to exam query (#116) 2018-05-19 21:11:04 +02:00
5685e73e46 Fix text alignment <= lv l20 (#117) 2018-05-19 19:58:33 +02:00
e9b357e92d Remove the root check (#114) 2018-05-19 12:48:12 +02:00
62bc00cd68 Delete non-existing lessons on sync (#112) 2018-05-19 12:30:17 +02:00
54e6aee82e Stop SyncJob if user is not registered in app (#113) 2018-05-16 20:43:29 +02:00
3000c077c4 Version 0.4.2 2018-05-14 22:20:17 +02:00
7d5072b529 Fix exams sync (#108) 2018-05-14 22:13:08 +02:00
052d5e3911 Stopping job when user not registered in app (#111) 2018-05-14 21:39:09 +02:00
0014b74c6b Fix certificate parsing issues (#109) 2018-05-14 21:12:45 +02:00
08dd316aee Fix adfs login (#110) 2018-05-14 20:56:17 +02:00
95caa21f2a Version 0.4.1 2018-05-13 18:16:39 +02:00
cd6e14b13b [API] Fix first login (#107) 2018-05-13 17:33:31 +02:00
2cf262130e [API] Get rid of NULL in timetable lesson descriptions (#106) 2018-05-13 16:02:51 +02:00
23183c9d7a Call of SyncJob only after user register in app (#105) 2018-05-13 15:25:56 +02:00
be8ee4c835 Fix parsing grade description with symbol containing special chars (#104) 2018-05-11 21:55:38 +02:00
823 changed files with 28616 additions and 22435 deletions

View File

@ -1,5 +1,3 @@
exclude:
- /app/src/main/java/io/github/wulkanowy/data/db/dao/entities/.*
component_depth: 1
component_depth: 8
languages:
- java
- kotlin

View File

@ -7,11 +7,11 @@ references:
container_config: &container_config
docker:
- image: circleci/android:api-26-alpha
- image: circleci/android:api-28
working_directory: *workspace_root
environment:
environment:
JVM_OPTS: -Xmx3200m
_JAVA_OPTS: -Xmx3072m
attach_workspace: &attach_workspace
attach_workspace:
@ -25,27 +25,20 @@ jobs:
build:
<<: *container_config
steps:
- run: |
curl -H 'Cache-Control: no-cache' https://raw.githubusercontent.com/fossas/fossa-cli/master/install.sh | bash
- checkout
- restore_cache:
<<: *general_cache_key
- run:
name: Setup environment
command: ./gradlew dependencies --no-daemon --stacktrace --console=plain -PdisablePreDex || true
- run:
name: Decrypt keys
command: |
openssl aes-256-cbc -d -in ./app/key-encrypted.p12 -k $ENCRYPT_KEY >> ./app/key.p12
openssl aes-256-cbc -d -in ./app/upload-key-encrypted.jks -k $ENCRYPT_KEY >> ./app/upload-key.jks
- run:
name: Initial build
command: ./gradlew build assembleDebug -x test -x lint -x fabricGenerateResourcesRelease --no-daemon --stacktrace --console=plain -PdisablePreDex
command: ./gradlew build -x test -x lint -x fabricGenerateResourcesRelease -x packageRelease --no-daemon --stacktrace --console=plain -PdisablePreDex
- run:
name: Clear keys
command: |
rm ./app/key.p12 ./app/upload-key.jks
- store_artifacts:
path: ./app/build/outputs/apk/
destination: apks/
name: Run FOSSA
command: fossa --no-ansi || true
- persist_to_workspace:
root: *workspace_root
paths:
@ -87,11 +80,8 @@ jobs:
name: Upload unit code coverage to codecov
command: bash <(curl -s https://codecov.io/bash) -F app
- store_artifacts:
path: ./app/build/reports/tests/
destination: tests_reports/
- store_artifacts:
path: ./app/build/reports/jacoco/jacocoTestDebugUnitTestReport/
destination: coverage_reports/
path: ./app/build/reports/
destination: reports/
- store_test_results:
path: ./app/build/test-results
- persist_to_workspace:
@ -99,38 +89,13 @@ 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/tests/
destination: tests_reports/
- store_artifacts:
path: ./api/build/reports/jacoco/test/
destination: coverage_reports/
- store_test_results:
path: ./api/build/test-results
- persist_to_workspace:
root: *workspace_root
paths:
- "./api/build/jacoco"
instrumented:
<<: *container_config
steps:
- *attach_workspace
- run:
name: Setup emulator
command: sdkmanager "system-images;android-19;google_apis;armeabi-v7a" && echo "no" | avdmanager create avd -n test -k "system-images;android-19;google_apis;armeabi-v7a"
command: sdkmanager "system-images;android-19;default;armeabi-v7a" && echo "no" | avdmanager create avd -n test -k "system-images;android-19;default;armeabi-v7a"
- run:
name: Launch emulator
command: export LD_LIBRARY_PATH=${ANDROID_HOME}/emulator/lib64:${ANDROID_HOME}/emulator/lib64/qt/lib && emulator64-arm -avd test -noaudio -no-boot-anim -no-window -accel on
@ -146,15 +111,13 @@ jobs:
# unlock the emulator screen
sleep 30
adb shell input keyevent 82
- run:
name: Clean project
command: ./gradlew clean --no-daemon --stacktrace --console=plain -PdisablePreDex
- run:
name: Run instrumented tests
command: ./gradlew createDebugCoverageReport --no-daemon --stacktrace --console=plain -PdisablePreDex
command: ./gradlew clean createDebugCoverageReport jacocoTestReport --no-daemon --stacktrace --console=plain -PdisablePreDex
- run:
name: Collect logs from emulator
command: adb logcat -d > ./app/build/reports/logcat_emulator.txt
when: always
- run:
name: Upload code covarage to codecov
command: bash <(curl -s https://codecov.io/bash) -F instrumented
@ -179,7 +142,8 @@ jobs:
command: ./gradlew jacocoTestReport --no-daemon --stacktrace --console=plain -PdisablePreDex
- run:
name: Run sonarqube runner
command: ./gradlew -x test -x lint sonarqube -Dsonar.host.url=$SONAR_HOST -Dsonar.organization=$SONAR_ORG -Dsonar.login=$SONAR_KEY -Dsonar.branch.name=$CIRCLE_BRANCH --no-daemon --stacktrace --console=plain -PdisablePreDex
command: if [ -z ${SONAR_HOST+x} ]; then echo "sonar scan skipped"; else ./gradlew -x test -x lint sonarqube -Dsonar.host.url=$SONAR_HOST -Dsonar.organization=$SONAR_ORG -Dsonar.login=$SONAR_KEY -Dsonar.branch.name=$CIRCLE_BRANCH --no-daemon --stacktrace --console=plain -PdisablePreDex; fi
command: "[[ -v CIRCLE_PR_NUMBER ]] && ./gradlew -x test -x lint sonarqube -Dsonar.host.url=$SONAR_HOST -Dsonar.organization=$SONAR_ORG -Dsonar.login=$SONAR_KEY -Dsonar.branch.name=$CIRCLE_BRANCH --no-daemon --stacktrace --console=plain -PdisablePreDex || true"
deploy:
<<: *container_config
@ -190,42 +154,54 @@ jobs:
- run:
name: Decrypt keys
command: |
gpg --yes --batch --passphrase=$SERVICES_ENCRYPT_KEY ./app/src/release/google-services.json.gpg
openssl aes-256-cbc -d -in ./app/key-encrypted.p12 -k $ENCRYPT_KEY >> ./app/key.p12
openssl aes-256-cbc -d -in ./app/upload-key-encrypted.jks -k $ENCRYPT_KEY >> ./app/upload-key.jks
- run:
name: Publish release
command: ./gradlew publishRelease --no-daemon --stacktrace --console=plain -PdisablePreDex
command: ./gradlew publish --no-daemon --stacktrace --console=plain -PenableCrashlytics -PdisablePreDex
workflows:
version: 2
build_check_tests:
build-test-deploy:
jobs:
- build
- build:
filters:
tags:
only: /.*/
- lint:
filters:
tags:
only: /.*/
requires:
- build
- app-test:
requires:
- build
- api-test:
filters:
tags:
only: /.*/
requires:
- build
- instrumented:
requires:
- build
filters:
tags:
only: /.*/
requires:
- build
- sonarcube:
filters:
tags:
only: /.*/
requires:
- build
- lint
- app-test
- api-test
- instrumented
- deploy:
requires:
- instrumented
filters:
tags:
only: /.*/
only: /\d+\.\d+\.\d+/
branches:
ignore: /.*/

17
.github/ISSUE_TEMPLATE.md vendored Normal file
View File

@ -0,0 +1,17 @@
## Co powinno się dziać
## Co się dzieje
## Jak to zrobić kolejny raz:
1.
2.
3.
## Informacje o urządzeniu i dzienniku
- Wersja aplikacji:
- Wersja Androida:
- Adres URL dziennika:

8
.gitignore vendored
View File

@ -33,7 +33,6 @@ local.properties
.idea/vcs.xml
.idea/workspace.xml
.idea/caches/
.idea/codeStyles/
*.iml
# OS-specific files
@ -44,7 +43,8 @@ local.properties
.Trashes
ehthumbs.db
Thumbs.db
.idea/codeStyles/
.idea/caches/
./app/key.p12
./app/upload-key.jks
app/key.p12
app/upload-key.jks
*.log
.idea/assetWizardSettings.xml

View File

@ -1,4 +1,4 @@
image: circleci/android:api-27-alpha
image: circleci/android:api-28-alpha
before_script:
- export GRADLE_USER_HOME=`pwd`/.gradle

View File

@ -1,226 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectCodeStyleSettingsManager">
<option name="PER_PROJECT_SETTINGS">
<value>
<option name="CLASS_COUNT_TO_USE_IMPORT_ON_DEMAND" value="99" />
<option name="NAMES_COUNT_TO_USE_IMPORT_ON_DEMAND" value="99" />
<option name="PACKAGES_TO_USE_IMPORT_ON_DEMAND">
<value />
</option>
<option name="IMPORT_LAYOUT_TABLE">
<value>
<package name="android" withSubpackages="true" static="false" />
<emptyLine />
<package name="com" withSubpackages="true" static="false" />
<emptyLine />
<package name="junit" withSubpackages="true" static="false" />
<emptyLine />
<package name="net" withSubpackages="true" static="false" />
<emptyLine />
<package name="org" withSubpackages="true" static="false" />
<emptyLine />
<package name="java" withSubpackages="true" static="false" />
<emptyLine />
<package name="javax" withSubpackages="true" static="false" />
<emptyLine />
<package name="" withSubpackages="true" static="false" />
<emptyLine />
<package name="" withSubpackages="true" static="true" />
<emptyLine />
</value>
</option>
<option name="RIGHT_MARGIN" value="100" />
<AndroidXmlCodeStyleSettings>
<option name="USE_CUSTOM_SETTINGS" value="true" />
</AndroidXmlCodeStyleSettings>
<Objective-C-extensions>
<file>
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Import" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Macro" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Typedef" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Enum" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Constant" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Global" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Struct" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="FunctionPredecl" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Function" />
</file>
<class>
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Property" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Synthesize" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="InitMethod" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="StaticMethod" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="InstanceMethod" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="DeallocMethod" />
</class>
<extensions>
<pair source="cpp" header="h" />
<pair source="c" header="h" />
</extensions>
</Objective-C-extensions>
<XML>
<option name="XML_LEGACY_SETTINGS_IMPORTED" value="true" />
</XML>
<codeStyleSettings language="XML">
<option name="FORCE_REARRANGE_MODE" value="1" />
<indentOptions>
<option name="CONTINUATION_INDENT_SIZE" value="4" />
</indentOptions>
<arrangement>
<rules>
<section>
<rule>
<match>
<AND>
<NAME>xmlns:android</NAME>
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>xmlns:.*</NAME>
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
<order>BY_NAME</order>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:id</NAME>
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:name</NAME>
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>name</NAME>
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>style</NAME>
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*</NAME>
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
<order>BY_NAME</order>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:layout_width</NAME>
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:layout_height</NAME>
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:layout_.*</NAME>
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
<order>BY_NAME</order>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:width</NAME>
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
<order>BY_NAME</order>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:height</NAME>
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
<order>BY_NAME</order>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*</NAME>
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
<order>BY_NAME</order>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*</NAME>
<XML_NAMESPACE>.*</XML_NAMESPACE>
</AND>
</match>
<order>BY_NAME</order>
</rule>
</section>
</rules>
</arrangement>
</codeStyleSettings>
</value>
</option>
<option name="PREFERRED_PROJECT_CODE_STYLE" value="Default" />
</component>
</project>

147
.idea/codeStyles/Project.xml generated Normal file
View File

@ -0,0 +1,147 @@
<component name="ProjectCodeStyleConfiguration">
<code_scheme name="Project" version="173">
<option name="LINE_SEPARATOR" value="&#10;" />
<AndroidXmlCodeStyleSettings>
<option name="USE_CUSTOM_SETTINGS" value="true" />
</AndroidXmlCodeStyleSettings>
<JetCodeStyleSettings>
<option name="PACKAGES_TO_USE_STAR_IMPORTS">
<value>
<package name="kotlinx.android.synthetic" withSubpackages="true" static="false" />
</value>
</option>
<option name="NAME_COUNT_TO_USE_STAR_IMPORT" value="2147483647" />
<option name="NAME_COUNT_TO_USE_STAR_IMPORT_FOR_MEMBERS" value="2147483647" />
<option name="CONTINUATION_INDENT_IN_PARAMETER_LISTS" value="false" />
<option name="CONTINUATION_INDENT_IN_ARGUMENT_LISTS" value="false" />
<option name="CONTINUATION_INDENT_FOR_EXPRESSION_BODIES" value="false" />
<option name="CONTINUATION_INDENT_FOR_CHAINED_CALLS" value="false" />
<option name="CONTINUATION_INDENT_IN_SUPERTYPE_LISTS" value="false" />
<option name="CONTINUATION_INDENT_IN_IF_CONDITIONS" value="false" />
<option name="CONTINUATION_INDENT_IN_ELVIS" value="false" />
<option name="WRAP_ELVIS_EXPRESSIONS" value="0" />
</JetCodeStyleSettings>
<XML>
<option name="XML_KEEP_LINE_BREAKS" value="false" />
<option name="XML_ALIGN_ATTRIBUTES" value="false" />
<option name="XML_SPACE_INSIDE_EMPTY_TAG" value="true" />
</XML>
<codeStyleSettings language="XML">
<option name="FORCE_REARRANGE_MODE" value="1" />
<indentOptions>
<option name="CONTINUATION_INDENT_SIZE" value="4" />
</indentOptions>
<arrangement>
<rules>
<section>
<rule>
<match>
<AND>
<NAME>xmlns:android</NAME>
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>xmlns:.*</NAME>
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
<order>BY_NAME</order>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:id</NAME>
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:name</NAME>
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>name</NAME>
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>style</NAME>
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*</NAME>
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
<order>BY_NAME</order>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*</NAME>
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
<order>ANDROID_ATTRIBUTE_ORDER</order>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*</NAME>
<XML_NAMESPACE>.*</XML_NAMESPACE>
</AND>
</match>
<order>BY_NAME</order>
</rule>
</section>
</rules>
</arrangement>
</codeStyleSettings>
<codeStyleSettings language="kotlin">
<option name="KEEP_BLANK_LINES_IN_DECLARATIONS" value="1" />
<option name="KEEP_BLANK_LINES_IN_CODE" value="1" />
<option name="KEEP_BLANK_LINES_BEFORE_RBRACE" value="0" />
<option name="ALIGN_MULTILINE_PARAMETERS" value="false" />
<option name="METHOD_PARAMETERS_LPAREN_ON_NEXT_LINE" value="true" />
<option name="METHOD_PARAMETERS_RPAREN_ON_NEXT_LINE" value="true" />
<option name="EXTENDS_LIST_WRAP" value="1" />
<option name="METHOD_CALL_CHAIN_WRAP" value="1" />
<indentOptions>
<option name="CONTINUATION_INDENT_SIZE" value="4" />
</indentOptions>
</codeStyleSettings>
</code_scheme>
</component>

5
.idea/codeStyles/codeStyleConfig.xml generated Normal file
View File

@ -0,0 +1,5 @@
<component name="ProjectCodeStyleConfiguration">
<state>
<option name="USE_PER_PROJECT_SETTINGS" value="true" />
</state>
</component>

1
.idea/gradle.xml generated
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>

68
.travis.yml Normal file
View File

@ -0,0 +1,68 @@
language: android
jdk: oraclejdk8
env:
global:
- ANDROID_API_LEVEL=28
- ANDROID_BUILD_TOOLS_VERSION=28.0.3
cache:
directories:
- $HOME/.gradle/caches/
- $HOME/.gradle/wrapper/
branches:
only:
- master
- 0.7.x
android:
licenses:
- android-sdk-preview-license-.+
- android-sdk-license-.+
- google-gdk-license-.+
components:
- tools
- platform-tools
# The BuildTools version used by your project
- build-tools-$ANDROID_BUILD_TOOLS_VERSION
# The SDK version used to compile your project
- android-$ANDROID_API_LEVEL
# Additional components
- extra-google-google_play_services
- extra-google-m2repository
- extra-android-m2repository
- addon-google_apis-google-$ANDROID_API_LEVEL
# Android emulator
- android-19
- sys-img-armeabi-v7a-android-19
before_script:
# Launch emulator before the execution
- echo no | android create avd --force -n test -t android-19 --abi armeabi-v7a
- emulator -avd test -no-audio -no-window &
- android-wait-for-emulator
- adb shell input keyevent 82 &
- "curl -H 'Cache-Control: no-cache' https://raw.githubusercontent.com/fossas/fossa-cli/master/install.sh | sudo bash"
script:
- ./gradlew dependencies --stacktrace --daemon
- fossa --no-ansi || true
- ./gradlew lint -x fabricGenerateResourcesRelease --stacktrace --daemon
- ./gradlew test -x fabricGenerateResourcesRelease --stacktrace --daemon
- ./gradlew createDebugCoverageReport --stacktrace --daemon
- ./gradlew jacocoTestReport --stacktrace --daemon
- if [ -z ${SONAR_HOST+x} ]; then echo "sonar scan skipped"; else
git fetch --unshallow;
./gradlew sonarqube -x test -x lint -x fabricGenerateResourcesRelease -Dsonar.host.url=$SONAR_HOST -Dsonar.organization=$SONAR_ORG -Dsonar.login=$SONAR_KEY -Dsonar.branch.name=${TRAVIS_PULL_REQUEST_BRANCH:-$TRAVIS_BRANCH} --stacktrace --daemon;
fi
- |
if [ $TRAVIS_TAG ]; then
gpg --yes --batch --passphrase=$SERVICES_ENCRYPT_KEY ./app/src/release/google-services.json.gpg;
gpg --yes --batch --passphrase=$ENCRYPT_KEY ./app/key.p12.gpg;
gpg --yes --batch --passphrase=$ENCRYPT_KEY ./app/upload-key.jks.gpg;
./gradlew publish -PenableCrashlytics --stacktrace;
fi
after_success:
- bash <(curl -s https://codecov.io/bash)

View File

@ -1,13 +1,22 @@
# Wulkanowy
[![CircleCI](https://img.shields.io/circleci/project/github/wulkanowy/wulkanowy/master.svg?style=flat-square)](https://circleci.com/gh/wulkanowy/wulkanowy)
[![Travis](https://img.shields.io/travis/com/wulkanowy/wulkanowy/master.svg?style=flat-square)](https://travis-ci.com/wulkanowy/wulkanowy)
[![Bitrise](https://img.shields.io/bitrise/daeff1893f3c8128/master.svg?token=Hjm1ACamk86JDeVVJHOeqQ&style=flat-square)](https://www.bitrise.io/app/daeff1893f3c8128)
[![Codecov](https://img.shields.io/codecov/c/github/wulkanowy/wulkanowy/master.svg?style=flat-square)](https://codecov.io/gh/wulkanowy/wulkanowy)
[![BCH compliance](https://bettercodehub.com/edge/badge/wulkanowy/wulkanowy?branch=master)](https://bettercodehub.com/)
[![Scrutinizer](https://img.shields.io/scrutinizer/g/wulkanowy/wulkanowy.svg)](https://scrutinizer-ci.com/g/wulkanowy/wulkanowy/?branch=master)
[![Known Vulnerabilities](https://snyk.io/test/github/wulkanowy/wulkanowy/badge.svg?targetFile=app%2Fbuild.gradle&style=flat-square)](https://snyk.io/test/github/wulkanowy/wulkanowy?targetFile=app%2Fbuild.gradle)
[![Bintray](https://img.shields.io/bintray/v/wulkanowy/wulkanowy/api.svg?style=flat-square)](https://bintray.com/wulkanowy/wulkanowy/api)
[![Sonarcloud](https://sonarcloud.io/api/project_badges/measure?project=io.github.wulkanowy%3Aapp&metric=sqale_rating)](https://sonarcloud.io/dashboard?id=io.github.wulkanowy%3Aapp)
[![FOSSA Status](https://app.fossa.com/api/projects/custom%2B5644%2Fgithub.com%2Fwulkanowy%2Fwulkanowy.svg?type=shield)](https://app.fossa.com/projects/custom%2B5644%2Fgithub.com%2Fwulkanowy%2Fwulkanowy?ref=badge_shield)
[![Discord](https://img.shields.io/discord/390889354199040011.svg?style=flat-square)](https://discord.gg/vccAQBr)
[Pobierz wersję rozwojową](https://bitrise-redirector.herokuapp.com/v0.1/apps/daeff1893f3c8128/builds/master/artifacts/app-debug-bitrise-signed.apk)
[Pobierz wersję beta z Google Play](https://play.google.com/store/apps/details?id=io.github.wulkanowy&amp;utm_source=vcs)
[Pobierz wersję DEV](https://bitrise-redirector.herokuapp.com/v0.1/apps/f841f20d8f8b1dc8/builds/master/artifacts/0)
[(Więcej wersji DEV)](https://wulkanowy.github.io/dev.html)
Androidowy klient dziennika VULCAN UONET+.
## License
[![FOSSA Status](https://app.fossa.com/api/projects/custom%2B5644%2Fgithub.com%2Fwulkanowy%2Fwulkanowy.svg?type=large)](https://app.fossa.com/projects/custom%2B5644%2Fgithub.com%2Fwulkanowy%2Fwulkanowy?ref=badge_large)

View File

@ -1,117 +0,0 @@
apply plugin: 'java-library'
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"
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,203 +0,0 @@
package io.github.wulkanowy.api;
import org.jsoup.Connection;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import java.io.IOException;
import java.util.Date;
import java.util.Map;
import java.util.concurrent.TimeUnit;
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 Date lastSuccessRequest = null;
private Cookies cookies = new Cookies();
Client(String email, String password, String symbol) {
this.email = email;
this.password = password;
this.symbol = symbol;
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;
}
this.cookies = new Cookies();
this.symbol = new Login(this).login(email, password, symbol);
}
private boolean isLoggedIn() {
return getCookies().size() > 0 && lastSuccessRequest != null &&
29 > TimeUnit.MILLISECONDS.toMinutes(new Date().getTime() - lastSuccessRequest.getTime());
}
public String getSymbol() {
return symbol;
}
public void setSymbol(String symbol) {
this.symbol = symbol;
}
public void addCookies(Map<String, String> items) {
cookies.addItems(items);
}
private Map<String, String> getCookies() {
return cookies.getItems();
}
String getHost() {
return host;
}
String getFilledUrl(String url) {
return url
.replace("{schema}", protocol)
.replace("{host}", host.replace(":", "%253A"))
.replace("{symbol}", symbol);
}
public Document getPageByUrl(String url) throws IOException, VulcanException {
return getPageByUrl(url, true, null);
}
public Document getPageByUrl(String url, boolean loginBefore) throws IOException, VulcanException {
return getPageByUrl(url, loginBefore, null);
}
public Document getPageByUrl(String url, boolean loginBefore, Map<String, String> cookies) throws IOException, VulcanException {
if (loginBefore) {
login();
}
if (null != cookies) {
this.cookies.addItems(cookies);
}
Connection.Response response = Jsoup.connect(getFilledUrl(url))
.followRedirects(true)
.cookies(getCookies())
.execute();
this.cookies.addItems(response.cookies());
Document doc = checkForErrors(response.parse());
if (loginBefore) {
lastSuccessRequest = new Date();
}
return doc;
}
public Document postPageByUrl(String url, String[][] params) throws IOException, VulcanException {
Connection connection = Jsoup.connect(getFilledUrl(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());
return checkForErrors(response.parse());
}
public String getJsonStringByUrl(String url) throws IOException, VulcanException {
login();
Connection.Response response = Jsoup.connect(getFilledUrl(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();
Connection connection = Jsoup.connect(getFilledUrl(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) 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 VulcanException("Nieznany błąd");
}
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,38 +0,0 @@
package io.github.wulkanowy.api;
public class Diary implements ParamItem {
private String id = "";
private String name = "";
private boolean current = false;
public String getId() {
return id;
}
public Diary setId(String id) {
this.id = id;
return this;
}
public String getName() {
return name;
}
public Diary setName(String name) {
this.name = name;
return this;
}
@Override
public boolean isCurrent() {
return current;
}
public Diary setCurrent(boolean current) {
this.current = current;
return this;
}
}

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,12 +0,0 @@
package io.github.wulkanowy.api;
interface ParamItem {
ParamItem setId(String id);
ParamItem setName(String name);
ParamItem setCurrent(boolean isCurrent);
boolean isCurrent();
}

View File

@ -1,37 +0,0 @@
package io.github.wulkanowy.api;
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,32 +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;
public interface SnP {
String getSchoolID();
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,37 +0,0 @@
package io.github.wulkanowy.api;
public class Student implements ParamItem {
private String id = "";
private String name = "";
private boolean current = false;
public String getId() {
return id;
}
public Student setId(String id) {
this.id = id;
return this;
}
public String getName() {
return name;
}
public Student setName(String name) {
this.name = name;
return this;
}
public boolean isCurrent() {
return current;
}
public Student setCurrent(boolean current) {
this.current = current;
return this;
}
}

View File

@ -1,196 +0,0 @@
package io.github.wulkanowy.api;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class StudentAndParent implements SnP {
private static final String START_PAGE_URL = "{schema}://uonetplus.{host}/{symbol}/Start.mvc/Index";
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 schoolID;
private String studentID;
private String diaryID;
StudentAndParent(Client client, String schoolID, String studentID, String diaryID) {
this.client = client;
this.schoolID = schoolID;
this.studentID = studentID;
this.diaryID = diaryID;
}
public StudentAndParent setUp() throws IOException, VulcanException {
if (null == getStudentID() || "".equals(getStudentID())) {
Document doc = client.getPageByUrl(getSnpHomePageUrl());
Student student = getCurrent(getStudents(doc));
studentID = student.getId();
Diary diary = getCurrent(getDiaries(doc));
diaryID = diary.getId();
}
return this;
}
public String getSchoolID() {
return schoolID;
}
public String getStudentID() {
return studentID;
}
private String getBaseUrl() {
return BASE_URL.replace("{ID}", getSchoolID());
}
String getSnpHomePageUrl() throws IOException, VulcanException {
if (null != getSchoolID()) {
return getBaseUrl();
}
// get url to uonetplus-opiekun.vulcan.net.pl
Document startPage = client.getPageByUrl(START_PAGE_URL);
Element studentTileLink = startPage.select(".panel.linkownia.pracownik.klient > a").first();
if (null == studentTileLink) {
throw new NotLoggedInErrorException("You are probably not logged in. Force login");
}
String snpPageUrl = studentTileLink.attr("href");
this.schoolID = getExtractedIdFromUrl(snpPageUrl);
return snpPageUrl;
}
String getExtractedIdFromUrl(String snpPageUrl) throws NotLoggedInErrorException {
String[] path = snpPageUrl.split(client.getHost())[1].split("/");
if (5 != path.length) {
throw new NotLoggedInErrorException("You are probably not logged in");
}
return path[2];
}
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);
client.addCookies(cookies);
Document doc = client.getPageByUrl(getBaseUrl() + url, true, cookies);
if ("Witryna ucznia i rodzica Strona główna".equals(doc.select("title").first().text())) {
throw new VulcanException("Sesja została nieprawidłowo zainicjowana");
}
return doc;
}
public List<Diary> getDiaries() throws IOException, VulcanException {
return getDiaries(client.getPageByUrl(getBaseUrl()));
}
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(getBaseUrl()));
}
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,114 +0,0 @@
package io.github.wulkanowy.api;
import java.io.IOException;
import io.github.wulkanowy.api.attendance.AttendanceStatistics;
import io.github.wulkanowy.api.attendance.AttendanceTable;
import io.github.wulkanowy.api.exams.ExamsWeek;
import io.github.wulkanowy.api.grades.GradesList;
import io.github.wulkanowy.api.grades.SubjectsList;
import io.github.wulkanowy.api.messages.Messages;
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.user.BasicInformation;
import io.github.wulkanowy.api.user.FamilyInformation;
public class Vulcan {
private SnP snp;
private Client client;
private String schoolId;
private String studentId;
private String diaryId;
public void setCredentials(String email, String password, String symbol, String schoolId, String studentId, String diaryId) {
this.schoolId = schoolId;
this.studentId = studentId;
this.diaryId = diaryId;
client = new Client(email, password, symbol);
}
public Client getClient() throws NotLoggedInErrorException {
if (null == client) {
throw new NotLoggedInErrorException("Use setCredentials() method first");
}
return client;
}
public String getSymbol() throws NotLoggedInErrorException {
return getClient().getSymbol();
}
public SnP getStudentAndParent() throws VulcanException, IOException {
if (null != this.snp) {
return this.snp;
}
this.snp = new StudentAndParent(getClient(), schoolId, studentId, diaryId)
.setUp();
return this.snp;
}
public AttendanceTable getAttendanceTable() throws IOException, VulcanException {
return new AttendanceTable(getStudentAndParent());
}
public AttendanceStatistics getAttendanceStatistics() throws IOException, VulcanException {
return new AttendanceStatistics(getStudentAndParent());
}
public ExamsWeek getExamsList() throws IOException, VulcanException {
return new ExamsWeek(getStudentAndParent());
}
public GradesList getGradesList() throws IOException, VulcanException {
return new GradesList(getStudentAndParent());
}
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 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 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,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,117 +0,0 @@
package io.github.wulkanowy.api.attendance;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import io.github.wulkanowy.api.SnP;
import io.github.wulkanowy.api.VulcanException;
import io.github.wulkanowy.api.generic.Day;
import io.github.wulkanowy.api.generic.Lesson;
import io.github.wulkanowy.api.generic.Week;
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, ParseException, VulcanException {
return getWeekTable("");
}
public Week<Day> getWeekTable(String tick) throws IOException, ParseException, VulcanException {
Element table = snp.getSnPPageDocument(ATTENDANCE_PAGE_URL + tick)
.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>");
SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy", Locale.ROOT);
Date d = sdf.parse(dayHeaderCell[1].trim());
sdf.applyPattern("yyyy-MM-dd");
Day day = new Day();
day.setDayName(dayHeaderCell[0]);
day.setDate(sdf.format(d));
days.add(day);
}
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(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,24 +0,0 @@
package io.github.wulkanowy.api.attendance;
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,59 +0,0 @@
package io.github.wulkanowy.api.exams;
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,19 +0,0 @@
package io.github.wulkanowy.api.exams;
import java.util.ArrayList;
import java.util.List;
import io.github.wulkanowy.api.generic.Day;
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,81 +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.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import io.github.wulkanowy.api.SnP;
import io.github.wulkanowy.api.VulcanException;
import io.github.wulkanowy.api.generic.Week;
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, ParseException {
return getWeek("", true);
}
public Week<ExamDay> getWeek(String tick, final boolean onlyNotEmpty) throws IOException, VulcanException, ParseException {
Document examsPage = snp.getSnPPageDocument(EXAMS_PAGE_URL + tick);
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);
}
private String getFormattedDate(String date) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy", Locale.ROOT);
Date d = sdf.parse(date);
sdf.applyPattern("yyyy-MM-dd");
return sdf.format(d);
}
}

View File

@ -1,43 +0,0 @@
package io.github.wulkanowy.api.generic;
import java.util.ArrayList;
import java.util.List;
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 void setDayName(String dayName) {
this.dayName = dayName;
}
}

View File

@ -1,240 +0,0 @@
package io.github.wulkanowy.api.generic;
public class Lesson {
private String number = "";
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 String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
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,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,33 +0,0 @@
package io.github.wulkanowy.api.generic;
import java.util.ArrayList;
import java.util.List;
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,100 +0,0 @@
package io.github.wulkanowy.api.grades;
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,93 +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.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import io.github.wulkanowy.api.SnP;
import io.github.wulkanowy.api.VulcanException;
public class GradesList {
private static final String GRADES_PAGE_URL = "Oceny/Wszystkie?details=2&okres=";
private SnP snp;
private List<Grade> grades = new ArrayList<>();
public GradesList(SnP snp) {
this.snp = snp;
}
private String getGradesPageUrl() {
return GRADES_PAGE_URL;
}
public List<Grade> getAll() throws IOException, ParseException, VulcanException {
return getAll("");
}
public List<Grade> getAll(String semester) throws IOException, ParseException, VulcanException {
Document gradesPage = snp.getSnPPageDocument(getGradesPageUrl() + semester);
Elements gradesRows = gradesPage.select(".ocenySzczegoly-table > tbody > tr");
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) throws ParseException {
String descriptions = row.select("td:nth-child(3)").text();
String symbol = descriptions.split(", ")[0];
String description = descriptions.replaceFirst(symbol, "").replaceFirst(", ", "");
String color = getColor(row.select("td:nth-child(2) span.ocenaCzastkowa").attr("style"));
String date = formatDate(row.select("td:nth-child(5)").text());
return new Grade()
.setSubject(row.select("td:nth-child(1)").text())
.setValue(row.select("td:nth-child(2)").text())
.setColor(color)
.setSymbol(symbol)
.setDescription(description)
.setWeight(row.select("td:nth-child(4)").text())
.setDate(date)
.setTeacher(row.select("td:nth-child(6)").text());
}
private String getColor(String styleAttr) {
Pattern pattern = Pattern.compile("#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})");
Matcher matcher = pattern.matcher(styleAttr);
String color = "";
while (matcher.find()) {
color = matcher.group(1);
}
return color;
}
private String formatDate(String date) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy", Locale.ROOT);
Date d = sdf.parse(date);
sdf.applyPattern("yyyy-MM-dd");
return sdf.format(d);
}
}

View File

@ -1,40 +0,0 @@
package io.github.wulkanowy.api.grades;
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,46 +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;
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.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,130 +0,0 @@
package io.github.wulkanowy.api.login;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.parser.Parser;
import org.jsoup.select.Elements;
import java.io.IOException;
import io.github.wulkanowy.api.Client;
import io.github.wulkanowy.api.VulcanException;
public class Login {
private static final String LOGIN_PAGE_URL = "{schema}://cufs.{host}/{symbol}/Account/LogOn" +
"?ReturnUrl=%2F{symbol}%2FFS%2FLS%3Fwa%3Dwsignin1.0%26wtrealm%3D" +
"{schema}%253a%252f%252fuonetplus.{host}%252f{symbol}%252fLoginEndpoint.aspx%26wctx%3D" +
"{schema}%253a%252f%252fuonetplus.{host}%252f{symbol}%252fLoginEndpoint.aspx";
private Client client;
public Login(Client client) {
this.client = client;
}
public String login(String email, String password, String symbol) throws VulcanException, IOException {
Document certDoc = sendCredentials(email, password);
return sendCertificate(certDoc, symbol);
}
Document sendCredentials(String email, String password) throws IOException, VulcanException {
String[][] credentials = new String[][]{
{"LoginName", email},
{"Password", password}
};
String nextUrl = LOGIN_PAGE_URL;
Document loginPage = client.getPageByUrl(nextUrl, false);
Element formFirst = loginPage.select("#form1").first();
if (null != formFirst) { // on adfs login
Document formSecond = client.postPageByUrl(
formFirst.attr("abs:action"),
getFormStateParams(formFirst, "", "")
);
credentials = getFormStateParams(formSecond, email, password);
nextUrl = formSecond.select("#form1").first().attr("abs:action");
}
Document html = client.postPageByUrl(nextUrl, credentials);
Element errorMessage = html.select(".ErrorMessage, #ErrorTextLabel").first();
if (null != errorMessage) {
throw new BadCredentialsException(errorMessage.text());
}
return html;
}
private String[][] getFormStateParams(Element form, String email, String password) {
return new String[][]{
{"__VIEWSTATE", form.select("#__VIEWSTATE").val()},
{"__VIEWSTATEGENERATOR", form.select("#__VIEWSTATEGENERATOR").val()},
{"__EVENTVALIDATION", form.select("#__EVENTVALIDATION").val()},
{"__db", form.select("input[name=__db]").val()},
{"PassiveSignInButton.x", "0"},
{"PassiveSignInButton.y", "0"},
{"SubmitButton.x", "0"},
{"SubmitButton.y", "0"},
{"UsernameTextBox", email},
{"PasswordTextBox", password},
};
}
String sendCertificate(Document doc, String defaultSymbol) throws IOException, VulcanException {
String certificate = doc.select("input[name=wresult]").val();
String symbol = findSymbol(defaultSymbol, certificate);
client.setSymbol(symbol);
Document targetDoc = sendCertData(doc);
String title = targetDoc.select("title").text();
if ("Working...".equals(title)) { // on adfs login
title = sendCertData(targetDoc).select("title").text();
}
if ("Logowanie".equals(title)) {
throw new AccountPermissionException("No account access. Try another symbol");
}
if (!"Uonet+".equals(title)) {
throw new LoginErrorException("Expected page title `UONET+`, got " + title);
}
return symbol;
}
private Document sendCertData(Document doc) throws IOException, VulcanException {
String url = doc.select("form[name=hiddenform]").attr("action");
return client.postPageByUrl(url.replaceFirst("Default", "{symbol}"), new String[][]{
{"wa", "wsignin1.0"},
{"wresult", doc.select("input[name=wresult]").val()},
{"wctx", doc.select("input[name=wctx]").val()}
});
}
private String findSymbol(String symbol, String certificate) {
if ("Default".equals(symbol)) {
return findSymbolInCertificate(certificate);
}
return symbol;
}
String findSymbolInCertificate(String certificate) {
Elements instances = Jsoup
.parse(certificate.replaceAll(":", ""), "", Parser.xmlParser())
.select("[AttributeName=\"UserInstance\"] samlAttributeValue");
if (instances.isEmpty()) {
return "";
}
return instances.get(1).text();
}
}

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,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,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 = null;
private List<String> achievements = new ArrayList<>();
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");
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,43 +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 NotesList {
private static final String NOTES_PAGE_URL = "UwagiOsiagniecia.mvc/Wszystkie";
private SnP snp = null;
private List<Note> notes = new ArrayList<>();
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");
int index = 0;
for (Element item : items) {
notes.add(new Note()
.setDate(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 = null;
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 = null;
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,16 +0,0 @@
package io.github.wulkanowy.api.timetable;
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,218 +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 java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import io.github.wulkanowy.api.SnP;
import io.github.wulkanowy.api.VulcanException;
import io.github.wulkanowy.api.generic.Lesson;
import io.github.wulkanowy.api.generic.Week;
public class Timetable {
private static final String TIMETABLE_PAGE_URL = "Lekcja.mvc/PlanLekcji?data=";
private SnP snp;
public Timetable(SnP snp) {
this.snp = snp;
}
public Week<TimetableDay> getWeekTable() throws IOException, ParseException, VulcanException {
return getWeekTable("");
}
public Week<TimetableDay> getWeekTable(final String tick) throws IOException, ParseException, VulcanException {
Element table = snp.getSnPPageDocument(TIMETABLE_PAGE_URL + tick)
.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) throws ParseException {
List<TimetableDay> days = new ArrayList<>();
for (int i = 2; i < 7; i++) {
String[] dayHeaderCell = tableHeaderCells.get(i).html().split("<br>");
SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy", Locale.ROOT);
Date d = sdf.parse(dayHeaderCell[1].trim());
sdf.applyPattern("yyyy-MM-dd");
TimetableDay day = new TimetableDay();
day.setDayName(dayHeaderCell[0]);
day.setDate(sdf.format(d));
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(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 2:
Element span = e.last().select("span").first();
if (span.hasClass(LessonTypes.CLASS_MOVED_OR_CANCELED)) {
lesson.setNewMovedInOrChanged(true);
lesson.setDescription("poprzednio: " + getLessonAndGroupInfoFromSpan(span)[0]);
}
case 1:
addLessonInfoFromElement(lesson, e.first());
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(".x-treelabel-rlz").last().text("(" + warn.text() + ")");
e.remove(1);
}
}
private void addLessonInfoFromElement(Lesson lesson, Element e) {
Elements spans = e.select("span");
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.substringBetween(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.substringBetween(spans.last().text(), "(", ")")
+ " (poprzednio: " + getLessonAndGroupInfoFromSpan(spans.get(0))[0] + ")");
} else if (4 <= spans.size()) {
lesson.setSubject(spans.get(0).text());
lesson.setTeacher(spans.get(1).text());
lesson.setRoom(spans.get(2).text());
lesson.setDescription(StringUtils.substringBetween(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) {
String[] subjectNameArray = span.text().split(" ");
String groupName = subjectNameArray[subjectNameArray.length - 1];
return new String[]{
span.text().replace(" " + groupName, ""),
StringUtils.substringBetween(groupName, "[", "]")
};
}
}

View File

@ -1,26 +0,0 @@
package io.github.wulkanowy.api.timetable;
import io.github.wulkanowy.api.generic.Day;
public class TimetableDay extends Day {
private boolean isFreeDay = false;
private String freeDayName = "";
public boolean isFreeDay() {
return isFreeDay;
}
public void setFreeDay(boolean freeDay) {
isFreeDay = freeDay;
}
public String getFreeDayName() {
return freeDayName;
}
public void setFreeDayName(String freeDayName) {
this.freeDayName = freeDayName;
}
}

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,63 +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() throws Exception {
Client client = new Client("http://fakelog.net\\\\admin", "pass", "Default");
Assert.assertEquals("fakelog.net", client.getHost());
Assert.assertEquals("Default", client.getSymbol());
}
@Test
public void checkForNoErrorsTest() throws Exception {
Client client = new Client("", "", "");
Document doc = Jsoup.parse(getFixtureAsString("login/Logowanie-success.html"));
Assert.assertEquals(doc, client.checkForErrors(doc));
}
@Test(expected = VulcanOfflineException.class)
public void checkForErrorsOffline() throws Exception {
Client client = new Client("", "", "");
Document doc = Jsoup.parse(getFixtureAsString("login/PrzerwaTechniczna.html"));
client.checkForErrors(doc);
}
@Test(expected = NotLoggedInErrorException.class)
public void checkForErrors() throws Exception {
Client client = new Client("", "", "");
Document doc = Jsoup.parse(getFixtureAsString("login/Logowanie-notLoggedIn.html"));
client.checkForErrors(doc);
}
@Test
public void getFilledUrlTest() throws Exception {
Client client = new Client("http://fakelog.cf\\\\admin", "", "symbol123");
Assert.assertEquals("http://uonetplus.fakelog.cf/symbol123/LoginEndpoint.aspx",
client.getFilledUrl("{schema}://uonetplus.{host}/{symbol}/LoginEndpoint.aspx"));
}
@Test
public void getSymbolTest() throws Exception {
Client client = new Client("", "", "symbol4321");
Assert.assertEquals("symbol4321", client.getSymbol());
}
}

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,156 +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;
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, "id123", null, null);
Assert.assertEquals("id123", snp.getSchoolID());
}
@Test
public void getSnpPageUrlWithIdTest() throws Exception {
Assert.assertEquals("{schema}://uonetplus-opiekun.{host}/{symbol}/123456/",
(new StudentAndParent(client, "123456", null, null)).getSnpHomePageUrl());
}
@Test
public void getSnpPageUrlWithoutIdTest() throws Exception {
String input = FixtureHelper.getAsString(getClass().getResourceAsStream("Start.html"));
Document startPageDocument = Jsoup.parse(input);
Mockito.when(client.getHost()).thenReturn("vulcan.net.pl");
Mockito.when(client.getPageByUrl(Mockito.anyString())).thenReturn(startPageDocument);
StudentAndParent snp = new StudentAndParent(client, null, null, null);
Assert.assertEquals("https://uonetplus-opiekun.vulcan.net.pl/symbol/534213/Start/Index/",
snp.getSnpHomePageUrl());
}
@Test(expected = NotLoggedInErrorException.class)
public void getSnpPageUrlWithWrongPage() throws Exception {
Document wrongPageDocument = Jsoup.parse(
FixtureHelper.getAsString(getClass().getResourceAsStream("OcenyWszystkie-semester.html"))
);
Mockito.when(client.getPageByUrl(Mockito.anyString())).thenReturn(wrongPageDocument);
StudentAndParent snp = new StudentAndParent(client, null, null, null);
snp.getSnpHomePageUrl();
}
@Test
public void getExtractedIDStandardTest() throws Exception {
Mockito.when(client.getHost()).thenReturn("vulcan.net.pl");
StudentAndParent snp = new StudentAndParent(client, "symbol", null, null);
Assert.assertEquals("123456", snp.getExtractedIdFromUrl("https://uonetplus-opiekun"
+ ".vulcan.net.pl/powiat/123456/Start/Index/"));
}
@Test
public void getExtractedIDDemoTest() throws Exception {
Mockito.when(client.getHost()).thenReturn("vulcan.net.pl");
StudentAndParent snp = new StudentAndParent(client, "symbol", null, null);
Assert.assertEquals("demo12345",
snp.getExtractedIdFromUrl("https://uonetplus-opiekun.vulcan.net.pl/demoupowiat/demo12345/Start/Index/"));
}
@Test(expected = NotLoggedInErrorException.class)
public void getExtractedIDNotLoggedTest() throws Exception {
Mockito.when(client.getHost()).thenReturn("vulcan.net.pl");
StudentAndParent snp = new StudentAndParent(client, "symbol", null, null);
Assert.assertEquals("123",
snp.getExtractedIdFromUrl("https://uonetplus.vulcan.net.pl/powiat/"));
}
@Test
public void getSemestersTest() throws Exception {
SnP snp = new StudentAndParent(client, "123456", null, null);
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 {
Document snpHome = Jsoup.parse(FixtureHelper.getAsString(
getClass().getResourceAsStream("StudentAndParent.html")));
client = Mockito.mock(Client.class);
Mockito.when(client.getPageByUrl(Mockito.anyString())).thenReturn(snpHome);
SnP snp = new StudentAndParent(client, "", null, null);
snp.setUp();
Assert.assertEquals("3Ti 2017", snp.getDiaries().get(0).getName());
Assert.assertEquals("2Ti 2016", snp.getDiaries().get(1).getName());
Assert.assertEquals("1Ti 2015", snp.getDiaries().get(2).getName());
Assert.assertEquals("1300", snp.getDiaries().get(0).getId());
Assert.assertEquals("1200", snp.getDiaries().get(1).getId());
Assert.assertEquals("1100", snp.getDiaries().get(2).getId());
Assert.assertTrue(snp.getDiaries().get(0).isCurrent());
Assert.assertFalse(snp.getDiaries().get(1).isCurrent());
Assert.assertFalse(snp.getDiaries().get(2).isCurrent());
Assert.assertEquals("Jan Kowal", snp.getStudents().get(0).getName());
Assert.assertEquals("100", snp.getStudents().get(0).getId());
}
}

View File

@ -1,26 +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;
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,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(3, 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(2).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(2).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(2).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(2).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(2).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(2).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(2).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(2).getExamList().get(0).getEntryDate());
}
}

View File

@ -1,104 +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(6, 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());
}
@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());
}
@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,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,110 +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 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"));
Login login = new Login(client);
Assert.assertEquals("d123", login.login("a@a", "pswd", "d123"));
}
@Test(expected = BadCredentialsException.class)
public void sendWrongCredentialsTest() throws Exception {
Client client = getClient("Logowanie-error.html");
Mockito.when(client.getPageByUrl(Mockito.anyString(), Mockito.anyBoolean()))
.thenReturn(getFixtureAsDocument("Logowanie-error.html")); // -error.html because it html with form used by
Login login = new Login(client);
login.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 {
Login login = new Login(getClient("Logowanie-success.html"));
Assert.assertEquals("wulkanowyschool321",
login.sendCertificate(new Document(""), "wulkanowyschool321"));
}
@Test
public void sendCertificateDefaultSymbolSuccessTest() throws Exception {
Login login = new Login(getClient("Logowanie-success.html"));
Assert.assertEquals("demo12345",
login.sendCertificate(getFixtureAsDocument("Logowanie-certyfikat.html"), "Default"));
}
@Test(expected = AccountPermissionException.class)
public void sendCertificateAccountPermissionTest() throws Exception {
Login login = new Login(getClient("Logowanie-brak-dostepu.html"));
login.sendCertificate(getFixtureAsDocument("cert-stock.xml"), "demo123");
}
@Test(expected = LoginErrorException.class)
public void sendCertificateLoginErrorTest() throws Exception {
Login login = new Login(getClient("Logowanie-certyfikat.html")); // change to other document
login.sendCertificate(getFixtureAsDocument("cert-stock.xml"), "demo123");
}
@Test
public void findSymbolInCertificateTest() throws Exception {
Login login = new Login(getClient("Logowanie-certyfikat.html"));
String certificate = getFixtureAsString("cert-stock.xml");
Assert.assertEquals("demo12345", login.findSymbolInCertificate(certificate));
}
@Test
public void findSymbolInInvalidCertificateTest() throws Exception {
Login login = new Login(getClient("Logowanie-certyfikat.html"));
Assert.assertEquals("", login.findSymbolInCertificate("<xml></xml>")); // change to real cert with empty symbols
}
}

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,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("06.06.2017", filledList.get(0).getDate());
Assert.assertEquals("01.10.2016", 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,249 +0,0 @@
package io.github.wulkanowy.api.timetable;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import io.github.wulkanowy.api.StudentAndParentTestCase;
public class TimetableTest extends StudentAndParentTestCase {
private Timetable std;
private Timetable full;
private Timetable holidays;
@Before
public void setUp() throws Exception {
std = new Timetable(getSnp("PlanLekcji-std.html"));
full = new Timetable(getSnp("PlanLekcji-full.html"));
holidays = new Timetable(getSnp("PlanLekcji-holidays.html"));
}
// Week
@Test
public void getWeekTableTest() throws Exception {
Assert.assertEquals(5, std.getWeekTable().getDays().size());
Assert.assertEquals(5, full.getWeekTable().getDays().size());
Assert.assertEquals(5, holidays.getWeekTable().getDays().size());
}
@Test
public void getStartDayDateTest() throws Exception {
Assert.assertEquals("2017-06-19", std.getWeekTable().getStartDayDate());
Assert.assertEquals("2017-06-19", full.getWeekTable().getStartDayDate());
Assert.assertEquals("2017-07-31", holidays.getWeekTable().getStartDayDate());
}
// ExamDay
@Test
public void getDayNameTest() throws Exception {
Assert.assertEquals("poniedziałek", std.getWeekTable().getDay(0).getDayName());
Assert.assertEquals("piątek", std.getWeekTable().getDay(4).getDayName());
Assert.assertEquals("wtorek", full.getWeekTable().getDay(1).getDayName());
Assert.assertEquals("czwartek", full.getWeekTable().getDay(3).getDayName());
Assert.assertEquals("środa", holidays.getWeekTable().getDay(2).getDayName());
}
@Test
public void getDayDateTest() throws Exception {
Assert.assertEquals("2017-06-19", std.getWeekTable().getDay(0).getDate());
Assert.assertEquals("2017-06-23", std.getWeekTable().getDay(4).getDate());
Assert.assertEquals("2017-06-20", full.getWeekTable().getDay(1).getDate());
Assert.assertEquals("2017-06-22", full.getWeekTable().getDay(3).getDate());
Assert.assertEquals("2017-08-02", holidays.getWeekTable().getDay(2).getDate());
}
@Test
public void getDayIsFreeTest() throws Exception {
Assert.assertFalse(std.getWeekTable().getDay(0).isFreeDay());
Assert.assertFalse(full.getWeekTable().getDay(2).isFreeDay());
Assert.assertTrue(holidays.getWeekTable().getDay(4).isFreeDay());
}
@Test
public void getDayFreeDayName() throws Exception {
Assert.assertNotEquals("Wakacje", std.getWeekTable().getDay(0).getFreeDayName());
Assert.assertNotEquals("Ferie letnie", full.getWeekTable().getDay(1).getFreeDayName());
Assert.assertNotEquals("Wakacje", holidays.getWeekTable().getDay(2).getFreeDayName());
Assert.assertEquals("Ferie letnie", holidays.getWeekTable().getDay(4).getFreeDayName());
}
@Test
public void getDayLessonsTest() throws Exception {
Assert.assertEquals(8, std.getWeekTable().getDay(0).getLessons().size());
Assert.assertEquals(14, full.getWeekTable().getDay(2).getLessons().size());
Assert.assertEquals(14, holidays.getWeekTable().getDay(4).getLessons().size());
}
// Lesson
@Test
public void getLessonNumberTest() throws Exception {
Assert.assertEquals("2", std.getWeekTable().getDay(0).getLesson(1).getNumber());
Assert.assertEquals("5", std.getWeekTable().getDay(2).getLesson(4).getNumber());
Assert.assertEquals("0", full.getWeekTable().getDay(0).getLesson(0).getNumber());
Assert.assertEquals("13", full.getWeekTable().getDay(4).getLesson(13).getNumber());
Assert.assertEquals("3", holidays.getWeekTable().getDay(3).getLesson(3).getNumber());
}
@Test
public void getLessonDayTest() throws Exception {
Assert.assertEquals("2017-06-19", std.getWeekTable().getDay(0).getLesson(1).getDate());
Assert.assertEquals("2017-06-23", std.getWeekTable().getDay(4).getLesson(4).getDate());
Assert.assertEquals("2017-06-20", full.getWeekTable().getDay(1).getLesson(6).getDate());
Assert.assertEquals("2017-06-22", full.getWeekTable().getDay(3).getLesson(3).getDate());
Assert.assertEquals("2017-08-02", holidays.getWeekTable().getDay(2).getLesson(8).getDate());
}
@Test
public void getLessonSubjectTest() throws Exception {
Assert.assertEquals("Historia", std.getWeekTable().getDay(0).getLesson(1).getSubject());
Assert.assertEquals("Zajęcia techniczne", std.getWeekTable().getDay(2).getLesson(4).getSubject());
Assert.assertEquals("Wychowanie fizyczne", std.getWeekTable().getDay(1).getLesson(1).getSubject());
Assert.assertEquals("Język angielski", full.getWeekTable().getDay(0).getLesson(1).getSubject());
Assert.assertEquals("Wychowanie do życia w rodzinie", full.getWeekTable().getDay(2).getLesson(0).getSubject());
Assert.assertEquals("Wychowanie fizyczne", full.getWeekTable().getDay(3).getLesson(1).getSubject());
Assert.assertEquals("Uroczyste zakończenie roku szkolnego", full.getWeekTable().getDay(4).getLesson(0).getSubject());
Assert.assertEquals("Fizyka", full.getWeekTable().getDay(0).getLesson(0).getSubject());
Assert.assertEquals("Metodologia programowania", full.getWeekTable().getDay(1).getLesson(0).getSubject());
Assert.assertEquals("Język niemiecki", full.getWeekTable().getDay(4).getLesson(2).getSubject());
Assert.assertEquals("", holidays.getWeekTable().getDay(3).getLesson(3).getSubject());
}
@Test
public void getLessonTeacherTest() throws Exception {
Assert.assertEquals("Bogatka Katarzyna", std.getWeekTable().getDay(0).getLesson(1).getTeacher());
Assert.assertEquals("Chlebowski Stanisław", std.getWeekTable().getDay(2).getLesson(4).getTeacher());
Assert.assertEquals("Kobczyk Iwona", full.getWeekTable().getDay(0).getLesson(1).getTeacher());
Assert.assertEquals("Bączek Grzegorz", full.getWeekTable().getDay(0).getLesson(7).getTeacher());
Assert.assertEquals("Nowak Jadwiga", full.getWeekTable().getDay(2).getLesson(0).getTeacher());
Assert.assertEquals("Nowicka Irena", full.getWeekTable().getDay(3).getLesson(1).getTeacher());
Assert.assertEquals("Baran Małgorzata", full.getWeekTable().getDay(4).getLesson(0).getTeacher());
Assert.assertEquals("", full.getWeekTable().getDay(4).getLesson(1).getTeacher());
Assert.assertEquals("", holidays.getWeekTable().getDay(3).getLesson(3).getTeacher());
}
@Test
public void getLessonRoomTest() throws Exception {
Assert.assertEquals("", std.getWeekTable().getDay(3).getLesson(3).getRoom());
Assert.assertEquals("33", full.getWeekTable().getDay(0).getLesson(7).getRoom());
Assert.assertEquals("19", full.getWeekTable().getDay(0).getLesson(0).getRoom());
Assert.assertEquals("32", full.getWeekTable().getDay(1).getLesson(0).getRoom());
Assert.assertEquals("32", full.getWeekTable().getDay(1).getLesson(8).getRoom());
Assert.assertEquals("32", full.getWeekTable().getDay(2).getLesson(8).getRoom());
Assert.assertEquals("G4", full.getWeekTable().getDay(3).getLesson(1).getRoom());
Assert.assertEquals("37", full.getWeekTable().getDay(4).getLesson(0).getRoom());
Assert.assertEquals("", holidays.getWeekTable().getDay(3).getLesson(3).getRoom());
}
@Test
public void getLessonDescriptionTest() throws Exception {
Assert.assertEquals("", std.getWeekTable().getDay(3).getLesson(3).getDescription());
Assert.assertEquals("przeniesiona z lekcji 7, 01.12.2017", full.getWeekTable().getDay(1).getLesson(1).getDescription());
Assert.assertEquals("okienko dla uczniów", full.getWeekTable().getDay(0).getLesson(7).getDescription());
Assert.assertEquals("przeniesiona z lekcji 7, 20.06.2017", full.getWeekTable().getDay(1).getLesson(2).getDescription());
Assert.assertEquals("przeniesiona z lekcji 4, 20.06.2017", full.getWeekTable().getDay(1).getLesson(3).getDescription());
Assert.assertEquals("zastępstwo (poprzednio: Religia)", full.getWeekTable().getDay(2).getLesson(0).getDescription());
Assert.assertEquals("zastępstwo (poprzednio: Wychowanie fizyczne)", full.getWeekTable().getDay(3).getLesson(1).getDescription());
Assert.assertEquals("", full.getWeekTable().getDay(4).getLesson(0).getDescription());
Assert.assertEquals("", full.getWeekTable().getDay(4).getLesson(1).getDescription());
Assert.assertEquals("poprzednio: Wychowanie fizyczne", full.getWeekTable().getDay(4).getLesson(2).getDescription());
Assert.assertEquals("egzamin", full.getWeekTable().getDay(3).getLesson(0).getDescription());
Assert.assertEquals("", full.getWeekTable().getDay(4).getLesson(1).getDescription());
Assert.assertEquals("", holidays.getWeekTable().getDay(3).getLesson(3).getDescription());
}
@Test
public void getLessonGroupNameTest() throws Exception {
Assert.assertEquals("CH", std.getWeekTable().getDay(0).getLesson(2).getGroupName());
Assert.assertEquals("JNPW", std.getWeekTable().getDay(4).getLesson(0).getGroupName());
Assert.assertEquals("", full.getWeekTable().getDay(0).getLesson(7).getGroupName());
Assert.assertEquals("zaw2", full.getWeekTable().getDay(1).getLesson(0).getGroupName());
Assert.assertEquals("wf2", full.getWeekTable().getDay(1).getLesson(3).getGroupName());
Assert.assertEquals("zaw1", full.getWeekTable().getDay(3).getLesson(1).getGroupName());
Assert.assertEquals("", holidays.getWeekTable().getDay(3).getLesson(3).getGroupName());
}
@Test
public void getLessonStartTimeTest() throws Exception {
Assert.assertEquals("08:00", std.getWeekTable().getDay(0).getLesson(0).getStartTime());
Assert.assertEquals("14:10", std.getWeekTable().getDay(3).getLesson(7).getStartTime());
Assert.assertEquals("07:10", full.getWeekTable().getDay(0).getLesson(0).getStartTime());
Assert.assertEquals("12:20", full.getWeekTable().getDay(2).getLesson(6).getStartTime());
Assert.assertEquals("12:20", holidays.getWeekTable().getDay(2).getLesson(6).getStartTime());
}
@Test
public void getLessonEndTimeTest() throws Exception {
Assert.assertEquals("08:45", std.getWeekTable().getDay(1).getLesson(0).getEndTime());
Assert.assertEquals("12:15", std.getWeekTable().getDay(2).getLesson(4).getEndTime());
Assert.assertEquals("07:55", full.getWeekTable().getDay(1).getLesson(0).getEndTime());
Assert.assertEquals("19:00", full.getWeekTable().getDay(3).getLesson(13).getEndTime());
Assert.assertEquals("19:00", holidays.getWeekTable().getDay(3).getLesson(13).getEndTime());
}
@Test
public void getLessonIsEmptyTest() throws Exception {
Assert.assertFalse(std.getWeekTable().getDay(1).getLesson(4).isEmpty());
Assert.assertTrue(std.getWeekTable().getDay(3).getLesson(7).isEmpty());
Assert.assertFalse(full.getWeekTable().getDay(1).getLesson(1).isEmpty());
Assert.assertFalse(full.getWeekTable().getDay(1).getLesson(2).isEmpty());
Assert.assertFalse(full.getWeekTable().getDay(0).getLesson(7).isEmpty());
Assert.assertTrue(full.getWeekTable().getDay(2).getLesson(9).isEmpty());
Assert.assertTrue(holidays.getWeekTable().getDay(0).getLesson(5).isEmpty());
Assert.assertTrue(holidays.getWeekTable().getDay(4).getLesson(13).isEmpty());
}
@Test
public void getLessonIsDivisionIntoGroupsTest() throws Exception {
Assert.assertTrue(std.getWeekTable().getDay(0).getLesson(2).isDivisionIntoGroups());
Assert.assertTrue(std.getWeekTable().getDay(4).getLesson(0).isDivisionIntoGroups());
Assert.assertFalse(full.getWeekTable().getDay(0).getLesson(7).isDivisionIntoGroups());
Assert.assertTrue(full.getWeekTable().getDay(1).getLesson(3).isDivisionIntoGroups());
Assert.assertTrue(full.getWeekTable().getDay(3).getLesson(1).isDivisionIntoGroups());
Assert.assertFalse(holidays.getWeekTable().getDay(3).getLesson(3).isDivisionIntoGroups());
}
@Test
public void getLessonIsPlanningTest() throws Exception {
Assert.assertFalse(std.getWeekTable().getDay(4).getLesson(4).isPlanning());
Assert.assertFalse(full.getWeekTable().getDay(0).getLesson(1).isPlanning());
Assert.assertTrue(full.getWeekTable().getDay(1).getLesson(3).isPlanning());
Assert.assertTrue(full.getWeekTable().getDay(4).getLesson(0).isPlanning());
Assert.assertFalse(holidays.getWeekTable().getDay(3).getLesson(3).isPlanning());
}
@Test
public void getLessonIsRealizedTest() throws Exception {
Assert.assertTrue(std.getWeekTable().getDay(3).getLesson(3).isRealized());
Assert.assertTrue(full.getWeekTable().getDay(0).getLesson(1).isRealized());
Assert.assertTrue(full.getWeekTable().getDay(1).getLesson(3).isRealized());
Assert.assertFalse(full.getWeekTable().getDay(4).getLesson(0).isRealized());
Assert.assertFalse(holidays.getWeekTable().getDay(3).getLesson(3).isRealized());
}
@Test
public void getLessonIsMovedOrCanceledTest() throws Exception {
Assert.assertFalse(std.getWeekTable().getDay(3).getLesson(3).isMovedOrCanceled());
Assert.assertTrue(full.getWeekTable().getDay(0).getLesson(7).isMovedOrCanceled());
Assert.assertFalse(full.getWeekTable().getDay(1).getLesson(3).isMovedOrCanceled());
Assert.assertFalse(full.getWeekTable().getDay(4).getLesson(0).isMovedOrCanceled());
Assert.assertFalse(holidays.getWeekTable().getDay(3).getLesson(3).isMovedOrCanceled());
}
@Test
public void getLessonIsNewMovedInOrChangedTest() throws Exception {
Assert.assertFalse(std.getWeekTable().getDay(3).getLesson(3).isNewMovedInOrChanged());
Assert.assertFalse(full.getWeekTable().getDay(0).getLesson(1).isNewMovedInOrChanged());
Assert.assertTrue(full.getWeekTable().getDay(1).getLesson(2).isNewMovedInOrChanged());
Assert.assertTrue(full.getWeekTable().getDay(1).getLesson(3).isNewMovedInOrChanged());
Assert.assertTrue(full.getWeekTable().getDay(3).getLesson(1).isNewMovedInOrChanged());
Assert.assertFalse(full.getWeekTable().getDay(4).getLesson(1).isNewMovedInOrChanged());
Assert.assertTrue(full.getWeekTable().getDay(4).getLesson(2).isNewMovedInOrChanged());
Assert.assertFalse(holidays.getWeekTable().getDay(3).getLesson(3).isNewMovedInOrChanged());
}
}

View File

@ -1,106 +0,0 @@
package io.github.wulkanowy.api.user;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import io.github.wulkanowy.api.StudentAndParentTestCase;
public class BasicInformationTest extends StudentAndParentTestCase {
private BasicInformation basicInformation;
@Before
public void setUp() throws Exception {
basicInformation = new BasicInformation(getSnp("UczenDanePodstawowe.html"));
}
@Test
public void getPersonalFirstNameTest() throws Exception {
Assert.assertEquals("Maria", basicInformation.getPersonalData().getFirstName());
}
@Test
public void getPersonalSurnameTest() throws Exception {
Assert.assertEquals("Kamińska", basicInformation.getPersonalData().getSurname());
}
@Test
public void getPersonalFirstAndLastNameTest() throws Exception {
Assert.assertEquals("Maria Kamińska",
basicInformation.getPersonalData().getFirstAndLastName());
}
@Test
public void getPersonalNameTest() throws Exception {
Assert.assertEquals("Maria Aneta Kamińska", basicInformation.getPersonalData().getName());
}
@Test
public void getPersonalDateAndBirthPlaceTest() throws Exception {
Assert.assertEquals("01.01.1900, Warszawa",
basicInformation.getPersonalData().getDateAndBirthPlace());
}
@Test
public void getPersonalPeselTest() throws Exception {
Assert.assertEquals("12345678900", basicInformation.getPersonalData().getPesel());
}
@Test
public void getPersonalGenderTest() throws Exception {
Assert.assertEquals("Kobieta", basicInformation.getPersonalData().getGender());
}
@Test
public void isPersonalPolishCitizenshipTest() throws Exception {
Assert.assertTrue(basicInformation.getPersonalData().isPolishCitizenship());
}
@Test
public void getPersonalFamilyNameTest() throws Exception {
Assert.assertEquals("Nowak", basicInformation.getPersonalData().getFamilyName());
}
@Test
public void getPersonalParentsNames() throws Exception {
Assert.assertEquals("Gabriela, Kamil",
basicInformation.getPersonalData().getParentsNames());
}
@Test
public void getBasicAddressTest() throws Exception {
Assert.assertEquals("ul. Sportowa 16, 00-123 Warszawa",
basicInformation.getAddressData().getAddress());
}
@Test
public void getBasicRegisteredAddressTest() throws Exception {
Assert.assertEquals("ul. Sportowa 17, 00-123 Warszawa",
basicInformation.getAddressData().getRegisteredAddress());
}
@Test
public void getBasicCorrespondenceAddressTest() throws Exception {
Assert.assertEquals("ul. Sportowa 18, 00-123 Warszawa",
basicInformation.getAddressData().getCorrespondenceAddress());
}
@Test
public void getContactPhoneNumberTest() throws Exception {
Assert.assertEquals("005554433",
basicInformation.getContactDetails().getPhoneNumber());
}
@Test
public void getContactCellPhoneNumberTest() throws Exception {
Assert.assertEquals("555444333",
basicInformation.getContactDetails().getCellPhoneNumber());
}
@Test
public void getContactEmailTest() throws Exception {
Assert.assertEquals("wulkanowy@example.null",
basicInformation.getContactDetails().getEmail());
}
}

View File

@ -1,59 +0,0 @@
package io.github.wulkanowy.api.user;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import java.util.List;
import io.github.wulkanowy.api.StudentAndParentTestCase;
public class FamilyInformationTest extends StudentAndParentTestCase {
private FamilyInformation familyInformation;
@Before
public void setUp() throws Exception {
familyInformation = new FamilyInformation(getSnp("UczenDanePodstawowe.html"));
}
@Test
public void getFamilyMembers() throws Exception {
Assert.assertEquals(2, familyInformation.getFamilyMembers().size());
}
@Test
public void getNameTest() throws Exception {
List<FamilyMember> list = familyInformation.getFamilyMembers();
Assert.assertEquals("Marianna Pająk", list.get(0).getName());
Assert.assertEquals("Dawid Świątek", list.get(1).getName());
}
@Test
public void getKinshipTest() throws Exception {
List<FamilyMember> list = familyInformation.getFamilyMembers();
Assert.assertEquals("matka", list.get(0).getKinship());
Assert.assertEquals("ojciec", list.get(1).getKinship());
}
@Test
public void getAddressTest() throws Exception {
List<FamilyMember> list = familyInformation.getFamilyMembers();
Assert.assertEquals("ul. Sportowa 16, 00-123 Warszawa", list.get(0).getAddress());
Assert.assertEquals("ul. Sportowa 18, 00-123 Warszawa", list.get(1).getAddress());
}
@Test
public void getTelephonesTest() throws Exception {
List<FamilyMember> list = familyInformation.getFamilyMembers();
Assert.assertEquals("555111222", list.get(0).getTelephones());
Assert.assertEquals("555222111", list.get(1).getTelephones());
}
@Test
public void getEmailTest() throws Exception {
List<FamilyMember> list = familyInformation.getFamilyMembers();
Assert.assertEquals("wulkanowy@example.null", list.get(0).getEmail());
Assert.assertEquals("wulkanowy@example.null", list.get(1).getEmail());
}
}

View File

@ -1,22 +0,0 @@
<!DOCTYPE html>
<html lang="pl">
<head>
<meta charset="utf-8">
<title>Witryna ucznia i rodzica Oceny</title>
</head>
<body>
<main class="mainContainer">
<h1>Oceny</h1>
<div class="filters">
<div>
<label for="okresyKlasyfikacyjneDropDownList">Okres klasyfikacyjny:</label>
<select id="okresyKlasyfikacyjneDropDownList" name="okresyKlasyfikacyjneDropDownList">
<option value="1234">1</option>
<option selected="selected" value="1235">2</option>
</select>
</div>
</div>
</main>
<footer>wersja: 17.05.0000.24042</footer>
</body>
</html>

View File

@ -1,24 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Uonet+</title>
</head>
<body>
<div class="startScreen">
<div class="holder">
<div class="content">
<div class="panel linkownia pracownik klient">
<a href="https://uonetplus-opiekun.vulcan.net.pl/symbol/534213/Start/Index/">
<div class="imagedHeader directLink">
<div id="idEmptyAppUczeń">
<div class="name">Uczeń</div>
</div>
</div>
</a>
</div>
</div>
</div>
</div>
</body>
</html>

View File

@ -1,37 +0,0 @@
<!DOCTYPE html>
<html lang="pl">
<head>
<meta charset="utf-8">
<title>Witryna ucznia i rodzica Strona gł&#243;wna</title>
</head>
<body>
<ul id="idSection">
<li>
<label for="uczenDropDownList">Uczeń:</label>
<select id="uczenDropDownList" name="uczenDropDownList">
<option selected="selected"
value="https://uonetplus-opiekun.fakelog.cf/Default/123456/Uczen/UczenOnChange?&amp;id=100">
Jan Kowal
</option>
</select>
</li>
<li>
<label for="dziennikDropDownList">Dziennik:</label>
<select id="dziennikDropDownList" name="dziennikDropDownList">
<option selected="selected"
value="https://uonetplus-opiekun.fakelog.cf/Default/123456/Dziennik/DziennikOnChange?&amp;id=1300">
3Ti 2017
</option>
<option value="https://uonetplus-opiekun.fakelog.cf/Default/123456/Dziennik/DziennikOnChange?&amp;id=1200">
2Ti 2016
</option>
<option value="https://uonetplus-opiekun.fakelog.cf/Default/123456/Dziennik/DziennikOnChange?&amp;id=1100">
1Ti 2015
</option>
</select>
</li>
</ul>
<footer>wersja: 17.09.0008.26553</footer>
</body>
</html>

View File

@ -1,408 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Witryna ucznia i rodzica Frekwencja</title>
<style>
.x-sp-nieobecny-w-oddziale:before {
content: 'nieobecny w oddziale';
background: grey;
}
.x-obecnosc:before {
content: 'obecność';
background: green;
}
.presentData td:not(.padding-zero):not(.x-sp-nieobecny-w-oddziale):not(:first-child):before {
content: 'pusta';
background: grey;
}
</style>
</head>
<body>
<main class="mainContainer">
<h1>Frekwencja</h1>
<table class="presentData">
<thead>
<tr>
<th>Lekcja</th>
<th>poniedziałek<br>31.08.2015</th>
<th>wtorek<br>01.09.2015</th>
<th>środa<br>02.09.2015</th>
<th>czwartek<br>03.09.2015</th>
<th>piątek<br>04.09.2015</th>
</tr>
</thead>
<tbody>
<tr>
<td>0</td>
<td class="x-sp-nieobecny-w-oddziale"></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>1</td>
<td class="x-sp-nieobecny-w-oddziale"></td>
<td class="padding-zero">
<div class="x-obecnosc">
<span>Uroczyste rozpoczęcie roku szkolnego 2015/2016</span>
</div>
</td>
<td class="padding-zero">
<div class="x-obecnosc">
<span>Wychowanie do życia w rodzinie</span>
</div>
</td>
<td></td>
<td class="padding-zero">
<div class="x-obecnosc">
<span>Urządzenia techniki komputerowej</span>
</div>
</td>
</tr>
<tr>
<td>2</td>
<td class="x-sp-nieobecny-w-oddziale"></td>
<td></td>
<td class="padding-zero">
<div class="x-obecnosc">
<span>Język angielski</span>
</div>
</td>
<td class="padding-zero">
<div class="x-obecnosc">
<span>Język niemiecki</span>
</div>
</td>
<td class="padding-zero">
<div class="x-obecnosc">
<span>Urządzenia techniki komputerowej</span>
</div>
</td>
</tr>
<tr>
<td>3</td>
<td class="x-sp-nieobecny-w-oddziale"></td>
<td></td>
<td class="padding-zero">
<div class="x-obecnosc">
<span>Systemy operacyjne</span>
</div>
</td>
<td class="padding-zero">
<div class="x-obecnosc">
<span>Chemia</span>
</div>
</td>
<td class="padding-zero">
<div class="x-obecnosc">
<span>Urządzenia techniki komputerowej</span>
</div>
</td>
</tr>
<tr>
<td>4</td>
<td class="x-sp-nieobecny-w-oddziale"></td>
<td></td>
<td class="padding-zero">
<div class="x-obecnosc">
<span>Systemy operacyjne</span>
</div>
</td>
<td class="padding-zero">
<div class="x-obecnosc">
<span>Geografia</span>
</div>
</td>
<td class="padding-zero">
<div class="x-obecnosc">
<span>Urządzenia techniki komputerowej</span>
</div>
</td>
</tr>
<tr>
<td>5</td>
<td class="x-sp-nieobecny-w-oddziale"></td>
<td></td>
<td class="padding-zero">
<div class="x-obecnosc">
<span>Tworzenie stron internetowych</span>
</div>
</td>
<td class="padding-zero">
<div class="x-obecnosc">
<span>Matematyka</span>
</div>
</td>
<td class="padding-zero">
<div class="x-obecnosc">
<span>Język polski</span>
</div>
</td>
</tr>
<tr>
<td>6</td>
<td class="x-sp-nieobecny-w-oddziale"></td>
<td></td>
<td class="padding-zero">
<div class="x-obecnosc">
<span>Tworzenie stron internetowych</span>
</div>
</td>
<td class="padding-zero">
<div class="x-obecnosc">
<span>Fizyka</span>
</div>
</td>
<td class="padding-zero">
<div class="x-obecnosc">
<span>Matematyka</span>
</div>
</td>
</tr>
<tr>
<td>7</td>
<td class="x-sp-nieobecny-w-oddziale"></td>
<td></td>
<td class="padding-zero">
<div class="x-obecnosc">
<span>Wychowanie fizyczne</span>
</div>
</td>
<td class="padding-zero">
<div class="x-obecnosc">
<span>Język polski</span>
</div>
</td>
<td class="padding-zero">
<div class="x-obecnosc">
<span>Historia</span>
</div>
</td>
</tr>
<tr>
<td>8</td>
<td class="x-sp-nieobecny-w-oddziale"></td>
<td></td>
<td class="padding-zero">
<div class="x-obecnosc">
<span>Wychowanie fizyczne</span>
</div>
</td>
<td></td>
<td></td>
</tr>
<tr>
<td>9</td>
<td class="x-sp-nieobecny-w-oddziale"></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>10</td>
<td class="x-sp-nieobecny-w-oddziale"></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>11</td>
<td class="x-sp-nieobecny-w-oddziale"></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>12</td>
<td class="x-sp-nieobecny-w-oddziale"></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>13</td>
<td class="x-sp-nieobecny-w-oddziale"></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
<h1 id="statystyki">Statystyki</h1>
<div>
<label for="idPrzedmiot">Przedmiot:</label>
<select id="idPrzedmiot" name="idPrzedmiot">
<option value="-1">Wszystkie</option>
<option value="1">Religia</option>
<option value="4">Język polski</option>
<option value="5">Język angielski</option>
<option value="9">Język niemiecki</option>
<option value="50">Historia</option>
<option value="56">Wiedza o społeczeństwie</option>
<option value="58">Matematyka</option>
<option value="59">Fizyka</option>
<option value="61">Chemia</option>
<option value="63">Biologia</option>
<option value="64">Geografia</option>
<option value="71">Informatyka</option>
<option value="75">Wychowanie fizyczne</option>
<option value="88">Edukacja dla bezpieczeństwa</option>
<option value="91">Wychowanie do życia w rodzinie</option>
<option value="94">Zajęcia z wychowawcą</option>
<option value="106">Techniki biurowe</option>
<option value="108">Urządzenia techniki komputerowej</option>
<option value="109">Naprawa komputera</option>
<option value="113">Systemy operacyjne</option>
<option value="114">Sieci komputerowe i administrowanie sieciami</option>
<option value="118">Tworzenie stron internetowych</option>
<option value="492">Opieka nad uczniami</option>
<option value="664">Fizyka doświadczalna</option>
<option value="0">Brak opisu lekcji</option>
</select>
</div>
<h2>Frekwencja od początku roku szkolnego: 100,00%</h2>
<table>
<thead>
<tr>
<th></th>
<th>IX</th>
<th>X</th>
<th>XI</th>
<th>XII</th>
<th>I</th>
<th>II</th>
<th>III</th>
<th>IV</th>
<th>V</th>
<th>VI</th>
<th>VII</th>
<th>VIII</th>
<th>Razem</th>
</tr>
</thead>
<tbody>
<tr>
<td>Obecność</td>
<td>142</td>
<td>143</td>
<td>139</td>
<td>110</td>
<td>131</td>
<td>75</td>
<td>126</td>
<td>139</td>
<td>92</td>
<td>114</td>
<td></td>
<td></td>
<td>1211</td>
</tr>
<tr>
<td>Nieobecność nieusprawiedliwiona</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Nieobecność usprawiedliwiona</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Nieobecność z przyczyn szkolnych</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Spóźnienie nieusprawiedliwione</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Spóźnienie usprawiedliwione</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Zwolnienie</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
</main>
<footer>wersja: 17.07.0002.24480</footer>
</body>
</html>

View File

@ -1,498 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Witryna ucznia i rodzica Frekwencja</title>
<style>
.x-obecnosc:before {
content: 'obecność';
background: green;
}
.x-nieobecnosc-nieuspr:before {
content: 'nieobecność nieusprawiedliwiona';
background: red;
}
.x-nieobecnosc-uspr:before {
content: 'nieobecność usprawiedliwiona';
background: orange;
}
.x-nieobecnosc-przycz-szkol:before {
content: 'nieobecność z przyczyn szkolnych';
background: lightblue;
}
.x-sp-nieusprawiedliwione:before {
content: 'spóźnienie nieusprawiedliwione';
background: yellow;
}
.x-sp-spr:before {
content: 'spóźnienie usprawiedliwione';
background: black;
color: white;
}
.x-sp-zwolnienie:before {
content: 'zwolnienie';
background: purple;
}
.x-sp-nieobecny-w-oddziale:before {
content: 'nieobecny w oddziale';
background: grey;
}
.x-obecnosc:before {
content: 'obecność';
background: green;
}
.presentData td:not(.padding-zero):not(.x-sp-nieobecny-w-oddziale):not(:first-child):before {
content: 'pusta';
background: grey;
}
</style>
</head>
<body>
<main class="mainContainer">
<h1>Frekwencja</h1>
<table class="presentData">
<thead>
<tr>
<th>Lekcja</th>
<th>poniedziałek<br>05.09.2016</th>
<th>wtorek<br>06.09.2016</th>
<th>środa<br>07.09.2016</th>
<th>czwartek<br>08.09.2016</th>
<th>piątek<br>09.09.2016</th>
</tr>
</thead>
<tbody>
<tr>
<td>0</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>1</td>
<td class="padding-zero">
<div class="x-obecnosc">
<span>Urządzenia techniki komputerowej</span>
</div>
</td>
<td class="padding-zero">
<div class="x-obecnosc">
<span>Multimedia i grafika komputerowa</span>
</div>
</td>
<td class="padding-zero">
<div class="x-obecnosc">
<span>Użytkowanie urządzeń peryferyjnych komputera</span>
</div>
</td>
<td class="padding-zero">
<div class="x-obecnosc">
<span>Religia</span>
</div>
</td>
<td></td>
</tr>
<tr>
<td>2</td>
<td class="padding-zero">
<div class="x-obecnosc">
<span>Urządzenia techniki komputerowej</span>
</div>
</td>
<td class="padding-zero">
<div class="x-obecnosc">
<span>Język niemiecki</span>
</div>
</td>
<td class="padding-zero">
<div class="x-obecnosc">
<span>Użytkowanie urządzeń peryferyjnych komputera</span>
</div>
</td>
<td class="padding-zero">
<div class="x-obecnosc">
<span>Język niemiecki</span>
</div>
</td>
<td class="padding-zero">
<div class="x-nieobecnosc-uspr">
<span>Sieci komputerowe i administrowanie sieciami</span>
</div>
</td>
</tr>
<tr>
<td>3</td>
<td class="padding-zero">
<div class="x-obecnosc">
<span>Urządzenia techniki komputerowej</span>
</div>
</td>
<td class="padding-zero">
<div class="x-obecnosc">
<span>Fizyka</span>
</div>
</td>
<td class="padding-zero">
<div class="x-obecnosc">
<span>Historia</span>
</div>
</td>
<td class="padding-zero">
<div class="x-obecnosc">
<span>Wychowanie fizyczne</span>
</div>
</td>
<td class="padding-zero">
<div class="x-nieobecnosc-uspr">
<span>Wiedza o kulturze</span>
</div>
</td>
</tr>
<tr>
<td>4</td>
<td class="padding-zero">
<div class="x-obecnosc">
<span>Naprawa komputera</span>
</div>
</td>
<td class="padding-zero">
<div class="x-obecnosc">
<span>Wychowanie fizyczne</span>
</div>
</td>
<td class="padding-zero">
<div class="x-obecnosc">
<span>Język angielski</span>
</div>
</td>
<td class="padding-zero">
<div class="x-obecnosc">
<span>Wychowanie fizyczne</span>
</div>
</td>
<td class="padding-zero">
<div class="x-nieobecnosc-uspr">
<span>Język polski</span>
</div>
</td>
</tr>
<tr>
<td>5</td>
<td class="padding-zero">
<div class="x-obecnosc">
<span>Sieci komputerowe i administrowanie sieciami</span>
</div>
</td>
<td class="padding-zero">
<div class="x-obecnosc">
<span>Metodologia programowania</span>
</div>
</td>
<td class="padding-zero">
<div class="x-nieobecnosc-przycz-szkol">
<span>Urządzenia techniki komputerowej</span>
</div>
</td>
<td class="padding-zero">
<div class="x-obecnosc">
<span>Matematyka</span>
</div>
</td>
<td class="padding-zero">
<div class="x-nieobecnosc-uspr">
<span>Metodologia programowania</span>
</div>
</td>
</tr>
<tr>
<td>6</td>
<td class="padding-zero">
<div class="x-obecnosc">
<span>Język niemiecki</span>
</div>
</td>
<td class="padding-zero">
<div class="x-sp-nieusprawiedliwione">
<span>Sieci komputerowe i administrowanie sieciami</span>
</div>
</td>
<td class="padding-zero">
<div class="x-obecnosc">
<span>Język polski</span>
</div>
</td>
<td class="padding-zero">
<div class="x-obecnosc">
<span>Podstawy przedsiębiorczości</span>
</div>
</td>
<td class="padding-zero">
<div class="x-nieobecnosc-uspr">
<span>Matematyka</span>
</div>
</td>
</tr>
<tr>
<td>7</td>
<td class="padding-zero">
<div class="x-obecnosc">
<span>Fizyka</span>
</div>
</td>
<td class="padding-zero">
<div class="x-sp-spr">
<span>Język polski</span>
</div>
</td>
<td class="padding-zero">
<div class="x-obecnosc">
<span>Systemy operacyjne</span>
</div>
</td>
<td class="padding-zero">
<div class="x-obecnosc">
<span>Zajęcia z wychowawcą</span>
</div>
</td>
<td class="padding-zero">
<div class="x-nieobecnosc-uspr">
<span>Religia</span>
</div>
</td>
</tr>
<tr>
<td>8</td>
<td></td>
<td class="padding-zero">
<div class="x-nieobecnosc-nieuspr">
<span>Naprawa komputera</span>
</div>
</td>
<td class="padding-zero">
<div class="x-obecnosc">
<span>Systemy operacyjne</span>
</div>
</td>
<td class="padding-zero">
<div class="x-obecnosc">
<span>Urządzenia techniki komputerowej</span>
</div>
</td>
<td class="padding-zero">
<div class="x-sp-zwolnienie">
<span>Zajęcia z wychowawcą</span>
</div>
</td>
</tr>
<tr>
<td>9</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>10</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>11</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>12</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>13</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
<h1 id="statystyki">Statystyki</h1>
<div>
<label for="idPrzedmiot">Przedmiot:</label>
<select id="idPrzedmiot" name="idPrzedmiot">
<option value="-1">Wszystkie</option>
<option value="1">Religia</option>
<option value="4">Język polski</option>
<option value="5">Język angielski</option>
<option value="9">Język niemiecki</option>
<option value="50">Historia</option>
<option value="57">Wiedza o kulturze</option>
<option value="58">Matematyka</option>
<option value="59">Fizyka</option>
<option value="70">Podstawy przedsiębiorczości</option>
<option value="75">Wychowanie fizyczne</option>
<option value="77">Praktyka zawodowa</option>
<option value="91">Wychowanie do życia w rodzinie</option>
<option value="94">Zajęcia z wychowawcą</option>
<option value="108">Urządzenia techniki komputerowej</option>
<option value="109">Naprawa komputera</option>
<option value="110">Użytkowanie urządzeń peryferyjnych komputera</option>
<option value="113">Systemy operacyjne</option>
<option value="114">Sieci komputerowe i administrowanie sieciami</option>
<option value="116">Multimedia i grafika komputerowa</option>
<option value="120">Metodologia programowania</option>
<option value="492">Opieka nad uczniami</option>
<option value="0">Brak opisu lekcji</option>
</select>
</div>
<h2>Frekwencja od początku roku szkolnego: 80,94%</h2>
<table>
<thead>
<tr>
<th></th>
<th>IX</th>
<th>X</th>
<th>XI</th>
<th>XII</th>
<th>I</th>
<th>II</th>
<th>III</th>
<th>IV</th>
<th>V</th>
<th>VI</th>
<th>VII</th>
<th>VIII</th>
<th>Razem</th>
</tr>
</thead>
<tbody>
<tr>
<td>Obecność</td>
<td>135</td>
<td>103</td>
<td>108</td>
<td>54</td>
<td>37</td>
<td>100</td>
<td>33</td>
<td>90</td>
<td>103</td>
<td>59</td>
<td></td>
<td></td>
<td>822</td>
</tr>
<tr>
<td>Nieobecność nieusprawiedliwiona</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td>2</td>
<td></td>
<td></td>
<td></td>
<td>4</td>
<td></td>
<td></td>
<td>6</td>
</tr>
<tr>
<td>Nieobecność usprawiedliwiona</td>
<td>6</td>
<td>27</td>
<td>29</td>
<td>30</td>
<td>44</td>
<td></td>
<td></td>
<td>16</td>
<td>13</td>
<td>27</td>
<td></td>
<td></td>
<td>192</td>
</tr>
<tr>
<td>Nieobecność z przyczyn szkolnych</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td>7</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td>7</td>
</tr>
<tr>
<td>Spóźnienie nieusprawiedliwione</td>
<td>4</td>
<td></td>
<td>1</td>
<td></td>
<td></td>
<td>2</td>
<td>2</td>
<td></td>
<td>2</td>
<td>1</td>
<td></td>
<td></td>
<td>12</td>
</tr>
<tr>
<td>Spóźnienie usprawiedliwione</td>
<td>1</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td>1</td>
</tr>
<tr>
<td>Zwolnienie</td>
<td></td>
<td>1</td>
<td></td>
<td></td>
<td></td>
<td>1</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td>2</td>
</tr>
</tbody>
</table>
</main>
<footer>wersja: 17.07.0002.24480</footer>
</body>
</html>

View File

@ -1,19 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Witryna ucznia i rodzica Terminarz sprawdzian&#243;w</title>
</head>
<body>
<main class="mainContainer">
<h1>Sprawdziany</h1>
<h2>Tydzień 30.04.2018 - 06.05.2018</h2>
<h2>Nie zaplanowano żadnych sprawdzian&#243;w na wybrany tydzień</h2>
<div class="navigation">
<a href="/symbol/123456/Sprawdziany.mvc/Terminarz?data=636600384000000000&amp;rokSzkolny=2017&amp;rodzajWidoku=2" class="button-prev">Poprzedni tydzień</a>
<a href="/symbol/123456/Sprawdziany.mvc/Terminarz?data=636612480000000000&amp;rokSzkolny=2017&amp;rodzajWidoku=2" class="button-next">Następny tydzień</a>
</div>
</main>
<footer>wersja: 17.09.0009.26859</footer>
</body>
</html>

View File

@ -1,85 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Witryna ucznia i rodzica Terminarz sprawdzianów</title>
</head>
<body>
<main class="mainContainer">
<h1>Sprawdziany</h1>
<h2>Tydzień 23.10.2017 - 29.10.2017</h2>
<div>
<h2>poniedziałek, 23.10.2017</h2>
<article>
<div class="daneWiersz">
<div class="tytul">Przedmiot i grupa:</div>
<div class="wartosc">Sieci komputerowe 3Ti|zaw2</div>
</div>
<div class="daneWiersz">
<div class="tytul">Rodzaj sprawdzianu:</div>
<div class="wartosc">Sprawdzian</div>
</div>
<div class="daneWiersz">
<div class="tytul">Opis:</div>
<div class="wartosc">Łącza danych</div>
</div>
<div class="daneWiersz">
<div class="tytul">Nauczyciel i data wpisu:</div>
<div class="wartosc">Adam Wiśniewski [AW], 16.10.2017</div>
</div>
</article>
</div>
<div>
<h2>wtorek, 24.10.2017</h2>
<article>
<div class="daneWiersz">
<div class="tytul">Przedmiot i grupa:</div>
<div class="wartosc">Język angielski 3Ti|J1</div>
</div>
<div class="daneWiersz">
<div class="tytul">Rodzaj sprawdzianu:</div>
<div class="wartosc">Sprawdzian</div>
</div>
<div class="daneWiersz">
<div class="tytul">Opis:</div>
<div class="wartosc">Czasy teraźniejsze</div>
</div>
<div class="daneWiersz">
<div class="tytul">Nauczyciel i data wpisu:</div>
<div class="wartosc">Natalia Nowak [NN], 17.10.2017</div>
</div>
</article>
</div>
<div></div>
<div></div>
<div>
<h2>piątek, 27.10.2017</h2>
<article>
<div class="daneWiersz">
<div class="tytul">Przedmiot i grupa:</div>
<div class="wartosc">Metodologia programowania 3Ti|zaw2</div>
</div>
<div class="daneWiersz">
<div class="tytul">Rodzaj sprawdzianu:</div>
<div class="wartosc">Sprawdzian</div>
</div>
<div class="daneWiersz">
<div class="tytul">Opis:</div>
<div class="wartosc"></div>
</div>
<div class="daneWiersz">
<div class="tytul">Nauczyciel i data wpisu:</div>
<div class="wartosc">Małgorzata Nowacka [MN], 16.10.2017</div>
</div>
</article>
</div>
<div></div>
<div></div>
<div class="navigation">
<a href="/symbol/123456/Sprawdziany.mvc/Terminarz?data=636437088000000000&amp;rokSzkolny=2017&amp;rodzajWidoku=2" class="button-prev">Poprzedni tydzień</a>
<a href="/symbol/123456/Sprawdziany.mvc/Terminarz?data=636449184000000000&amp;rokSzkolny=2017&amp;rodzajWidoku=2" class="button-next">Następny tydzień</a>
</div>
</main>
<footer>wersja: 17.08.0001.24874</footer>
</body>
</html>

View File

@ -1,108 +0,0 @@
<!DOCTYPE html>
<html lang="pl">
<head>
<meta charset="utf-8">
<title>Witryna ucznia i rodzica Oceny</title>
</head>
<body>
<main class="mainContainer">
<h1>Oceny</h1>
<div class="filters">
<div>
<label for="okresyKlasyfikacyjneDropDownList">Okres klasyfikacyjny:</label>
<select id="okresyKlasyfikacyjneDropDownList" name="okresyKlasyfikacyjneDropDownList">
<option value="1234567">1</option>
<option selected="selected" value="7654321">2</option>
</select>
</div>
</div>
<table class="ocenySzczegoly-table">
<thead>
<tr>
<th>Przedmiot</th>
<th>Ocena cząstkowa</th>
<th>Opis</th>
<th>Waga</th>
<th>Data</th>
<th>Nauczyciel</th>
</tr>
</thead>
<tbody>
<tr>
<td>Zachowanie</td>
<td>Brak ocen</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Zajęcia z wychowawcą</td>
<td class="break-word">
<span class="ocenaCzastkowa" style="color:#000000;">5</span>
</td>
<td class="break-word">A1, Dzień Kobiet w naszej klasie</td>
<td>1,00</td>
<td>21.03.2017</td>
<td>Patryk Maciejewski</td>
</tr>
<tr>
<td>Edukacja dla bezpieczeństwa</td>
<td class="break-word">
<span class="ocenaCzastkowa" style="color:#F04C4C;">4-</span>
</td>
<td class="break-word">S1, PIERWSZA POMOC I RESUSCYTACJA</td>
<td>5,00</td>
<td>31.03.2017</td>
<td>Weronika Ratajczak</td>
</tr>
<tr>
<td>Fizyka</td>
<td class="break-word">
<span class="ocenaCzastkowa" style="color:#6ECD07;">2</span>
</td>
<td class="break-word">O, Odpowiedź</td>
<td>3,00</td>
<td>25.06.2017</td>
<td>Jakub Michalak</td>
</tr>
<tr>
<td>Język angielski</td>
<td class="break-word">
<span class="ocenaCzastkowa" style="color:#1289F7;">5</span>
</td>
<td class="break-word">BW3, Writing</td>
<td>3,00</td>
<td>02.06.2017</td>
<td>Oliwia Woźniak</td>
</tr>
<tr>
<td>Wiedza o społeczeństwie</td>
<td>Brak ocen</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Wychowanie fizyczne</td>
<td class="break-word"><span class="ocenaCzastkowa" style="color:#6ECD07;">1</span></td>
<td class="break-word">STR</td>
<td>8,00</td>
<td>02.04.2017</td>
<td>Klaudia Dziedzic</td>
</tr>
<tr>
<td>Język polski</td>
<td class="break-word"><span class="ocenaCzastkowa" style="color:#6ECD07;">1</span></td>
<td class="break-word">K, Kordian</td>
<td>5,00</td>
<td>06.02.2017</td>
<td>Amelia Stępień</td>
</tr>
</tbody>
</table>
</main>
<footer>wersja: 17.02.0000.23328</footer>
</body>
</html>

View File

@ -1,70 +0,0 @@
<!DOCTYPE html>
<html lang="pl">
<head>
<meta charset="utf-8">
<title>Witryna ucznia i rodzica Oceny</title>
</head>
<body>
<main class="mainContainer">
<h1>Oceny</h1>
<div class="filters">
<div>
<label for="okresyKlasyfikacyjneDropDownList">Okres klasyfikacyjny:</label>
<select id="okresyKlasyfikacyjneDropDownList" name="okresyKlasyfikacyjneDropDownList">
<option selected="selected" value="1234">1</option>
<option value="1235">2</option>
</select>
</div>
</div>
<table class="ocenyZwykle-table">
<thead>
<tr>
<th>Przedmiot</th>
<th>Oceny cząstkowe</th>
<th>Średnia</th>
<th>Przewidywana ocena roczna</th>
<th>Ocena roczna</th>
</tr>
</thead>
<tbody>
<tr>
<td>Zachowanie</td>
<td class="break-word">Brak ocen</td>
<td>-</td>
<td>bardzo dobre</td>
<td>bardzo dobre</td>
</tr>
<tr>
<td>Język polski</td>
<td class="break-word">0</td>
<td>3,53</td>
<td>-</td>
<td>dobry</td>
</tr>
<tr>
<td>Wychowanie fizyczne</td>
<td class="break-word">0</td>
<td>5,05</td>
<td>bardzo dobry</td>
<td>celujący</td>
</tr>
<tr>
<td>Język angielski</td>
<td class="break-word">0</td>
<td>4,4</td>
<td>4/5</td>
<td>bardzo dobry</td>
</tr>
<tr>
<td>Wiedza o społeczeństwie</td>
<td class="break-word">Brak ocen</td>
<td>-</td>
<td>-</td>
<td>-</td>
</tr>
</tbody>
</table>
</main>
<footer>wersja: 17.02.0000.23328</footer>
</body>
</html>

View File

@ -1,64 +0,0 @@
<!DOCTYPE html>
<html lang="pl">
<head>
<meta charset="utf-8">
<title>Witryna ucznia i rodzica Oceny</title>
</head>
<body>
<main class="mainContainer">
<h1>Oceny</h1>
<div class="filters">
<div>
<label for="okresyKlasyfikacyjneDropDownList">Okres klasyfikacyjny:</label>
<select id="okresyKlasyfikacyjneDropDownList" name="okresyKlasyfikacyjneDropDownList">
<option value="1234">1</option>
<option selected="selected" value="1235">2</option>
</select>
</div>
</div>
<table class="ocenyZwykle-table">
<thead>
<tr>
<th>Przedmiot</th>
<th>Oceny cząstkowe</th>
<th>Przewidywana ocena roczna</th>
<th>Ocena roczna</th>
</tr>
</thead>
<tbody>
<tr>
<td>Zachowanie</td>
<td class="break-word">-</td>
<td>bardzo dobre</td>
<td>bardzo dobre</td>
</tr>
<tr>
<td>Praktyka zawodowa</td>
<td class="break-word">-</td>
<td>-</td>
<td>celujący</td>
</tr>
<tr>
<td>Metodologia programowania</td>
<td class="break-word">-</td>
<td>bardzo dobry</td>
<td>celujący</td>
</tr>
<tr>
<td>Podstawy przedsiębiorczości</td>
<td class="break-word">-</td>
<td>3/4</td>
<td>dostateczny</td>
</tr>
<tr>
<td>Wychowanie do życia w rodzinie</td>
<td class="break-word">-</td>
<td>-</td>
<td>-</td>
</tr>
</tbody>
</table>
</main>
<footer>wersja: 17.05.0000.24042</footer>
</body>
</html>

View File

@ -1,15 +0,0 @@
<!doctype html>
<html>
<head>
<title>Logowanie</title>
</head>
<body>
<form id="form1">
<div>
Adres <b>example@wulkanowy.io</b> nie został zarejestrowany w dzienniku uczniowskim jako adres rodzica, bądź ucznia.
Jeśli jesteś rodzicem (prawnym opiekunem) ucznia (lub uczniem) szkoły korzystającej z dziennika „UONET +” udaj się do
wychowawcy i poproś o wprowadzenie Twojego adresu e-mail do Twoich danych.
</div>
</form>
</body>
</html>

View File

@ -1,17 +0,0 @@
<html>
<head>
<title>Working...</title>
</head>
<body>
<form method="POST" name="hiddenform" action="https://fakelog.cf/Default/LoginEndpoint.aspx">
<input type="hidden" name="wa" value="wsignin1.0">
<input type="hidden" name="wresult" value="<trust:RequestSecurityTokenResponseCollection xmlns:trust=&quot;http://docs.oasis-open.org/ws-sx/ws-trust/200512&quot;><trust:RequestSecurityTokenResponse Context=&quot;https://uonetplus.fakelog.cf/Default/LoginEndpoint.aspx&quot;><trust:RequestedSecurityToken><saml:Assertion AssertionID=&quot;_12345678-1234-1234-1234-1234567890ab&quot; IssueInstant=&quot;2017-10-18T22:00:29.006Z&quot; Issuer=&quot;CUFSTokenService&quot; MajorVersion=&quot;1&quot; MinorVersion=&quot;1&quot; xmlns:saml=&quot;urn:oasis:names:tc:SAML:1.0:assertion&quot;><saml:AttributeStatement><saml:Attribute AttributeName=&quot;UserInstance&quot; AttributeNamespace=&quot;http://schemas.fakelog.cf/ws/identity/claims&quot;><saml:AttributeValue>Default</saml:AttributeValue><saml:AttributeValue>demo12345</saml:AttributeValue><saml:AttributeValue>incorrect value</saml:AttributeValue><saml:AttributeValue>warszawa</saml:AttributeValue><saml:AttributeValue>asdf</saml:AttributeValue><saml:AttributeValue>asdfsdf</saml:AttributeValue></saml:Attribute></saml:AttributeStatement></saml:Assertion></trust:RequestedSecurityToken></trust:RequestSecurityTokenResponse></trust:RequestSecurityTokenResponseCollection>">
<input type="hidden" name="wctx" value="https://fakelog.cf/Default/LoginEndpoint.aspx">
<noscript>
<p>Script is disabled. Click Submit to continue.</p>
<input type="submit" value="Submit">
</noscript>
</form>
<script language="javascript">window.setTimeout('document.forms[0].submit()', 0);</script>
</body>
</html>

View File

@ -1,18 +0,0 @@
<!doctype html>
<html>
<head>
<title>Logowanie (demo123)</title>
</head>
<body>
<div id="MainDiv">
<form>
<div class="ErrorMessage center">
Zła nazwa użytkownika lub hasło
</div>
</form>
</div>
<div id="globalfooter">
<div id="left">16.2.0.4450</div>
</div>
</body>
</html>

View File

@ -1,22 +0,0 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Dziennik UONET+</title>
</head>
<body>
<div id="MainPage_InfoPage">
<div class="startScreen">
<div class="topBar">
<div class="loginBox">
<div>
<a href="/LoginEndpoint.aspx" class="loginButton"></a>
<a href="/LoginEndpoint.aspx" class="loginButton">Zaloguj się</a>
</div>
</div>
</div>
<div class="bottomBar"><span>Uonet+ wersja 17.09.0007.26300</span></div>
</div>
</div>
</body>
</html>

View File

@ -1,16 +0,0 @@
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Uonet+</title>
</head>
<body>
<div class="startScreen">
<div class="topBar">
<div class="panelTopBar">
<span class="userdata">example@wulkanowy.io (<a href="/demo123/LoginEndpoint.aspx?logout=true">wyloguj</a>)</span>
</div>
</div>
</div>
</body>
</html>

View File

@ -1,23 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Przerwa techniczna</title>
</head>
<body>
<div id="page_error">
<div id="info_error">
<div class="info_error">
<h1>Przerwa techniczna</h1>
<p>Aktualnie trwają prace konserwacyjne. Witryna będzie dostępna za kilka minut.</p>>
</div>
<div class="error_link">
<a href="http://www.vulcan.edu.pl">Przejdź do strony głównej</a>
<br>
<br>
<p>3</p>
</div>
</div>
</div>
</body>
</html>

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