added tests, preparing submission confirmation

This commit is contained in:
2022-04-17 19:52:52 +02:00
parent 6d73018247
commit e2bba174ee
9 changed files with 335 additions and 157 deletions

View File

@@ -3,6 +3,7 @@ package de.srsoftware.widerhall.data;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.xml.crypto.Data;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
@@ -63,19 +64,19 @@ public class MailingList {
.append(SMTP_PASS).append(" ").append(VARCHAR).append(", ")
.append(STATE).append(" ").append(INT)
.append(");");
Database.open().query(sql.toString()).run();
Database.open().query(sql).run();
}
public static void enable(String listEmail, boolean enable) throws SQLException {
// https://stackoverflow.com/questions/16440831/bitwise-xor-in-sqlite-bitwise-not-not-working-as-i-expect
String expression = enable ? "state = state | "+ENABLED : "state = (~(state & "+ENABLED+"))&(state|"+ENABLED+")";
Database.open().query("UPDATE " + TABLE_NAME + " SET "+expression).where(EMAIL, listEmail).run();
Database.open().update(TABLE_NAME,expression).where(EMAIL, listEmail).run();
}
public static void hide(String listEmail, boolean hide) throws SQLException {
// https://stackoverflow.com/questions/16440831/bitwise-xor-in-sqlite-bitwise-not-not-working-as-i-expect
String expression = hide ? "state = (~(state & "+PUBLIC+"))&(state|"+PUBLIC+")" : ("state = state | "+PUBLIC);
Database.open().query("UPDATE " + TABLE_NAME + " SET "+expression).where(EMAIL, listEmail).run();
Database.open().update(TABLE_NAME,expression).where(EMAIL, listEmail).run();
}
public static List<MailingList> listsOf(User user) {
@@ -84,7 +85,7 @@ public class MailingList {
var list = new ArrayList<MailingList>();
if (keys != null && keys.isEmpty()) return list;
try {
Database.Request query = Database.open().query("SELECT * FROM " + TABLE_NAME);
Database.Request query = Database.open().select(TABLE_NAME);
if (keys != null) query.where(EMAIL, keys);
var rs = query.exec();
while (rs.next()) {
@@ -110,7 +111,10 @@ public class MailingList {
public static List<MailingList> openLists() {
var list = new ArrayList<MailingList>();
try {
var rs = Database.open().query("SELECT *, (" + STATE + " & " + PUBLIC + ") as test FROM " + TABLE_NAME).where("test", PUBLIC).exec();
var rs = Database.open()
.select(TABLE_NAME,"*", "(" + STATE + " & " + PUBLIC + ") as test")
.where("test", PUBLIC)
.exec();
while (rs.next()) {
var email = rs.getString(EMAIL);
var name = rs.getString(NAME);
@@ -127,6 +131,31 @@ public class MailingList {
return openLists().stream().filter(ml -> ml.email.equals(list)).count() > 0;
}
public static MailingList load(String listEmail) {
try {
var rs = Database.open()
.select(TABLE_NAME)
.where(EMAIL,listEmail)
.exec();
if (rs.next()){
return new MailingList(rs.getString(EMAIL),
rs.getString(NAME),
rs.getString(IMAP_HOST),
rs.getInt(IMAP_PORT),
rs.getString(IMAP_USER),
rs.getString(IMAP_PASS),
rs.getString(SMTP_HOST),
rs.getInt(SMTP_PORT),
rs.getString(SMTP_USER),
rs.getString(SMTP_PASS),
rs.getInt(STATE));
}
} catch (SQLException e) {
LOG.debug("Failed to load MailingList: ",e);
}
return null;
}
public Map<String, Object> safeMap() {
var map = new HashMap<String,Object>();
String[] parts = email.split("@", 2);