본문 바로가기
카테고리 없음

TDD Validation 적용

by 쭈잇 2019. 7. 15.

Contents

    반응형

    UserControllerAPI

    package com.cafe24.mysite.controller.api;
    
    import java.util.List;
    
    import javax.validation.Valid;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.http.HttpStatus;
    import org.springframework.http.ResponseEntity;
    import org.springframework.stereotype.Controller;
    import org.springframework.validation.BindingResult;
    import org.springframework.validation.ObjectError;
    import org.springframework.web.bind.annotation.PostMapping;
    import org.springframework.web.bind.annotation.RequestBody;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.bind.annotation.ResponseBody;
    import org.springframework.web.bind.annotation.RestController;
    
    import com.cafe24.mysite.dto.JSONResult;
    import com.cafe24.mysite.service.UserService;
    import com.cafe24.mysite.vo.UserVo;
    
    import io.swagger.annotations.ApiImplicitParam;
    import io.swagger.annotations.ApiImplicitParams;
    import io.swagger.annotations.ApiOperation;
    
    @RestController("userAPIController")
    @RequestMapping("/user/api")
    public class UserController {
    	
    	@Autowired
    	private UserService userService;
    	
    	//@ResponseBody
    	@ApiOperation(value="이메일 존재 여부")
    	@ApiImplicitParams({@ApiImplicitParam(name = "email2", value = "이메일 주소"
    	, required = true, dataType = "string", defaultValue = "") })
    	
    	@RequestMapping(value="/checkemail",method=RequestMethod.GET)
    	public JSONResult checkEmail(@RequestParam(value="email", required=true, defaultValue="") String email) {
    		Boolean exist = userService.existEmail(email);
    		return JSONResult.success(exist);
    	}
    	
    	
    	// responseEntity 응답할때 내용을 조작할 수 있음
    	@PostMapping(value="/join")
    	public ResponseEntity<JSONResult> join(@RequestBody @Valid  UserVo userVo,BindingResult result) {
    		if( result.hasErrors() ) {
    			List<ObjectError> list = result.getAllErrors();
    			for(ObjectError error : list) {
    				System.out.println(error);
    				return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(JSONResult.fail(error.getDefaultMessage()));
    			}
    		}
    		return ResponseEntity.status(HttpStatus.OK).body(JSONResult.success(""));
    	}
    }
    

     

    UserVO 

    package com.cafe24.mysite.vo;
    
    import javax.validation.constraints.Pattern;
    
    import org.hibernate.validator.constraints.Email;
    import org.hibernate.validator.constraints.Length;
    import org.hibernate.validator.constraints.NotEmpty;
    
    public class UserVo {
    	private Long no;
    
    	@NotEmpty
    	@Length(min=2, max=8)
    	private String name;
    
    	@Email
    	@NotEmpty
    	private String email;
    	
    	//@Pattern(regexp="(?=.*[A-Za-z])(?=.*\\d)(?=.*[$@$!%*#?&])[A-Za-z\\d$@$!%*#?&]{8,20}", message="비밀번호는 8자 이상 20자 이하의 알파벳, 숫자, 특수문자를 조합하여 작성해야 합니다.") 
    	@Length(min=8, max=20, message="비밀번호는 8자 이상 20자 이하로 입력해야 합니다.")
    	private String password; //비밀번호
    	
     	private String gender;
    	
    	private String joinDate;
    	
    	public UserVo() {
    	}
    	
    	public  UserVo(String email, String password) {
    		this.email = email;
    		this.password = password;
    	}
    	
    	public Long getNo() {
    		return no;
    	}
    	public void setNo(Long no) {
    		this.no = no;
    	}
    	public String getName() {
    		return name;
    	}
    	public void setName(String name) {
    		this.name = name;
    	}
    	public String getEmail() {
    		return email;
    	}
    	public void setEmail(String email) {
    		this.email = email;
    	}
    	public String getPassword() {
    		return password;
    	}
    	public void setPassword(String password) {
    		this.password = password;
    	}
    	public String getGender() {
    		return gender;
    	}
    	public void setGender(String gender) {
    		this.gender = gender;
    	}
    	public String getJoinDate() {
    		return joinDate;
    	}
    	public void setJoinDate(String joinDate) {
    		this.joinDate = joinDate;
    	}
    	@Override
    	public String toString() {
    		return "UserVo [no=" + no + ", name=" + name + ", email=" + email + ", password=" + password + ", gender="
    				+ gender + ", joinDate=" + joinDate + "]";
    	}
    }
    

     

     

    UserControllerTest

    package com.cafe24.mysite3.controller.api;
    
    import static org.hamcrest.Matchers.hasSize;
    import static org.hamcrest.Matchers.is;
    import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
    import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
    import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
    import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
    
    import org.junit.Before;
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.http.MediaType;
    import org.springframework.test.context.ContextConfiguration;
    import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
    import org.springframework.test.context.web.WebAppConfiguration;
    import org.springframework.test.web.servlet.MockMvc;
    import org.springframework.test.web.servlet.ResultActions;
    import org.springframework.test.web.servlet.setup.MockMvcBuilders;
    import org.springframework.web.context.WebApplicationContext;
    
    import com.cafe24.mysite.config.AppConfig;
    import com.cafe24.mysite.config.TestWebConfig;
    import com.cafe24.mysite.service.GuestbookService2;
    import com.cafe24.mysite.vo.UserVo;
    import com.google.gson.Gson;
    
    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration(classes= {AppConfig.class, TestWebConfig.class})
    @WebAppConfiguration
    public class UserControllerTest {
        private MockMvc mockMvc;
    
        @Autowired
        private WebApplicationContext webApplicationContext;
    
        @Autowired
        private GuestbookService2 guestbookService2;
        // swagger 작업해줘야함
    
        @Before
        public void setup() {
            mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
        }
    
    
        @Test
        public void testUserJoin() throws Exception {
            UserVo userVo=new UserVo();
    
            //1.  Normal User's Join Data
            userVo.setName("안대혁");
            userVo.setEmail("kickscar@gmail.com");
            userVo.setPassword("12345678");
            userVo.setGender("MALE");
    
    
            UserVo userVo2=new UserVo();
            //1.  Invalidation in Name:
            userVo2.setName("안");
            userVo2.setEmail("kickscar@gmail.com");
            userVo2.setPassword("12345678");
            userVo2.setGender("MALE");
    
            ResultActions resultActions = mockMvc 
                    .perform(post("/user/api/join").contentType(MediaType.APPLICATION_JSON).content(new Gson().toJson(userVo2)));
            resultActions.andExpect(status().isBadRequest()).andDo(print())
            .andExpect(jsonPath("$.result",is("fail")));
        } 
    
    }

     

     

    Custom Tag 만들기

    @ValidGender
    private String gender;

     

    반응형