Skip to content

Instantly share code, notes, and snippets.

@claym
Created August 5, 2015 18:35
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save claym/b1d5636211a1b3667819 to your computer and use it in GitHub Desktop.
Save claym/b1d5636211a1b3667819 to your computer and use it in GitHub Desktop.
package demo;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.Collection;
import java.util.Date;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.springframework.hateoas.Link;
import org.springframework.hateoas.MediaTypes;
import org.springframework.hateoas.PagedResources;
import org.springframework.hateoas.Resource;
import org.springframework.hateoas.client.Traverson;
import org.springframework.hateoas.mvc.TypeReferences.PagedResourcesType;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
import org.springframework.web.client.RestTemplate;
import com.google.common.collect.ImmutableMap;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class DatabaseTest {
String baseUri = "http://localhost:8080";
String widgetURI = baseUri + "/widget";
String categoryURI = baseUri + "/category";
@Before
public void setup() throws URISyntaxException {
RestTemplate template = new RestTemplate();
try {
Category cat = template.getForObject(categoryURI + "/1", Category.class, ImmutableMap.of());
log.info("--> Found stuff, skipping");
} catch (Exception e) {
log.info("--> Nothing found, make some objects!");
}
Category cat = new Category("Default", "A default category");
ResponseEntity<Category> catResponse = template.postForEntity(categoryURI, cat, Category.class);
log.info("Category Response: {}", catResponse.getBody());
Assert.assertNotNull(catResponse);
Widget foo = new Widget("Foo", "A widget named Foo");
Widget bar = new Widget("Bar", "A widget named Bar");
ResponseEntity<Widget> fooResponse = template.postForEntity(widgetURI, foo, Widget.class);
Assert.assertNotNull(fooResponse);
log.info("Foo Rseponse: {}", fooResponse.getBody());
ResponseEntity<Widget> barResponse = template.postForEntity(widgetURI, bar, Widget.class);
Assert.assertNotNull(barResponse);
log.info("Bar response {}", barResponse.getBody());
}
@Test
public void createAssociations() throws URISyntaxException {
Traverson tw = new Traverson(new URI(widgetURI + "/1"), MediaTypes.HAL_JSON);
PagedResources<Resource<Widget>> widget0 = tw.follow("self")
.toObject(new PagedResourcesType<Resource<Widget>>() {});
Assert.assertNotNull(widget0);
Traverson tc = new Traverson(new URI(categoryURI + "/1"), MediaTypes.HAL_JSON);
PagedResources<Resource<Category>> category0 = tc.follow("self")
.toObject(new PagedResourcesType<Resource<Category>>() {});
Assert.assertNotNull(category0);
Link widget0link = widget0.getLink("category");
//Link widget0link = widget0.getId();
log.info("Widget {}", widget0link.getHref());
Link category0link = category0.getId();
log.info("Category {}", category0link.getHref());
RestTemplate template = new RestTemplate();
//template.exchange(widget0link.getHref(), HttpMethod.PUT, null, Widget.class,
// ImmutableMap.of("category", category0link));
HttpHeaders reqHeaders = new HttpHeaders();
reqHeaders.add(HttpHeaders.CONTENT_TYPE, new MediaType("text", "uri-list").toString());
HttpEntity<String> reqEntity = new HttpEntity<String>(category0link.getHref(), reqHeaders);
ResponseEntity<String> string = template.exchange(widget0link.getHref(), HttpMethod.PUT, reqEntity, String.class, ImmutableMap.of());
log.info("Returned string: {}" + string);
/**
PagedResources<Resource<Category>> category = tw.follow("self", "category")
.toObject(new PagedResourcesType<Resource<Category>>() {});
Assert.assertNotNull(category.getId());
**/
}
@Test
public void changeValues() throws URISyntaxException {
Traverson tw = new Traverson(new URI(widgetURI + "/2"), MediaTypes.HAL_JSON);
PagedResources<Resource<Widget>> widget2 = tw.follow("self")
.toObject(new PagedResourcesType<Resource<Widget>>() {});
Assert.assertNotNull(widget2);
Link widget2link = widget2.getId();
String newDescription = "A widget named Foo, last updated " + new Date().toString();
HttpEntity<Object> reqEntity = new HttpEntity<Object>(ImmutableMap.of("description", newDescription));
RestTemplate template = new RestTemplate();
template.setRequestFactory(new HttpComponentsClientHttpRequestFactory());
ResponseEntity<Widget> widget = template.exchange(widget2link.getHref(), HttpMethod.PATCH, reqEntity, Widget.class, ImmutableMap.of());
Assert.assertNotNull(widget);
}
@After
public void tearDown() throws URISyntaxException {
if (true) {
return;
}
RestTemplate template = new RestTemplate();
Traverson traverson = new Traverson(new URI(widgetURI), MediaTypes.HAL_JSON);
PagedResources<Resource<Widget>> widgets = traverson.follow("self")
.toObject(new PagedResourcesType<Resource<Widget>>() {
});
Assert.assertNotNull(widgets);
Collection<Resource<Widget>> resources = widgets.getContent();
for (Resource<Widget> res : resources) {
template.delete(res.getLink(Link.REL_SELF).getHref());
}
traverson = new Traverson(new URI(categoryURI), MediaTypes.HAL_JSON);
PagedResources<Resource<Category>> categories = traverson.follow("self")
.toObject(new PagedResourcesType<Resource<Category>>() {
});
Assert.assertNotNull(widgets);
Collection<Resource<Category>> catresources = categories.getContent();
for (Resource<Category> res : catresources) {
template.delete(res.getLink(Link.REL_SELF).getHref());
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment