Created
August 5, 2015 18:35
-
-
Save claym/b1d5636211a1b3667819 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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