{
-
- @Override
- public LocalTime parse(String text, Locale locale) {
- return LocalTime.parse(text);
- }
-
- @Override
- public String print(LocalTime lt, Locale locale) {
- return lt.format(DateTimeFormatter.ISO_LOCAL_TIME);
- }
- }
-}
diff --git a/src/main/java/ru/javawebinar/topjava/web/json/JacksonObjectMapper.java b/src/main/java/ru/javawebinar/topjava/web/json/JacksonObjectMapper.java
deleted file mode 100644
index 8237df93b..000000000
--- a/src/main/java/ru/javawebinar/topjava/web/json/JacksonObjectMapper.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package ru.javawebinar.topjava.web.json;
-
-import com.fasterxml.jackson.annotation.JsonAutoDetect;
-import com.fasterxml.jackson.annotation.JsonInclude;
-import com.fasterxml.jackson.annotation.PropertyAccessor;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.SerializationFeature;
-import com.fasterxml.jackson.datatype.hibernate5.Hibernate5Module;
-import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
-
-/**
- *
- * Handling Hibernate lazy-loading
- *
- * @link https://github.com/FasterXML/jackson
- * @link https://github.com/FasterXML/jackson-datatype-hibernate
- * @link https://github.com/FasterXML/jackson-docs/wiki/JacksonHowToCustomSerializers
- */
-public class JacksonObjectMapper extends ObjectMapper {
-
- private static final ObjectMapper MAPPER = new JacksonObjectMapper();
-
- private JacksonObjectMapper() {
- registerModule(new Hibernate5Module());
-
- registerModule(new JavaTimeModule());
- configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
-
- setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.NONE);
- setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY);
- setSerializationInclusion(JsonInclude.Include.NON_NULL);
- }
-
- public static ObjectMapper getMapper() {
- return MAPPER;
- }
-}
\ No newline at end of file
diff --git a/src/main/java/ru/javawebinar/topjava/web/json/JsonUtil.java b/src/main/java/ru/javawebinar/topjava/web/json/JsonUtil.java
deleted file mode 100644
index d3bf1ac04..000000000
--- a/src/main/java/ru/javawebinar/topjava/web/json/JsonUtil.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package ru.javawebinar.topjava.web.json;
-
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.core.type.TypeReference;
-import com.fasterxml.jackson.databind.ObjectReader;
-
-import java.io.IOException;
-import java.util.List;
-import java.util.Map;
-
-import static ru.javawebinar.topjava.web.json.JacksonObjectMapper.getMapper;
-
-public class JsonUtil {
-
- public static List readValues(String json, Class clazz) {
- ObjectReader reader = getMapper().readerFor(clazz);
- try {
- return reader.readValues(json).readAll();
- } catch (IOException e) {
- throw new IllegalArgumentException("Invalid read array from JSON:\n'" + json + "'", e);
- }
- }
-
- public static T readValue(String json, Class clazz) {
- try {
- return getMapper().readValue(json, clazz);
- } catch (IOException e) {
- throw new IllegalArgumentException("Invalid read from JSON:\n'" + json + "'", e);
- }
- }
-
- public static String writeValue(T obj) {
- try {
- return getMapper().writeValueAsString(obj);
- } catch (JsonProcessingException e) {
- throw new IllegalStateException("Invalid write to JSON:\n'" + obj + "'", e);
- }
- }
-
- public static String writeAdditionProps(T obj, String addName, Object addValue) {
- return writeAdditionProps(obj, Map.of(addName, addValue));
- }
-
- public static String writeAdditionProps(T obj, Map addProps) {
- Map map = getMapper().convertValue(obj, new TypeReference<>() {});
- map.putAll(addProps);
- return writeValue(map);
- }
-}
\ No newline at end of file
diff --git a/src/main/java/ru/javawebinar/topjava/web/meal/AbstractMealController.java b/src/main/java/ru/javawebinar/topjava/web/meal/AbstractMealController.java
deleted file mode 100644
index 63d9f9415..000000000
--- a/src/main/java/ru/javawebinar/topjava/web/meal/AbstractMealController.java
+++ /dev/null
@@ -1,72 +0,0 @@
-package ru.javawebinar.topjava.web.meal;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.lang.Nullable;
-import ru.javawebinar.topjava.model.Meal;
-import ru.javawebinar.topjava.service.MealService;
-import ru.javawebinar.topjava.to.MealTo;
-import ru.javawebinar.topjava.util.MealsUtil;
-import ru.javawebinar.topjava.web.SecurityUtil;
-
-import java.time.LocalDate;
-import java.time.LocalTime;
-import java.util.List;
-
-import static ru.javawebinar.topjava.util.validation.ValidationUtil.assureIdConsistent;
-import static ru.javawebinar.topjava.util.validation.ValidationUtil.checkIsNew;
-
-public abstract class AbstractMealController {
- private final Logger log = LoggerFactory.getLogger(getClass());
-
- @Autowired
- private MealService service;
-
- public Meal get(int id) {
- int userId = SecurityUtil.authUserId();
- log.info("get meal {} for user {}", id, userId);
- return service.get(id, userId);
- }
-
- public void delete(int id) {
- int userId = SecurityUtil.authUserId();
- log.info("delete meal {} for user {}", id, userId);
- service.delete(id, userId);
- }
-
- public List getAll() {
- int userId = SecurityUtil.authUserId();
- log.info("getAll for user {}", userId);
- return MealsUtil.getTos(service.getAll(userId), SecurityUtil.authUserCaloriesPerDay());
- }
-
- public Meal create(Meal meal) {
- int userId = SecurityUtil.authUserId();
- log.info("create {} for user {}", meal, userId);
- checkIsNew(meal);
- return service.create(meal, userId);
- }
-
- public void update(Meal meal, int id) {
- int userId = SecurityUtil.authUserId();
- log.info("update {} for user {}", meal, userId);
- assureIdConsistent(meal, id);
- service.update(meal, userId);
- }
-
- /**
- * Filter separately
- * - by date
- * - by time for every date
- *
- */
- public List getBetween(@Nullable LocalDate startDate, @Nullable LocalTime startTime,
- @Nullable LocalDate endDate, @Nullable LocalTime endTime) {
- int userId = SecurityUtil.authUserId();
- log.info("getBetween dates({} - {}) time({} - {}) for user {}", startDate, endDate, startTime, endTime, userId);
-
- List mealsDateFiltered = service.getBetweenInclusive(startDate, endDate, userId);
- return MealsUtil.getFilteredTos(mealsDateFiltered, SecurityUtil.authUserCaloriesPerDay(), startTime, endTime);
- }
-}
\ No newline at end of file
diff --git a/src/main/java/ru/javawebinar/topjava/web/meal/MealRestController.java b/src/main/java/ru/javawebinar/topjava/web/meal/MealRestController.java
index 0d3eb7e83..bbfe35e3f 100644
--- a/src/main/java/ru/javawebinar/topjava/web/meal/MealRestController.java
+++ b/src/main/java/ru/javawebinar/topjava/web/meal/MealRestController.java
@@ -1,70 +1,76 @@
package ru.javawebinar.topjava.web.meal;
-import org.springframework.http.HttpStatus;
-import org.springframework.http.MediaType;
-import org.springframework.http.ResponseEntity;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import org.springframework.lang.Nullable;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.*;
-import org.springframework.web.servlet.support.ServletUriComponentsBuilder;
-import ru.javawebinar.topjava.View;
+import org.springframework.stereotype.Controller;
import ru.javawebinar.topjava.model.Meal;
+import ru.javawebinar.topjava.service.MealService;
import ru.javawebinar.topjava.to.MealTo;
+import ru.javawebinar.topjava.util.MealsUtil;
+import ru.javawebinar.topjava.web.SecurityUtil;
-import java.net.URI;
import java.time.LocalDate;
import java.time.LocalTime;
import java.util.List;
-@RestController
-@RequestMapping(value = MealRestController.REST_URL, produces = MediaType.APPLICATION_JSON_VALUE)
-public class MealRestController extends AbstractMealController {
- static final String REST_URL = "/rest/profile/meals";
+import static ru.javawebinar.topjava.util.ValidationUtil.assureIdConsistent;
+import static ru.javawebinar.topjava.util.ValidationUtil.checkNew;
- @Override
- @GetMapping("/{id}")
- public Meal get(@PathVariable int id) {
- return super.get(id);
- }
+@Controller
+public class MealRestController {
+ private static final Logger log = LoggerFactory.getLogger(MealRestController.class);
+
+ private final MealService service;
- @Override
- @DeleteMapping("/{id}")
- @ResponseStatus(HttpStatus.NO_CONTENT)
- public void delete(@PathVariable int id) {
- super.delete(id);
+ public MealRestController(MealService service) {
+ this.service = service;
}
- @Override
- @GetMapping
- public List getAll() {
- return super.getAll();
+ public Meal get(int id) {
+ int userId = SecurityUtil.authUserId();
+ log.info("get meal {} for user {}", id, userId);
+ return service.get(id, userId);
}
- @Override
- @PutMapping(value = "/{id}", consumes = MediaType.APPLICATION_JSON_VALUE)
- @ResponseStatus(HttpStatus.NO_CONTENT)
- public void update(@Validated(View.Web.class) @RequestBody Meal meal, @PathVariable int id) {
- super.update(meal, id);
+ public void delete(int id) {
+ int userId = SecurityUtil.authUserId();
+ log.info("delete meal {} for user {}", id, userId);
+ service.delete(id, userId);
}
- @PostMapping(consumes = MediaType.APPLICATION_JSON_VALUE)
- public ResponseEntity createWithLocation(@Validated(View.Web.class) @RequestBody Meal meal) {
- Meal created = super.create(meal);
+ public List getAll() {
+ int userId = SecurityUtil.authUserId();
+ log.info("getAll for user {}", userId);
+ return MealsUtil.getTos(service.getAll(userId), SecurityUtil.authUserCaloriesPerDay());
+ }
- URI uriOfNewResource = ServletUriComponentsBuilder.fromCurrentContextPath()
- .path(REST_URL + "/{id}")
- .buildAndExpand(created.getId()).toUri();
+ public Meal create(Meal meal) {
+ int userId = SecurityUtil.authUserId();
+ checkNew(meal);
+ log.info("create {} for user {}", meal, userId);
+ return service.create(meal, userId);
+ }
- return ResponseEntity.created(uriOfNewResource).body(created);
+ public void update(Meal meal, int id) {
+ int userId = SecurityUtil.authUserId();
+ assureIdConsistent(meal, id);
+ log.info("update {} for user {}", meal, userId);
+ service.update(meal, userId);
}
- @Override
- @GetMapping("/filter")
- public List getBetween(
- @RequestParam @Nullable LocalDate startDate,
- @RequestParam @Nullable LocalTime startTime,
- @RequestParam @Nullable LocalDate endDate,
- @RequestParam @Nullable LocalTime endTime) {
- return super.getBetween(startDate, startTime, endDate, endTime);
+ /**
+ * Filter separately
+ * - by date
+ * - by time for every date
+ *
+ */
+ public List getBetween(@Nullable LocalDate startDate, @Nullable LocalTime startTime,
+ @Nullable LocalDate endDate, @Nullable LocalTime endTime) {
+ int userId = SecurityUtil.authUserId();
+ log.info("getBetween dates({} - {}) time({} - {}) for user {}", startDate, endDate, startTime, endTime, userId);
+
+ List mealsDateFiltered = service.getBetweenInclusive(startDate, endDate, userId);
+ return MealsUtil.getFilteredTos(mealsDateFiltered, SecurityUtil.authUserCaloriesPerDay(), startTime, endTime);
}
-}
+}
\ No newline at end of file
diff --git a/src/main/java/ru/javawebinar/topjava/web/meal/MealUIController.java b/src/main/java/ru/javawebinar/topjava/web/meal/MealUIController.java
deleted file mode 100644
index 28a59fca7..000000000
--- a/src/main/java/ru/javawebinar/topjava/web/meal/MealUIController.java
+++ /dev/null
@@ -1,60 +0,0 @@
-package ru.javawebinar.topjava.web.meal;
-
-import org.springframework.http.HttpStatus;
-import org.springframework.http.MediaType;
-import org.springframework.lang.Nullable;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.*;
-import ru.javawebinar.topjava.View;
-import ru.javawebinar.topjava.model.Meal;
-import ru.javawebinar.topjava.to.MealTo;
-import springfox.documentation.annotations.ApiIgnore;
-
-import java.time.LocalDate;
-import java.time.LocalTime;
-import java.util.List;
-
-@ApiIgnore
-@RestController
-@RequestMapping(value = "/profile/meals", produces = MediaType.APPLICATION_JSON_VALUE)
-public class MealUIController extends AbstractMealController {
-
- @Override
- @GetMapping
- public List getAll() {
- return super.getAll();
- }
-
- @Override
- @GetMapping("/{id}")
- public Meal get(@PathVariable int id) {
- return super.get(id);
- }
-
- @Override
- @DeleteMapping("/{id}")
- @ResponseStatus(HttpStatus.NO_CONTENT)
- public void delete(@PathVariable int id) {
- super.delete(id);
- }
-
- @PostMapping
- @ResponseStatus(HttpStatus.NO_CONTENT)
- public void createOrUpdate(@Validated(View.Web.class) Meal meal) {
- if (meal.isNew()) {
- super.create(meal);
- } else {
- super.update(meal, meal.getId());
- }
- }
-
- @Override
- @GetMapping("/filter")
- public List getBetween(
- @RequestParam @Nullable LocalDate startDate,
- @RequestParam @Nullable LocalTime startTime,
- @RequestParam @Nullable LocalDate endDate,
- @RequestParam @Nullable LocalTime endTime) {
- return super.getBetween(startDate, startTime, endDate, endTime);
- }
-}
\ No newline at end of file
diff --git a/src/main/java/ru/javawebinar/topjava/web/user/AbstractUserController.java b/src/main/java/ru/javawebinar/topjava/web/user/AbstractUserController.java
index 77a09cdc6..0000f1c1e 100644
--- a/src/main/java/ru/javawebinar/topjava/web/user/AbstractUserController.java
+++ b/src/main/java/ru/javawebinar/topjava/web/user/AbstractUserController.java
@@ -3,17 +3,13 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.WebDataBinder;
-import org.springframework.web.bind.annotation.InitBinder;
import ru.javawebinar.topjava.model.User;
import ru.javawebinar.topjava.service.UserService;
-import ru.javawebinar.topjava.to.UserTo;
-import ru.javawebinar.topjava.util.UsersUtil;
import java.util.List;
-import static ru.javawebinar.topjava.util.validation.ValidationUtil.assureIdConsistent;
-import static ru.javawebinar.topjava.util.validation.ValidationUtil.checkIsNew;
+import static ru.javawebinar.topjava.util.ValidationUtil.assureIdConsistent;
+import static ru.javawebinar.topjava.util.ValidationUtil.checkNew;
public abstract class AbstractUserController {
protected final Logger log = LoggerFactory.getLogger(getClass());
@@ -21,14 +17,6 @@ public abstract class AbstractUserController {
@Autowired
private UserService service;
- @Autowired
- private UniqueMailValidator emailValidator;
-
- @InitBinder
- protected void initBinder(WebDataBinder binder) {
- binder.addValidators(emailValidator);
- }
-
public List getAll() {
log.info("getAll");
return service.getAll();
@@ -39,15 +27,9 @@ public User get(int id) {
return service.get(id);
}
- public User create(UserTo userTo) {
- log.info("create {}", userTo);
- checkIsNew(userTo);
- return service.create(UsersUtil.createNewFromTo(userTo));
- }
-
public User create(User user) {
log.info("create {}", user);
- checkIsNew(user);
+ checkNew(user);
return service.create(user);
}
@@ -62,24 +44,8 @@ public void update(User user, int id) {
service.update(user);
}
- public void update(UserTo userTo, int id) {
- log.info("update {} with id={}", userTo, id);
- assureIdConsistent(userTo, id);
- service.update(userTo);
- }
-
public User getByMail(String email) {
log.info("getByEmail {}", email);
return service.getByEmail(email);
}
-
- public User getWithMeals(int id) {
- log.info("getWithMeals {}", id);
- return service.getWithMeals(id);
- }
-
- public void enable(int id, boolean enabled) {
- log.info(enabled ? "enable {}" : "disable {}", id);
- service.enable(id, enabled);
- }
}
\ No newline at end of file
diff --git a/src/main/java/ru/javawebinar/topjava/web/user/AdminRestController.java b/src/main/java/ru/javawebinar/topjava/web/user/AdminRestController.java
index 896b22050..b37a8ed6c 100644
--- a/src/main/java/ru/javawebinar/topjava/web/user/AdminRestController.java
+++ b/src/main/java/ru/javawebinar/topjava/web/user/AdminRestController.java
@@ -1,73 +1,40 @@
package ru.javawebinar.topjava.web.user;
-import org.springframework.http.HttpStatus;
-import org.springframework.http.MediaType;
-import org.springframework.http.ResponseEntity;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.*;
-import org.springframework.web.servlet.support.ServletUriComponentsBuilder;
-import ru.javawebinar.topjava.View;
+import org.springframework.stereotype.Controller;
import ru.javawebinar.topjava.model.User;
-import java.net.URI;
import java.util.List;
-@RestController
-@RequestMapping(value = AdminRestController.REST_URL, produces = MediaType.APPLICATION_JSON_VALUE)
+@Controller
public class AdminRestController extends AbstractUserController {
- static final String REST_URL = "/rest/admin/users";
-
@Override
- @GetMapping
public List getAll() {
return super.getAll();
}
@Override
- @GetMapping("/{id}")
- public User get(@PathVariable int id) {
+ public User get(int id) {
return super.get(id);
}
- @PostMapping(consumes = MediaType.APPLICATION_JSON_VALUE)
- public ResponseEntity createWithLocation(@Validated(View.Web.class) @RequestBody User user) {
- User created = super.create(user);
- URI uriOfNewResource = ServletUriComponentsBuilder.fromCurrentContextPath()
- .path(REST_URL + "/{id}")
- .buildAndExpand(created.getId()).toUri();
- return ResponseEntity.created(uriOfNewResource).body(created);
+ @Override
+ public User create(User user) {
+ return super.create(user);
}
@Override
- @DeleteMapping("/{id}")
- @ResponseStatus(HttpStatus.NO_CONTENT)
- public void delete(@PathVariable int id) {
+ public void delete(int id) {
super.delete(id);
}
@Override
- @PutMapping(value = "/{id}", consumes = MediaType.APPLICATION_JSON_VALUE)
- @ResponseStatus(HttpStatus.NO_CONTENT)
- public void update(@Validated(View.Web.class) @RequestBody User user, @PathVariable int id) {
+ public void update(User user, int id) {
super.update(user, id);
}
@Override
- @GetMapping("/by-email")
- public User getByMail(@RequestParam String email) {
+ public User getByMail(String email) {
return super.getByMail(email);
}
-
- @GetMapping("/{id}/with-meals")
- public User getWithMeals(@PathVariable int id) {
- return super.getWithMeals(id);
- }
-
- @Override
- @PatchMapping("/{id}")
- @ResponseStatus(HttpStatus.NO_CONTENT)
- public void enable(@PathVariable int id, @RequestParam boolean enabled) {
- super.enable(id, enabled);
- }
}
\ No newline at end of file
diff --git a/src/main/java/ru/javawebinar/topjava/web/user/AdminUIController.java b/src/main/java/ru/javawebinar/topjava/web/user/AdminUIController.java
deleted file mode 100644
index af939854a..000000000
--- a/src/main/java/ru/javawebinar/topjava/web/user/AdminUIController.java
+++ /dev/null
@@ -1,53 +0,0 @@
-package ru.javawebinar.topjava.web.user;
-
-import org.springframework.http.HttpStatus;
-import org.springframework.http.MediaType;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.*;
-import ru.javawebinar.topjava.View;
-import ru.javawebinar.topjava.model.User;
-import ru.javawebinar.topjava.to.UserTo;
-import springfox.documentation.annotations.ApiIgnore;
-
-import java.util.List;
-
-@ApiIgnore
-@RestController
-@RequestMapping(value = "/admin/users", produces = MediaType.APPLICATION_JSON_VALUE)
-public class AdminUIController extends AbstractUserController {
-
- @Override
- @GetMapping
- public List getAll() {
- return super.getAll();
- }
-
- @Override
- @GetMapping("/{id}")
- public User get(@PathVariable int id) {
- return super.get(id);
- }
-
- @Override
- @DeleteMapping("/{id}")
- @ResponseStatus(HttpStatus.NO_CONTENT)
- public void delete(@PathVariable int id) {
- super.delete(id);
- }
-
- @PostMapping
- public void createOrUpdate(@Validated(View.Web.class) UserTo userTo) {
- if (userTo.isNew()) {
- super.create(userTo);
- } else {
- super.update(userTo, userTo.id());
- }
- }
-
- @Override
- @PostMapping("/{id}")
- @ResponseStatus(HttpStatus.NO_CONTENT)
- public void enable(@PathVariable int id, @RequestParam boolean enabled) {
- super.enable(id, enabled);
- }
-}
diff --git a/src/main/java/ru/javawebinar/topjava/web/user/ProfileRestController.java b/src/main/java/ru/javawebinar/topjava/web/user/ProfileRestController.java
index c33b8eb25..7d3702c31 100644
--- a/src/main/java/ru/javawebinar/topjava/web/user/ProfileRestController.java
+++ b/src/main/java/ru/javawebinar/topjava/web/user/ProfileRestController.java
@@ -1,58 +1,22 @@
package ru.javawebinar.topjava.web.user;
-import org.springframework.http.HttpStatus;
-import org.springframework.http.MediaType;
-import org.springframework.http.ResponseEntity;
-import org.springframework.security.core.annotation.AuthenticationPrincipal;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.*;
-import org.springframework.web.servlet.support.ServletUriComponentsBuilder;
-import ru.javawebinar.topjava.AuthorizedUser;
-import ru.javawebinar.topjava.View;
+import org.springframework.stereotype.Controller;
import ru.javawebinar.topjava.model.User;
-import ru.javawebinar.topjava.to.UserTo;
-import springfox.documentation.annotations.ApiIgnore;
-import java.net.URI;
+import static ru.javawebinar.topjava.web.SecurityUtil.authUserId;
-@RestController
-@RequestMapping(value = ProfileRestController.REST_URL, produces = MediaType.APPLICATION_JSON_VALUE)
+@Controller
public class ProfileRestController extends AbstractUserController {
- static final String REST_URL = "/rest/profile";
- @GetMapping
- public User get(@AuthenticationPrincipal @ApiIgnore AuthorizedUser authUser) {
- return super.get(authUser.getId());
+ public User get() {
+ return super.get(authUserId());
}
- @DeleteMapping
- @ResponseStatus(HttpStatus.NO_CONTENT)
- public void delete(@AuthenticationPrincipal @ApiIgnore AuthorizedUser authUser) {
- super.delete(authUser.getId());
+ public void delete() {
+ super.delete(authUserId());
}
- @PostMapping(consumes = MediaType.APPLICATION_JSON_VALUE)
- @ResponseStatus(HttpStatus.CREATED)
- public ResponseEntity register(@Validated(View.Web.class) @RequestBody UserTo userTo) {
- User created = super.create(userTo);
- URI uriOfNewResource = ServletUriComponentsBuilder.fromCurrentContextPath()
- .path(REST_URL).build().toUri();
- return ResponseEntity.created(uriOfNewResource).body(created);
- }
-
- @PutMapping(consumes = MediaType.APPLICATION_JSON_VALUE)
- @ResponseStatus(HttpStatus.NO_CONTENT)
- public void update(@Validated(View.Web.class) @RequestBody UserTo userTo, @ApiIgnore @AuthenticationPrincipal AuthorizedUser authUser) {
- super.update(userTo, authUser.getId());
- }
-
- @GetMapping("/text")
- public String testUTF() {
- return "Русский текст";
- }
-
- @GetMapping("/with-meals")
- public User getWithMeals( @ApiIgnore @AuthenticationPrincipal AuthorizedUser authUser) {
- return super.getWithMeals(authUser.getId());
+ public void update(User user) {
+ super.update(user, authUserId());
}
}
\ No newline at end of file
diff --git a/src/main/java/ru/javawebinar/topjava/web/user/ProfileUIController.java b/src/main/java/ru/javawebinar/topjava/web/user/ProfileUIController.java
deleted file mode 100644
index e83ee01d1..000000000
--- a/src/main/java/ru/javawebinar/topjava/web/user/ProfileUIController.java
+++ /dev/null
@@ -1,56 +0,0 @@
-package ru.javawebinar.topjava.web.user;
-
-import org.springframework.security.core.annotation.AuthenticationPrincipal;
-import org.springframework.stereotype.Controller;
-import org.springframework.ui.ModelMap;
-import org.springframework.validation.BindingResult;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.support.SessionStatus;
-import ru.javawebinar.topjava.AuthorizedUser;
-import ru.javawebinar.topjava.View;
-import ru.javawebinar.topjava.to.UserTo;
-import springfox.documentation.annotations.ApiIgnore;
-
-@ApiIgnore
-@Controller
-@RequestMapping("/profile")
-public class ProfileUIController extends AbstractUserController {
-
- @GetMapping
- public String profile(ModelMap model, @AuthenticationPrincipal AuthorizedUser authUser) {
- model.addAttribute("userTo", authUser.getUserTo());
- return "profile";
- }
-
- @PostMapping
- public String updateProfile(@Validated(View.Web.class) UserTo userTo, BindingResult result, SessionStatus status, @AuthenticationPrincipal AuthorizedUser authUser) {
- if (result.hasErrors()) {
- return "profile";
- }
- super.update(userTo, authUser.getId());
- authUser.setTo(userTo);
- status.setComplete();
- return "redirect:/meals";
- }
-
- @GetMapping("/register")
- public String register(ModelMap model) {
- model.addAttribute("userTo", new UserTo());
- model.addAttribute("register", true);
- return "profile";
- }
-
- @PostMapping("/register")
- public String saveRegister(@Validated(View.Web.class) UserTo userTo, BindingResult result, SessionStatus status, ModelMap model) {
- if (result.hasErrors()) {
- model.addAttribute("register", true);
- return "profile";
- }
- super.create(userTo);
- status.setComplete();
- return "redirect:/login?message=app.registered&username=" + userTo.getEmail();
- }
-}
\ No newline at end of file
diff --git a/src/main/java/ru/javawebinar/topjava/web/user/UniqueMailValidator.java b/src/main/java/ru/javawebinar/topjava/web/user/UniqueMailValidator.java
deleted file mode 100644
index d72b8aa5c..000000000
--- a/src/main/java/ru/javawebinar/topjava/web/user/UniqueMailValidator.java
+++ /dev/null
@@ -1,54 +0,0 @@
-package ru.javawebinar.topjava.web.user;
-
-
-import org.springframework.lang.Nullable;
-import org.springframework.stereotype.Component;
-import org.springframework.util.Assert;
-import org.springframework.util.StringUtils;
-import org.springframework.validation.Errors;
-import ru.javawebinar.topjava.HasIdAndEmail;
-import ru.javawebinar.topjava.model.User;
-import ru.javawebinar.topjava.repository.UserRepository;
-import ru.javawebinar.topjava.web.ExceptionInfoHandler;
-import ru.javawebinar.topjava.web.SecurityUtil;
-
-import javax.servlet.http.HttpServletRequest;
-
-@Component
-public class UniqueMailValidator implements org.springframework.validation.Validator {
-
- private final UserRepository repository;
- private final HttpServletRequest request;
-
- public UniqueMailValidator(UserRepository repository, @Nullable HttpServletRequest request) {
- this.repository = repository;
- this.request = request;
- }
-
- @Override
- public boolean supports(Class> clazz) {
- return HasIdAndEmail.class.isAssignableFrom(clazz);
- }
-
- @Override
- public void validate(Object target, Errors errors) {
- HasIdAndEmail user = ((HasIdAndEmail) target);
- if (StringUtils.hasText(user.getEmail())) {
- User dbUser = repository.getByEmail(user.getEmail().toLowerCase());
- if (dbUser != null) {
- Assert.notNull(request, "HttpServletRequest missed");
- if (request.getMethod().equals("PUT") || (request.getMethod().equals("POST") && user.getId() != null)) { // update for REST(PUT) and UI(POST)
- int dbId = dbUser.id();
- // it is ok, if update ourselves
- if (user.getId() != null && dbId == user.id()) return;
-
- // workaround for update with user.id=null in request body
- // ValidationUtil.assureIdConsistent (id setter) called after this validation
- String requestURI = request.getRequestURI();
- if (requestURI.endsWith("/" + dbId) || (dbId == SecurityUtil.get().getId() && requestURI.contains("/profile"))) return;
- }
- errors.rejectValue("email", ExceptionInfoHandler.EXCEPTION_DUPLICATE_EMAIL);
- }
- }
- }
-}
diff --git a/src/main/resources/cache/ehcache.xml b/src/main/resources/cache/ehcache.xml
deleted file mode 100644
index 05589f71f..000000000
--- a/src/main/resources/cache/ehcache.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-
-
-
-
-
-
-
-
-
- 5
-
- 5000
-
-
-
-
-
-
- 1
-
-
-
-
diff --git a/src/main/resources/db/hsqldb.properties b/src/main/resources/db/hsqldb.properties
index 17c03ef4e..6d26d7909 100644
--- a/src/main/resources/db/hsqldb.properties
+++ b/src/main/resources/db/hsqldb.properties
@@ -1,8 +1,9 @@
-#database.url=jdbc:hsqldb:file:D:/temp/topjava
+database.url=jdbc:hsqldb:file:C:/PostgerSQL/13/topjava
+#database.url=jdbc:hsqldb:mem:topjava
-database.url=jdbc:hsqldb:mem:topjava
database.username=sa
database.password=
+database.driverClassName=org.hsqldb.jdbcDriver
database.init=true
jdbc.initLocation=classpath:db/initDB_hsql.sql
diff --git a/src/main/resources/db/initDB.sql b/src/main/resources/db/initDB.sql
index 4bf3d8446..a6ad843ea 100644
--- a/src/main/resources/db/initDB.sql
+++ b/src/main/resources/db/initDB.sql
@@ -1,5 +1,5 @@
-DROP TABLE IF EXISTS user_role;
-DROP TABLE IF EXISTS meal;
+DROP TABLE IF EXISTS user_roles;
+DROP TABLE IF EXISTS meals;
DROP TABLE IF EXISTS users;
DROP SEQUENCE IF EXISTS global_seq;
@@ -15,9 +15,9 @@ CREATE TABLE users
enabled BOOL DEFAULT TRUE NOT NULL,
calories_per_day INTEGER DEFAULT 2000 NOT NULL
);
-CREATE UNIQUE INDEX users_unique_email_idx ON users (email);
+-- CREATE UNIQUE INDEX users_unique_email_idx ON users (email);
-CREATE TABLE user_role
+CREATE TABLE user_roles
(
user_id INTEGER NOT NULL,
role VARCHAR NOT NULL,
@@ -25,7 +25,7 @@ CREATE TABLE user_role
FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE CASCADE
);
-CREATE TABLE meal
+CREATE TABLE meals
(
id INTEGER PRIMARY KEY DEFAULT nextval('global_seq'),
user_id INTEGER NOT NULL,
@@ -34,4 +34,4 @@ CREATE TABLE meal
calories INT NOT NULL,
FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE CASCADE
);
-CREATE UNIQUE INDEX meal_unique_user_datetime_idx ON meal (user_id, date_time);
\ No newline at end of file
+CREATE UNIQUE INDEX meals_unique_user_datetime_idx ON meals (user_id, date_time);
\ No newline at end of file
diff --git a/src/main/resources/db/initDB_hsql.sql b/src/main/resources/db/initDB_hsql.sql
index 9e0e195e6..37f2da1bf 100644
--- a/src/main/resources/db/initDB_hsql.sql
+++ b/src/main/resources/db/initDB_hsql.sql
@@ -1,5 +1,5 @@
-DROP TABLE user_role IF EXISTS;
-DROP TABLE meal IF EXISTS;
+DROP TABLE user_roles IF EXISTS;
+DROP TABLE meals IF EXISTS;
DROP TABLE users IF EXISTS;
DROP SEQUENCE global_seq IF EXISTS;
@@ -18,15 +18,15 @@ CREATE TABLE users
CREATE UNIQUE INDEX users_unique_email_idx
ON USERS (email);
-CREATE TABLE user_role
+CREATE TABLE user_roles
(
user_id INTEGER NOT NULL,
- role VARCHAR(255) NOT NULL,
+ role VARCHAR(255),
CONSTRAINT user_roles_idx UNIQUE (user_id, role),
FOREIGN KEY (user_id) REFERENCES USERS (id) ON DELETE CASCADE
);
-CREATE TABLE meal
+CREATE TABLE meals
(
id INTEGER GENERATED BY DEFAULT AS SEQUENCE GLOBAL_SEQ PRIMARY KEY,
date_time TIMESTAMP NOT NULL,
@@ -35,5 +35,5 @@ CREATE TABLE meal
user_id INTEGER NOT NULL,
FOREIGN KEY (user_id) REFERENCES USERS (id) ON DELETE CASCADE
);
-CREATE UNIQUE INDEX meal_unique_user_datetime_idx
- ON meal (user_id, date_time)
\ No newline at end of file
+CREATE UNIQUE INDEX meals_unique_user_datetime_idx
+ ON meals (user_id, date_time)
\ No newline at end of file
diff --git a/src/main/resources/db/populateDB.sql b/src/main/resources/db/populateDB.sql
index 8d66cc0e5..f29b325f2 100644
--- a/src/main/resources/db/populateDB.sql
+++ b/src/main/resources/db/populateDB.sql
@@ -1,19 +1,18 @@
-DELETE FROM user_role;
-DELETE FROM meal;
+DELETE FROM user_roles;
+DELETE FROM meals;
DELETE FROM users;
ALTER SEQUENCE global_seq RESTART WITH 100000;
-INSERT INTO users (name, email, password, calories_per_day)
-VALUES ('User', 'user@yandex.ru', '{noop}password', 2005),
- ('Admin', 'admin@gmail.com', '{noop}admin', 1900),
- ('Guest', 'guest@gmail.com', '{noop}guest', 2000);
+INSERT INTO users (name, email, password)
+VALUES ('User', 'user@yandex.ru', 'password'),
+ ('Admin', 'admin@gmail.com', 'admin'),
+ ('Guest', 'guest@gmail.com', 'guest');
-INSERT INTO user_role (role, user_id)
+INSERT INTO user_roles (role, user_id)
VALUES ('USER', 100000),
- ('ADMIN', 100001),
- ('USER', 100001);
+ ('ADMIN', 100001);
-INSERT INTO meal (date_time, description, calories, user_id)
+INSERT INTO meals (date_time, description, calories, user_id)
VALUES ('2020-01-30 10:00:00', 'Завтрак', 500, 100000),
('2020-01-30 13:00:00', 'Обед', 1000, 100000),
('2020-01-30 20:00:00', 'Ужин', 500, 100000),
@@ -22,4 +21,4 @@ VALUES ('2020-01-30 10:00:00', 'Завтрак', 500, 100000),
('2020-01-31 13:00:00', 'Обед', 1000, 100000),
('2020-01-31 20:00:00', 'Ужин', 510, 100000),
('2020-01-31 14:00:00', 'Админ ланч', 510, 100001),
- ('2020-01-31 21:00:00', 'Админ ужин', 1500, 100001);
+ ('2020-01-31 21:00:00', 'Админ ужин', 1500, 100001);
\ No newline at end of file
diff --git a/src/main/resources/db/postgres.properties b/src/main/resources/db/postgres.properties
index c56854a9b..cbf1dc815 100644
--- a/src/main/resources/db/postgres.properties
+++ b/src/main/resources/db/postgres.properties
@@ -1,10 +1,14 @@
-database.url=jdbc:postgresql://localhost:5432/topjava
-database.username=user
-database.password=password
+#database.url=jdbc:postgresql://ec2-34-248-169-69.eu-west-1.compute.amazonaws.com:5432/d1ohm99dookbqn?ssl=true&sslmode=require&sslfactory=org.postgresql.ssl.NonValidatingFactory
+#database.username=qhazsiozndzrzc
+#database.password=749f7852a65b5ec57bde033af8fde7f8b782a3ef802921acd4613b133d62559e
+
+database.url=jdbc:postgresql://localhost:5433/topjava
+database.username=postgres
+database.password=
+database.driverClassName=org.postgresql.Driver
database.init=true
jdbc.initLocation=classpath:db/initDB.sql
jpa.showSql=true
hibernate.format_sql=true
-#https://hibernate.atlassian.net/browse/HHH-13280
-hibernate.use_sql_comments=false
\ No newline at end of file
+hibernate.use_sql_comments=true
diff --git a/src/main/resources/db/tomcat.properties b/src/main/resources/db/tomcat.properties
deleted file mode 100644
index e11f0725f..000000000
--- a/src/main/resources/db/tomcat.properties
+++ /dev/null
@@ -1,5 +0,0 @@
-database.init=false
-jdbc.initLocation=classpath:db/initDB.sql
-jpa.showSql=true
-hibernate.format_sql=true
-hibernate.use_sql_comments=true
\ No newline at end of file
diff --git a/src/main/resources/logback.xml b/src/main/resources/logback.xml
index e2b565616..c7bffc3a9 100644
--- a/src/main/resources/logback.xml
+++ b/src/main/resources/logback.xml
@@ -16,18 +16,14 @@
UTF-8
- %d{HH:mm:ss.SSS} %highlight(%-5level) %cyan(%class{50}.%M:%L) - %msg%n
+ %d{HH:mm:ss.SSS} %-5level %class{50}.%M:%L - %msg%n
-
-
-
-
-
\ No newline at end of file
+
diff --git a/src/main/resources/spring/spring-app.xml b/src/main/resources/spring/spring-app.xml
index 3a75ebb82..c32552d11 100644
--- a/src/main/resources/spring/spring-app.xml
+++ b/src/main/resources/spring/spring-app.xml
@@ -1,16 +1,10 @@
-
-
-
+
-
\ No newline at end of file
diff --git a/src/main/resources/spring/spring-cache.xml b/src/main/resources/spring/spring-cache.xml
deleted file mode 100644
index 73325fee0..000000000
--- a/src/main/resources/spring/spring-cache.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/main/resources/spring/spring-db.xml b/src/main/resources/spring/spring-db.xml
index 52c5d0df3..966bf4931 100644
--- a/src/main/resources/spring/spring-db.xml
+++ b/src/main/resources/spring/spring-db.xml
@@ -4,79 +4,69 @@
xmlns:context="http://www.springframework.org/schema/context"
xmlns:jdbc="http://www.springframework.org/schema/jdbc"
xmlns:tx="http://www.springframework.org/schema/tx"
- xmlns:jpa="http://www.springframework.org/schema/data/jpa"
- xmlns:jee="http://www.springframework.org/schema/jee"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc.xsd
- http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
- http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa.xsd
- http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee.xsd">
+ http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ -->
\ No newline at end of file
diff --git a/src/main/resources/spring/spring-mvc.xml b/src/main/resources/spring/spring-mvc.xml
deleted file mode 100644
index 1610c6270..000000000
--- a/src/main/resources/spring/spring-mvc.xml
+++ /dev/null
@@ -1,94 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- text/plain;charset=UTF-8
- text/html;charset=UTF-8
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/main/resources/spring/spring-security.xml b/src/main/resources/spring/spring-security.xml
deleted file mode 100644
index 8988177c4..000000000
--- a/src/main/resources/spring/spring-security.xml
+++ /dev/null
@@ -1,54 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/main/resources/tomcat/context.xml b/src/main/resources/tomcat/context.xml
deleted file mode 100644
index 9311d5904..000000000
--- a/src/main/resources/tomcat/context.xml
+++ /dev/null
@@ -1,57 +0,0 @@
-
-
-
-
-
-
-
- WEB-INF/web.xml
- ${catalina.base}/conf/web.xml
-
-
-
-
-
-
-
-
-
diff --git a/src/main/webapp/WEB-INF/jsp/exception.jsp b/src/main/webapp/WEB-INF/jsp/exception.jsp
deleted file mode 100644
index 00a590c87..000000000
--- a/src/main/webapp/WEB-INF/jsp/exception.jsp
+++ /dev/null
@@ -1,26 +0,0 @@
-<%@ page isErrorPage="true" contentType="text/html" pageEncoding="UTF-8" %>
-<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
-<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
-
-
-
-
-
-
-
-
-
-
-
${status}
- ${typeMessage}
- ${message}
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/main/webapp/WEB-INF/jsp/fragments/bodyHeader.jsp b/src/main/webapp/WEB-INF/jsp/fragments/bodyHeader.jsp
deleted file mode 100644
index b355dc254..000000000
--- a/src/main/webapp/WEB-INF/jsp/fragments/bodyHeader.jsp
+++ /dev/null
@@ -1,51 +0,0 @@
-<%@page contentType="text/html" pageEncoding="UTF-8" %>
-<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
-<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags" %>
-<%@taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
-
-
-
diff --git a/src/main/webapp/WEB-INF/jsp/fragments/footer.jsp b/src/main/webapp/WEB-INF/jsp/fragments/footer.jsp
deleted file mode 100644
index cf1331fd5..000000000
--- a/src/main/webapp/WEB-INF/jsp/fragments/footer.jsp
+++ /dev/null
@@ -1,8 +0,0 @@
-<%@page contentType="text/html" pageEncoding="UTF-8" %>
-<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
-<%--https://getbootstrap.com/docs/4.0/examples/sticky-footer/--%>
-
\ No newline at end of file
diff --git a/src/main/webapp/WEB-INF/jsp/fragments/headTag.jsp b/src/main/webapp/WEB-INF/jsp/fragments/headTag.jsp
deleted file mode 100644
index cc302e868..000000000
--- a/src/main/webapp/WEB-INF/jsp/fragments/headTag.jsp
+++ /dev/null
@@ -1,29 +0,0 @@
-<%@page contentType="text/html" pageEncoding="UTF-8" %>
-<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
-<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- <%--http://stackoverflow.com/a/24070373/548473--%>
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/main/webapp/WEB-INF/jsp/fragments/i18n.jsp b/src/main/webapp/WEB-INF/jsp/fragments/i18n.jsp
deleted file mode 100644
index c0e9db6b2..000000000
--- a/src/main/webapp/WEB-INF/jsp/fragments/i18n.jsp
+++ /dev/null
@@ -1,14 +0,0 @@
-<%@ page contentType="text/html" pageEncoding="UTF-8" %>
-<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
-<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
-
-
\ No newline at end of file
diff --git a/src/main/webapp/WEB-INF/jsp/login.jsp b/src/main/webapp/WEB-INF/jsp/login.jsp
deleted file mode 100644
index 1944ccca3..000000000
--- a/src/main/webapp/WEB-INF/jsp/login.jsp
+++ /dev/null
@@ -1,77 +0,0 @@
-<%@ page contentType="text/html;charset=UTF-8" language="java" %>
-<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
-<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
-<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags" %>
-
-
-
-
-
-
-
-
-
- ${sessionScope["SPRING_SECURITY_LAST_EXCEPTION"].message}
-
-
-
-
-
-
-
»
-
-
-
-
-
-
Spring Security,
-
Spring MVC,
-
Spring Data JPA,
-
Spring Security
- Test,
-
Hibernate ORM,
-
Hibernate Validator,
-
SLF4J,
-
Json Jackson,
-
JSP,
-
JSTL,
-
Apache Tomcat,
-
WebJars,
-
DataTables,
-
EHCACHE,
-
PostgreSQL,
-
HSQLDB,
-
JUnit 5,
-
Hamcrest,
-
AssertJ,
-
jQuery,
-
jQuery plugins,
-
Bootstrap.
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/main/webapp/WEB-INF/jsp/meals.jsp b/src/main/webapp/WEB-INF/jsp/meals.jsp
deleted file mode 100644
index f66313bb3..000000000
--- a/src/main/webapp/WEB-INF/jsp/meals.jsp
+++ /dev/null
@@ -1,117 +0,0 @@
-<%@ page contentType="text/html;charset=UTF-8" %>
-<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
-<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
-<%@ taglib prefix="fn" uri="http://topjava.javawebinar.ru/functions" %>
-
-
-
-
-
-
-
-
-
-
- <%--https://getbootstrap.com/docs/4.0/components/card/--%>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/main/webapp/WEB-INF/jsp/profile.jsp b/src/main/webapp/WEB-INF/jsp/profile.jsp
deleted file mode 100644
index 9b6f6af17..000000000
--- a/src/main/webapp/WEB-INF/jsp/profile.jsp
+++ /dev/null
@@ -1,44 +0,0 @@
-<%@ page contentType="text/html" pageEncoding="UTF-8" %>
-<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
-<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
-<%@ taglib prefix="topjava" tagdir="/WEB-INF/tags" %>
-
-
-
-
-
-
-
-
-
- <%--@elvariable id="userTo" type="ru.javawebinar.topjava.to.UserTo"--%>
-
-
-
${userTo.name}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/main/webapp/WEB-INF/jsp/users.jsp b/src/main/webapp/WEB-INF/jsp/users.jsp
deleted file mode 100644
index 498bc4943..000000000
--- a/src/main/webapp/WEB-INF/jsp/users.jsp
+++ /dev/null
@@ -1,84 +0,0 @@
-<%@ page contentType="text/html;charset=UTF-8" %>
-<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
-<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
-<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/main/webapp/WEB-INF/tags/inputField.tag b/src/main/webapp/WEB-INF/tags/inputField.tag
deleted file mode 100644
index bc481be2d..000000000
--- a/src/main/webapp/WEB-INF/tags/inputField.tag
+++ /dev/null
@@ -1,15 +0,0 @@
-<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
-<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
-<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
-
-<%@ attribute name="name" required="true" description="Name of corresponding property in bean object" %>
-<%@ attribute name="labelCode" required="true" description="Field label" %>
-<%@ attribute name="inputType" required="false" description="Input type" %>
-
-
-
-
\ No newline at end of file
diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml
index 558c28967..bd98d3bf3 100644
--- a/src/main/webapp/WEB-INF/web.xml
+++ b/src/main/webapp/WEB-INF/web.xml
@@ -4,67 +4,26 @@
http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
- TopJava
+ Topjava
-
- spring.profiles.default
- postgres,datajpa
-
-
-
- contextConfigLocation
-
- classpath:spring/spring-app.xml
- classpath:spring/spring-db.xml
-
-
-
-
-
- org.springframework.web.context.ContextLoaderListener
-
- mvc-dispatcher
- org.springframework.web.servlet.DispatcherServlet
-
- contextConfigLocation
- classpath:spring/spring-mvc.xml
-
-
- throwExceptionIfNoHandlerFound
- true
-
- 1
+ userServlet
+ ru.javawebinar.topjava.web.UserServlet
+ 0
- mvc-dispatcher
- /
+ userServlet
+ /users
-
- encodingFilter
- org.springframework.web.filter.CharacterEncodingFilter
-
- encoding
- UTF-8
-
-
- forceEncoding
- true
-
-
-
- encodingFilter
- /*
-
+
+ mealServlet
+ ru.javawebinar.topjava.web.MealServlet
+ 0
+
+
+ mealServlet
+ /meals
+
-
-
- springSecurityFilterChain
- org.springframework.web.filter.DelegatingFilterProxy
-
-
- springSecurityFilterChain
- /*
-
diff --git a/src/main/webapp/css/style.css b/src/main/webapp/css/style.css
new file mode 100644
index 000000000..cfffdcb53
--- /dev/null
+++ b/src/main/webapp/css/style.css
@@ -0,0 +1,24 @@
+dl {
+ background: none repeat scroll 0 0 #FAFAFA;
+ margin: 8px 0;
+ padding: 0;
+}
+
+dt {
+ display: inline-block;
+ width: 170px;
+}
+
+dd {
+ display: inline-block;
+ margin-left: 8px;
+ vertical-align: top;
+}
+
+tr[data-meal-excess="false"] {
+ color: green;
+}
+
+tr[data-meal-excess="true"] {
+ color: red;
+}
diff --git a/src/main/webapp/index.html b/src/main/webapp/index.html
new file mode 100644
index 000000000..57d710a81
--- /dev/null
+++ b/src/main/webapp/index.html
@@ -0,0 +1,18 @@
+
+
+
+ Java Enterprise (Topjava)
+
+
+
+
+
+
+
diff --git a/src/main/webapp/mealForm.jsp b/src/main/webapp/mealForm.jsp
new file mode 100644
index 000000000..98a6f4873
--- /dev/null
+++ b/src/main/webapp/mealForm.jsp
@@ -0,0 +1,34 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+
+
+
+ Meal
+
+
+
+
+
+
+ ${param.action == 'create' ? 'Create meal' : 'Edit meal'}
+
+
+
+
+
diff --git a/src/main/webapp/meals.jsp b/src/main/webapp/meals.jsp
new file mode 100644
index 000000000..7d9bf3e42
--- /dev/null
+++ b/src/main/webapp/meals.jsp
@@ -0,0 +1,66 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
+<%@ taglib prefix="fn" uri="http://topjava.javawebinar.ru/functions" %>
+
+
+ Meals
+
+
+
+
+
+
+ Meals
+
+
+ Add Meal
+
+
+
+
+ | Date |
+ Description |
+ Calories |
+ |
+ |
+
+
+
+
+
+ |
+ <%--${meal.dateTime.toLocalDate()} ${meal.dateTime.toLocalTime()}--%>
+ <%--<%=TimeUtil.toString(meal.getDateTime())%>--%>
+ <%--${fn:replace(meal.dateTime, 'T', ' ')}--%>
+ ${fn:formatDateTime(meal.dateTime)}
+ |
+ ${meal.description} |
+ ${meal.calories} |
+ Update |
+ Delete |
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/webapp/resources/css/style.css b/src/main/webapp/resources/css/style.css
deleted file mode 100644
index 4d989107e..000000000
--- a/src/main/webapp/resources/css/style.css
+++ /dev/null
@@ -1,55 +0,0 @@
-tr[data-meal-excess="false"] {
- color: green;
-}
-
-tr[data-meal-excess="true"] {
- color: red;
-}
-
-.fa {
- cursor: pointer;
-}
-
-tr[data-user-enabled="false"] {
- opacity: 0.3;
-}
-
-.error, .message {
- padding: 10px;
- border-radius: 4px;
- font-size: 16px;
-}
-
-.error {
- color: #a94442;
- background-color: #f2dede;
- border: 1px solid #ebccd1;
-}
-
-.message {
- color: #2f9635;
- background-color: #c6fbc2;
- border: 1px solid #9feba6;
-}
-
-/*https://stackoverflow.com/a/53855189/548473*/
-#noty_layout__bottomRight {
- width: 385px !important;
-}
-
-/*https://getbootstrap.com/docs/4.0/examples/sticky-footer/sticky-footer.css*/
-html {
- position: relative;
- min-height: 100%;
-}
-body {
- margin-bottom: 60px !important; /* Margin bottom by footer height */
-}
-.footer {
- position: absolute;
- bottom: 0;
- width: 100%;
- height: 60px; /* Set the fixed height of the footer here */
- line-height: 60px; /* Vertically center the text there */
- background-color: #f5f5f5;
-}
diff --git a/src/main/webapp/resources/images/icon-meal.png b/src/main/webapp/resources/images/icon-meal.png
deleted file mode 100644
index bb9dc2d73..000000000
Binary files a/src/main/webapp/resources/images/icon-meal.png and /dev/null differ
diff --git a/src/main/webapp/resources/js/topjava.common.js b/src/main/webapp/resources/js/topjava.common.js
deleted file mode 100644
index 9fe11e041..000000000
--- a/src/main/webapp/resources/js/topjava.common.js
+++ /dev/null
@@ -1,119 +0,0 @@
-let form;
-
-function makeEditable(datatableOpts) {
- ctx.datatableApi = $("#datatable").DataTable(
- {
- ...datatableOpts, // https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Operators/Spread_syntax
- "ajax": {
- "url": ctx.ajaxUrl,
- "dataSrc": ""
- },
- "paging": false,
- "info": true,
- "language": {
- "search": i18n["common.search"]
- }
- }
- );
- form = $('#detailsForm');
-
- $(document).ajaxError(function (event, jqXHR, options, jsExc) {
- failNoty(jqXHR);
- });
-
- // solve problem with cache in IE: https://stackoverflow.com/a/4303862/548473
- $.ajaxSetup({cache: false});
-
- var token = $("meta[name='_csrf']").attr("content");
- var header = $("meta[name='_csrf_header']").attr("content");
- $(document).ajaxSend(function (e, xhr, options) {
- xhr.setRequestHeader(header, token);
- });
-}
-
-function add() {
- $("#modalTitle").html(i18n["addTitle"]);
- form.find(":input").val("");
- $("#editRow").modal();
-}
-
-function updateRow(id) {
- form.find(":input").val("");
- $("#modalTitle").html(i18n["editTitle"]);
- $.get(ctx.ajaxUrl + id, function (data) {
- $.each(data, function (key, value) {
- form.find("input[name='" + key + "']").val(value);
- });
- $('#editRow').modal();
- });
-}
-
-function deleteRow(id) {
- if (confirm(i18n['common.confirm'])) {
- $.ajax({
- url: ctx.ajaxUrl + id,
- type: "DELETE"
- }).done(function () {
- ctx.updateTable();
- successNoty("common.deleted");
- });
- }
-}
-
-function updateTableByData(data) {
- ctx.datatableApi.clear().rows.add(data).draw();
-}
-
-function save() {
- $.ajax({
- type: "POST",
- url: ctx.ajaxUrl,
- data: form.serialize()
- }).done(function () {
- $("#editRow").modal("hide");
- ctx.updateTable();
- successNoty("common.saved");
- });
-}
-
-let failedNote;
-
-function closeNoty() {
- if (failedNote) {
- failedNote.close();
- failedNote = undefined;
- }
-}
-
-function successNoty(key) {
- closeNoty();
- new Noty({
- text: ` ${i18n[key]}`,
- type: 'success',
- layout: "bottomRight",
- timeout: 1000
- }).show();
-}
-
-function renderEditBtn(data, type, row) {
- if (type === "display") {
- return ``;
- }
-}
-
-function renderDeleteBtn(data, type, row) {
- if (type === "display") {
- return ``;
- }
-}
-
-function failNoty(jqXHR) {
- closeNoty();
- var errorInfo = jqXHR.responseJSON;
- failedNote = new Noty({
- text: ` ${errorInfo.typeMessage}
${errorInfo.details.join("
")}`,
- type: "error",
- layout: "bottomRight"
- });
- failedNote.show()
-}
\ No newline at end of file
diff --git a/src/main/webapp/resources/js/topjava.meals.js b/src/main/webapp/resources/js/topjava.meals.js
deleted file mode 100644
index 16d991e9c..000000000
--- a/src/main/webapp/resources/js/topjava.meals.js
+++ /dev/null
@@ -1,118 +0,0 @@
-const mealAjaxUrl = "profile/meals/";
-
-// https://stackoverflow.com/a/5064235/548473
-const ctx = {
- ajaxUrl: mealAjaxUrl,
- updateTable: function () {
- $.ajax({
- type: "GET",
- url: mealAjaxUrl + "filter",
- data: $("#filter").serialize()
- }).done(updateTableByData);
- }
-};
-
-function clearFilter() {
- $("#filter")[0].reset();
- $.get(mealAjaxUrl, updateTableByData);
-}
-
-// http://api.jquery.com/jQuery.ajax/#using-converters
-$.ajaxSetup({
- converters: {
- "text json": function (stringData) {
- return JSON.parse(stringData,
- function (key, value) {
- return (key === 'dateTime') ? value.substring(0, 16).replace('T', ' ') : value;
- }
- );
- }
- }
-});
-
-$(function () {
- makeEditable({
- "columns": [
- {
- "data": "dateTime"
- },
- {
- "data": "description"
- },
- {
- "data": "calories"
- },
- {
- "render": renderEditBtn,
- "defaultContent": "",
- "orderable": false
- },
- {
- "render": renderDeleteBtn,
- "defaultContent": "",
- "orderable": false
- }
- ],
- "order": [
- [
- 0,
- "desc"
- ]
- ],
- "createdRow": function (row, data, dataIndex) {
- $(row).attr("data-meal-excess", data.excess);
- }
- });
-
- $.datetimepicker.setLocale(localeCode);
-
-// http://xdsoft.net/jqplugins/datetimepicker/
- var startDate = $('#startDate');
- var endDate = $('#endDate');
- const dateOptions = {
- timepicker: false,
- format: 'Y-m-d',
- formatDate: 'Y-m-d',
- };
- startDate.datetimepicker({
- ...dateOptions,
- onShow: function (ct) {
- this.setOptions({
- maxDate: endDate.val() ? endDate.val() : false
- })
- }
- });
- endDate.datetimepicker({
- ...dateOptions,
- onShow: function (ct) {
- this.setOptions({
- minDate: startDate.val() ? startDate.val() : false
- })
- }
- });
-
- var startTime = $('#startTime');
- var endTime = $('#endTime');
- startTime.datetimepicker({
- datepicker: false,
- format: 'H:i',
- onShow: function (ct) {
- this.setOptions({
- maxTime: endTime.val() ? endTime.val() : false
- })
- }
- });
- endTime.datetimepicker({
- datepicker: false,
- format: 'H:i',
- onShow: function (ct) {
- this.setOptions({
- minTime: startTime.val() ? startTime.val() : false
- })
- }
- });
-
- $('#dateTime').datetimepicker({
- format: 'Y-m-d H:i'
- });
-});
\ No newline at end of file
diff --git a/src/main/webapp/resources/js/topjava.users.js b/src/main/webapp/resources/js/topjava.users.js
deleted file mode 100644
index fb4db9efd..000000000
--- a/src/main/webapp/resources/js/topjava.users.js
+++ /dev/null
@@ -1,86 +0,0 @@
-const userAjaxUrl = "admin/users/";
-
-// https://stackoverflow.com/a/5064235/548473
-const ctx = {
- ajaxUrl: userAjaxUrl,
- updateTable: function () {
- $.get(userAjaxUrl, updateTableByData);
- }
-}
-
-function enable(chkbox, id) {
- const enabled = chkbox.is(":checked");
-// https://stackoverflow.com/a/22213543/548473
- $.ajax({
- url: userAjaxUrl + id,
- type: "POST",
- data: `enabled=${enabled}`
- }).done(function () {
- chkbox.closest("tr").attr("data-user-enabled", enabled);
- successNoty(enabled ? "common.enabled" : "common.disabled");
- }).fail(function () {
- $(chkbox).prop("checked", !enabled);
- });
-}
-
-// $(document).ready(function () {
-$(function () {
- makeEditable({
- "columns": [
- {
- "data": "name"
- },
- {
- "data": "email",
- "render": function (data, type, row) {
- if (type === "display") {
- return `${data}`;
- }
- return data;
- }
- },
- {
- "data": "roles"
- },
- {
- "data": "enabled",
- "render": function (data, type, row) {
- if (type === "display") {
- return ``;
- }
- return data;
- }
- },
- {
- "data": "registered",
- "render": function (date, type, row) {
- if (type === "display") {
- return date.substring(0, 10);
- }
- return date;
- }
- },
- {
- "orderable": false,
- "defaultContent": "",
- "render": renderEditBtn
- },
- {
- "orderable": false,
- "defaultContent": "",
- "render": renderDeleteBtn
- }
- ],
- "order": [
- [
- 0,
- "asc"
- ]
- ],
- "createdRow": function (row, data, dataIndex) {
- if (!data.enabled) {
- $(row).attr("data-user-enabled", false);
- }
- }
- });
-});
\ No newline at end of file
diff --git a/src/main/webapp/users.jsp b/src/main/webapp/users.jsp
new file mode 100644
index 000000000..650c8dda4
--- /dev/null
+++ b/src/main/webapp/users.jsp
@@ -0,0 +1,11 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+
+
+ Users
+
+
+
+
+Users
+
+
\ No newline at end of file
diff --git a/src/test/java/ru/javawebinar/topjava/ActiveDbProfileResolver.java b/src/test/java/ru/javawebinar/topjava/ActiveDbProfileResolver.java
deleted file mode 100644
index 43f143cc7..000000000
--- a/src/test/java/ru/javawebinar/topjava/ActiveDbProfileResolver.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package ru.javawebinar.topjava;
-
-import org.springframework.lang.NonNull;
-import org.springframework.test.context.support.DefaultActiveProfilesResolver;
-
-import java.util.Arrays;
-
-//http://stackoverflow.com/questions/23871255/spring-profiles-simple-example-of-activeprofilesresolver
-public class ActiveDbProfileResolver extends DefaultActiveProfilesResolver {
- @Override
- public @NonNull
- String[] resolve(@NonNull Class> aClass) {
- // https://stackoverflow.com/a/52438829/548473
- String[] activeProfiles = super.resolve(aClass);
- String[] activeProfilesWithDb = Arrays.copyOf(activeProfiles, activeProfiles.length + 1);
- activeProfilesWithDb[activeProfiles.length] = Profiles.getActiveDbProfile();
- return activeProfilesWithDb;
- }
-}
diff --git a/src/test/java/ru/javawebinar/topjava/MatcherFactory.java b/src/test/java/ru/javawebinar/topjava/MatcherFactory.java
index 15e01e155..200e27e5f 100644
--- a/src/test/java/ru/javawebinar/topjava/MatcherFactory.java
+++ b/src/test/java/ru/javawebinar/topjava/MatcherFactory.java
@@ -1,13 +1,6 @@
package ru.javawebinar.topjava;
-import org.springframework.test.web.servlet.MvcResult;
-import org.springframework.test.web.servlet.ResultActions;
-import org.springframework.test.web.servlet.ResultMatcher;
-import ru.javawebinar.topjava.web.json.JsonUtil;
-
-import java.io.UnsupportedEncodingException;
-import java.util.List;
-import java.util.function.BiConsumer;
+import java.util.Arrays;
import static org.assertj.core.api.Assertions.assertThat;
@@ -15,69 +8,30 @@
* Factory for creating test matchers.
*
* Comparing actual and expected objects via AssertJ
- * Support converting json MvcResult to objects for comparation.
*/
public class MatcherFactory {
-
- public static Matcher usingAssertions(Class clazz, BiConsumer assertion, BiConsumer, Iterable> iterableAssertion) {
- return new Matcher<>(clazz, assertion, iterableAssertion);
- }
-
- public static Matcher usingEqualsComparator(Class clazz) {
- return usingAssertions(clazz,
- (a, e) -> assertThat(a).isEqualTo(e),
- (a, e) -> assertThat(a).isEqualTo(e));
- }
-
- public static Matcher usingIgnoringFieldsComparator(Class clazz, String... fieldsToIgnore) {
- return usingAssertions(clazz,
- (a, e) -> assertThat(a).usingRecursiveComparison().ignoringFields(fieldsToIgnore).isEqualTo(e),
- (a, e) -> assertThat(a).usingRecursiveFieldByFieldElementComparatorIgnoringFields(fieldsToIgnore).isEqualTo(e));
+ public static Matcher usingIgnoringFieldsComparator(String... fieldsToIgnore) {
+ return new Matcher<>(fieldsToIgnore);
}
public static class Matcher {
- private final Class clazz;
- private final BiConsumer assertion;
- private final BiConsumer, Iterable> iterableAssertion;
+ private final String[] fieldsToIgnore;
- private Matcher(Class clazz, BiConsumer assertion, BiConsumer, Iterable> iterableAssertion) {
- this.clazz = clazz;
- this.assertion = assertion;
- this.iterableAssertion = iterableAssertion;
+ private Matcher(String... fieldsToIgnore) {
+ this.fieldsToIgnore = fieldsToIgnore;
}
public void assertMatch(T actual, T expected) {
- assertion.accept(actual, expected);
+ assertThat(actual).usingRecursiveComparison().ignoringFields(fieldsToIgnore).isEqualTo(expected);
}
@SafeVarargs
public final void assertMatch(Iterable actual, T... expected) {
- assertMatch(actual, List.of(expected));
+ assertMatch(actual, Arrays.asList(expected));
}
public void assertMatch(Iterable actual, Iterable expected) {
- iterableAssertion.accept(actual, expected);
- }
-
- public ResultMatcher contentJson(T expected) {
- return result -> assertMatch(JsonUtil.readValue(getContent(result), clazz), expected);
- }
-
- @SafeVarargs
- public final ResultMatcher contentJson(T... expected) {
- return contentJson(List.of(expected));
- }
-
- public ResultMatcher contentJson(Iterable expected) {
- return result -> assertMatch(JsonUtil.readValues(getContent(result), clazz), expected);
- }
-
- public T readFromJson(ResultActions action) throws UnsupportedEncodingException {
- return JsonUtil.readValue(getContent(action.andReturn()), clazz);
- }
-
- private static String getContent(MvcResult result) throws UnsupportedEncodingException {
- return result.getResponse().getContentAsString();
+ assertThat(actual).usingRecursiveFieldByFieldElementComparatorIgnoringFields(fieldsToIgnore).isEqualTo(expected);
}
}
}
diff --git a/src/test/java/ru/javawebinar/topjava/MealTestData.java b/src/test/java/ru/javawebinar/topjava/MealTestData.java
index 6ee8b66dd..5190f5082 100644
--- a/src/test/java/ru/javawebinar/topjava/MealTestData.java
+++ b/src/test/java/ru/javawebinar/topjava/MealTestData.java
@@ -1,18 +1,17 @@
package ru.javawebinar.topjava;
import ru.javawebinar.topjava.model.Meal;
-import ru.javawebinar.topjava.to.MealTo;
import java.time.Month;
import java.time.temporal.ChronoUnit;
+import java.util.Arrays;
import java.util.List;
import static java.time.LocalDateTime.of;
import static ru.javawebinar.topjava.model.AbstractBaseEntity.START_SEQ;
public class MealTestData {
- public static final MatcherFactory.Matcher MEAL_MATCHER = MatcherFactory.usingIgnoringFieldsComparator(Meal.class, "user");
- public static MatcherFactory.Matcher TO_MATCHER = MatcherFactory.usingEqualsComparator(MealTo.class);
+ public static final MatcherFactory.Matcher MEAL_MATCHER = MatcherFactory.usingIgnoringFieldsComparator();
public static final int NOT_FOUND = 10;
public static final int MEAL1_ID = START_SEQ + 3;
@@ -28,7 +27,7 @@ public class MealTestData {
public static final Meal adminMeal1 = new Meal(ADMIN_MEAL_ID, of(2020, Month.JANUARY, 31, 14, 0), "Админ ланч", 510);
public static final Meal adminMeal2 = new Meal(ADMIN_MEAL_ID + 1, of(2020, Month.JANUARY, 31, 21, 0), "Админ ужин", 1500);
- public static final List meals = List.of(meal7, meal6, meal5, meal4, meal3, meal2, meal1);
+ public static final List meals = Arrays.asList(meal7, meal6, meal5, meal4, meal3, meal2, meal1);
public static Meal getNew() {
return new Meal(null, of(2020, Month.FEBRUARY, 1, 18, 0), "Созданный ужин", 300);
diff --git a/src/test/java/ru/javawebinar/topjava/SpringMain.java b/src/test/java/ru/javawebinar/topjava/SpringMain.java
index a9e46b208..de77f507c 100644
--- a/src/test/java/ru/javawebinar/topjava/SpringMain.java
+++ b/src/test/java/ru/javawebinar/topjava/SpringMain.java
@@ -14,19 +14,17 @@
import java.util.Arrays;
import java.util.List;
-import static ru.javawebinar.topjava.TestUtil.mockAuthorize;
-import static ru.javawebinar.topjava.UserTestData.user;
-
public class SpringMain {
public static void main(String[] args) {
// java 7 automatic resource management (ARM)
- try (ConfigurableApplicationContext appCtx = new ClassPathXmlApplicationContext("spring/inmemory.xml")) {
+ try (ConfigurableApplicationContext appCtx = new ClassPathXmlApplicationContext("spring/spring-app.xml", "spring/inmemory.xml")) {
System.out.println("Bean definition names: " + Arrays.toString(appCtx.getBeanDefinitionNames()));
+// System.out.println("Bean definition names 1: ");
+// Arrays.stream(appCtx.getBeanDefinitionNames()).sorted().forEach(System.out::println);
AdminRestController adminUserController = appCtx.getBean(AdminRestController.class);
- adminUserController.create(new User(null, "userName", "email@mail.ru", "password", 2000, Role.ADMIN));
- System.out.println();
-
- mockAuthorize(user);
+ // adminUserController.create(new User(null, "userName", "email@mail.ru", "password", Role.USER));
+ adminUserController.getAll().forEach(System.out::println);
+ System.out.println("ln 25 " );
MealRestController mealController = appCtx.getBean(MealRestController.class);
List filteredMealsWithExcess =
diff --git a/src/test/java/ru/javawebinar/topjava/TestUtil.java b/src/test/java/ru/javawebinar/topjava/TestUtil.java
deleted file mode 100644
index 3688cd60e..000000000
--- a/src/test/java/ru/javawebinar/topjava/TestUtil.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package ru.javawebinar.topjava;
-
-import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
-import org.springframework.security.core.context.SecurityContextHolder;
-import org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors;
-import org.springframework.test.web.servlet.request.RequestPostProcessor;
-import ru.javawebinar.topjava.model.User;
-
-public class TestUtil {
-
- public static void mockAuthorize(User user) {
- SecurityContextHolder.getContext().setAuthentication(
- new UsernamePasswordAuthenticationToken(new AuthorizedUser(user), null, user.getRoles()));
- }
-
- public static RequestPostProcessor userHttpBasic(User user) {
- return SecurityMockMvcRequestPostProcessors.httpBasic(user.getEmail(), user.getPassword());
- }
-
- public static RequestPostProcessor userAuth(User user) {
- return SecurityMockMvcRequestPostProcessors.authentication(new UsernamePasswordAuthenticationToken(user.getEmail(), user.getPassword()));
- }
-}
diff --git a/src/test/java/ru/javawebinar/topjava/TimingExtension.java b/src/test/java/ru/javawebinar/topjava/TimingExtension.java
deleted file mode 100644
index cee6ae92c..000000000
--- a/src/test/java/ru/javawebinar/topjava/TimingExtension.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package ru.javawebinar.topjava;
-
-import org.junit.jupiter.api.extension.*;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.util.StopWatch;
-
-public class TimingExtension implements
- BeforeTestExecutionCallback, AfterTestExecutionCallback, BeforeAllCallback, AfterAllCallback {
-
- private static final Logger log = LoggerFactory.getLogger("result");
-
- private StopWatch stopWatch;
-
- @Override
- public void beforeAll(ExtensionContext extensionContext) {
- stopWatch = new StopWatch("Execution time of " + extensionContext.getRequiredTestClass().getSimpleName());
- }
-
- @Override
- public void beforeTestExecution(ExtensionContext extensionContext) {
- String testName = extensionContext.getDisplayName();
- log.info("\nStart " + testName);
- stopWatch.start(testName);
- }
-
- @Override
- public void afterTestExecution(ExtensionContext extensionContext) {
- stopWatch.stop();
- }
-
- @Override
- public void afterAll(ExtensionContext extensionContext) {
- log.info('\n' + stopWatch.prettyPrint() + '\n');
- }
-}
diff --git a/src/test/java/ru/javawebinar/topjava/UserTestData.java b/src/test/java/ru/javawebinar/topjava/UserTestData.java
index d2b8aad6e..bfaba979d 100644
--- a/src/test/java/ru/javawebinar/topjava/UserTestData.java
+++ b/src/test/java/ru/javawebinar/topjava/UserTestData.java
@@ -2,39 +2,23 @@
import ru.javawebinar.topjava.model.Role;
import ru.javawebinar.topjava.model.User;
-import ru.javawebinar.topjava.web.json.JsonUtil;
import java.util.Collections;
import java.util.Date;
-import java.util.List;
-import static org.assertj.core.api.Assertions.assertThat;
-import static ru.javawebinar.topjava.MealTestData.*;
import static ru.javawebinar.topjava.model.AbstractBaseEntity.START_SEQ;
public class UserTestData {
- public static final MatcherFactory.Matcher USER_MATCHER = MatcherFactory.usingIgnoringFieldsComparator(User.class, "registered", "meals", "password");
- public static MatcherFactory.Matcher USER_WITH_MEALS_MATCHER =
- MatcherFactory.usingAssertions(User.class,
-// No need use ignoringAllOverriddenEquals, see https://assertj.github.io/doc/#breaking-changes
- (a, e) -> assertThat(a).usingRecursiveComparison().ignoringFields("registered", "meals.user", "password").isEqualTo(e),
- (a, e) -> {
- throw new UnsupportedOperationException();
- });
+ public static final MatcherFactory.Matcher USER_MATCHER = MatcherFactory.usingIgnoringFieldsComparator("registered", "roles");
public static final int USER_ID = START_SEQ;
public static final int ADMIN_ID = START_SEQ + 1;
public static final int GUEST_ID = START_SEQ + 2;
public static final int NOT_FOUND = 10;
- public static final User user = new User(USER_ID, "User", "user@yandex.ru", "password", 2005, Role.USER);
- public static final User admin = new User(ADMIN_ID, "Admin", "admin@gmail.com", "admin", 1900, Role.ADMIN, Role.USER);
- public static final User guest = new User(GUEST_ID, "Guest", "guest@gmail.com", "guest", 2000);
-
- static {
- user.setMeals(meals);
- admin.setMeals(List.of(adminMeal2, adminMeal1));
- }
+ public static final User user = new User(USER_ID, "User", "user@yandex.ru", "password", Role.USER);
+ public static final User admin = new User(ADMIN_ID, "Admin", "admin@gmail.com", "admin", Role.ADMIN);
+ public static final User guest = new User(GUEST_ID, "Guest", "guest@gmail.com", "guest");
public static User getNew() {
return new User(null, "New", "new@gmail.com", "newPass", 1555, false, new Date(), Collections.singleton(Role.USER));
@@ -42,10 +26,7 @@ public static User getNew() {
public static User getUpdated() {
User updated = new User(user);
-
-// In case of update with user.id=null in body needs workaround
-// ValidationUtil.assureIdConsistent called after validation
-// updated.setEmail("update@gmail.com");
+ updated.setEmail("update@gmail.com");
updated.setName("UpdatedName");
updated.setCaloriesPerDay(330);
updated.setPassword("newPass");
@@ -53,8 +34,4 @@ public static User getUpdated() {
updated.setRoles(Collections.singletonList(Role.ADMIN));
return updated;
}
-
- public static String jsonWithPassword(User user, String passw) {
- return JsonUtil.writeAdditionProps(user, "password", passw);
- }
}
diff --git a/src/test/java/ru/javawebinar/topjava/repository/inmemory/InMemoryMealRepository.java b/src/test/java/ru/javawebinar/topjava/repository/inmemory/InMemoryMealRepository.java
index 5c65ced86..05527fca8 100644
--- a/src/test/java/ru/javawebinar/topjava/repository/inmemory/InMemoryMealRepository.java
+++ b/src/test/java/ru/javawebinar/topjava/repository/inmemory/InMemoryMealRepository.java
@@ -15,6 +15,7 @@
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Predicate;
+import java.util.stream.Collectors;
@Repository
public class InMemoryMealRepository implements MealRepository {
@@ -24,7 +25,7 @@ public class InMemoryMealRepository implements MealRepository {
private final Map> usersMealsMap = new ConcurrentHashMap<>();
{
- var userMeals = new InMemoryBaseRepository();
+ InMemoryBaseRepository userMeals = new InMemoryBaseRepository<>();
MealTestData.meals.forEach(userMeals::put);
usersMealsMap.put(UserTestData.USER_ID, userMeals);
}
@@ -33,7 +34,7 @@ public class InMemoryMealRepository implements MealRepository {
@Override
public Meal save(Meal meal, int userId) {
Objects.requireNonNull(meal, "meal must not be null");
- var meals = usersMealsMap.computeIfAbsent(userId, uId -> new InMemoryBaseRepository<>());
+ InMemoryBaseRepository meals = usersMealsMap.computeIfAbsent(userId, uId -> new InMemoryBaseRepository<>());
return meals.save(meal);
}
@@ -49,13 +50,13 @@ public void preDestroy() {
@Override
public boolean delete(int id, int userId) {
- var meals = usersMealsMap.get(userId);
+ InMemoryBaseRepository meals = usersMealsMap.get(userId);
return meals != null && meals.delete(id);
}
@Override
public Meal get(int id, int userId) {
- var meals = usersMealsMap.get(userId);
+ InMemoryBaseRepository meals = usersMealsMap.get(userId);
return meals == null ? null : meals.get(id);
}
@@ -70,11 +71,11 @@ public List getAll(int userId) {
}
private List filterByPredicate(int userId, Predicate filter) {
- var meals = usersMealsMap.get(userId);
+ InMemoryBaseRepository meals = usersMealsMap.get(userId);
return meals == null ? Collections.emptyList() :
meals.getCollection().stream()
.filter(filter)
.sorted(Comparator.comparing(Meal::getDateTime).reversed())
- .toList();
+ .collect(Collectors.toList());
}
}
\ No newline at end of file
diff --git a/src/test/java/ru/javawebinar/topjava/repository/inmemory/InMemoryUserRepository.java b/src/test/java/ru/javawebinar/topjava/repository/inmemory/InMemoryUserRepository.java
index f3585dfff..7e2fadbf8 100644
--- a/src/test/java/ru/javawebinar/topjava/repository/inmemory/InMemoryUserRepository.java
+++ b/src/test/java/ru/javawebinar/topjava/repository/inmemory/InMemoryUserRepository.java
@@ -7,6 +7,7 @@
import java.util.Comparator;
import java.util.List;
import java.util.Objects;
+import java.util.stream.Collectors;
import static ru.javawebinar.topjava.UserTestData.*;
@@ -26,7 +27,7 @@ public void init() {
public List getAll() {
return getCollection().stream()
.sorted(Comparator.comparing(User::getName).thenComparing(User::getEmail))
- .toList();
+ .collect(Collectors.toList());
}
@Override
diff --git a/src/test/java/ru/javawebinar/topjava/service/AbstractServiceTest.java b/src/test/java/ru/javawebinar/topjava/service/AbstractServiceTest.java
deleted file mode 100644
index b8713e6b9..000000000
--- a/src/test/java/ru/javawebinar/topjava/service/AbstractServiceTest.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package ru.javawebinar.topjava.service;
-
-import org.junit.jupiter.api.extension.ExtendWith;
-import org.springframework.test.context.ActiveProfiles;
-import org.springframework.test.context.jdbc.Sql;
-import org.springframework.test.context.jdbc.SqlConfig;
-import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;
-import ru.javawebinar.topjava.ActiveDbProfileResolver;
-import ru.javawebinar.topjava.TimingExtension;
-
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.assertj.core.api.AssertionsForClassTypes.assertThatExceptionOfType;
-
-@SpringJUnitConfig(locations = {
- "classpath:spring/spring-app.xml",
- "classpath:spring/spring-db.xml"
-})
-//@ExtendWith(SpringExtension.class)
-@ActiveProfiles(resolver = ActiveDbProfileResolver.class)
-@Sql(scripts = "classpath:db/populateDB.sql", config = @SqlConfig(encoding = "UTF-8"), executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD)
-@ExtendWith(TimingExtension.class)
-public abstract class AbstractServiceTest {
-
- // Check root cause with AssertJ: https://github.com/junit-team/junit-framework/issues/2129#issuecomment-565712630
- // Check root cause in JUnit: https://github.com/junit-team/junit4/pull/778
- protected void validateRootCause(Class rootExceptionClass, Runnable runnable) {
- assertThatExceptionOfType(Throwable.class)
- .isThrownBy(runnable::run)
- .satisfiesAnyOf(
- ex -> assertThat(ex).isInstanceOf(rootExceptionClass),
- ex -> assertThat(ex).hasRootCauseInstanceOf(rootExceptionClass));
- }
-}
\ No newline at end of file
diff --git a/src/test/java/ru/javawebinar/topjava/service/AbstractUserServiceTest.java b/src/test/java/ru/javawebinar/topjava/service/AbstractUserServiceTest.java
deleted file mode 100644
index 100d5637e..000000000
--- a/src/test/java/ru/javawebinar/topjava/service/AbstractUserServiceTest.java
+++ /dev/null
@@ -1,95 +0,0 @@
-package ru.javawebinar.topjava.service;
-
-import org.junit.jupiter.api.Test;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.dao.DataAccessException;
-import ru.javawebinar.topjava.model.Role;
-import ru.javawebinar.topjava.model.User;
-import ru.javawebinar.topjava.util.exception.NotFoundException;
-
-import javax.validation.ConstraintViolationException;
-import java.util.Date;
-import java.util.List;
-import java.util.Set;
-
-import static org.junit.jupiter.api.Assertions.*;
-import static ru.javawebinar.topjava.UserTestData.*;
-
-public abstract class AbstractUserServiceTest extends AbstractServiceTest {
-
- @Autowired
- protected UserService service;
-
- @Test
- void create() {
- User created = service.create(getNew());
- int newId = created.id();
- User newUser = getNew();
- newUser.setId(newId);
- USER_MATCHER.assertMatch(created, newUser);
- USER_MATCHER.assertMatch(service.get(newId), newUser);
- }
-
- @Test
- void duplicateMailCreate() {
- assertThrows(DataAccessException.class, () ->
- service.create(new User(null, "Duplicate", "user@yandex.ru", "newPass", 2000, Role.USER)));
- }
-
- @Test
- void delete() {
- service.delete(USER_ID);
- assertThrows(NotFoundException.class, () -> service.get(USER_ID));
- }
-
- @Test
- void deletedNotFound() {
- assertThrows(NotFoundException.class, () -> service.delete(NOT_FOUND));
- }
-
- @Test
- void get() {
- User user = service.get(ADMIN_ID);
- USER_MATCHER.assertMatch(user, admin);
- }
-
- @Test
- void getNotFound() {
- assertThrows(NotFoundException.class, () -> service.get(NOT_FOUND));
- }
-
- @Test
- void getByEmail() {
- User user = service.getByEmail("admin@gmail.com");
- USER_MATCHER.assertMatch(user, admin);
- }
-
- @Test
- void update() {
- User updated = getUpdated();
- service.update(updated);
- USER_MATCHER.assertMatch(service.get(USER_ID), getUpdated());
- }
-
- @Test
- void getAll() {
- List all = service.getAll();
- USER_MATCHER.assertMatch(all, admin, guest, user);
- }
-
- @Test
- void createWithException() throws Exception {
- validateRootCause(ConstraintViolationException.class, () -> service.create(new User(null, " ", "mail@yandex.ru", "password", 2000, Role.USER)));
- validateRootCause(ConstraintViolationException.class, () -> service.create(new User(null, "User", " ", "password", 2000, Role.USER)));
- validateRootCause(ConstraintViolationException.class, () -> service.create(new User(null, "User", "mail@yandex.ru", "password", 9, true, new Date(), Set.of())));
- validateRootCause(ConstraintViolationException.class, () -> service.create(new User(null, "User", "mail@yandex.ru", "password", 10001, true, new Date(), Set.of())));
- }
-
- @Test
- void enable() {
- service.enable(USER_ID, false);
- assertFalse(service.get(USER_ID).isEnabled());
- service.enable(USER_ID, true);
- assertTrue(service.get(USER_ID).isEnabled());
- }
-}
\ No newline at end of file
diff --git a/src/test/java/ru/javawebinar/topjava/service/AbstractMealServiceTest.java b/src/test/java/ru/javawebinar/topjava/service/MealServiceTest.java
similarity index 60%
rename from src/test/java/ru/javawebinar/topjava/service/AbstractMealServiceTest.java
rename to src/test/java/ru/javawebinar/topjava/service/MealServiceTest.java
index 6b00e4481..12a4ba266 100644
--- a/src/test/java/ru/javawebinar/topjava/service/AbstractMealServiceTest.java
+++ b/src/test/java/ru/javawebinar/topjava/service/MealServiceTest.java
@@ -1,45 +1,53 @@
package ru.javawebinar.topjava.service;
-import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.Test;
+import org.junit.Test;
+import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataAccessException;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.jdbc.Sql;
+import org.springframework.test.context.jdbc.SqlConfig;
+import org.springframework.test.context.junit4.SpringRunner;
import ru.javawebinar.topjava.model.Meal;
import ru.javawebinar.topjava.util.exception.NotFoundException;
-import javax.validation.ConstraintViolationException;
import java.time.LocalDate;
import java.time.Month;
-import static java.time.LocalDateTime.of;
-import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.Assert.assertThrows;
import static ru.javawebinar.topjava.MealTestData.*;
import static ru.javawebinar.topjava.UserTestData.ADMIN_ID;
import static ru.javawebinar.topjava.UserTestData.USER_ID;
-public abstract class AbstractMealServiceTest extends AbstractServiceTest {
+@ContextConfiguration({
+ "classpath:spring/spring-app.xml",
+ "classpath:spring/spring-db.xml"
+})
+@RunWith(SpringRunner.class)
+@Sql(scripts = "classpath:db/populateDB.sql", config = @SqlConfig(encoding = "UTF-8"))
+public class MealServiceTest {
@Autowired
- protected MealService service;
+ private MealService service;
@Test
- void delete() {
+ public void delete() {
service.delete(MEAL1_ID, USER_ID);
assertThrows(NotFoundException.class, () -> service.get(MEAL1_ID, USER_ID));
}
@Test
- void deleteNotFound() {
+ public void deleteNotFound() {
assertThrows(NotFoundException.class, () -> service.delete(NOT_FOUND, USER_ID));
}
@Test
- void deleteNotOwn() {
+ public void deleteNotOwn() {
assertThrows(NotFoundException.class, () -> service.delete(MEAL1_ID, ADMIN_ID));
}
@Test
- void create() {
+ public void create() {
Meal created = service.create(getNew(), USER_ID);
int newId = created.id();
Meal newMeal = getNew();
@@ -49,48 +57,47 @@ void create() {
}
@Test
- void duplicateDateTimeCreate() {
+ public void duplicateDateTimeCreate() {
assertThrows(DataAccessException.class, () ->
service.create(new Meal(null, meal1.getDateTime(), "duplicate", 100), USER_ID));
}
@Test
- void get() {
+ public void get() {
Meal actual = service.get(ADMIN_MEAL_ID, ADMIN_ID);
MEAL_MATCHER.assertMatch(actual, adminMeal1);
}
@Test
- void getNotFound() {
+ public void getNotFound() {
assertThrows(NotFoundException.class, () -> service.get(NOT_FOUND, USER_ID));
}
@Test
- void getNotOwn() {
+ public void getNotOwn() {
assertThrows(NotFoundException.class, () -> service.get(MEAL1_ID, ADMIN_ID));
}
@Test
- void update() {
+ public void update() {
Meal updated = getUpdated();
service.update(updated, USER_ID);
MEAL_MATCHER.assertMatch(service.get(MEAL1_ID, USER_ID), getUpdated());
}
@Test
- void updateNotOwn() {
- NotFoundException exception = assertThrows(NotFoundException.class, () -> service.update(getUpdated(), ADMIN_ID));
- Assertions.assertEquals("Not found entity with id=" + MEAL1_ID, exception.getMessage());
+ public void updateNotOwn() {
+ assertThrows(NotFoundException.class, () -> service.update(meal1, ADMIN_ID));
MEAL_MATCHER.assertMatch(service.get(MEAL1_ID, USER_ID), meal1);
}
@Test
- void getAll() {
+ public void getAll() {
MEAL_MATCHER.assertMatch(service.getAll(USER_ID), meals);
}
@Test
- void getBetweenInclusive() {
+ public void getBetweenInclusive() {
MEAL_MATCHER.assertMatch(service.getBetweenInclusive(
LocalDate.of(2020, Month.JANUARY, 30),
LocalDate.of(2020, Month.JANUARY, 30), USER_ID),
@@ -98,15 +105,7 @@ void getBetweenInclusive() {
}
@Test
- void getBetweenWithNullDates() {
+ public void getBetweenWithNullDates() {
MEAL_MATCHER.assertMatch(service.getBetweenInclusive(null, null, USER_ID), meals);
}
-
- @Test
- void createWithException() throws Exception {
- validateRootCause(ConstraintViolationException.class, () -> service.create(new Meal(null, of(2015, Month.JUNE, 1, 18, 0), " ", 300), USER_ID));
- validateRootCause(ConstraintViolationException.class, () -> service.create(new Meal(null, null, "Description", 300), USER_ID));
- validateRootCause(ConstraintViolationException.class, () -> service.create(new Meal(null, of(2015, Month.JUNE, 1, 18, 0), "Description", 9), USER_ID));
- validateRootCause(ConstraintViolationException.class, () -> service.create(new Meal(null, of(2015, Month.JUNE, 1, 18, 0), "Description", 5001), USER_ID));
- }
}
\ No newline at end of file
diff --git a/src/test/java/ru/javawebinar/topjava/service/UserServiceTest.java b/src/test/java/ru/javawebinar/topjava/service/UserServiceTest.java
new file mode 100644
index 000000000..b318695cc
--- /dev/null
+++ b/src/test/java/ru/javawebinar/topjava/service/UserServiceTest.java
@@ -0,0 +1,88 @@
+package ru.javawebinar.topjava.service;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.dao.DataAccessException;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.jdbc.Sql;
+import org.springframework.test.context.jdbc.SqlConfig;
+import org.springframework.test.context.junit4.SpringRunner;
+import ru.javawebinar.topjava.UserTestData;
+import ru.javawebinar.topjava.model.Role;
+import ru.javawebinar.topjava.model.User;
+import ru.javawebinar.topjava.util.exception.NotFoundException;
+
+import java.util.List;
+
+import static org.junit.Assert.assertThrows;
+import static ru.javawebinar.topjava.UserTestData.*;
+
+@ContextConfiguration({
+ "classpath:spring/spring-app.xml",
+ "classpath:spring/spring-db.xml"
+})
+@RunWith(SpringRunner.class)
+@Sql(scripts = "classpath:db/populateDB.sql", config = @SqlConfig(encoding = "UTF-8"))
+public class UserServiceTest {
+
+ @Autowired
+ private UserService service;
+
+ @Test
+ public void create() {
+ User created = service.create(getNew());
+ int newId = created.id();
+ User newUser = getNew();
+ newUser.setId(newId);
+ USER_MATCHER.assertMatch(created, newUser);
+ USER_MATCHER.assertMatch(service.get(newId), newUser);
+ }
+
+ @Test
+ public void duplicateMailCreate() {
+ assertThrows(DataAccessException.class, () ->
+ service.create(new User(null, "Duplicate", "user@yandex.ru", "newPass", Role.USER)));
+ }
+
+ @Test
+ public void delete() {
+ service.delete(USER_ID);
+ assertThrows(NotFoundException.class, () -> service.get(USER_ID));
+ }
+
+ @Test
+ public void deletedNotFound() {
+ assertThrows(NotFoundException.class, () -> service.delete(NOT_FOUND));
+ }
+
+ @Test
+ public void get() {
+ User user = service.get(USER_ID);
+ USER_MATCHER.assertMatch(user, UserTestData.user);
+ }
+
+ @Test
+ public void getNotFound() {
+ assertThrows(NotFoundException.class, () -> service.get(NOT_FOUND));
+ }
+
+ @Test
+ public void getByEmail() {
+ User user = service.getByEmail("admin@gmail.com");
+ USER_MATCHER.assertMatch(user, admin);
+ }
+
+ @Test
+ public void update() {
+ User updated = getUpdated();
+ service.update(updated);
+ USER_MATCHER.assertMatch(service.get(USER_ID), getUpdated());
+ }
+
+ @Test
+ public void getAll() {
+ List all = service.getAll();
+ USER_MATCHER.assertMatch(all, admin, guest, user);
+ }
+}
\ No newline at end of file
diff --git a/src/test/java/ru/javawebinar/topjava/service/datajpa/DataJpaMealServiceTest.java b/src/test/java/ru/javawebinar/topjava/service/datajpa/DataJpaMealServiceTest.java
deleted file mode 100644
index 161c93fb5..000000000
--- a/src/test/java/ru/javawebinar/topjava/service/datajpa/DataJpaMealServiceTest.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package ru.javawebinar.topjava.service.datajpa;
-
-import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.Test;
-import org.springframework.test.context.ActiveProfiles;
-import ru.javawebinar.topjava.MealTestData;
-import ru.javawebinar.topjava.model.Meal;
-import ru.javawebinar.topjava.service.AbstractMealServiceTest;
-import ru.javawebinar.topjava.util.exception.NotFoundException;
-
-import static ru.javawebinar.topjava.MealTestData.*;
-import static ru.javawebinar.topjava.Profiles.DATAJPA;
-import static ru.javawebinar.topjava.UserTestData.*;
-
-@ActiveProfiles(DATAJPA)
-class DataJpaMealServiceTest extends AbstractMealServiceTest {
- @Test
- void getWithUser() {
- Meal adminMeal = service.getWithUser(ADMIN_MEAL_ID, ADMIN_ID);
- MEAL_MATCHER.assertMatch(adminMeal, adminMeal1);
- USER_MATCHER.assertMatch(adminMeal.getUser(), admin);
- }
-
- @Test
- void getWithUserNotFound() {
- Assertions.assertThrows(NotFoundException.class,
- () -> service.getWithUser(MealTestData.NOT_FOUND, ADMIN_ID));
- }
-}
diff --git a/src/test/java/ru/javawebinar/topjava/service/datajpa/DataJpaUserServiceTest.java b/src/test/java/ru/javawebinar/topjava/service/datajpa/DataJpaUserServiceTest.java
deleted file mode 100644
index 3638e07e9..000000000
--- a/src/test/java/ru/javawebinar/topjava/service/datajpa/DataJpaUserServiceTest.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package ru.javawebinar.topjava.service.datajpa;
-
-import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.Test;
-import org.springframework.test.context.ActiveProfiles;
-import ru.javawebinar.topjava.model.User;
-import ru.javawebinar.topjava.service.AbstractUserServiceTest;
-import ru.javawebinar.topjava.util.exception.NotFoundException;
-
-import static ru.javawebinar.topjava.Profiles.DATAJPA;
-import static ru.javawebinar.topjava.UserTestData.*;
-
-@ActiveProfiles(DATAJPA)
-class DataJpaUserServiceTest extends AbstractUserServiceTest {
- @Test
- void getWithMeals() {
- User actual = service.getWithMeals(ADMIN_ID);
- USER_WITH_MEALS_MATCHER.assertMatch(actual, admin);
- }
-
- @Test
- void getWithMealsNotFound() {
- Assertions.assertThrows(NotFoundException.class,
- () -> service.getWithMeals(NOT_FOUND));
- }
-}
\ No newline at end of file
diff --git a/src/test/java/ru/javawebinar/topjava/service/jdbc/JdbcMealServiceTest.java b/src/test/java/ru/javawebinar/topjava/service/jdbc/JdbcMealServiceTest.java
deleted file mode 100644
index aef588264..000000000
--- a/src/test/java/ru/javawebinar/topjava/service/jdbc/JdbcMealServiceTest.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package ru.javawebinar.topjava.service.jdbc;
-
-import org.springframework.test.context.ActiveProfiles;
-import ru.javawebinar.topjava.service.AbstractMealServiceTest;
-
-import static ru.javawebinar.topjava.Profiles.JDBC;
-
-@ActiveProfiles(JDBC)
-class JdbcMealServiceTest extends AbstractMealServiceTest {
-}
\ No newline at end of file
diff --git a/src/test/java/ru/javawebinar/topjava/service/jdbc/JdbcUserServiceTest.java b/src/test/java/ru/javawebinar/topjava/service/jdbc/JdbcUserServiceTest.java
deleted file mode 100644
index 62ca7668c..000000000
--- a/src/test/java/ru/javawebinar/topjava/service/jdbc/JdbcUserServiceTest.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package ru.javawebinar.topjava.service.jdbc;
-
-import org.springframework.test.context.ActiveProfiles;
-import ru.javawebinar.topjava.service.AbstractUserServiceTest;
-
-import static ru.javawebinar.topjava.Profiles.JDBC;
-
-@ActiveProfiles(JDBC)
-class JdbcUserServiceTest extends AbstractUserServiceTest {
-}
\ No newline at end of file
diff --git a/src/test/java/ru/javawebinar/topjava/service/jpa/JpaMealServiceTest.java b/src/test/java/ru/javawebinar/topjava/service/jpa/JpaMealServiceTest.java
deleted file mode 100644
index aaf5dcda9..000000000
--- a/src/test/java/ru/javawebinar/topjava/service/jpa/JpaMealServiceTest.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package ru.javawebinar.topjava.service.jpa;
-
-import org.springframework.test.context.ActiveProfiles;
-import ru.javawebinar.topjava.service.AbstractMealServiceTest;
-
-import static ru.javawebinar.topjava.Profiles.JPA;
-
-@ActiveProfiles(JPA)
-class JpaMealServiceTest extends AbstractMealServiceTest {
-}
\ No newline at end of file
diff --git a/src/test/java/ru/javawebinar/topjava/service/jpa/JpaUserServiceTest.java b/src/test/java/ru/javawebinar/topjava/service/jpa/JpaUserServiceTest.java
deleted file mode 100644
index 6d1cd9154..000000000
--- a/src/test/java/ru/javawebinar/topjava/service/jpa/JpaUserServiceTest.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package ru.javawebinar.topjava.service.jpa;
-
-import org.springframework.test.context.ActiveProfiles;
-import ru.javawebinar.topjava.service.AbstractUserServiceTest;
-
-import static ru.javawebinar.topjava.Profiles.JPA;
-
-@ActiveProfiles(JPA)
-class JpaUserServiceTest extends AbstractUserServiceTest {
-}
\ No newline at end of file
diff --git a/src/test/java/ru/javawebinar/topjava/web/AbstractControllerTest.java b/src/test/java/ru/javawebinar/topjava/web/AbstractControllerTest.java
deleted file mode 100644
index 962f6ba39..000000000
--- a/src/test/java/ru/javawebinar/topjava/web/AbstractControllerTest.java
+++ /dev/null
@@ -1,85 +0,0 @@
-package ru.javawebinar.topjava.web;
-
-import org.junit.jupiter.api.Assumptions;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.support.MessageSourceAccessor;
-import org.springframework.core.env.Environment;
-import org.springframework.test.context.ActiveProfiles;
-import org.springframework.test.context.junit.jupiter.web.SpringJUnitWebConfig;
-import org.springframework.test.web.servlet.MockMvc;
-import org.springframework.test.web.servlet.ResultActions;
-import org.springframework.test.web.servlet.ResultMatcher;
-import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder;
-import org.springframework.test.web.servlet.setup.MockMvcBuilders;
-import org.springframework.transaction.annotation.Transactional;
-import org.springframework.web.context.WebApplicationContext;
-import org.springframework.web.filter.CharacterEncodingFilter;
-import ru.javawebinar.topjava.ActiveDbProfileResolver;
-import ru.javawebinar.topjava.Profiles;
-import ru.javawebinar.topjava.util.exception.ErrorType;
-
-import javax.annotation.PostConstruct;
-import java.util.Locale;
-
-import static org.springframework.security.test.web.servlet.setup.SecurityMockMvcConfigurers.springSecurity;
-import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
-
-
-@SpringJUnitWebConfig(locations = {
- "classpath:spring/spring-app.xml",
- "classpath:spring/spring-mvc.xml",
- "classpath:spring/spring-db.xml"
-})
-//@WebAppConfiguration
-//@ExtendWith(SpringExtension.class)
-@Transactional
-@ActiveProfiles(resolver = ActiveDbProfileResolver.class, profiles = Profiles.REPOSITORY_IMPLEMENTATION)
-public abstract class AbstractControllerTest {
- private static final Locale RU_LOCALE = new Locale("ru");
- private static final CharacterEncodingFilter CHARACTER_ENCODING_FILTER = new CharacterEncodingFilter();
-
- static {
- CHARACTER_ENCODING_FILTER.setEncoding("UTF-8");
- CHARACTER_ENCODING_FILTER.setForceEncoding(true);
- }
-
- private MockMvc mockMvc;
-
- @Autowired
- private Environment env;
-
- @Autowired
- private WebApplicationContext webApplicationContext;
-
- @Autowired
- protected MessageSourceAccessor messageSourceAccessor;
-
- protected void assumeDataJpa() {
- Assumptions.assumeTrue(env.acceptsProfiles(org.springframework.core.env.Profiles.of(Profiles.DATAJPA)), "DATA-JPA only");
- }
-
- @PostConstruct
- private void postConstruct() {
- mockMvc = MockMvcBuilders
- .webAppContextSetup(webApplicationContext)
- .addFilter(CHARACTER_ENCODING_FILTER)
- .apply(springSecurity())
- .build();
- }
-
- protected ResultActions perform(MockHttpServletRequestBuilder builder) throws Exception {
- return mockMvc.perform(builder);
- }
-
- private String getMessage(String code) {
- return messageSourceAccessor.getMessage(code, RU_LOCALE);
- }
-
- protected ResultMatcher errorType(ErrorType type) {
- return jsonPath("$.type").value(type.name());
- }
-
- protected ResultMatcher detailMessage(String code) {
- return jsonPath("$.details").value(getMessage(code));
- }
-}
diff --git a/src/test/java/ru/javawebinar/topjava/web/ResourceControllerTest.java b/src/test/java/ru/javawebinar/topjava/web/ResourceControllerTest.java
deleted file mode 100644
index 244399662..000000000
--- a/src/test/java/ru/javawebinar/topjava/web/ResourceControllerTest.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package ru.javawebinar.topjava.web;
-
-import org.junit.jupiter.api.Test;
-import org.springframework.http.MediaType;
-
-import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
-import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
-import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
-import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
-
-class ResourceControllerTest extends AbstractControllerTest {
-
- @Test
- void resources() throws Exception {
- perform(get("/resources/css/style.css"))
- .andDo(print())
- .andExpect(content().contentTypeCompatibleWith(MediaType.valueOf("text/css")))
- .andExpect(status().isOk());
- }
-}
\ No newline at end of file
diff --git a/src/test/java/ru/javawebinar/topjava/web/RootControllerTest.java b/src/test/java/ru/javawebinar/topjava/web/RootControllerTest.java
deleted file mode 100644
index c200fb4e9..000000000
--- a/src/test/java/ru/javawebinar/topjava/web/RootControllerTest.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package ru.javawebinar.topjava.web;
-
-import org.junit.jupiter.api.Test;
-
-import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
-import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
-import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
-import static ru.javawebinar.topjava.TestUtil.userAuth;
-import static ru.javawebinar.topjava.UserTestData.admin;
-import static ru.javawebinar.topjava.UserTestData.user;
-
-class RootControllerTest extends AbstractControllerTest {
-
- @Test
- void getUsers() throws Exception {
- perform(get("/users")
- .with(userAuth(admin)))
- .andDo(print())
- .andExpect(status().isOk())
- .andExpect(view().name("users"))
- .andExpect(forwardedUrl("/WEB-INF/jsp/users.jsp"));
- }
-
- @Test
- void unAuth() throws Exception {
- perform(get("/users"))
- .andDo(print())
- .andExpect(status().is3xxRedirection())
- .andExpect(redirectedUrl("http://localhost/login"));
- }
-
- @Test
- void getMeals() throws Exception {
- perform(get("/meals")
- .with(userAuth(user)))
- .andDo(print())
- .andExpect(status().isOk())
- .andExpect(view().name("meals"))
- .andExpect(forwardedUrl("/WEB-INF/jsp/meals.jsp"));
- }
-}
\ No newline at end of file
diff --git a/src/test/java/ru/javawebinar/topjava/web/json/JsonUtilTest.java b/src/test/java/ru/javawebinar/topjava/web/json/JsonUtilTest.java
deleted file mode 100644
index d1a7a5d6c..000000000
--- a/src/test/java/ru/javawebinar/topjava/web/json/JsonUtilTest.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package ru.javawebinar.topjava.web.json;
-
-import org.junit.jupiter.api.Test;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import ru.javawebinar.topjava.model.Meal;
-import ru.javawebinar.topjava.model.User;
-
-import java.util.List;
-
-import static org.hamcrest.CoreMatchers.containsString;
-import static org.hamcrest.CoreMatchers.not;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static ru.javawebinar.topjava.MealTestData.*;
-import static ru.javawebinar.topjava.UserTestData.jsonWithPassword;
-import static ru.javawebinar.topjava.UserTestData.user;
-
-class JsonUtilTest {
- private static final Logger log = LoggerFactory.getLogger(JsonUtilTest.class);
-
- @Test
- void readWriteValue() {
- String json = JsonUtil.writeValue(adminMeal1);
- log.info(json);
- Meal meal = JsonUtil.readValue(json, Meal.class);
- MEAL_MATCHER.assertMatch(meal, adminMeal1);
- }
-
- @Test
- void readWriteValues() {
- String json = JsonUtil.writeValue(meals);
- log.info(json);
- List actual = JsonUtil.readValues(json, Meal.class);
- MEAL_MATCHER.assertMatch(actual, meals);
- }
-
- @Test
- void writeOnlyAccess() {
- String json = JsonUtil.writeValue(user);
- System.out.println(json);
- assertThat(json, not(containsString("password")));
- String jsonWithPass = jsonWithPassword(user, "newPass");
- System.out.println(jsonWithPass);
- User user = JsonUtil.readValue(jsonWithPass, User.class);
- assertEquals(user.getPassword(), "newPass");
- }
-}
\ No newline at end of file
diff --git a/src/test/java/ru/javawebinar/topjava/web/meal/MealRestControllerTest.java b/src/test/java/ru/javawebinar/topjava/web/meal/MealRestControllerTest.java
deleted file mode 100644
index c45a1b358..000000000
--- a/src/test/java/ru/javawebinar/topjava/web/meal/MealRestControllerTest.java
+++ /dev/null
@@ -1,198 +0,0 @@
-package ru.javawebinar.topjava.web.meal;
-
-
-import org.junit.jupiter.api.Test;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.MediaType;
-import org.springframework.test.web.servlet.ResultActions;
-import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
-import org.springframework.transaction.annotation.Propagation;
-import org.springframework.transaction.annotation.Transactional;
-import ru.javawebinar.topjava.MealTestData;
-import ru.javawebinar.topjava.model.Meal;
-import ru.javawebinar.topjava.service.MealService;
-import ru.javawebinar.topjava.util.exception.NotFoundException;
-import ru.javawebinar.topjava.web.AbstractControllerTest;
-import ru.javawebinar.topjava.web.json.JsonUtil;
-
-import java.time.LocalDateTime;
-
-import static org.junit.jupiter.api.Assertions.assertThrows;
-import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
-import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
-import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
-import static ru.javawebinar.topjava.MealTestData.*;
-import static ru.javawebinar.topjava.TestUtil.userHttpBasic;
-import static ru.javawebinar.topjava.UserTestData.*;
-import static ru.javawebinar.topjava.util.MealsUtil.createTo;
-import static ru.javawebinar.topjava.util.MealsUtil.getTos;
-import static ru.javawebinar.topjava.util.exception.ErrorType.VALIDATION_ERROR;
-import static ru.javawebinar.topjava.web.ExceptionInfoHandler.EXCEPTION_DUPLICATE_DATETIME;
-
-class MealRestControllerTest extends AbstractControllerTest {
-
- private static final String REST_URL = MealRestController.REST_URL + '/';
-
- @Autowired
- private MealService mealService;
-
- @Test
- void get() throws Exception {
- perform(MockMvcRequestBuilders.get(REST_URL + MEAL1_ID)
- .with(userHttpBasic(user)))
- .andExpect(status().isOk())
- .andDo(print())
- .andExpect(content().contentTypeCompatibleWith(MediaType.APPLICATION_JSON))
- .andExpect(MEAL_MATCHER.contentJson(meal1));
- }
-
- @Test
- void getUnauth() throws Exception {
- perform(MockMvcRequestBuilders.get(REST_URL + MEAL1_ID))
- .andExpect(status().isUnauthorized());
- }
-
- @Test
- void getNotFound() throws Exception {
- perform(MockMvcRequestBuilders.get(REST_URL + ADMIN_MEAL_ID)
- .with(userHttpBasic(user)))
- .andDo(print())
- .andExpect(status().isUnprocessableEntity());
- }
-
- @Test
- void delete() throws Exception {
- perform(MockMvcRequestBuilders.delete(REST_URL + MEAL1_ID)
- .with(userHttpBasic(user)))
- .andExpect(status().isNoContent());
- assertThrows(NotFoundException.class, () -> mealService.get(MEAL1_ID, USER_ID));
- }
-
- @Test
- void deleteNotFound() throws Exception {
- perform(MockMvcRequestBuilders.delete(REST_URL + ADMIN_MEAL_ID)
- .with(userHttpBasic(user)))
- .andExpect(status().isUnprocessableEntity());
- }
-
- @Test
- void update() throws Exception {
- Meal updated = MealTestData.getUpdated();
- perform(MockMvcRequestBuilders.put(REST_URL + MEAL1_ID).contentType(MediaType.APPLICATION_JSON)
- .with(userHttpBasic(user))
- .content(JsonUtil.writeValue(updated)))
- .andExpect(status().isNoContent());
-
- MEAL_MATCHER.assertMatch(mealService.get(MEAL1_ID, USER_ID), updated);
- }
-
- @Test
- void createWithLocation() throws Exception {
- Meal newMeal = MealTestData.getNew();
- ResultActions action = perform(MockMvcRequestBuilders.post(REST_URL)
- .contentType(MediaType.APPLICATION_JSON)
- .with(userHttpBasic(user))
- .content(JsonUtil.writeValue(newMeal)))
- .andExpect(status().isCreated());
-
- Meal created = MEAL_MATCHER.readFromJson(action);
- int newId = created.id();
- newMeal.setId(newId);
- MEAL_MATCHER.assertMatch(created, newMeal);
- MEAL_MATCHER.assertMatch(mealService.get(newId, USER_ID), newMeal);
- }
-
- @Test
- void getAll() throws Exception {
- perform(MockMvcRequestBuilders.get(REST_URL)
- .with(userHttpBasic(user)))
- .andExpect(status().isOk())
- .andDo(print())
- .andExpect(content().contentTypeCompatibleWith(MediaType.APPLICATION_JSON))
- .andExpect(TO_MATCHER.contentJson(getTos(meals, user.getCaloriesPerDay())));
- }
-
- @Test
- void getBetween() throws Exception {
- perform(MockMvcRequestBuilders.get(REST_URL + "filter")
- .param("startDate", "2020-01-30").param("startTime", "07:00")
- .param("endDate", "2020-01-31").param("endTime", "11:00")
- .with(userHttpBasic(user)))
- .andExpect(status().isOk())
- .andDo(print())
- .andExpect(TO_MATCHER.contentJson(createTo(meal5, true), createTo(meal1, false)));
- }
-
- @Test
- void getBetweenAll() throws Exception {
- perform(MockMvcRequestBuilders.get(REST_URL + "filter?startDate=&endTime=")
- .with(userHttpBasic(user)))
- .andExpect(status().isOk())
- .andExpect(TO_MATCHER.contentJson(getTos(meals, user.getCaloriesPerDay())));
- }
-
- @Test
- void createInvalid() throws Exception {
- Meal invalid = new Meal(null, null, "Dummy", 200);
- perform(MockMvcRequestBuilders.post(REST_URL)
- .contentType(MediaType.APPLICATION_JSON)
- .content(JsonUtil.writeValue(invalid))
- .with(userHttpBasic(admin)))
- .andDo(print())
- .andExpect(status().isUnprocessableEntity())
- .andExpect(errorType(VALIDATION_ERROR));
- }
-
- @Test
- void updateInvalid() throws Exception {
- Meal invalid = new Meal(MEAL1_ID, null, null, 6000);
- perform(MockMvcRequestBuilders.put(REST_URL + MEAL1_ID)
- .contentType(MediaType.APPLICATION_JSON)
- .content(JsonUtil.writeValue(invalid))
- .with(userHttpBasic(user)))
- .andDo(print())
- .andExpect(status().isUnprocessableEntity())
- .andExpect(errorType(VALIDATION_ERROR));
- }
-
- @Test
- void updateHtmlUnsafe() throws Exception {
- Meal invalid = new Meal(MEAL1_ID, LocalDateTime.now(), "", 200);
- perform(MockMvcRequestBuilders.put(REST_URL + MEAL1_ID)
- .contentType(MediaType.APPLICATION_JSON)
- .content(JsonUtil.writeValue(invalid))
- .with(userHttpBasic(user)))
- .andDo(print())
- .andExpect(status().isUnprocessableEntity())
- .andExpect(errorType(VALIDATION_ERROR));
- }
-
- @Test
- @Transactional(propagation = Propagation.NEVER)
- void updateDuplicate() throws Exception {
- Meal invalid = new Meal(MEAL1_ID, meal2.getDateTime(), "Dummy", 200);
-
- perform(MockMvcRequestBuilders.put(REST_URL + MEAL1_ID)
- .contentType(MediaType.APPLICATION_JSON)
- .content(JsonUtil.writeValue(invalid))
- .with(userHttpBasic(user)))
- .andDo(print())
- .andExpect(status().isUnprocessableEntity())
- .andExpect(errorType(VALIDATION_ERROR))
- .andExpect(detailMessage(EXCEPTION_DUPLICATE_DATETIME));
- }
-
- @Test
- @Transactional(propagation = Propagation.NEVER)
- void createDuplicate() throws Exception {
- Meal invalid = new Meal(null, adminMeal1.getDateTime(), "Dummy", 200);
- perform(MockMvcRequestBuilders.post(REST_URL)
- .contentType(MediaType.APPLICATION_JSON)
- .content(JsonUtil.writeValue(invalid))
- .with(userHttpBasic(admin)))
- .andDo(print())
- .andExpect(status().isUnprocessableEntity())
- .andExpect(errorType(VALIDATION_ERROR))
- .andExpect(detailMessage(EXCEPTION_DUPLICATE_DATETIME));
- }
-}
\ No newline at end of file
diff --git a/src/test/java/ru/javawebinar/topjava/web/user/AdminRestControllerTest.java b/src/test/java/ru/javawebinar/topjava/web/user/AdminRestControllerTest.java
deleted file mode 100644
index 2abfaa933..000000000
--- a/src/test/java/ru/javawebinar/topjava/web/user/AdminRestControllerTest.java
+++ /dev/null
@@ -1,219 +0,0 @@
-package ru.javawebinar.topjava.web.user;
-
-import org.junit.jupiter.api.Test;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.MediaType;
-import org.springframework.test.web.servlet.ResultActions;
-import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
-import org.springframework.transaction.annotation.Propagation;
-import org.springframework.transaction.annotation.Transactional;
-import ru.javawebinar.topjava.model.Role;
-import ru.javawebinar.topjava.model.User;
-import ru.javawebinar.topjava.service.UserService;
-import ru.javawebinar.topjava.util.exception.NotFoundException;
-import ru.javawebinar.topjava.web.AbstractControllerTest;
-
-import static org.junit.jupiter.api.Assertions.assertFalse;
-import static org.junit.jupiter.api.Assertions.assertThrows;
-import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
-import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
-import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
-import static ru.javawebinar.topjava.TestUtil.userHttpBasic;
-import static ru.javawebinar.topjava.UserTestData.*;
-import static ru.javawebinar.topjava.util.exception.ErrorType.VALIDATION_ERROR;
-import static ru.javawebinar.topjava.web.ExceptionInfoHandler.EXCEPTION_DUPLICATE_EMAIL;
-
-class AdminRestControllerTest extends AbstractControllerTest {
-
- private static final String REST_URL = AdminRestController.REST_URL + '/';
-
- @Autowired
- private UserService userService;
-
- @Test
- void get() throws Exception {
- perform(MockMvcRequestBuilders.get(REST_URL + ADMIN_ID)
- .with(userHttpBasic(admin)))
- .andExpect(status().isOk())
- .andDo(print())
- // https://jira.spring.io/browse/SPR-14472
- .andExpect(content().contentTypeCompatibleWith(MediaType.APPLICATION_JSON))
- .andExpect(USER_MATCHER.contentJson(admin));
- }
-
- @Test
- void getNotFound() throws Exception {
- perform(MockMvcRequestBuilders.get(REST_URL + NOT_FOUND)
- .with(userHttpBasic(admin)))
- .andDo(print())
- .andExpect(status().isUnprocessableEntity());
- }
-
- @Test
- void getByEmail() throws Exception {
- perform(MockMvcRequestBuilders.get(REST_URL + "by-email?email=" + user.getEmail())
- .with(userHttpBasic(admin)))
- .andExpect(status().isOk())
- .andExpect(content().contentTypeCompatibleWith(MediaType.APPLICATION_JSON))
- .andExpect(USER_MATCHER.contentJson(user));
- }
-
- @Test
- void delete() throws Exception {
- perform(MockMvcRequestBuilders.delete(REST_URL + USER_ID)
- .with(userHttpBasic(admin)))
- .andDo(print())
- .andExpect(status().isNoContent());
- assertThrows(NotFoundException.class, () -> userService.get(USER_ID));
- }
-
- @Test
- void deleteNotFound() throws Exception {
- perform(MockMvcRequestBuilders.delete(REST_URL + NOT_FOUND)
- .with(userHttpBasic(admin)))
- .andDo(print())
- .andExpect(status().isUnprocessableEntity());
- }
-
- @Test
- void getUnAuth() throws Exception {
- perform(MockMvcRequestBuilders.get(REST_URL))
- .andExpect(status().isUnauthorized());
- }
-
- @Test
- void getForbidden() throws Exception {
- perform(MockMvcRequestBuilders.get(REST_URL)
- .with(userHttpBasic(user)))
- .andExpect(status().isForbidden());
- }
-
- @Test
- void update() throws Exception {
- User updated = getUpdated();
- updated.setId(null);
- perform(MockMvcRequestBuilders.put(REST_URL + USER_ID)
- .contentType(MediaType.APPLICATION_JSON)
- .with(userHttpBasic(admin))
- .content(jsonWithPassword(updated, updated.getPassword())))
- .andExpect(status().isNoContent());
-
- USER_MATCHER.assertMatch(userService.get(USER_ID), getUpdated());
- }
-
- @Test
- void createWithLocation() throws Exception {
- User newUser = getNew();
- ResultActions action = perform(MockMvcRequestBuilders.post(REST_URL)
- .contentType(MediaType.APPLICATION_JSON)
- .with(userHttpBasic(admin))
- .content(jsonWithPassword(newUser, newUser.getPassword())))
- .andExpect(status().isCreated());
-
- User created = USER_MATCHER.readFromJson(action);
- int newId = created.id();
- newUser.setId(newId);
- USER_MATCHER.assertMatch(created, newUser);
- USER_MATCHER.assertMatch(userService.get(newId), newUser);
- }
-
- @Test
- void getAll() throws Exception {
- perform(MockMvcRequestBuilders.get(REST_URL)
- .with(userHttpBasic(admin)))
- .andExpect(status().isOk())
- .andExpect(content().contentTypeCompatibleWith(MediaType.APPLICATION_JSON))
- .andExpect(USER_MATCHER.contentJson(admin, guest, user));
- }
-
- @Test
- void getWithMeals() throws Exception {
- assumeDataJpa();
- perform(MockMvcRequestBuilders.get(REST_URL + ADMIN_ID + "/with-meals")
- .with(userHttpBasic(admin)))
- .andExpect(status().isOk())
- .andDo(print())
- .andExpect(content().contentTypeCompatibleWith(MediaType.APPLICATION_JSON))
- .andExpect(USER_WITH_MEALS_MATCHER.contentJson(admin));
- }
-
- @Test
- void enable() throws Exception {
- perform(MockMvcRequestBuilders.patch(REST_URL + USER_ID)
- .param("enabled", "false")
- .contentType(MediaType.APPLICATION_JSON)
- .with(userHttpBasic(admin)))
- .andDo(print())
- .andExpect(status().isNoContent());
-
- assertFalse(userService.get(USER_ID).isEnabled());
- }
-
- @Test
- void createInvalid() throws Exception {
- User invalid = new User(null, null, "", "newPass", 7300, Role.USER, Role.ADMIN);
- perform(MockMvcRequestBuilders.post(REST_URL)
- .contentType(MediaType.APPLICATION_JSON)
- .with(userHttpBasic(admin))
- .content(jsonWithPassword(invalid, "newPass")))
- .andDo(print())
- .andExpect(status().isUnprocessableEntity())
- .andExpect(errorType(VALIDATION_ERROR));
- }
-
- @Test
- void updateInvalid() throws Exception {
- User invalid = new User(user);
- invalid.setName("");
- perform(MockMvcRequestBuilders.put(REST_URL + USER_ID)
- .contentType(MediaType.APPLICATION_JSON)
- .with(userHttpBasic(admin))
- .content(jsonWithPassword(invalid, "password")))
- .andDo(print())
- .andExpect(status().isUnprocessableEntity())
- .andExpect(errorType(VALIDATION_ERROR));
- }
-
- @Test
- void updateHtmlUnsafe() throws Exception {
- User updated = new User(user);
- updated.setName("");
- perform(MockMvcRequestBuilders.put(REST_URL + USER_ID)
- .contentType(MediaType.APPLICATION_JSON)
- .with(userHttpBasic(admin))
- .content(jsonWithPassword(updated, "password")))
- .andDo(print())
- .andExpect(status().isUnprocessableEntity())
- .andExpect(errorType(VALIDATION_ERROR));
- }
-
- @Test
- @Transactional(propagation = Propagation.NEVER)
- void updateDuplicate() throws Exception {
- User updated = new User(user);
- updated.setId(null);
- updated.setEmail("admin@gmail.com");
- perform(MockMvcRequestBuilders.put(REST_URL + USER_ID)
- .contentType(MediaType.APPLICATION_JSON)
- .with(userHttpBasic(admin))
- .content(jsonWithPassword(updated, "password")))
- .andDo(print())
- .andExpect(status().isUnprocessableEntity())
- .andExpect(errorType(VALIDATION_ERROR))
- .andExpect(detailMessage(EXCEPTION_DUPLICATE_EMAIL));
- }
-
- @Test
- @Transactional(propagation = Propagation.NEVER)
- void createDuplicate() throws Exception {
- User expected = new User(null, "New", "user@yandex.ru", "newPass", 2300, Role.USER, Role.ADMIN);
- perform(MockMvcRequestBuilders.post(REST_URL)
- .contentType(MediaType.APPLICATION_JSON)
- .with(userHttpBasic(admin))
- .content(jsonWithPassword(expected, "newPass")))
- .andDo(print())
- .andExpect(status().isUnprocessableEntity())
- .andExpect(errorType(VALIDATION_ERROR))
- .andExpect(detailMessage(EXCEPTION_DUPLICATE_EMAIL));
- }
-}
\ No newline at end of file
diff --git a/src/test/java/ru/javawebinar/topjava/web/user/InMemoryAdminRestControllerSpringTest.java b/src/test/java/ru/javawebinar/topjava/web/user/InMemoryAdminRestControllerSpringTest.java
index 7568d0f52..2386eeee4 100644
--- a/src/test/java/ru/javawebinar/topjava/web/user/InMemoryAdminRestControllerSpringTest.java
+++ b/src/test/java/ru/javawebinar/topjava/web/user/InMemoryAdminRestControllerSpringTest.java
@@ -1,18 +1,22 @@
package ru.javawebinar.topjava.web.user;
-import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Ignore;
+import org.junit.Test;
+import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringRunner;
import ru.javawebinar.topjava.repository.inmemory.InMemoryUserRepository;
import ru.javawebinar.topjava.util.exception.NotFoundException;
import static ru.javawebinar.topjava.UserTestData.NOT_FOUND;
import static ru.javawebinar.topjava.UserTestData.USER_ID;
-@SpringJUnitConfig(locations = {"classpath:spring/inmemory.xml"})
-class InMemoryAdminRestControllerSpringTest {
+@ContextConfiguration({"classpath:spring/spring-app.xml", "classpath:spring/inmemory.xml"})
+@RunWith(SpringRunner.class)
+public class InMemoryAdminRestControllerSpringTest {
@Autowired
private AdminRestController controller;
@@ -20,19 +24,19 @@ class InMemoryAdminRestControllerSpringTest {
@Autowired
private InMemoryUserRepository repository;
- @BeforeEach
- void setup() {
+ @Before
+ public void setUp() {
repository.init();
}
@Test
- void delete() {
+ public void delete() {
controller.delete(USER_ID);
- Assertions.assertNull(repository.get(USER_ID));
+ Assert.assertNull(repository.get(USER_ID));
}
@Test
- void deleteNotFound() {
- Assertions.assertThrows(NotFoundException.class, () -> controller.delete(NOT_FOUND));
+ public void deleteNotFound() {
+ Assert.assertThrows(NotFoundException.class, () -> controller.delete(NOT_FOUND));
}
}
\ No newline at end of file
diff --git a/src/test/java/ru/javawebinar/topjava/web/user/InMemoryAdminRestControllerTest.java b/src/test/java/ru/javawebinar/topjava/web/user/InMemoryAdminRestControllerTest.java
index c41fa0e6b..7cc2a833c 100644
--- a/src/test/java/ru/javawebinar/topjava/web/user/InMemoryAdminRestControllerTest.java
+++ b/src/test/java/ru/javawebinar/topjava/web/user/InMemoryAdminRestControllerTest.java
@@ -1,6 +1,6 @@
package ru.javawebinar.topjava.web.user;
-import org.junit.jupiter.api.*;
+import org.junit.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.ConfigurableApplicationContext;
@@ -13,42 +13,40 @@
import static ru.javawebinar.topjava.UserTestData.NOT_FOUND;
import static ru.javawebinar.topjava.UserTestData.USER_ID;
-class InMemoryAdminRestControllerTest {
+public class InMemoryAdminRestControllerTest {
private static final Logger log = LoggerFactory.getLogger(InMemoryAdminRestControllerTest.class);
private static ConfigurableApplicationContext appCtx;
private static AdminRestController controller;
private static InMemoryUserRepository repository;
- @BeforeAll
- static void beforeClass() {
- appCtx = new ClassPathXmlApplicationContext("spring/inmemory.xml");
+ @BeforeClass
+ public static void beforeClass() {
+ appCtx = new ClassPathXmlApplicationContext("spring/spring-app.xml", "spring/inmemory.xml");
log.info("\n{}\n", Arrays.toString(appCtx.getBeanDefinitionNames()));
controller = appCtx.getBean(AdminRestController.class);
repository = appCtx.getBean(InMemoryUserRepository.class);
}
- @AfterAll
- static void afterClass() {
- // May cause during JUnit "Cache is not alive (STATUS_SHUTDOWN)" as JUnit share Spring context for speed
- // http://stackoverflow.com/questions/16281802/ehcache-shutdown-causing-an-exception-while-running-test-suite
- // appCtx.close();
+ @AfterClass
+ public static void afterClass() {
+ appCtx.close();
}
- @BeforeEach
- void setup() {
+ @Before
+ public void setUp() {
// re-initialize
repository.init();
}
@Test
- void delete() {
+ public void delete() {
controller.delete(USER_ID);
- Assertions.assertNull(repository.get(USER_ID));
+ Assert.assertNull(repository.get(USER_ID));
}
@Test
- void deleteNotFound() {
- Assertions.assertThrows(NotFoundException.class, () -> controller.delete(NOT_FOUND));
+ public void deleteNotFound() {
+ Assert.assertThrows(NotFoundException.class, () -> controller.delete(NOT_FOUND));
}
}
\ No newline at end of file
diff --git a/src/test/java/ru/javawebinar/topjava/web/user/ProfileRestControllerTest.java b/src/test/java/ru/javawebinar/topjava/web/user/ProfileRestControllerTest.java
deleted file mode 100644
index bc71318c8..000000000
--- a/src/test/java/ru/javawebinar/topjava/web/user/ProfileRestControllerTest.java
+++ /dev/null
@@ -1,131 +0,0 @@
-package ru.javawebinar.topjava.web.user;
-
-import org.junit.jupiter.api.Test;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.MediaType;
-import org.springframework.test.web.servlet.ResultActions;
-import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
-import org.springframework.transaction.annotation.Propagation;
-import org.springframework.transaction.annotation.Transactional;
-import ru.javawebinar.topjava.model.User;
-import ru.javawebinar.topjava.service.UserService;
-import ru.javawebinar.topjava.to.UserTo;
-import ru.javawebinar.topjava.util.UsersUtil;
-import ru.javawebinar.topjava.web.AbstractControllerTest;
-import ru.javawebinar.topjava.web.json.JsonUtil;
-
-import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
-import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
-import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
-import static ru.javawebinar.topjava.TestUtil.userHttpBasic;
-import static ru.javawebinar.topjava.UserTestData.*;
-import static ru.javawebinar.topjava.util.exception.ErrorType.VALIDATION_ERROR;
-import static ru.javawebinar.topjava.web.ExceptionInfoHandler.EXCEPTION_DUPLICATE_EMAIL;
-import static ru.javawebinar.topjava.web.user.ProfileRestController.REST_URL;
-
-class ProfileRestControllerTest extends AbstractControllerTest {
-
- @Autowired
- private UserService userService;
-
- @Test
- void get() throws Exception {
- perform(MockMvcRequestBuilders.get(REST_URL)
- .with(userHttpBasic(user)))
- .andExpect(status().isOk())
- .andExpect(content().contentTypeCompatibleWith(MediaType.APPLICATION_JSON))
- .andExpect(USER_MATCHER.contentJson(user));
- }
-
- @Test
- void getUnAuth() throws Exception {
- perform(MockMvcRequestBuilders.get(REST_URL))
- .andExpect(status().isUnauthorized());
- }
-
- @Test
- void delete() throws Exception {
- perform(MockMvcRequestBuilders.delete(REST_URL)
- .with(userHttpBasic(user)))
- .andExpect(status().isNoContent());
- USER_MATCHER.assertMatch(userService.getAll(), admin, guest);
- }
-
- @Test
- void register() throws Exception {
- UserTo newTo = new UserTo(null, "newName", "newemail@ya.ru", "newPassword", 1500);
- User newUser = UsersUtil.createNewFromTo(newTo);
- ResultActions action = perform(MockMvcRequestBuilders.post(REST_URL)
- .contentType(MediaType.APPLICATION_JSON)
- .content(JsonUtil.writeValue(newTo)))
- .andDo(print())
- .andExpect(status().isCreated());
-
- User created = USER_MATCHER.readFromJson(action);
- int newId = created.id();
- newUser.setId(newId);
- USER_MATCHER.assertMatch(created, newUser);
- USER_MATCHER.assertMatch(userService.get(newId), newUser);
- }
-
- @Test
- void update() throws Exception {
- // ValidationUtil.assureIdConsistent called after validation, needs workaround
- UserTo updatedTo = new UserTo(null, "newName", "user@yandex.ru", "newPassword", 1500);
- perform(MockMvcRequestBuilders.put(REST_URL).contentType(MediaType.APPLICATION_JSON)
- .with(userHttpBasic(user))
- .content(JsonUtil.writeValue(updatedTo)))
- .andDo(print())
- .andExpect(status().isNoContent());
-
- USER_MATCHER.assertMatch(userService.get(USER_ID), UsersUtil.updateFromTo(new User(user), updatedTo));
- }
-
- @Test
- void getWithMeals() throws Exception {
- assumeDataJpa();
- perform(MockMvcRequestBuilders.get(REST_URL + "/with-meals")
- .with(userHttpBasic(user)))
- .andExpect(status().isOk())
- .andDo(print())
- .andExpect(content().contentTypeCompatibleWith(MediaType.APPLICATION_JSON))
- .andExpect(USER_WITH_MEALS_MATCHER.contentJson(user));
- }
-
- @Test
- void registerInvalid() throws Exception {
- UserTo newTo = new UserTo(null, null, null, null, 1);
- perform(MockMvcRequestBuilders.post(REST_URL)
- .contentType(MediaType.APPLICATION_JSON)
- .content(JsonUtil.writeValue(newTo)))
- .andDo(print())
- .andExpect(status().isUnprocessableEntity())
- .andExpect(errorType(VALIDATION_ERROR));
- }
-
- @Test
- void updateInvalid() throws Exception {
- UserTo updatedTo = new UserTo(null, null, "password", null, 1500);
- perform(MockMvcRequestBuilders.put(REST_URL)
- .contentType(MediaType.APPLICATION_JSON)
- .with(userHttpBasic(user))
- .content(JsonUtil.writeValue(updatedTo)))
- .andDo(print())
- .andExpect(status().isUnprocessableEntity())
- .andExpect(errorType(VALIDATION_ERROR));
- }
-
- @Test
- @Transactional(propagation = Propagation.NEVER)
- void updateDuplicate() throws Exception {
- UserTo updatedTo = new UserTo(null, "newName", "admin@gmail.com", "newPassword", 1500);
-
- perform(MockMvcRequestBuilders.put(REST_URL).contentType(MediaType.APPLICATION_JSON)
- .with(userHttpBasic(user))
- .content(JsonUtil.writeValue(updatedTo)))
- .andDo(print())
- .andExpect(status().isUnprocessableEntity())
- .andExpect(errorType(VALIDATION_ERROR))
- .andExpect(detailMessage(EXCEPTION_DUPLICATE_EMAIL));
- }
-}
\ No newline at end of file
diff --git a/src/test/java/ru/javawebinar/topjava/web/user/VdsRestControllerTest.java b/src/test/java/ru/javawebinar/topjava/web/user/VdsRestControllerTest.java
deleted file mode 100644
index fc05eb977..000000000
--- a/src/test/java/ru/javawebinar/topjava/web/user/VdsRestControllerTest.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package ru.javawebinar.topjava.web.user;
-
-import org.junit.jupiter.api.Test;
-import org.springframework.http.MediaType;
-import org.springframework.test.context.ActiveProfiles;
-import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
-import ru.javawebinar.topjava.UserTestData;
-import ru.javawebinar.topjava.util.exception.ErrorType;
-import ru.javawebinar.topjava.web.AbstractControllerTest;
-
-import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
-import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
-import static ru.javawebinar.topjava.Profiles.VDS;
-import static ru.javawebinar.topjava.TestUtil.userHttpBasic;
-import static ru.javawebinar.topjava.UserTestData.*;
-import static ru.javawebinar.topjava.util.exception.UpdateRestrictionException.EXCEPTION_UPDATE_RESTRICTION;
-
-@ActiveProfiles(VDS)
-class VdsRestControllerTest extends AbstractControllerTest {
-
- private static final String REST_URL = AdminRestController.REST_URL + '/';
-
- @Test
- void delete() throws Exception {
- perform(MockMvcRequestBuilders.delete(REST_URL + USER_ID)
- .with(userHttpBasic(admin)))
- .andDo(print())
- .andExpect(errorType(ErrorType.VALIDATION_ERROR))
- .andExpect(detailMessage(EXCEPTION_UPDATE_RESTRICTION))
- .andExpect(status().isUnprocessableEntity());
- }
-
- @Test
- void update() throws Exception {
- perform(MockMvcRequestBuilders.put(REST_URL + USER_ID)
- .contentType(MediaType.APPLICATION_JSON)
- .with(userHttpBasic(admin))
- .content(UserTestData.jsonWithPassword(user, "password")))
- .andExpect(errorType(ErrorType.VALIDATION_ERROR))
- .andExpect(detailMessage(EXCEPTION_UPDATE_RESTRICTION))
- .andExpect(status().isUnprocessableEntity());
- }
-}
diff --git a/src/test/resources/logback-test.xml b/src/test/resources/logback-test.xml
index 803655475..da4eed7b9 100644
--- a/src/test/resources/logback-test.xml
+++ b/src/test/resources/logback-test.xml
@@ -7,22 +7,12 @@
UTF-8
- %d{HH:mm:ss.SSS} %highlight(%-5level) %cyan(%class{50}.%M:%L) - %msg%n
+ %d{HH:mm:ss.SSS} %-5level %class{50}.%M:%L - %msg%n
-
-
- UTF-8
- %magenta(%msg%n)
-
-
-
-
-
-
-
-
+
+
diff --git a/src/test/resources/spring/inmemory.xml b/src/test/resources/spring/inmemory.xml
index 1207399dd..c6a2710cb 100644
--- a/src/test/resources/spring/inmemory.xml
+++ b/src/test/resources/spring/inmemory.xml
@@ -4,8 +4,4 @@
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
-
-
-
-
\ No newline at end of file
diff --git a/src/test/resources/spring/spring-cache.xml b/src/test/resources/spring/spring-cache.xml
deleted file mode 100644
index 7c9dfda9a..000000000
--- a/src/test/resources/spring/spring-cache.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-
-
-
-
-
-
-
-
- false
-
-
-
-
-
-
\ No newline at end of file