import org.fest.assertions.api.Assertions; import org.junit.Test; public class FlowerCostTest { @Test public void acceptance_test(){ assertFlowersCost(FlowersCostBuilder.aFlowersCostBuilder().people(3).flowers(4).cost(2, 1, 5, 3), 12); } @Test public void equal_number_of_flowers_and_people(){ assertFlowersCost(FlowersCostBuilder.aFlowersCostBuilder().people(4).flowers(4).cost(2, 3, 3, 5), 13); } @Test public void number_flowers_less_than_number_of_people(){ assertFlowersCost(FlowersCostBuilder.aFlowersCostBuilder().people(4).flowers(3).cost(2, 3, 3), 8); } @Test public void no_flower(){ assertFlowersCost(FlowersCostBuilder.aFlowersCostBuilder().people(4).flowers(0), 0); } @Test public void number_flowers_greater_than_number_of_people(){ assertFlowersCost(FlowersCostBuilder.aFlowersCostBuilder().people(4).flowers(5).cost(5, 4, 3, 2, 1), 16); } @Test public void number_flowers_which_are_picked_in_any_order_greater_than_number_of_people(){ assertFlowersCost(FlowersCostBuilder.aFlowersCostBuilder().people(4).flowers(5).cost(3, 1, 5, 2, 4), 16); } private void assertFlowersCost(FlowersCostBuilder flowersCostBuilder, int expected) { final FlowersCost flowersCost = flowersCostBuilder.build(); Assertions.assertThat(flowersCost.calculateMinCost()).isEqualTo(expected); } }