From e1bcb37253a8dcd920e5ae89cf35e389ddd5ad84 Mon Sep 17 00:00:00 2001 From: Lucas Tong Date: Thu, 30 Jun 2022 11:23:39 +0800 Subject: [PATCH 1/7] 1st commit --- src/main/java/com/odde/tdd/PrimeParse.java | 30 +++++++++++++++++++ .../java/com/odde/tdd/PrimeParseTest.java | 27 +++++++++++++++++ 2 files changed, 57 insertions(+) create mode 100644 src/main/java/com/odde/tdd/PrimeParse.java create mode 100644 src/test/java/com/odde/tdd/PrimeParseTest.java diff --git a/src/main/java/com/odde/tdd/PrimeParse.java b/src/main/java/com/odde/tdd/PrimeParse.java new file mode 100644 index 0000000..4ca0c5a --- /dev/null +++ b/src/main/java/com/odde/tdd/PrimeParse.java @@ -0,0 +1,30 @@ +package com.odde.tdd; + +import java.util.ArrayList; +import java.util.List; + +public class PrimeParse { + Integer[] primeParse(int num) { + + List testList = new ArrayList<>(); + Integer[] arr; + + if(num <= 1) { + arr = new Integer[ testList.size() ]; + return testList.toArray(arr); + } + while(num > 1) { + for(int i = 2; i <= num; i ++) { + if(num % i == 0) { + testList.add(i); + num = num/i; + break; + } + } + } + + arr = new Integer[ testList.size() ]; + return testList.toArray(arr); + + } +} diff --git a/src/test/java/com/odde/tdd/PrimeParseTest.java b/src/test/java/com/odde/tdd/PrimeParseTest.java new file mode 100644 index 0000000..39cb11c --- /dev/null +++ b/src/test/java/com/odde/tdd/PrimeParseTest.java @@ -0,0 +1,27 @@ +package com.odde.tdd; + +import static org.junit.Assert.assertArrayEquals; + +import org.junit.Before; +import org.junit.Test; + +public class PrimeParseTest { + + private PrimeParse primeParseUnderTest; + + @Before + public void setUp() { + primeParseUnderTest = new PrimeParse(); + } + + @Test + public void testPrimeParse() { + assertArrayEquals(new Integer[]{2}, primeParseUnderTest.primeParse(2)); + assertArrayEquals(new Integer[]{13}, primeParseUnderTest.primeParse(13)); + assertArrayEquals(new Integer[]{}, primeParseUnderTest.primeParse(1)); + assertArrayEquals(new Integer[]{}, primeParseUnderTest.primeParse(-1)); + assertArrayEquals(new Integer[]{2, 3}, primeParseUnderTest.primeParse(6)); + assertArrayEquals(new Integer[]{2, 2, 2}, primeParseUnderTest.primeParse(8)); + assertArrayEquals(new Integer[]{2, 3, 5}, primeParseUnderTest.primeParse(30)); + } +} From 1a1a47838213a9f77f3205ae99dc605637af95bf Mon Sep 17 00:00:00 2001 From: Lucas Tong Date: Thu, 30 Jun 2022 11:34:59 +0800 Subject: [PATCH 2/7] 2nd --- src/test/java/com/odde/tdd/PrimeParseTest.java | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/test/java/com/odde/tdd/PrimeParseTest.java b/src/test/java/com/odde/tdd/PrimeParseTest.java index 39cb11c..4d00c88 100644 --- a/src/test/java/com/odde/tdd/PrimeParseTest.java +++ b/src/test/java/com/odde/tdd/PrimeParseTest.java @@ -15,13 +15,20 @@ public void setUp() { } @Test - public void testPrimeParse() { + public void testPrimeParse_Prime() { assertArrayEquals(new Integer[]{2}, primeParseUnderTest.primeParse(2)); - assertArrayEquals(new Integer[]{13}, primeParseUnderTest.primeParse(13)); + // assertArrayEquals(new Integer[]{13}, primeParseUnderTest.primeParse(13)); + } + + public void testPrimeParse_illegal() { assertArrayEquals(new Integer[]{}, primeParseUnderTest.primeParse(1)); assertArrayEquals(new Integer[]{}, primeParseUnderTest.primeParse(-1)); - assertArrayEquals(new Integer[]{2, 3}, primeParseUnderTest.primeParse(6)); - assertArrayEquals(new Integer[]{2, 2, 2}, primeParseUnderTest.primeParse(8)); + + } + + public void testPrimeParse_normal() { + // assertArrayEquals(new Integer[]{2, 3}, primeParseUnderTest.primeParse(6)); +// assertArrayEquals(new Integer[]{2, 2, 2}, primeParseUnderTest.primeParse(8)); assertArrayEquals(new Integer[]{2, 3, 5}, primeParseUnderTest.primeParse(30)); } } From 01f6ffe5db3639705587f4845baef0de88fc7d23 Mon Sep 17 00:00:00 2001 From: Lucas Tong Date: Thu, 30 Jun 2022 15:30:21 +0800 Subject: [PATCH 3/7] 3rd --- src/test/java/com/odde/tdd/PrimeParseTest.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/test/java/com/odde/tdd/PrimeParseTest.java b/src/test/java/com/odde/tdd/PrimeParseTest.java index 4d00c88..2d90f24 100644 --- a/src/test/java/com/odde/tdd/PrimeParseTest.java +++ b/src/test/java/com/odde/tdd/PrimeParseTest.java @@ -20,15 +20,18 @@ public void testPrimeParse_Prime() { // assertArrayEquals(new Integer[]{13}, primeParseUnderTest.primeParse(13)); } + @Test public void testPrimeParse_illegal() { assertArrayEquals(new Integer[]{}, primeParseUnderTest.primeParse(1)); assertArrayEquals(new Integer[]{}, primeParseUnderTest.primeParse(-1)); } + @Test public void testPrimeParse_normal() { // assertArrayEquals(new Integer[]{2, 3}, primeParseUnderTest.primeParse(6)); // assertArrayEquals(new Integer[]{2, 2, 2}, primeParseUnderTest.primeParse(8)); assertArrayEquals(new Integer[]{2, 3, 5}, primeParseUnderTest.primeParse(30)); + assertArrayEquals(new Integer[]{2, 2, 5, 5}, primeParseUnderTest.primeParse(100)); } } From 844f415ad072676915565be7bb4795fd6a335728 Mon Sep 17 00:00:00 2001 From: Lucas Tong Date: Mon, 4 Jul 2022 20:10:43 +0800 Subject: [PATCH 4/7] test --- build.gradle | 1 + .../java/com/odde/tdd/BudgetRepoImpl.java | 11 ++++++++++ .../java/com/odde/tdd/CalBudgetAmout.java | 21 +++++++++++++++++++ src/main/java/com/odde/tdd/PrimeParse.java | 4 +++- 4 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/odde/tdd/BudgetRepoImpl.java create mode 100644 src/main/java/com/odde/tdd/CalBudgetAmout.java diff --git a/build.gradle b/build.gradle index e20bd0d..ed1e98c 100644 --- a/build.gradle +++ b/build.gradle @@ -11,6 +11,7 @@ repositories { } dependencies { + implementation 'org.junit.jupiter:junit-jupiter:5.7.0' testImplementation group: 'junit', name: 'junit', version: '4.13.2' testImplementation group: 'org.mockito', name: 'mockito-core', version: '3.12.4' implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version" diff --git a/src/main/java/com/odde/tdd/BudgetRepoImpl.java b/src/main/java/com/odde/tdd/BudgetRepoImpl.java new file mode 100644 index 0000000..a0968d3 --- /dev/null +++ b/src/main/java/com/odde/tdd/BudgetRepoImpl.java @@ -0,0 +1,11 @@ +package com.odde.tdd; + +import java.util.List; + +public class BudgetRepoImpl implements BudgetRepo { + + @Override + public List findAll() { + return null; + } +} diff --git a/src/main/java/com/odde/tdd/CalBudgetAmout.java b/src/main/java/com/odde/tdd/CalBudgetAmout.java new file mode 100644 index 0000000..a654691 --- /dev/null +++ b/src/main/java/com/odde/tdd/CalBudgetAmout.java @@ -0,0 +1,21 @@ +package com.odde.tdd; + +import java.time.LocalDate; +import java.time.Year; +import java.time.YearMonth; +import java.util.List; + +public class CalBudgetAmout { + private List budgetList; + private BudgetRepo budgetRepo = new BudgetRepoImpl(); + + CalBudgetAmout() { + budgetList = budgetRepo.findAll(); + } + + int CalBudgetAmount(LocalDate begin, LocalDate end) { + begin.atDay() + return 0; + } + +} diff --git a/src/main/java/com/odde/tdd/PrimeParse.java b/src/main/java/com/odde/tdd/PrimeParse.java index 4ca0c5a..477e34c 100644 --- a/src/main/java/com/odde/tdd/PrimeParse.java +++ b/src/main/java/com/odde/tdd/PrimeParse.java @@ -13,11 +13,13 @@ Integer[] primeParse(int num) { arr = new Integer[ testList.size() ]; return testList.toArray(arr); } + int j = 2; while(num > 1) { - for(int i = 2; i <= num; i ++) { + for(int i = j; i <= num; i ++) { if(num % i == 0) { testList.add(i); num = num/i; + j = i; break; } } From 8b827e0075f68f82fbdc861ca17d6c15e47de7dc Mon Sep 17 00:00:00 2001 From: Lucas Tong Date: Mon, 4 Jul 2022 20:12:43 +0800 Subject: [PATCH 5/7] 3rd --- src/main/java/com/odde/tdd/FizzBuzz.java | 19 +++++++ .../com/odde/tdd/EmailNotificationTest.java | 44 +++++++++++++++++ src/test/java/com/odde/tdd/FizzBuzzTest.java | 49 +++++++++++++++++++ 3 files changed, 112 insertions(+) create mode 100644 src/main/java/com/odde/tdd/FizzBuzz.java create mode 100644 src/test/java/com/odde/tdd/EmailNotificationTest.java create mode 100644 src/test/java/com/odde/tdd/FizzBuzzTest.java diff --git a/src/main/java/com/odde/tdd/FizzBuzz.java b/src/main/java/com/odde/tdd/FizzBuzz.java new file mode 100644 index 0000000..209ece7 --- /dev/null +++ b/src/main/java/com/odde/tdd/FizzBuzz.java @@ -0,0 +1,19 @@ +package com.odde.tdd; + +public class FizzBuzz { + String FizzBuzz(int number) { + if (number <= 0) { + return "error"; + } + + if (number % 15 == 0) { + return "FizzBuzz"; + } else if (number % 5 == 0) { + return "Buzz"; + } else if (number % 3 == 0) { + return "Fizz"; + } else { + return String.valueOf(number); + } + } +} diff --git a/src/test/java/com/odde/tdd/EmailNotificationTest.java b/src/test/java/com/odde/tdd/EmailNotificationTest.java new file mode 100644 index 0000000..a8e338a --- /dev/null +++ b/src/test/java/com/odde/tdd/EmailNotificationTest.java @@ -0,0 +1,44 @@ +package com.odde.tdd; + +import static org.junit.Assert.assertEquals; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.verify; + +import java.util.List; +import org.junit.Before; +import org.junit.Test; +import org.junit.jupiter.api.BeforeEach; +import org.mockito.ArgumentCaptor; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; + +public class EmailNotificationTest { + + private EmailNotification emailNotificationUnderTest; + @Mock + private MailService mailService; + +// @Before +// public void setUp() { +// emailNotificationUnderTest = new EmailNotification(); +// } + + @Before + public void setUp() { + MockitoAnnotations.initMocks(this); + emailNotificationUnderTest = new EmailNotification(); + } + + @Test + public void testWelcome() { + // Setup + // Run the test + emailNotificationUnderTest.welcome("email"); + ArgumentCaptor argument = ArgumentCaptor.forClass(Email.class); + verify(mailService).send(argument.capture()); + assertEquals(argument.getValue().getTitle(), "Welcome"); + + // Verify the results + } +} diff --git a/src/test/java/com/odde/tdd/FizzBuzzTest.java b/src/test/java/com/odde/tdd/FizzBuzzTest.java new file mode 100644 index 0000000..13f5754 --- /dev/null +++ b/src/test/java/com/odde/tdd/FizzBuzzTest.java @@ -0,0 +1,49 @@ +package com.odde.tdd; + +import static org.junit.Assert.assertEquals; + +import org.junit.Before; +import org.junit.Test; +//import org.junit.jupiter.api.Assertions; +//import org.junit.jupiter.api.Test; + +public class FizzBuzzTest { + + FizzBuzz fizzBuzz = new FizzBuzz(); + +// @Before +// public void setup() +// {fizzBuzz= new FizzBuzz();} + + @Test + public void input_should_bigger_than_0() { + assertEquals("error", fizzBuzz.FizzBuzz(-3)); + } +// String result = fizzBuzz.FizzBuzz(1); +// assertEquals("1", result); + + @Test + public void normal_number() { + assertEquals("1", fizzBuzz.FizzBuzz(1)); + } + + @Test + public void fizz() { + + assertEquals("Fizz", fizzBuzz.FizzBuzz(3)); + } + + @Test + public void buzz() { + + assertEquals("Buzz", fizzBuzz.FizzBuzz(5)); + + } + @Test + public void fizzbuzz() { + + assertEquals("FizzBuzz", fizzBuzz.FizzBuzz(15)); + } +} + +//Generated with love by TestMe :) Please report issues and submit feature requests at: http://weirddev.com/forum#!/testme \ No newline at end of file From 6f9bfb31755dcc26f2f3373c854af987480e6f4c Mon Sep 17 00:00:00 2001 From: Lucas Tong Date: Mon, 4 Jul 2022 21:43:49 +0800 Subject: [PATCH 6/7] budgetamount --- .../java/com/odde/tdd/CalBudgetAmout.java | 57 +++++++++++++++++-- .../java/com/odde/tdd/CalBudgetAmoutTest.java | 44 ++++++++++++++ 2 files changed, 96 insertions(+), 5 deletions(-) create mode 100644 src/test/java/com/odde/tdd/CalBudgetAmoutTest.java diff --git a/src/main/java/com/odde/tdd/CalBudgetAmout.java b/src/main/java/com/odde/tdd/CalBudgetAmout.java index a654691..315ad96 100644 --- a/src/main/java/com/odde/tdd/CalBudgetAmout.java +++ b/src/main/java/com/odde/tdd/CalBudgetAmout.java @@ -1,21 +1,68 @@ package com.odde.tdd; +import static java.time.temporal.ChronoUnit.DAYS; + +import java.time.Duration; import java.time.LocalDate; +import java.time.Month; import java.time.Year; import java.time.YearMonth; +import java.util.ArrayList; import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.stream.Collector; +import java.util.stream.Collectors; public class CalBudgetAmout { + private List budgetList; - private BudgetRepo budgetRepo = new BudgetRepoImpl(); + // private BudgetRepo budgetRepo = new BudgetRepoImpl(); + private BudgetRepo budgetRepo; - CalBudgetAmout() { + public CalBudgetAmout() { + budgetRepo = new BudgetRepoImpl(); budgetList = budgetRepo.findAll(); } - int CalBudgetAmount(LocalDate begin, LocalDate end) { - begin.atDay() - return 0; + + public void setBudgetList(List budgetList) { + this.budgetList = budgetList; } + + int CalBudgetAmount(LocalDate begin, LocalDate end) { + int amount = 0; + if (end.isBefore(begin)) { + return amount; + } + +// Map budgetMap = budgetList.stream().map(x->x.getMonth(), x->x.getAmount()); + Map budgetMap = budgetList.stream().collect( + Collectors.toMap(Budget::getMonth, Budget::getAmount)); +// Collectors.toMap(x -> x.getMonth(), Budget::getAmount/Budget::getMonth)); + + budgetMap.replaceAll((k, v) -> v / k.lengthOfMonth()); +// YearMonth beginYM = YearMonth.from(begin); +// YearMonth endYM = YearMonth.from(end); +// YearMonth date = beginYM; + LocalDate date = begin; + + while (!date.isAfter(end)) { + if(!Objects.isNull(budgetMap.get(YearMonth.from(date)))) { + if ((date.getYear() == end.getYear()) && (date.getMonth() == end.getMonth())) { + //same month + long daysBetween = DAYS.between(date, end) + 1; + System.out.println("days diff ==" + daysBetween); + amount += budgetMap.get(YearMonth.from(date)) * daysBetween; + } else { + amount += budgetMap.get(YearMonth.from(date)) * (date.lengthOfMonth() - date.getDayOfMonth() + 1); + } + } + date = date.plusMonths(1); + date = date.withDayOfMonth(1); + } + + return amount; + } } diff --git a/src/test/java/com/odde/tdd/CalBudgetAmoutTest.java b/src/test/java/com/odde/tdd/CalBudgetAmoutTest.java new file mode 100644 index 0000000..8698ce2 --- /dev/null +++ b/src/test/java/com/odde/tdd/CalBudgetAmoutTest.java @@ -0,0 +1,44 @@ +package com.odde.tdd; + +import static org.junit.Assert.assertEquals; + +import java.time.LocalDate; +import java.time.YearMonth; +import java.util.Arrays; +import java.util.List; +import org.junit.Before; +import org.junit.Test; + +public class CalBudgetAmoutTest { + + private CalBudgetAmout calBudgetAmoutUnderTest; + + @Before + public void setUp() { + calBudgetAmoutUnderTest = new CalBudgetAmout(); + } + + @Test + public void testCalBudgetAmount() { + List budgetList = Arrays.asList(new Budget(YearMonth.of(2020, 5), 3100), + new Budget(YearMonth.of(2020, 6), 300), + new Budget(YearMonth.of(2020, 7), 310)); + calBudgetAmoutUnderTest.setBudgetList(budgetList); + assertEquals(0, calBudgetAmoutUnderTest.CalBudgetAmount(LocalDate.of(2020, 5, 1), + LocalDate.of(2020, 4, 1))); + assertEquals(100, calBudgetAmoutUnderTest.CalBudgetAmount(LocalDate.of(2020, 5, 1), + LocalDate.of(2020, 5, 1))); + assertEquals(500, calBudgetAmoutUnderTest.CalBudgetAmount(LocalDate.of(2020, 5, 1), + LocalDate.of(2020, 5, 5))); + assertEquals(3110, calBudgetAmoutUnderTest.CalBudgetAmount(LocalDate.of(2020, 5, 1), + LocalDate.of(2020, 6, 1))); + assertEquals(3110, calBudgetAmoutUnderTest.CalBudgetAmount(LocalDate.of(2020, 4, 3), + LocalDate.of(2020, 6, 1))); + assertEquals(3410, calBudgetAmoutUnderTest.CalBudgetAmount(LocalDate.of(2020, 4, 3), + LocalDate.of(2020, 7, 1))); + assertEquals(3710, calBudgetAmoutUnderTest.CalBudgetAmount(LocalDate.of(2020, 4, 3), + LocalDate.of(2020, 8, 5))); + assertEquals(440, calBudgetAmoutUnderTest.CalBudgetAmount(LocalDate.of(2020, 5, 31), + LocalDate.of(2020, 7, 4))); + } +} From 9993c5af166a988c3e47bbcea6f2de458d9b1c34 Mon Sep 17 00:00:00 2001 From: Lucas Tong Date: Mon, 4 Jul 2022 22:22:11 +0800 Subject: [PATCH 7/7] update UT --- .../java/com/odde/tdd/CalBudgetAmout.java | 26 +++++++------------ .../java/com/odde/tdd/CalBudgetAmoutTest.java | 21 +++++++++++---- 2 files changed, 25 insertions(+), 22 deletions(-) diff --git a/src/main/java/com/odde/tdd/CalBudgetAmout.java b/src/main/java/com/odde/tdd/CalBudgetAmout.java index 315ad96..6e72e71 100644 --- a/src/main/java/com/odde/tdd/CalBudgetAmout.java +++ b/src/main/java/com/odde/tdd/CalBudgetAmout.java @@ -17,43 +17,35 @@ public class CalBudgetAmout { private List budgetList; - // private BudgetRepo budgetRepo = new BudgetRepoImpl(); private BudgetRepo budgetRepo; - public CalBudgetAmout() { - budgetRepo = new BudgetRepoImpl(); - budgetList = budgetRepo.findAll(); + public CalBudgetAmout(BudgetRepo budgetRepo) { + this.budgetList = budgetRepo.findAll(); } - public void setBudgetList(List budgetList) { - this.budgetList = budgetList; - } +// public void setBudgetList(List budgetList) { +// this.budgetList = budgetList; +// } - int CalBudgetAmount(LocalDate begin, LocalDate end) { - int amount = 0; + long CalBudgetAmount(LocalDate begin, LocalDate end) { + long amount = 0; if (end.isBefore(begin)) { return amount; } -// Map budgetMap = budgetList.stream().map(x->x.getMonth(), x->x.getAmount()); Map budgetMap = budgetList.stream().collect( Collectors.toMap(Budget::getMonth, Budget::getAmount)); -// Collectors.toMap(x -> x.getMonth(), Budget::getAmount/Budget::getMonth)); - budgetMap.replaceAll((k, v) -> v / k.lengthOfMonth()); -// YearMonth beginYM = YearMonth.from(begin); -// YearMonth endYM = YearMonth.from(end); -// YearMonth date = beginYM; - LocalDate date = begin; + LocalDate date = begin; while (!date.isAfter(end)) { if(!Objects.isNull(budgetMap.get(YearMonth.from(date)))) { if ((date.getYear() == end.getYear()) && (date.getMonth() == end.getMonth())) { //same month long daysBetween = DAYS.between(date, end) + 1; - System.out.println("days diff ==" + daysBetween); +// System.out.println("days diff ==" + daysBetween); amount += budgetMap.get(YearMonth.from(date)) * daysBetween; } else { amount += budgetMap.get(YearMonth.from(date)) * (date.lengthOfMonth() - date.getDayOfMonth() + 1); diff --git a/src/test/java/com/odde/tdd/CalBudgetAmoutTest.java b/src/test/java/com/odde/tdd/CalBudgetAmoutTest.java index 8698ce2..5855803 100644 --- a/src/test/java/com/odde/tdd/CalBudgetAmoutTest.java +++ b/src/test/java/com/odde/tdd/CalBudgetAmoutTest.java @@ -15,15 +15,11 @@ public class CalBudgetAmoutTest { @Before public void setUp() { - calBudgetAmoutUnderTest = new CalBudgetAmout(); + calBudgetAmoutUnderTest = new CalBudgetAmout(new MockBudgetRepo()); } @Test public void testCalBudgetAmount() { - List budgetList = Arrays.asList(new Budget(YearMonth.of(2020, 5), 3100), - new Budget(YearMonth.of(2020, 6), 300), - new Budget(YearMonth.of(2020, 7), 310)); - calBudgetAmoutUnderTest.setBudgetList(budgetList); assertEquals(0, calBudgetAmoutUnderTest.CalBudgetAmount(LocalDate.of(2020, 5, 1), LocalDate.of(2020, 4, 1))); assertEquals(100, calBudgetAmoutUnderTest.CalBudgetAmount(LocalDate.of(2020, 5, 1), @@ -40,5 +36,20 @@ public void testCalBudgetAmount() { LocalDate.of(2020, 8, 5))); assertEquals(440, calBudgetAmoutUnderTest.CalBudgetAmount(LocalDate.of(2020, 5, 31), LocalDate.of(2020, 7, 4))); + assertEquals(5810, calBudgetAmoutUnderTest.CalBudgetAmount(LocalDate.of(2019, 11, 11), + LocalDate.of(2021, 2, 10))); + } + + public class MockBudgetRepo implements BudgetRepo { + + @Override + public List findAll() { + List budgetList = Arrays.asList(new Budget(YearMonth.of(2019, 11), 3000), + new Budget(YearMonth.of(2020, 5), 3100), + new Budget(YearMonth.of(2020, 6), 300), + new Budget(YearMonth.of(2020, 7), 310), + new Budget(YearMonth.of(2021, 2), 280)); + return budgetList; + } } }