From 95362d5ab886d29d66577b227449f06c45bb0d53 Mon Sep 17 00:00:00 2001 From: Jannik Seiler Date: Sun, 30 Aug 2020 18:13:15 +0200 Subject: [PATCH] add diffGrades() to GradesController * implement unit tests for diffGrades() --- .drone.yml | 5 ++ app/build.gradle | 11 +++- .../controller/GradesController.kt | 26 +++++++-- .../seil0/projectlaogai/ExampleUnitTest.kt | 17 ------ .../projectlaogai/GradesControllerTest.kt | 56 +++++++++++++++++-- .../test/resources/grades_diff_semester.json | 18 ++++++ ...des_diff.json => grades_diff_subject.json} | 2 +- 7 files changed, 107 insertions(+), 28 deletions(-) delete mode 100644 app/src/test/java/org/mosad/seil0/projectlaogai/ExampleUnitTest.kt create mode 100644 app/src/test/resources/grades_diff_semester.json rename app/src/test/resources/{grades_diff.json => grades_diff_subject.json} (93%) diff --git a/.drone.yml b/.drone.yml index 72f9f4e..c7f47f0 100644 --- a/.drone.yml +++ b/.drone.yml @@ -2,6 +2,11 @@ kind: pipeline name: default steps: +- name: test + image: gradle:jre11 + commands: + - ./gradlew test + - name: assembleRelease image: nextcloudci/android10:android-56 commands: diff --git a/app/build.gradle b/app/build.gradle index 9191017..44a57b1 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -5,6 +5,7 @@ apply plugin: 'kotlin-android-extensions' android { signingConfigs { } + compileSdkVersion 29 defaultConfig { applicationId "org.mosad.seil0.projectlaogai" @@ -42,6 +43,14 @@ android { ] } } + + testOptions.unitTests.all { + useJUnitPlatform() + + testLogging { + events 'passed', 'skipped', 'failed', 'standardOut', 'standardError' + } + } } dependencies { @@ -65,7 +74,7 @@ dependencies { implementation 'org.apache.commons:commons-lang3:3.11' implementation 'org.jsoup:jsoup:1.13.1' - testImplementation 'junit:junit:4.13' + testImplementation 'org.junit.jupiter:junit-jupiter:5.6.2' androidTestImplementation 'androidx.test:core:1.3.0' androidTestImplementation 'androidx.test.ext:junit:1.1.1' } diff --git a/app/src/main/java/org/mosad/seil0/projectlaogai/controller/GradesController.kt b/app/src/main/java/org/mosad/seil0/projectlaogai/controller/GradesController.kt index 04ad443..65a5740 100644 --- a/app/src/main/java/org/mosad/seil0/projectlaogai/controller/GradesController.kt +++ b/app/src/main/java/org/mosad/seil0/projectlaogai/controller/GradesController.kt @@ -29,11 +29,29 @@ class GradesController { /** * show the difference between 2 grades sets */ - fun diffGrades(mapA: HashMap>, mapB: HashMap>): Int { - // TODO compare - // TODO return diff + fun diffGrades(origMap: HashMap>, diffMap: HashMap>): ArrayList { + val diff = ArrayList() - return 1 + diffMap.values.forEach { semester -> + // if it's the same, no need to compare + if (!origMap.containsValue(semester)) { + semester.forEach { gradeSubject -> + // for each of the grades, check if it differs from the origMap + + if (origMap.containsKey(gradeSubject.semester)) { + // a new or changed subject + if (gradeSubject !in origMap[gradeSubject.semester]!!) { + diff.add(gradeSubject) + } + } else { + // a new semester + diff.add(gradeSubject) + } + } + } + } + + return diff } diff --git a/app/src/test/java/org/mosad/seil0/projectlaogai/ExampleUnitTest.kt b/app/src/test/java/org/mosad/seil0/projectlaogai/ExampleUnitTest.kt deleted file mode 100644 index 4c8d062..0000000 --- a/app/src/test/java/org/mosad/seil0/projectlaogai/ExampleUnitTest.kt +++ /dev/null @@ -1,17 +0,0 @@ -package org.mosad.seil0.projectlaogai - -import org.junit.Test - -import org.junit.Assert.* - -/** - * Example local unit test, which will execute on the development machine (host). - * - * See [testing documentation](http://d.android.com/tools/testing). - */ -class ExampleUnitTest { - @Test - fun addition_isCorrect() { - assertEquals(4, 2 + 2) - } -} diff --git a/app/src/test/java/org/mosad/seil0/projectlaogai/GradesControllerTest.kt b/app/src/test/java/org/mosad/seil0/projectlaogai/GradesControllerTest.kt index 903ccaf..b2e9a8f 100644 --- a/app/src/test/java/org/mosad/seil0/projectlaogai/GradesControllerTest.kt +++ b/app/src/test/java/org/mosad/seil0/projectlaogai/GradesControllerTest.kt @@ -24,8 +24,8 @@ package org.mosad.seil0.projectlaogai import com.google.gson.GsonBuilder import com.google.gson.reflect.TypeToken -import org.junit.Assert -import org.junit.Test +import org.junit.jupiter.api.Assertions +import org.junit.jupiter.api.Test import org.mosad.seil0.projectlaogai.controller.GradesController import org.mosad.seil0.projectlaogai.util.GradeSubject import java.io.File @@ -34,9 +34,9 @@ import java.io.FileReader class GradesControllerTest { @Test - fun diffGrades_isCorrect() { + fun diffGrades_noDiff() { val origFile = File(GradesControllerTest::class.java.getResource("/grades_orig.json")?.path!!) - val diffFile = File(GradesControllerTest::class.java.getResource("/grades_diff.json")?.path!!) + val diffFile = File(GradesControllerTest::class.java.getResource("/grades_orig.json")?.path!!) val mapA: HashMap> = FileReader(origFile).use { GsonBuilder().create().fromJson(it, object : TypeToken>>() {}.type) @@ -46,8 +46,54 @@ class GradesControllerTest { GsonBuilder().create().fromJson(it, object : TypeToken>>() {}.type) } + val exp = ArrayList() val ret = GradesController().diffGrades(mapA, mapB) - Assert.assertEquals(1, ret) + Assertions.assertEquals(exp, ret) + } + + @Test + fun diffGrades_diffSubject() { + val origFile = File(GradesControllerTest::class.java.getResource("/grades_orig.json")?.path!!) + val diffFile = File(GradesControllerTest::class.java.getResource("/grades_diff_subject.json")?.path!!) + + val mapA: HashMap> = FileReader(origFile).use { + GsonBuilder().create().fromJson(it, object : TypeToken>>() {}.type) + } + + val mapB: HashMap> = FileReader(diffFile).use { + GsonBuilder().create().fromJson(it, object : TypeToken>>() {}.type) + } + + val exp = arrayListOf( + GradeSubject("AI-3010", "Computernetze", "WiSe 18/19", "0,7", "2,0"), + GradeSubject("AI-3020", "Datenbanksysteme 1", "WiSe 18/19", "1,7", "2,0"), + GradeSubject("AI-3025", "Praktikum Datenbanksysteme", "WiSe 18/19", "bestanden", "3,0") + ) + val ret = GradesController().diffGrades(mapA, mapB) + + Assertions.assertEquals(exp, ret) + } + + @Test + fun diffGrades_diffSemester() { + val origFile = File(GradesControllerTest::class.java.getResource("/grades_orig.json")?.path!!) + val diffFile = File(GradesControllerTest::class.java.getResource("/grades_diff_semester.json")?.path!!) + + val mapA: HashMap> = FileReader(origFile).use { + GsonBuilder().create().fromJson(it, object : TypeToken>>() {}.type) + } + + val mapB: HashMap> = FileReader(diffFile).use { + GsonBuilder().create().fromJson(it, object : TypeToken>>() {}.type) + } + + val exp = arrayListOf( + GradeSubject("AI-2010", "Mathemaik 7", "SoSe 19", "1,7", "4,0"), + GradeSubject("AI-2015", "Praktikum Mathemaik 7", "SoSe 19", "bestanden", "1,0") + ) + val ret = GradesController().diffGrades(mapA, mapB) + + Assertions.assertEquals(exp, ret) } } \ No newline at end of file diff --git a/app/src/test/resources/grades_diff_semester.json b/app/src/test/resources/grades_diff_semester.json new file mode 100644 index 0000000..f0119b7 --- /dev/null +++ b/app/src/test/resources/grades_diff_semester.json @@ -0,0 +1,18 @@ +{ + "WiSe 17/18":[ + {"credits":"4,0","grade":"1,0","id":"AI-1020","name":"Grundlagen der Elektronik","semester":"WiSe 17/18"}, + {"credits":"2,0","grade":"2,3","id":"AI-1040","name":"Prozedurale Programmierung","semester":"WiSe 17/18"} + ], + "SoSe 18":[ + {"credits":"4,0","grade":"1,7","id":"AI-2010","name":"Technische Informatik","semester":"SoSe 18"}, + {"credits":"1,0","grade":"bestanden","id":"AI-2015","name":"Praktikum Technische Informatik","semester":"SoSe 18"} + ], + "WiSe 18/19":[ + {"credits":"2,0","grade":"2,7","id":"AI-3010","name":"Computernetze","semester":"WiSe 18/19"}, + {"credits":"3,0","grade":"bestanden","id":"AI-3015","name":"Praktikum Computernetze","semester":"WiSe 18/19"} + ], + "SoSe 19":[ + {"credits":"4,0","grade":"1,7","id":"AI-2010","name":"Mathemaik 7","semester":"SoSe 19"}, + {"credits":"1,0","grade":"bestanden","id":"AI-2015","name":"Praktikum Mathemaik 7","semester":"SoSe 19"} + ] +} diff --git a/app/src/test/resources/grades_diff.json b/app/src/test/resources/grades_diff_subject.json similarity index 93% rename from app/src/test/resources/grades_diff.json rename to app/src/test/resources/grades_diff_subject.json index 7a51aa2..bb069b3 100644 --- a/app/src/test/resources/grades_diff.json +++ b/app/src/test/resources/grades_diff_subject.json @@ -8,7 +8,7 @@ {"credits":"1,0","grade":"bestanden","id":"AI-2015","name":"Praktikum Technische Informatik","semester":"SoSe 18"} ], "WiSe 18/19":[ - {"credits":"2,0","grade":"2,7","id":"AI-3010","name":"Computernetze","semester":"WiSe 18/19"}, + {"credits":"2,0","grade":"0,7","id":"AI-3010","name":"Computernetze","semester":"WiSe 18/19"}, {"credits":"3,0","grade":"bestanden","id":"AI-3015","name":"Praktikum Computernetze","semester":"WiSe 18/19"}, {"credits":"2,0","grade":"1,7","id":"AI-3020","name":"Datenbanksysteme 1","semester":"WiSe 18/19"}, {"credits":"3,0","grade":"bestanden","id":"AI-3025","name":"Praktikum Datenbanksysteme","semester":"WiSe 18/19"}