를 만들어 준다") void testRequestInputOrder() { //given String readLine = "[감자칩-2],[사이다-1]"; System.setIn(new ByteArrayInputStream(readLine.getBytes())); //when List orders = inputHandler.requestInputOrder(); //then OrderDto potatoChip = new OrderDto("감자칩",2); OrderDto cider = new OrderDto("사이다",1); List answer = List.of(potatoChip,cider); assertThat(orders).isEqualTo(answer); } } "> 를 만들어 준다") void testRequestInputOrder() { //given String readLine = "[감자칩-2],[사이다-1]"; System.setIn(new ByteArrayInputStream(readLine.getBytes())); //when List orders = inputHandler.requestInputOrder(); //then OrderDto potatoChip = new OrderDto("감자칩",2); OrderDto cider = new OrderDto("사이다",1); List answer = List.of(potatoChip,cider); assertThat(orders).isEqualTo(answer); } } "> 를 만들어 준다") void testRequestInputOrder() { //given String readLine = "[감자칩-2],[사이다-1]"; System.setIn(new ByteArrayInputStream(readLine.getBytes())); //when List orders = inputHandler.requestInputOrder(); //then OrderDto potatoChip = new OrderDto("감자칩",2); OrderDto cider = new OrderDto("사이다",1); List answer = List.of(potatoChip,cider); assertThat(orders).isEqualTo(answer); } } ">
class InputHandlerTest {

    private static InputHandler inputHandler;

    @AfterEach
    void set() {
        Console.close();
    }

    @BeforeAll
    static void setUp() {
        inputHandler = new InputHandler(new InputValidator(),new InputView());
    }

    @Test
    @DisplayName("InputHandler는 주문을 바탕으로 List<OrderDto>를 만들어 준다")
    void testRequestInputOrder() {
        //given
        String readLine = "[감자칩-2],[사이다-1]";
        System.setIn(new ByteArrayInputStream(readLine.getBytes()));

        //when
        List<OrderDto> orders =  inputHandler.requestInputOrder();

        //then
        OrderDto potatoChip = new OrderDto("감자칩",2);
        OrderDto cider = new OrderDto("사이다",1);
        List<OrderDto> answer = List.of(potatoChip,cider);

        assertThat(orders).isEqualTo(answer);
    }
}

class InputValidatorTest {

    private static InputValidator inputvalidator;

    @BeforeAll
    static void setUp() {
        inputvalidator = new InputValidator();
    }

    @Test
    @DisplayName("주문으로 null값을 입력할 수 없다")
    void nullOrderNotAllowed() {
        String nullString = null;
        assertThatThrownBy(() -> {
            inputvalidator.validateProductOrder(nullString);
        }).hasMessageContaining(InputErrors.INVALID_AMOUNT_OR_NAME.getMessage());
    }

    @ParameterizedTest
    @DisplayName("주문으로 공백을 받을 수 없다")
    @ValueSource(strings = {"", " ", "  ", "\\n", "\\t"})
    void blankOrderNotAllowed(String input) {
        assertThatThrownBy(() -> {
            inputvalidator.validateProductOrder(input);
        }).hasMessageContaining(InputErrors.INVALID_AMOUNT_OR_NAME.getMessage());
    }
}
class WorkerTest {

    @ParameterizedTest
    @DisplayName("이름이 5글자를 넘어가면 에러가 생긴다")
    @ValueSource(strings = {"정말정말정말긴이름","이름이다섯글자이상"})
    void invalidWorkerName(String input) {
        assertThatThrownBy(() -> {
            Worker worker = new Worker(input);
        }).hasMessageContaining(String.format(Errors.WORKER_NAME_LENGTH.getMessage(),5));
    }

}