diff --git a/build.gradle b/build.gradle index 2bc7dc0..7a01909 100644 --- a/build.gradle +++ b/build.gradle @@ -25,8 +25,8 @@ dependencies { testImplementation 'org.springframework.boot:spring-boot-starter-test' testImplementation 'org.junit.platform:junit-platform-launcher:1.5.0' - testImplementation 'org.junit.jupiter:junit-jupiter-api:5.5.0' - testImplementation 'org.junit.jupiter:junit-jupiter-engine:5.5.0' + testImplementation 'org.junit.jupiter:junit-jupiter-api:5.9.1' + testImplementation 'org.junit.jupiter:junit-jupiter-engine:5.9.1' } diff --git a/src/main/java/com/example/helper/constant/Messages.java b/src/main/java/com/example/helper/constant/Messages.java new file mode 100644 index 0000000..8cc80fe --- /dev/null +++ b/src/main/java/com/example/helper/constant/Messages.java @@ -0,0 +1,18 @@ +package com.example.helper.constant; + +public enum Messages { + EXIST_MEAL_ERROR("이미 존재하는 식단입니다."), + NO_EXIST_MEAL_ERROR("조건에 맞는 식단이 존재하지 않습니다."), + NO_MEAL_KOR("식단 준비중입니다."), + NO_MEAL_ENG("The meal is being prepared."), + INVALID_DATE("유효하지 않은 날짜입니다."), + DUMMY_MEAL_KOR("2023-01-27 조식\n\n제2학생회관1층\n\n흰밥*김가루양념밥\n"), + DUMMY_MEAL_ENG("2023-01-27 Breakfast\n\nStudent Union Bldg.2 1st floor\n\nWhite rice*Seasoned rice with seaweed\n"); + private String message; + Messages(String message) { + this.message = message; + } + public String getMessages() { + return message; + } +} diff --git a/src/main/java/com/example/helper/constant/SpecMealInputsEng.java b/src/main/java/com/example/helper/constant/SpecMealInputsEng.java new file mode 100644 index 0000000..dd51bfe --- /dev/null +++ b/src/main/java/com/example/helper/constant/SpecMealInputsEng.java @@ -0,0 +1,36 @@ +package com.example.helper.constant; + +import jakarta.persistence.criteria.CriteriaBuilder; + +public enum SpecMealInputsEng { + TODAY("today"), + TOMORROW("tomorrow"), + MON("Mon", Types.DATE_MON.getType()), + TUE("Tue", Types.DATE_TUE.getType()), + WED("Wed", Types.DATE_WED.getType()), + THR("Thr", Types.DATE_THR.getType()), + FRI("Fri", Types.DATE_FRI.getType()), + SAT("Sat", Types.DATE_SAT.getType()), + SUN("Sun", Types.DATE_SUN.getType()), + DAY_1("st"), + DAY_2("nd"), + DAY_3("rd"), + DAY_OTHER("th"), + BREAKFAST("breakfast", Types.KIND_BREAKFAST.getType()), + LUNCH("lunch", Types.KIND_LUNCH.getType()), + DINNER("dinner", Types.KIND_DINNER.getType()); + private String input; + private Integer inputValue; + SpecMealInputsEng (String input) { + this.input = input; + } + + SpecMealInputsEng (String input, Integer inputValue) { + this.input = input; + this.inputValue = inputValue; + } + public String getInputs() { + return input; + } + public Integer getInputValue() { return inputValue; } +} diff --git a/src/main/java/com/example/helper/constant/SpecMealInputsKor.java b/src/main/java/com/example/helper/constant/SpecMealInputsKor.java new file mode 100644 index 0000000..fc8af17 --- /dev/null +++ b/src/main/java/com/example/helper/constant/SpecMealInputsKor.java @@ -0,0 +1,39 @@ +package com.example.helper.constant; + + +public enum SpecMealInputsKor { + TODAY("오늘"), + TOMORROW("내일"), + MON("월", Types.DATE_MON.getType()), + TUE("화", Types.DATE_TUE.getType()), + WED("수", Types.DATE_WED.getType()), + THR("목", Types.DATE_THR.getType()), + FRI("금", Types.DATE_FRI.getType()), + SAT("토", Types.DATE_SAT.getType()), + SUM("일", Types.DATE_SUN.getType()), + DAY("일"), + BREAKFAST("조식", Types.KIND_BREAKFAST.getType()), + LUNCH("중식", Types.KIND_LUNCH.getType()), + DINNER("석식", Types.KIND_DINNER.getType()); + private String input; + private Integer inputValue; + SpecMealInputsKor(String input) { + this.input = input; + } + SpecMealInputsKor(String input, Integer inputValue) { + this.input = input; + this.inputValue = inputValue; + } + public String getInputs() { + return input; + } + public Integer getInputValue() { return inputValue; } + + public static Integer getTypeByString(String str){ + for(SpecMealInputsKor each : values()) + if (each.getInputs().equals(str)) { + return each.getInputValue(); + } + return -1; + } +} diff --git a/src/main/java/com/example/helper/constant/Types.java b/src/main/java/com/example/helper/constant/Types.java index d5a0c4c..c646b35 100644 --- a/src/main/java/com/example/helper/constant/Types.java +++ b/src/main/java/com/example/helper/constant/Types.java @@ -9,7 +9,14 @@ public enum Types { KIND_BREAKFAST(0), KIND_LUNCH(1), KIND_DINNER(2), - KIND_LUNCH_CORNER(3); + KIND_LUNCH_CORNER(3), + DATE_MON(1), + DATE_TUE(2), + DATE_WED(3), + DATE_THR(4), + DATE_FRI(5), + DATE_SAT(6), + DATE_SUN(7); private Integer type; diff --git a/src/main/java/com/example/helper/controller/MealController.java b/src/main/java/com/example/helper/controller/MealController.java index 6a11616..d9de122 100644 --- a/src/main/java/com/example/helper/controller/MealController.java +++ b/src/main/java/com/example/helper/controller/MealController.java @@ -7,6 +7,8 @@ import com.example.helper.service.MealService; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; +import java.time.LocalDateTime; +import java.time.ZoneId; import java.util.Map.Entry; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; @@ -50,9 +52,13 @@ public String createMeal(@RequestBody Mealdto mealDto) { BeanUtils.copyProperties(mealDto, meal); // DB Save - Long saved = mealService.mealCreate(meal); - - return "saved"; + try { + Long saved = mealService.mealCreate(meal); + return "saved"; + } catch (IllegalStateException e) { + throw new ResponseStatusException( + HttpStatus.NOT_ACCEPTABLE, e.getMessage()); + } } @PostMapping("/kor") @@ -62,9 +68,6 @@ public Map readKorMeal() throws JsonProcessingException { String nowMeal = mealService.getNowKorMeal(); Map responseBody = mealService.responseMeal(nowMeal); - // if need to stratify. - // ObjectMapper objectMapper = new ObjectMapper(); - // String result = objectMapper.writeValueAsString(responseBody); return responseBody; } @@ -77,104 +80,50 @@ public Map readEngMeal() throws JsonProcessingException { String nowMeal = mealService.getNowEngMeal(); Map responseBody = mealService.responseMeal(nowMeal); - // if need to stratify. - // ObjectMapper objectMapper = new ObjectMapper(); - // String result = objectMapper.writeValueAsString(responseBody); - return responseBody; } - @PostMapping("/spectest") - public Map readSpecKortest(@RequestBody Map requestBody) throws JsonProcessingException { - // input : 날짜요일내일 + 아점저 + 1/2학 + @PostMapping("/speckor") + public Map readSpecKorMeal(@RequestBody Map requestBody) throws JsonProcessingException { + // input : 날짜요일내일 + 아점저 // output : 한국어 식단이 포함된 JSON (단, JSON은 카톡 서버가 받을 수 있는 형식이여야 함.) - Map action = new HashMap<>(); - action.put("action", requestBody.get("action")); - - Map params = new HashMap<>(); - params.put("params", action.get("action")); - - Map paramssss = new HashMap<>(); - paramssss.put("params", params.get("params")); - - String dateCustom = (String) paramssss.get("dateCustom"); - String bld = (String) paramssss.get("bld"); - - log.info("req body : " + requestBody.toString()); - log.info("action body : " + action.toString()); - log.info("params body : " + params.toString()); - log.info("paramssss body : " + paramssss.toString()); - - for (Entry entrySet : requestBody.entrySet()) { - log.info(entrySet.getKey() + " : " + entrySet.getValue()); - } - - log.info("###########RESULT############"); - log.info(dateCustom + " " + bld); - log.info(dateCustom + " " + bld); + // how to print the request body + //for (Entry entrySet : requestBody.entrySet()) { + // log.info(entrySet.getKey() + " : " + entrySet.getValue()); + //} ObjectMapper objectMapper = new ObjectMapper(); - Map action2 = objectMapper.convertValue(requestBody.get("action"), Map.class); - Map params2 = objectMapper.convertValue(action2.get("params"), Map.class); - log.info(params2.get("dateCustom").toString() + " " + params2.get("bld").toString()); + Map action = objectMapper.convertValue(requestBody.get("action"), Map.class); + Map params = objectMapper.convertValue(action.get("params"), Map.class); - //Map params2 = new HashMap<>(); - //params2.put() - //log.info(params2.get("dateCustom") + " " + params2.get("bld")); + //log.info(params2.get("dateCustom").toString() + " " + params2.get("bld").toString()); + String dateCustom = params.get("dateCustom").toString(); + String bld = params.get("bld").toString(); - String specMeal = mealService.getSpecKorMeal(dateCustom, bld); + LocalDateTime currentDateTime = LocalDateTime.now(ZoneId.of("Asia/Seoul")); + String specMeal = mealService.getSpecKorMeal(dateCustom, bld, currentDateTime); Map responseBody = mealService.responseMeal(specMeal); - // if need to stratify. - // ObjectMapper objectMapper = new ObjectMapper(); - // String result = objectMapper.writeValueAsString(responseBody); - - return responseBody; - } - - @PostMapping("/speckor") - public Map readSpecKorMeal(@RequestBody Map>> requestBody) throws JsonProcessingException { - // input : 날짜요일내일 + 아점저 + 1/2학 - // output : 한국어 식단이 포함된 JSON (단, JSON은 카톡 서버가 받을 수 있는 형식이여야 함.) - - Map> action = requestBody.get("action"); - Map params = action.get("params"); - String dateCustom = (String) params.get("dateCustom"); - String bld = (String) params.get("bld"); - - log.info(dateCustom + " " + bld); - log.info(dateCustom + " " + bld); - - String specMeal = mealService.getSpecKorMeal(dateCustom, bld); - Map responseBody = mealService.responseMeal(specMeal); - - // if need to stratify. - // ObjectMapper objectMapper = new ObjectMapper(); - // String result = objectMapper.writeValueAsString(responseBody); - return responseBody; } @PostMapping("/speceng") - public Map readSpecEngMeal(@RequestBody Map>> requestBody) throws JsonProcessingException { - // input : 날짜요일내일 + 아점저 + 1/2학 + public Map readSpecEngMeal(@RequestBody Map requestBody) throws JsonProcessingException { + // input : 날짜요일내일 + 아점저 // output : 영어 식단이 포함된 JSON (단, JSON은 카톡 서버가 받을 수 있는 형식이여야 함.) - Map> action = requestBody.get("action"); - Map params = action.get("params"); - String dateCustom = (String) params.get("dateCustom"); - String bld = (String) params.get("bld"); + ObjectMapper objectMapper = new ObjectMapper(); + Map action = objectMapper.convertValue(requestBody.get("action"), Map.class); + Map params = objectMapper.convertValue(action.get("params"), Map.class); - log.info(dateCustom + " " + bld); + //log.info(params2.get("dateCustom").toString() + " " + params2.get("bld").toString()); + String dateCustom = params.get("dateCustom").toString(); + String bld = params.get("bld").toString(); String specMeal = mealService.getSpecEngMeal(dateCustom, bld); Map responseBody = mealService.responseMeal(specMeal); - // if need to stratify. - // ObjectMapper objectMapper = new ObjectMapper(); - // String result = objectMapper.writeValueAsString(responseBody); - return responseBody; } diff --git a/src/main/java/com/example/helper/entity/Meal.java b/src/main/java/com/example/helper/entity/Meal.java index c06e6a5..7eedcfc 100644 --- a/src/main/java/com/example/helper/entity/Meal.java +++ b/src/main/java/com/example/helper/entity/Meal.java @@ -1,5 +1,6 @@ package com.example.helper.entity; +import com.example.helper.constant.Types; import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.GeneratedValue; @@ -45,9 +46,15 @@ public String generateMenu() { menu += this.date + " " + this.kind + "\n\n"; menu += this.bldg + "\n\n"; menu += this.menu; - if(kindType == 1) { - menu += "\n\\코너\\\n"; - menu += this.special; + if(kindType == Types.KIND_LUNCH.getType()) { + if(langType == Types.LANG_KOR.getType()) { + menu += "\n\\코너\\\n"; + menu += this.special; + } + else if(langType == Types.LANG_ENG.getType()) { + menu += "\n\\Coner\\\n"; + menu += this.special; + } } return menu; } diff --git a/src/main/java/com/example/helper/service/MealService.java b/src/main/java/com/example/helper/service/MealService.java index 308ac56..e4b4743 100644 --- a/src/main/java/com/example/helper/service/MealService.java +++ b/src/main/java/com/example/helper/service/MealService.java @@ -1,5 +1,9 @@ package com.example.helper.service; +import com.example.helper.constant.Messages; +import com.example.helper.constant.SpecMealInputsEng; +import com.example.helper.constant.SpecMealInputsKor; +import com.example.helper.constant.Types; import com.example.helper.dto.DateMealDto; import com.example.helper.dto.DateReqDto; import com.example.helper.entity.Meal; @@ -8,6 +12,8 @@ import com.fasterxml.jackson.databind.ObjectMapper; import lombok.extern.slf4j.Slf4j; +import java.text.ParseException; +import java.text.SimpleDateFormat; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -39,7 +45,7 @@ private void validateDuplicateMeal(Meal meal) { // DB 중복 체크 sqlMealRepository.findByPk(meal.getBldgType(), meal.getLangType(), meal.getDateType(), meal.getKindType(), meal.getDate()) .ifPresent(m -> { - throw new IllegalStateException("이미 존재하는 식단입니다."); + throw new IllegalStateException(Messages.EXIST_MEAL_ERROR.getMessages()); }); } @@ -63,62 +69,226 @@ else if(19 <= hour && hour < 24) { currentDateTime = currentDateTime.plusDays(1); } - log.info("currentDateTime Obj : " + currentDateTime.toString()); - String date = currentDateTime.getYear() + "-"; date += String.format("%02d", currentDateTime.getMonth().getValue()) + "-"; date += String.format("%02d", currentDateTime.getDayOfMonth()) + ""; - log.info("date Obj : " + date); - log.info("langType Obj : " + langType); - log.info("kindType Obj : " + kindType); - Optional result = sqlMealRepository.findByDate(2, langType, kindType, date); + Optional result = sqlMealRepository.findByDate(Types.BLDG2_1ST.getType(), langType, kindType, date); + // TODO: 함수로 분리 if(result.isEmpty()) { - //throw new IllegalStateException("조건에 맞는 식단이 존재하지 않습니다."); + //throw new IllegalStateException(Messages.EXIST_MEAL_ERROR.getMessages()); if(langType == 0) { - return "식단 준비중입니다."; + return Messages.NO_MEAL_KOR.getMessages(); } else { - return "The meal is being prepared."; + return Messages.NO_MEAL_ENG.getMessages(); } } Meal meal = result.get(); return meal.generateMenu(); } + private Boolean specInputValidation(String dateCustom, String bld) { + // input arguments : null, empty, " " + if (dateCustom == null || bld == null || dateCustom.isBlank() || bld.isBlank()) { + return false; + } + return true; + } + public String getNowKorMeal() { - return getNowMeal(0); + return getNowMeal(Types.LANG_KOR.getType()); } public String getNowEngMeal() { - return getNowMeal(1); + return getNowMeal(Types.LANG_ENG.getType()); + } + + public String getSpecKorMeal(String dateCustom, String bld, LocalDateTime currentDateTime) { + // test를 위해 LocalDateTime 객체를 argument로 받도록 변경 + + if (!specInputValidation(dateCustom, bld)) { + return Messages.NO_MEAL_KOR.getMessages(); + } + + try { + if (dateCustom.equals(SpecMealInputsKor.TOMORROW.getInputs())) { + // 내일 + currentDateTime = currentDateTime.plusDays(1); + } else if (dateCustom.length() == 1) { + // 요일 + Integer dateDiff = getDateDifference(dateCustom, currentDateTime); + currentDateTime = currentDateTime.plusDays(dateDiff); + } else if ((dateCustom.charAt(dateCustom.length() - 1) + "").equals(SpecMealInputsKor.DAY.getInputs())) { + // 특정날짜 + currentDateTime = currentDateTime.withDayOfMonth( + Integer.parseInt(dateCustom.substring(0, dateCustom.length() - 1))); + } + } catch (Exception e) { + return Messages.INVALID_DATE.getMessages(); + } + + String date = currentDateTime.getYear() + "-"; + date += String.format("%02d", currentDateTime.getMonth().getValue()) + "-"; + date += String.format("%02d", currentDateTime.getDayOfMonth()) + ""; + + Optional result = sqlMealRepository.findByDate( + Types.BLDG2_1ST.getType(), + Types.LANG_KOR.getType(), + SpecMealInputsKor.getTypeByString(bld), + date); + + // TODO : 존재하지 않는 식단이면, error message 반환. + if(result.isEmpty()) { + return Messages.NO_MEAL_KOR.getMessages(); + } + + return result.get().generateMenu(); } - public String getSpecKorMeal(String dateCustom, String bld) { - //TODO sqlMealRepository.findSpecKorMeal - return "2023-01-27 조식\n\n제2학생회관1층\n\n흰밥*김가루양념밥\n"; + public Integer getDateDifference(String day, LocalDateTime currentDateTime) { + return SpecMealInputsKor.getTypeByString(day) - (Integer) currentDateTime.getDayOfWeek().getValue(); } + public Boolean dateFormatValidation(String date) { + Boolean ret = true; + try { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + sdf.setLenient(false); + sdf.parse(date); + } catch(ParseException e) { + ret = false; + } + return ret; + } public String getSpecEngMeal(String dateCustom, String bld) { - //TODO sqlMealRepository.findSpecEngMeal - return "2023-01-27 Breakfast\n\nStudent Union Bldg.2 1st floor\n\nWhite rice*Seasoned rice with seaweed\n"; + if (!specInputValidation(dateCustom, bld)) { + return Messages.NO_MEAL_ENG.getMessages(); + } + LocalDateTime currentDateTime = LocalDateTime.now(ZoneId.of("Asia/Seoul")); + + Integer year = currentDateTime.getYear(); + Integer month = currentDateTime.getMonth().getValue(); + Integer day = currentDateTime.getDayOfMonth(); + Integer currentDateNumber = currentDateTime.getDayOfWeek().getValue(); + + Integer dateCustomLen = dateCustom.length(); + if(dateCustom.equals(SpecMealInputsEng.TODAY.getInputs())) { + // 오늘 + } + else if(dateCustom.equals(SpecMealInputsEng.TOMORROW.getInputs())) { + // 내일 + currentDateTime = currentDateTime.plusDays(1); + year = currentDateTime.getYear(); + month = currentDateTime.getMonth().getValue(); + day = currentDateTime.getDayOfMonth(); + } + else if(dateCustomLen > 2) { + String dateCustomPostfix = dateCustom.substring(dateCustomLen - 2, dateCustomLen); + if( dateCustomPostfix.equals(SpecMealInputsEng.DAY_1.getInputs()) || + dateCustomPostfix.equals(SpecMealInputsEng.DAY_2.getInputs()) || + dateCustomPostfix.equals(SpecMealInputsEng.DAY_3.getInputs()) || + dateCustomPostfix.equals(SpecMealInputsEng.DAY_OTHER.getInputs())) { + // 특정날짜 + String dateCustomPrefix = (dateCustomLen == 3) ? dateCustom.substring(0, 1) : dateCustom.substring(0, 2); + + try{ + day = Integer.valueOf(dateCustomPrefix); + } + catch (NumberFormatException ex){ + day = 0; + } + } + else { + //요일 + Integer dateNumber = 0; + if(dateCustom.equals(SpecMealInputsEng.MON.getInputs())) { + dateNumber = SpecMealInputsEng.MON.getInputValue(); + } + else if(dateCustom.equals(SpecMealInputsEng.TUE.getInputs())) { + dateNumber = SpecMealInputsEng.TUE.getInputValue(); + } + else if(dateCustom.equals(SpecMealInputsEng.WED.getInputs())) { + dateNumber = SpecMealInputsEng.WED.getInputValue(); + } + else if(dateCustom.equals(SpecMealInputsEng.THR.getInputs())) { + dateNumber = SpecMealInputsEng.THR.getInputValue(); + } + else if(dateCustom.equals(SpecMealInputsEng.FRI.getInputs())) { + dateNumber = SpecMealInputsEng.FRI.getInputValue(); + } + else if(dateCustom.equals(SpecMealInputsEng.SAT.getInputs())) { + dateNumber = SpecMealInputsEng.SAT.getInputValue(); + } + else if(dateCustom.equals(SpecMealInputsEng.SUN.getInputs())) { + dateNumber = SpecMealInputsEng.SUN.getInputValue(); + } + + if(dateNumber == 0) { + day = 0; + } + else { + Integer dateDiff = dateNumber - currentDateNumber; + Integer dateDiffAbs = (dateDiff > 0) ? dateDiff : dateDiff * -1; + currentDateTime = (dateDiff > 0) ? currentDateTime.plusDays(dateDiffAbs) : currentDateTime.minusDays(dateDiffAbs); + year = currentDateTime.getYear(); + month = currentDateTime.getMonth().getValue(); + day = currentDateTime.getDayOfMonth(); + } + + } + } + + Integer kindType = -1; + if(bld.equals(SpecMealInputsEng.BREAKFAST.getInputs())) { + kindType = SpecMealInputsEng.BREAKFAST.getInputValue(); + } + else if(bld.equals(SpecMealInputsEng.LUNCH.getInputs())) { + kindType = SpecMealInputsEng.LUNCH.getInputValue(); + } + else if(bld.equals(SpecMealInputsEng.DINNER.getInputs())) { + kindType = SpecMealInputsEng.DINNER.getInputValue(); + } + + if( (day < 1 && day > 31) || (kindType < 0 || kindType > 2)) { + return Messages.NO_MEAL_ENG.getMessages(); + } + + String date = year + "-"; + date += String.format("%02d", month) + "-"; + date += String.format("%02d", day) + ""; + + //형식이 잘못되면 Query 에서 NULL 을 반환한다. + //if(!dateFormatValidation(date)) { + // return Messages.NO_MEAL_ENG.getMessages(); + //} + + Optional result = sqlMealRepository.findByDate(Types.BLDG2_1ST.getType(), Types.LANG_ENG.getType(), kindType, date); + + if(result.isEmpty()) { + //throw new IllegalStateException(Messages.EXIST_MEAL_ERROR.getMessages()); + return Messages.NO_MEAL_ENG.getMessages(); + } + Meal meal = result.get(); + return meal.generateMenu(); } public Map responseMeal(String menu) { // Response Body Construct - // const responseBody = { - // version: "2.0", + // responseBody: { + // version: "2.0", // template: { // outputs: [ + // { + // simpleText: // { - // simpleText: { - // text: nowMeal - // } + // text: meal // } - // ] - // } - // }; + // } + // ] + // } + // }; Map simpleText = new HashMap<>(); simpleText.put("text", menu); @@ -136,6 +306,10 @@ public Map responseMeal(String menu) { responseBody.put("version", "2.0"); responseBody.put("template", template); + // stratify json to string + // ObjectMapper objectMapper = new ObjectMapper(); + // String result = objectMapper.writeValueAsString(responseBody); + return responseBody; } } diff --git a/src/test/java/com/example/helper/constant/SpecMealInputsKorTest.java b/src/test/java/com/example/helper/constant/SpecMealInputsKorTest.java new file mode 100644 index 0000000..3229a9e --- /dev/null +++ b/src/test/java/com/example/helper/constant/SpecMealInputsKorTest.java @@ -0,0 +1,30 @@ +package com.example.helper.constant; + +import static com.example.helper.constant.SpecMealInputsKor.*; +import static org.junit.jupiter.api.Assertions.*; + +import java.util.stream.Stream; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; + +class SpecMealInputsKorTest { + + @ParameterizedTest + @MethodSource("provideStringsForIsTypes") + void enum_한국어식단_타입변환(String kind, Integer expected) { + // given + // when + Integer result = getTypeByString(kind); + // then + assertEquals(expected, result); + } + + private static Stream provideStringsForIsTypes() { + return Stream.of( + Arguments.of(BREAKFAST.getInputs(), BREAKFAST.getInputValue()), + Arguments.of(LUNCH.getInputs(), LUNCH.getInputValue()), + Arguments.of(DINNER.getInputs(), DINNER.getInputValue()) + ); + } +} diff --git a/src/test/java/com/example/helper/service/MealServiceTest.java b/src/test/java/com/example/helper/service/MealServiceTest.java index dfa783d..5b7482a 100644 --- a/src/test/java/com/example/helper/service/MealServiceTest.java +++ b/src/test/java/com/example/helper/service/MealServiceTest.java @@ -1,13 +1,21 @@ package com.example.helper.service; +import com.example.helper.constant.SpecMealInputsEng; import com.example.helper.repository.SqlMealRepository; import jakarta.persistence.EntityManager; import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; import java.time.LocalDateTime; import java.time.ZoneId; +import java.util.ArrayList; +import java.util.List; +@SpringBootTest public class MealServiceTest { + @Autowired + private MealService mealService; @Test void getNowTest() { LocalDateTime currentDateTime = LocalDateTime.now(ZoneId.of("Asia/Seoul")); @@ -39,4 +47,47 @@ else if(19 <= hour && hour < 24) { System.out.println(kindType); } + @Test + void specEngTest() { + List dateCustomTestList = new ArrayList<>(); + for(int i = 1 ; i <= 31 ; i++) { + String tc = i + ""; + if(i == 1) { + tc += "st"; + } + else if(i == 2) { + tc += "nd"; + } + else if(i == 3) { + tc += "rd"; + } + else { + tc += "th"; + } + dateCustomTestList.add(tc); + } + dateCustomTestList.add(SpecMealInputsEng.TODAY.getInputs()); + dateCustomTestList.add(SpecMealInputsEng.TOMORROW.getInputs()); + dateCustomTestList.add(SpecMealInputsEng.MON.getInputs()); + dateCustomTestList.add(SpecMealInputsEng.THR.getInputs()); + dateCustomTestList.add(SpecMealInputsEng.WED.getInputs()); + dateCustomTestList.add(SpecMealInputsEng.THR.getInputs()); + dateCustomTestList.add(SpecMealInputsEng.FRI.getInputs()); + dateCustomTestList.add(SpecMealInputsEng.SAT.getInputs()); + dateCustomTestList.add(SpecMealInputsEng.SUN.getInputs()); + + List bldTestList = new ArrayList<>(); + bldTestList.add(SpecMealInputsEng.BREAKFAST.getInputs()); + bldTestList.add(SpecMealInputsEng.LUNCH.getInputs()); + bldTestList.add(SpecMealInputsEng.DINNER.getInputs()); + + for(String dateCustom : dateCustomTestList) { + for(String bld : bldTestList) { + String specMeal = mealService.getSpecEngMeal(dateCustom, bld); + System.out.println(dateCustom + " " + bld); + System.out.println(specMeal); + } + } + } + }