package io.loli.sc.server.action;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
import io.loli.sc.server.entity.User;
import io.loli.sc.server.service.UserService;
import io.loli.sc.server.service.UserServiceTest;
import javax.inject.Inject;
import org.hamcrest.CustomMatcher;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.http.MediaType;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.AbstractTransactionalJUnit4SpringContextTests;
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.setup.MockMvcBuilders;
import org.springframework.web.context.WebApplicationContext;
/**
*
* User: choco(loli@linux.com) <br/>
* Date: 2014年1月26日 <br/>
* Time: 下午11:23:51 <br/>
*
* @author choco
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:applicationContext.xml" })
@WebAppConfiguration
public class ImageClientUploadTest extends AbstractTransactionalJUnit4SpringContextTests {
private MockMvc mockMvc;
@Inject
private WebApplicationContext wac;
@Before
public void setup() {
this.mockMvc = MockMvcBuilders.webAppContextSetup(this.wac).build();
}
@Inject
private UserService us;
@Test
public void testGetToken() throws Exception {
User user = UserServiceTest.newInstence();
us.save(user);
mockMvc
.perform(
post("/api/token").param("email", user.getEmail()).param("password", user.getPassword())
.accept(MediaType.parseMediaType("application/json;charset=UTF-8"))).andExpect(status().isOk())
.andExpect(content().contentType(MediaType.parseMediaType("application/json;charset=UTF-8")))
.andExpect(jsonPath("$.token").value(
// 匿名内部类,自定义Matcher,判断返回的json文的token属性是否是32个字符长的md5密文
new CustomMatcher<String>("长度为32的字符串") {
public boolean matches(Object object) {
return ((object instanceof String) && !((String) object).isEmpty() && ((String) object)
.length() == 32);
}
}));
}
}