SuperX-Kernmodul
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

323 lines
20 KiB

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;");
}
}