package de.superx.common; import java.io.File; import java.util.Locale; import java.util.Optional; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.mock.web.MockHttpServletRequest; import de.superx.BaseDbTest; import de.superx.TestUtils; public class GeschlechterZaehlungTest extends BaseDbTest { // in der Oberfläche verbirgt sich hinter der Auswahl "Köpfe" eine SQL-Filterklausel private static final String KOEPFE = "KoF_1"; private static final String KOEPFE_SQL = "studiengang_nr=1 and fach_nr=1"; // Da die Musterdaten jährlich verjüngt werden, sollte das Auswertungssemester dynamisch ermittelt werden private static final String LETZTES_WINTERSEMESTER = (TestUtils.getYearFromBranchName() - 1) + "2"; private static final String LETZTES_SOMMERSEMESTER = (TestUtils.getYearFromBranchName() - 1) + "1"; private static final String AKTUELLES_WINTERSEMESTER = TestUtils.getYearFromBranchName() + "2"; private static final String AKTUELLES_SOMMERSEMESTER = TestUtils.getYearFromBranchName() + "1"; private static final String BESTANDEN = "BE"; private static final String HAUPTPRUEFUNG = "2"; private static final String USER_NAME = "admin"; private static final String HOERERSTATUS_ALLE = "HRST_2"; private static final String SOS_MASKEN_PATH = String.join(File.separator, "superx", "WEB-INF", "conf", "edustore", "db", "module", "sos", "masken"); private String aktuelleZahlenStudierende; private String aktuelleZahlenPruefungen; @Before public void setup() { JdbcTemplate jt = new JdbcTemplate(dataSource); aktuelleZahlenStudierende = jt.queryForObject("SELECT tid FROM sos_stichtag_mit_art WHERE name = 'Aktuelle Zahlen/Studierende'", String.class); aktuelleZahlenPruefungen = jt.queryForObject("SELECT tid FROM sos_stichtag_mit_art WHERE name = 'Aktuelle Zahlen/Prüfungen'", String.class); } @Test public void test16000() throws Exception { System.out.println("KOEPFE : " + KOEPFE ); System.out.println("AKTUELLE_ZAHLEN_STUDIERENDE: " + aktuelleZahlenStudierende); System.out.println("AKTUELLE_ZAHLEN_PRUEFUNGEN : " + aktuelleZahlenPruefungen ); System.out.println("BESTANDEN : " + BESTANDEN ); System.out.println("HAUPTPRUEFUNG : " + HAUPTPRUEFUNG ); System.out.println("MANDANTEN_ID : " + MANDANTEN_ID ); System.out.println("USER_NAME : " + USER_NAME ); System.out.println("SOS_MASKEN_PATH : " + SOS_MASKEN_PATH ); System.out.println("LETZTES_WINTERSEMESTER : " + LETZTES_WINTERSEMESTER); System.out.println("LETZTES_SOMMERSEMESTER : " + LETZTES_SOMMERSEMESTER); System.out.println("AKTUELLES_WINTERSEMESTER : " + AKTUELLES_WINTERSEMESTER); System.out.println("AKTUELLES_SOMMERSEMESTER : " + AKTUELLES_SOMMERSEMESTER); JdbcTemplate jt = new JdbcTemplate(dataSource); Integer maskenTid = Integer.valueOf(16000); Maske maske = new Maske(MANDANTEN_ID, user, maskenTid, Locale.GERMANY); MockHttpServletRequest request = new MockHttpServletRequest(); request.addParameter("Köpfe oder Fälle ?", KOEPFE); // sollte der Wert für "Köpfe" sein request.addParameter("Stichtag", aktuelleZahlenStudierende); // das ist die id für den Bestand "aktuelle Zahlen" request.addParameter("Seit Semester", LETZTES_SOMMERSEMESTER); request.addParameter("Bis Semester", AKTUELLES_WINTERSEMESTER); maske.setFieldDefaults(user, request, true); maske.runQuery(user, request, null); //System.out.println("sql Maske 16000 (1)"); //System.out.println(maske.getLastsql()); SuperX_el result = maske.getResult_el(); SxResultSet resultSet = result.getResultSet(); SxResultRow resultRow = resultSet.first(); int indGes = result.getTrueColumnNumber("gesamt"); int indGes1FS = result.getTrueColumnNumber("ges_1fs"); int indFrauen = result.getTrueColumnNumber("frauen"); int indFrauen1FS = result.getTrueColumnNumber("frau_1fs"); int gesamtRef = Integer.parseInt(resultRow.get(indGes).toString()); int ges1FSRef = Integer.parseInt(resultRow.get(indGes1FS).toString()); int frauenRef = Integer.parseInt(resultRow.get(indFrauen).toString()); int frauen1FSRef = Integer.parseInt(resultRow.get(indFrauen1FS).toString()); jt.execute("UPDATE sos_stg_aggr SET geschlecht = 4 WHERE matrikel_nr = 11205214;"); maske.runQuery(user, request, null); //System.out.println("sql Maske 16000 (2)"); //System.out.println(maske.getLastsql()); result = maske.getResult_el(); resultSet = result.getResultSet(); resultRow = resultSet.first(); int gesamt = Integer.parseInt(resultRow.get(indGes).toString()); int ges1FS = Integer.parseInt(resultRow.get(indGes1FS).toString()); int frauen = Integer.parseInt(resultRow.get(indFrauen).toString()); int frauen1FS = Integer.parseInt(resultRow.get(indFrauen1FS).toString()); Assert.assertEquals("Die Gesamtanzahl sollte gleich bleiben", gesamtRef, gesamt); Assert.assertEquals("Die Gesamtanzahl im 1. Fachsemester sollte gleich bleiben", ges1FSRef, ges1FS); Assert.assertEquals("Die Gesamtanzahl Frauen sollte um 1 verringert sein", frauenRef - 1, frauen); Assert.assertEquals("Die Gesamtanzahl Frauen im 1. Fachsemester sollte um 1 verringert sein", frauen1FSRef - 1, frauen1FS); jt.execute("UPDATE sos_stg_aggr SET geschlecht = 2 WHERE matrikel_nr = 11205214;"); } @Test public void test16040() throws Exception { JdbcTemplate jt = new JdbcTemplate(dataSource); Integer maskenTid = Integer.valueOf(16040); Maske maske = new Maske(MANDANTEN_ID, user, maskenTid, Locale.GERMANY); MockHttpServletRequest request = new MockHttpServletRequest(); request.addParameter("Köpfe oder Fälle ?", KOEPFE); // sollte der Wert für "Köpfe" sein request.addParameter("Stichtag", aktuelleZahlenStudierende); // das ist die id für den Bestand "aktuelle Zahlen" request.addParameter("Semester", AKTUELLES_WINTERSEMESTER); maske.setFieldDefaults(user, request, true); maske.runQuery(user, request, null); //System.out.println("sql Maske 16040 (1)"); //System.out.println(maske.getLastsql()); SuperX_el result = maske.getResult_el(); SxResultSet resultSet = result.getResultSet(); SxResultRow resultRow = resultSet.last(); int indFach = result.getTrueColumnNumber("fach"); int indGesamt = result.getTrueColumnNumber("gesamt"); int indFrauen = result.getTrueColumnNumber("frauen"); String fachRef = resultRow.get(indFach).toString(); Assert.assertEquals("Spalte Fach sollte den Zeichenfolge 'Gesamt:' enthalten", "Gesamt:", fachRef); int gesamtRef = Integer.parseInt(resultRow.get(indGesamt).toString()); int frauenRef = Integer.parseInt(resultRow.get(indFrauen).toString()); jt.execute("UPDATE sos_stg_aggr SET geschlecht = 4 WHERE matrikel_nr = 11205214;"); maske.runQuery(user, request, null); //System.out.println("sql Maske 16040 (2)"); //System.out.println(maske.getLastsql()); result = maske.getResult_el(); resultSet = result.getResultSet(); resultRow = resultSet.last(); String fach = resultRow.get(indFach).toString(); int gesamt = Integer.parseInt(resultRow.get(indGesamt).toString()); int frauen = Integer.parseInt(resultRow.get(indFrauen).toString()); Assert.assertEquals("Spalte Fach sollte den Zeichenfolge 'Gesamt:' enthalten", "Gesamt:", fach); Assert.assertEquals("Die Gesamtanzahl sollte gleich bleiben", gesamtRef, gesamt); Assert.assertEquals("Die Gesamtanzahl Frauen sollte um 1 verringert sein", frauenRef - 1, frauen); jt.execute("UPDATE sos_stg_aggr SET geschlecht = 2 WHERE matrikel_nr = 11205214;"); } @Test public void test16300() throws Exception { JdbcTemplate jt = new JdbcTemplate(dataSource); Integer maskenTid = Integer.valueOf(16300); Maske maske = new Maske(MANDANTEN_ID, user, maskenTid, Locale.GERMANY); MockHttpServletRequest request = new MockHttpServletRequest(); request.addParameter("Köpfe oder Fälle ?", KOEPFE); // sollte der Wert für "Köpfe" sein request.addParameter("Stichtag", aktuelleZahlenStudierende); // das ist die id für den Bestand "aktuelle Zahlen" request.addParameter("Semester", AKTUELLES_WINTERSEMESTER); request.addParameter("Hörerstatus", HOERERSTATUS_ALLE); maske.setFieldDefaults(user, request, true); maske.runQuery(user, request, null); //System.out.println("sql Maske 16300 (1)"); //System.out.println(maske.getLastsql()); SuperX_el result = maske.getResult_el(); SxResultSet resultSet = result.getResultSet(); SxResultRow resultRow = resultSet.first(); int indGesamt = result.getTrueColumnNumber("gesamt"); int indRegelGes = result.getTrueColumnNumber("regel_ges"); int indGesamtW = result.getTrueColumnNumber("gesamt_w"); int indRegelW = result.getTrueColumnNumber("regel_w"); int indStruktur = result.getTrueColumnNumber("struktur"); String strukturRef = resultRow.get(indStruktur).toString(); Assert.assertEquals("Spalte Studiengang/'struktur' sollte den Zeichenfolge 'Alle' enthalten", "Alle", strukturRef); int gesamtRef = Integer.parseInt(resultRow.get(indGesamt).toString()); int regelGesRef = Integer.parseInt(resultRow.get(indRegelGes).toString()); int gesamtWRef = Integer.parseInt(resultRow.get(indGesamtW).toString()); int regelWRef = Integer.parseInt(resultRow.get(indRegelW).toString()); jt.execute("UPDATE sos_stg_aggr SET geschlecht = 4 WHERE matrikel_nr = 11205214;"); maske.runQuery(user, request, null); //System.out.println("sql Maske 16300 (2)"); //System.out.println(maske.getLastsql()); result = maske.getResult_el(); resultSet = result.getResultSet(); resultRow = resultSet.first(); String struktur = resultRow.get(indStruktur).toString(); int gesamt = Integer.parseInt(resultRow.get(indGesamt).toString()); int regelGes = Integer.parseInt(resultRow.get(indRegelGes).toString()); int gesamtW = Integer.parseInt(resultRow.get(indGesamtW).toString()); int regelW = Integer.parseInt(resultRow.get(indRegelW).toString()); Assert.assertEquals("Spalte Studiengang/'struktur' sollte den Zeichenfolge 'Alle' enthalten", "Alle", struktur); Assert.assertEquals("Die Gesamtanzahl sollte gleich bleiben", gesamtRef, gesamt); Assert.assertEquals("Die Gesamtanzahl sollte gleich bleiben", regelGesRef, regelGes); Assert.assertEquals("Die Anzahl sollte um eins verringert sein", gesamtWRef - 1, gesamtW); Assert.assertEquals("Die Anzahl sollte um eins verringert sein", regelWRef - 1, regelW); jt.execute("UPDATE sos_stg_aggr SET geschlecht = 2 WHERE matrikel_nr = 11205214;"); } @Test public void test16220() throws Exception { JdbcTemplate jt = new JdbcTemplate(dataSource); Integer maskenTid = Integer.valueOf(16220); Maske maske = new Maske(MANDANTEN_ID, user, maskenTid, Locale.GERMANY); MockHttpServletRequest request = new MockHttpServletRequest(); request.addParameter("Köpfe oder Fälle ?", KOEPFE); // sollte der Wert für "Köpfe" sein request.addParameter("Stichtag", aktuelleZahlenStudierende); // das ist die id für den Bestand "aktuelle Zahlen" request.addParameter("Semester", AKTUELLES_WINTERSEMESTER); request.addParameter("Hörerstatus", HOERERSTATUS_ALLE); maske.setFieldDefaults(user, request, true); maske.runQuery(user, request, null); //System.out.println("sql Maske 16220 (1)"); //System.out.println(maske.getLastsql()); SuperX_el result = maske.getResult_el(); SxResultSet resultSet = result.getResultSet(); SxResultRow resultRow = resultSet.first(); int indGesamt = result.getTrueColumnNumber("gesamt"); int indFrauen = result.getTrueColumnNumber("frauen"); int gesamtRef = Integer.parseInt(resultRow.get(indGesamt).toString()); int frauenRef = Integer.parseInt(resultRow.get(indFrauen).toString()); jt.execute("UPDATE sos_stg_aggr SET geschlecht = 4 WHERE matrikel_nr = 11205214;"); maske.runQuery(user, request, null); //System.out.println("sql Maske 16220 (2)"); //System.out.println(maske.getLastsql()); result = maske.getResult_el(); resultSet = result.getResultSet(); resultRow = resultSet.first(); int gesamt = Integer.parseInt(resultRow.get(indGesamt).toString()); int frauen = Integer.parseInt(resultRow.get(indFrauen).toString()); Assert.assertEquals("Die Gesamtanzahl sollte gleich bleiben", gesamtRef, gesamt); Assert.assertEquals("Die Anzahl Frauen sollte um 1 verringert sein", frauenRef - 1, frauen); jt.execute("UPDATE sos_stg_aggr SET geschlecht = 2 WHERE matrikel_nr = 11205214;"); } @Test public void test16200() throws Exception { JdbcTemplate jt = new JdbcTemplate(dataSource); Integer maskenTid = Integer.valueOf(16200); Maske maske = new Maske(MANDANTEN_ID, user, maskenTid, Locale.GERMANY); MockHttpServletRequest request = new MockHttpServletRequest(); request.addParameter("Köpfe oder Fälle ?", KOEPFE); // sollte der Wert für "Köpfe" sein request.addParameter("Stichtag", aktuelleZahlenStudierende); // das ist die id für den Bestand "aktuelle Zahlen" request.addParameter("Semester", AKTUELLES_WINTERSEMESTER); request.addParameter("Hörerstatus", HOERERSTATUS_ALLE); maske.setFieldDefaults(user, request, true); maske.runQuery(user, request, null); //System.out.println("sql Maske 16200 (1)"); //System.out.println(maske.getLastsql()); SuperX_el result = maske.getResult_el(); SxResultSet resultSet = result.getResultSet(); SxResultRow resultRow = resultSet.first(); int indGesamt = result.getTrueColumnNumber("gesamt"); int indGes1FS = result.getTrueColumnNumber("ges_1fs"); int indGes1HS = result.getTrueColumnNumber("ges_1hs"); int indWGesamt = result.getTrueColumnNumber("w_gesamt"); int indW1FS = result.getTrueColumnNumber("w_1fs"); int indW1HS = result.getTrueColumnNumber("w_1hs"); int indText = result.getTrueColumnNumber("text"); String textRef = resultRow.get(indText).toString(); Assert.assertEquals("Spalte Studiengang/'text' sollte den Zeichenfolge 'Alle' enthalten", "Alle", textRef); int gesamtRef = Integer.parseInt(resultRow.get(indGesamt).toString()); int gesamt1FSRef = Integer.parseInt(resultRow.get(indGes1FS).toString()); int gesamt1HSRef = Integer.parseInt(resultRow.get(indGes1HS).toString()); int WGesamtRef = Integer.parseInt(resultRow.get(indWGesamt).toString()); int W1FSRef = Integer.parseInt(resultRow.get(indW1FS).toString()); int W1HSRef = Integer.parseInt(resultRow.get(indW1HS).toString()); jt.execute("UPDATE sos_stg_aggr SET geschlecht = 4 WHERE matrikel_nr = 11205214;"); maske.runQuery(user, request, null); //System.out.println("sql Maske 16200 (2)"); //System.out.println(maske.getLastsql()); result = maske.getResult_el(); resultSet = result.getResultSet(); resultRow = resultSet.first(); String text = resultRow.get(indText).toString(); Assert.assertEquals("Spalte Studiengang/'text' sollte den Zeichenfolge 'Alle' enthalten", "Alle", text); int gesamt = Integer.parseInt(resultRow.get(indGesamt).toString()); int gesamt1FS = Integer.parseInt(resultRow.get(indGes1FS).toString()); int gesamt1HS = Integer.parseInt(resultRow.get(indGes1HS).toString()); int WGesamt = Integer.parseInt(resultRow.get(indWGesamt).toString()); int W1FS = Integer.parseInt(resultRow.get(indW1FS).toString()); int W1HS = Integer.parseInt(resultRow.get(indW1HS).toString()); Assert.assertEquals("Die Gesamtanzahl sollte gleich bleiben", gesamtRef, gesamt); Assert.assertEquals("Die Gesamtanzahl sollte gleich bleiben", gesamt1FSRef, gesamt1FS); Assert.assertEquals("Die Gesamtanzahl sollte gleich bleiben", gesamt1HSRef, gesamt1HS); Assert.assertEquals("Die Anzahl Frauen sollte um eins verringert sein", WGesamtRef - 1, WGesamt); Assert.assertEquals("Die Anzahl Frauen sollte um eins verringert sein", W1FSRef - 1, W1FS); Assert.assertEquals("Die Anzahl Frauen sollte um eins verringert sein", W1HSRef - 1, W1HS); jt.execute("UPDATE sos_stg_aggr SET geschlecht = 2 WHERE matrikel_nr = 11205214;"); } @Test public void test16450() throws Exception { JdbcTemplate jt = new JdbcTemplate(dataSource); String query = "SELECT sum(summe) FROM sos_lab_aggr WHERE sem_der_pruefung = " + LETZTES_SOMMERSEMESTER + " AND stichtag = " + aktuelleZahlenPruefungen + " AND pstatus = '" + BESTANDEN + "' AND " + KOEPFE_SQL + " AND geschlecht=2;"; Integer diffW = Optional.ofNullable(jt.queryForObject(query, Integer.class)).orElse(Integer.valueOf(0)); Integer maskenTid = Integer.valueOf(16450); Maske maske = new Maske(MANDANTEN_ID, user, maskenTid, Locale.GERMANY); MockHttpServletRequest request = new MockHttpServletRequest(); request.addParameter("Köpfe oder Fälle ?", KOEPFE); request.addParameter("Stichtag Prüfungen", aktuelleZahlenPruefungen); // das ist die id für den Bestand "aktuelle Zahlen" request.addParameter("Semester", LETZTES_SOMMERSEMESTER); request.addParameter("Prüfungsstatus", BESTANDEN); request.addParameter("Studienabschnitt", HAUPTPRUEFUNG); maske.setFieldDefaults(user, request, true); maske.runQuery(user, request, null); //System.out.println("sql Maske 16450 (1)"); //System.out.println(maske.getLastsql()); SuperX_el result = maske.getResult_el(); SxResultSet resultSet = result.getResultSet(); SxResultRow resultRow = resultSet.first(); int indGesamt = result.getTrueColumnNumber("gesamt"); int indWGesamt = result.getTrueColumnNumber("w_gesamt"); int indStruktur = result.getTrueColumnNumber("struktur"); String strukturRef = resultRow.get(indStruktur).toString(); Assert.assertEquals("Spalte Studiengang/'struktur' sollte den Zeichenfolge 'Alle' enthalten", "Alle", strukturRef); int gesamtRef = Integer.parseInt(resultRow.get(indGesamt).toString()); int wGesamtRef = Integer.parseInt(resultRow.get(indWGesamt).toString()); jt.update("UPDATE sos_lab_aggr SET geschlecht = 4 WHERE sem_der_pruefung = " + LETZTES_SOMMERSEMESTER + " AND stichtag = " + aktuelleZahlenPruefungen + " AND pstatus = '" + BESTANDEN + "' AND " + KOEPFE_SQL + " AND geschlecht=2;"); maske.runQuery(user, request, null); //System.out.println("sql Maske 16450 (2)"); //System.out.println(maske.getLastsql()); result = maske.getResult_el(); resultSet = result.getResultSet(); resultRow = resultSet.first(); String struktur = resultRow.get(indStruktur).toString(); int gesamt = Integer.parseInt(resultRow.get(indGesamt).toString()); Object indWGesamtObj = resultRow.get(indWGesamt); int wGesamt = indWGesamtObj != null ? Integer.parseInt(indWGesamtObj.toString()) : 0; Assert.assertEquals("Spalte Studiengang/'struktur' sollte den Zeichenfolge 'Alle' enthalten", "Alle", struktur); Assert.assertEquals("Die Gesamtanzahl sollte gleich bleiben", gesamtRef, gesamt); Assert.assertEquals("Die Anzahl Frauen sollte verringert sein", wGesamtRef - diffW.intValue(), wGesamt); jt.update("UPDATE sos_lab_aggr SET geschlecht = 2 WHERE sem_der_pruefung = " + LETZTES_SOMMERSEMESTER + " AND stichtag = " + aktuelleZahlenPruefungen + " AND pstatus = '" + BESTANDEN + "' AND " + KOEPFE_SQL + " AND geschlecht = 4;"); } }