Skip to content

Commit

Permalink
live coding at JUG Metropolregion Nürnberg
Browse files Browse the repository at this point in the history
  • Loading branch information
sippsack committed Sep 20, 2018
1 parent 571addb commit 2636b61
Show file tree
Hide file tree
Showing 5 changed files with 107 additions and 11 deletions.
@@ -0,0 +1,9 @@
package de.oio.refactoring.badtelefon;

public class ConsoleOutputter {

public void writeToConsole(String message) {
System.out.println(message);
}

}
24 changes: 14 additions & 10 deletions src/main/java/de/oio/refactoring/badtelefon/Kunde.java
@@ -1,22 +1,20 @@
package de.oio.refactoring.badtelefon;

public class Kunde {
private static final int MONDSCHEINZEIT_ENDE = 9;
double gebuehr = 0.0;
Tarif tarif;
private ConsoleOutputter outputter = new ConsoleOutputter();

public Kunde(int tarifArt) {
this.tarif = new Tarif(tarifArt);
}

public void account(int minuten, int stunde, int minute) {
String message1 = String.format("Berechne Gespräch mit %02d min um %02d:%02d mit Tarif %s", minuten, stunde, minute, tarif.tarif);
System.out.println(message1);
boolean mondschein = false;
outputter.writeToConsole(String.format("Berechne Gespräch mit %02d min um %02d:%02d mit Tarif %s", minuten, stunde, minute, tarif.tarif));
double preis = 0;

// Mondscheinzeit ?
if (stunde < 9 || stunde > 18)
mondschein = true;
boolean mondschein = isMondschein(stunde);

// Gespraechspreis ermitteln
switch (tarif.tarif) {
Expand All @@ -41,12 +39,18 @@ public void account(int minuten, int stunde, int minute) {
break;

}
String message2 = String.format("Preis für das Gespräch: %.2f", preis);
System.out.println(message2);
outputter.writeToConsole(String.format("Preis für das Gespräch: %.2f", preis));

gebuehr += preis;
String message3 = String.format("Gesamtgebühr nach Gespräch um %02d:%02d (Mondscheinzeit: %s): %.2f", stunde, minute, mondschein, gebuehr);
System.out.println(message3);
outputter.writeToConsole(String.format("Gesamtgebühr nach Gespräch um %02d:%02d (Mondscheinzeit: %s): %.2f", stunde, minute, mondschein, gebuehr));
}

static boolean isMondschein(int stunde) {
return stunde < MONDSCHEINZEIT_ENDE || isBeforeMondscheinzeitBeginn(stunde);
}

static boolean isBeforeMondscheinzeitBeginn(int stunde) {
return stunde > 18;
}

public double getGebuehr() {
Expand Down
10 changes: 9 additions & 1 deletion src/main/java/de/oio/refactoring/badtelefon/TarifeRunner.java
Expand Up @@ -5,7 +5,11 @@

public class TarifeRunner {
public static void main(String args[]) {
Random random = new Random();
new TarifeRunner().run();
}

void run() {
Random random = getRandom();

for(Integer tarif : Arrays.asList(Tarif.PRIVAT, Tarif.BUSINESS, Tarif.PROFI)) {
System.out.println(String.format("\nVerarbeitung von Tarif %s", tarif));
Expand All @@ -18,4 +22,8 @@ public static void main(String args[]) {
System.out.println("Abrechnung: " + k.getGebuehr());
}
}

protected Random getRandom() {
return new Random();
}
}
24 changes: 24 additions & 0 deletions src/test/java/de/oio/refactoring/badtelefon/MondscheinTests.java
@@ -0,0 +1,24 @@
package de.oio.refactoring.badtelefon;

import static org.junit.Assert.*;
import org.junit.Test;

public class MondscheinTests {
@Test
public void testMondschein() {
assertEquals(true, Kunde.isMondschein(0));
assertEquals(true, Kunde.isMondschein(8));

assertEquals(false, Kunde.isMondschein(9));
assertEquals(false, Kunde.isMondschein(12));
assertEquals(false, Kunde.isMondschein(17));
assertEquals(false, Kunde.isMondschein(18));

assertEquals(true, Kunde.isMondschein(19));
assertEquals(true, Kunde.isMondschein(23));
assertEquals(true, Kunde.isMondschein(24));
assertEquals(true, Kunde.isMondschein(30));
assertEquals(true, Kunde.isMondschein(-1));
}

}
51 changes: 51 additions & 0 deletions src/test/java/de/oio/refactoring/badtelefon/TarifeRunnerTest.java
@@ -0,0 +1,51 @@
package de.oio.refactoring.badtelefon;

import java.io.ByteArrayOutputStream;
import java.io.PrintStream;
import java.util.Random;

import org.approvaltests.Approvals;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;

public class TarifeRunnerTest {
private PrintStream originalSysOut;
private ByteArrayOutputStream consoleStream;

@Before
public void init() {
originalSysOut = System.out;
consoleStream = new ByteArrayOutputStream();
PrintStream printStream = new PrintStream(consoleStream);
System.setOut(printStream);
}

@Test
public void testSimpleOutput() {
System.out.println("Hallo Publikum!");
System.out.print("Hallo Falk!");
Assert.assertEquals("Hallo Publikum!\r\nHallo Falk!", consoleStream.toString());
}

private class TarifeRunnerForTest extends TarifeRunner {
@Override
protected Random getRandom() {
return new Random(42);
}
}

@Test
public void testRunnerWithApprovals() throws Exception {
new TarifeRunnerForTest().run();
Approvals.verify(consoleStream.toString());
}


@After
public void teardown() {
System.setOut(originalSysOut);
}

}

0 comments on commit 2636b61

Please sign in to comment.