Mailversendala.java

1
package de.aikiit.mailversendala;
2
3
import de.aikiit.mailversendala.csv.CsvParser;
4
import de.aikiit.mailversendala.csv.Mailing;
5
import org.apache.commons.mail.EmailException;
6
import org.apache.logging.log4j.LogManager;
7
import org.apache.logging.log4j.Logger;
8
import org.assertj.core.util.Strings;
9
10
import java.io.File;
11
import java.io.FileReader;
12
import java.io.IOException;
13
import java.nio.charset.StandardCharsets;
14
import java.util.List;
15
import java.util.concurrent.atomic.AtomicInteger;
16
17
/**
18
 * Encapsulates the actual CSV parsing and mailing generation.
19
 */
20
public class Mailversendala {
21
    private static final Logger LOG =
22
            LogManager.getLogger(Mailversendala.class);
23
24
    /**
25
     * Send out mails with the given configuration and return result object afterwards.
26
     * @param configuration application configuration.
27
     * @return result object of the current application run.
28
     * @throws IOException in case of errors.
29
     */
30
    public static MailingResult sendOut(MailConfig configuration) throws IOException {
31
        LOG.info("**** MAILVERSENDALA: Starting .... ****");
32
33
        String csvPath = configuration.getCsvPath();
34
        MailingResult result = new MailingResult();
35
36
        LOG.info("Consuming CSV: {}", csvPath);
37
38 1 1. sendOut : negated conditional → KILLED
        if (!Strings.isNullOrEmpty(csvPath)) {
39
            LOG.info(configuration.getCsvPath());
40
41
            File asFile = new File(configuration.getCsvPath());
42 1 1. sendOut : negated conditional → KILLED
            if (asFile.exists()) {
43
                try (FileReader r = new FileReader(asFile, StandardCharsets.UTF_8)) {
44
                    CsvParser parser = new CsvParser(r);
45
                    final List<Mailing> mailings = parser.parse();
46
47
                    final int total = mailings.size();
48
                    LOG.info("Will send out {} mails ... hold on tight :-)", total);
49
50 1 1. sendOut : removed call to java/util/List::forEach → KILLED
                    mailings.forEach(mailing -> {
51
                        try {
52 1 1. lambda$sendOut$0 : removed call to de/aikiit/mailversendala/SendOut::send → SURVIVED
                            new SendOut(mailing).send();
53 1 1. lambda$sendOut$0 : removed call to de/aikiit/mailversendala/MailingResult::addSuccess → KILLED
                            result.addSuccess();
54
                            LOG.info("Successfully send out {}.mail", result.getMailCounter().orElse(new AtomicInteger(0)));
55
                        } catch (EmailException e) {
56 1 1. lambda$sendOut$0 : removed call to de/aikiit/mailversendala/MailingResult::addError → NO_COVERAGE
                            result.addError();
57
                            LOG.error("Problem while sending out {}", mailing, e);
58
                        }
59
                    });
60
61
                    LOG.info("**** MAILVERSENDALA-report: {} total mails ****", total);
62
                    LOG.info("**** MAILVERSENDALA-report: {} successfully send out ****", result.getMailCounter().orElse(new AtomicInteger(0)));
63
                    LOG.info("**** MAILVERSENDALA-report: {} errors ****", result.getErrorCounter().orElse(new AtomicInteger(0)));
64
                }
65
66
            } else {
67
                LOG.warn("Nothing to do - please configure your CSV path properly, either as environment variable or as a runtime parameter. Example: java -Dcsvpath=foo -jar fatJar.jar");
68
            }
69
        }
70
        LOG.info("**** MAILVERSENDALA: Application shutdown .... ****");
71 1 1. sendOut : replaced return value with null for de/aikiit/mailversendala/Mailversendala::sendOut → KILLED
        return result;
72
    }
73
}

Mutations

38

1.1
Location : sendOut
Killed by : de.aikiit.mailversendala.MailversendalaTest.parseCSVFromARealFolder(de.aikiit.mailversendala.MailversendalaTest)
negated conditional → KILLED

42

1.1
Location : sendOut
Killed by : de.aikiit.mailversendala.MailversendalaTest.parseCSVFromARealFolder(de.aikiit.mailversendala.MailversendalaTest)
negated conditional → KILLED

50

1.1
Location : sendOut
Killed by : de.aikiit.mailversendala.MailversendalaTest.parseCSVFromARealFolder(de.aikiit.mailversendala.MailversendalaTest)
removed call to java/util/List::forEach → KILLED

52

1.1
Location : lambda$sendOut$0
Killed by : none
removed call to de/aikiit/mailversendala/SendOut::send → SURVIVED
Covering tests

53

1.1
Location : lambda$sendOut$0
Killed by : de.aikiit.mailversendala.MailversendalaTest.parseCSVFromARealFolder(de.aikiit.mailversendala.MailversendalaTest)
removed call to de/aikiit/mailversendala/MailingResult::addSuccess → KILLED

56

1.1
Location : lambda$sendOut$0
Killed by : none
removed call to de/aikiit/mailversendala/MailingResult::addError → NO_COVERAGE

71

1.1
Location : sendOut
Killed by : de.aikiit.mailversendala.MailversendalaTest.parseCSVFromARealFolder(de.aikiit.mailversendala.MailversendalaTest)
replaced return value with null for de/aikiit/mailversendala/Mailversendala::sendOut → KILLED

Active mutators

Tests examined


Report generated by PIT 1.20.0