myfeed.user.ApiDocumentation.java Source code

Java tutorial

Introduction

Here is the source code for myfeed.user.ApiDocumentation.java

Source

/*
 * Copyright 2014-2015 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package myfeed.user;

import static org.hamcrest.Matchers.is;
import static org.hamcrest.Matchers.notNullValue;
import static org.springframework.restdocs.RestDocumentation.document;
import static org.springframework.restdocs.hypermedia.HypermediaDocumentation.linkWithRel;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.patch;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
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 java.util.Arrays;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.RequestDispatcher;

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.boot.test.SpringApplicationConfiguration;
import org.springframework.hateoas.MediaTypes;
import org.springframework.restdocs.config.RestDocumentationConfigurer;
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;

import com.fasterxml.jackson.databind.ObjectMapper;

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = UserApp.class)
@WebAppConfiguration
public class ApiDocumentation {

    @Autowired
    private ObjectMapper objectMapper;

    @Autowired
    private WebApplicationContext context;

    private MockMvc mockMvc;

    @Before
    public void setUp() {
        this.mockMvc = MockMvcBuilders.webAppContextSetup(this.context).apply(new RestDocumentationConfigurer())
                .build();
    }

    @Test
    public void errorExample() throws Exception {
        this.mockMvc
                .perform(get("/error").requestAttr(RequestDispatcher.ERROR_STATUS_CODE, 400)
                        .requestAttr(RequestDispatcher.ERROR_REQUEST_URI, "/notes")
                        .requestAttr(RequestDispatcher.ERROR_MESSAGE,
                                "The tag 'http://localhost:8080/tags/123' does not exist"))
                .andDo(print()).andExpect(status().isBadRequest()).andExpect(jsonPath("error", is("Bad Request")))
                .andExpect(jsonPath("timestamp", is(notNullValue()))).andExpect(jsonPath("status", is(400)))
                .andExpect(jsonPath("path", is(notNullValue()))).andDo(document("error-example"));
    }

    @Test
    @Ignore
    public void indexExample() throws Exception {
        this.mockMvc.perform(get("/")).andExpect(status().isOk()).andDo(document("index-example")
                .withLinks(linkWithRel("users").description("The <<resources-users,Users resource>>")));
    }
    /*
       @Test
       public void notesListExample() throws Exception {
          this.noteRepository.deleteAll();
        
          createNote("REST maturity model",
        "http://martinfowler.com/articles/richardsonMaturityModel.html");
          createNote("Hypertext Application Language (HAL)",
        "http://stateless.co/hal_specification.html");
          createNote("Application-Level Profile Semantics (ALPS)", "http://alps.io/spec/");
        
          this.mockMvc.perform(get("/notes"))
        .andExpect(status().isOk())
        .andDo(document("notes-list-example"));
       }
        
       @Test
       public void notesCreateExample() throws Exception {
          Map<String, String> tag = new HashMap<String, String>();
          tag.put("name", "REST");
        
          String tagLocation = this.mockMvc
        .perform(
              post("/tags").contentType(MediaTypes.HAL_JSON).content(
                    this.objectMapper.writeValueAsString(tag)))
        .andExpect(status().isCreated()).andReturn().getResponse()
        .getHeader("Location");
        
          Map<String, Object> note = new HashMap<String, Object>();
          note.put("title", "REST maturity model");
          note.put("body", "http://martinfowler.com/articles/richardsonMaturityModel.html");
          note.put("tags", Arrays.asList(tagLocation));
        
          this.mockMvc.perform(
        post("/notes").contentType(MediaTypes.HAL_JSON).content(
              this.objectMapper.writeValueAsString(note)))
        .andExpect(status().isCreated())
        .andDo(document("notes-create-example"));
       }
        
       @Test
       public void noteGetExample() throws Exception {
          Map<String, String> tag = new HashMap<String, String>();
          tag.put("name", "REST");
        
          String tagLocation = this.mockMvc
        .perform(
              post("/tags").contentType(MediaTypes.HAL_JSON).content(
                    this.objectMapper.writeValueAsString(tag)))
        .andExpect(status().isCreated()).andReturn().getResponse()
        .getHeader("Location");
        
          Map<String, Object> note = new HashMap<String, Object>();
          note.put("title", "REST maturity model");
          note.put("body", "http://martinfowler.com/articles/richardsonMaturityModel.html");
          note.put("tags", Arrays.asList(tagLocation));
        
          String noteLocation = this.mockMvc
        .perform(
              post("/notes").contentType(MediaTypes.HAL_JSON).content(
                    this.objectMapper.writeValueAsString(note)))
        .andExpect(status().isCreated()).andReturn().getResponse()
        .getHeader("Location");
        
          this.mockMvc.perform(get(noteLocation))
        .andExpect(status().isOk())
        .andExpect(jsonPath("title", is(note.get("title"))))
        .andExpect(jsonPath("body", is(note.get("body"))))
        .andExpect(jsonPath("_links.self.href", is(noteLocation)))
        .andExpect(jsonPath("_links.note-tags", is(notNullValue())))
        .andDo(document("note-get-example").withLinks(
              linkWithRel("self").description("This <<resources-note,note>>"),
              linkWithRel("note-tags").description(
                    "This note's <<resources-note-tags,tags>>")));
        
       }
        
       @Test
       public void tagsListExample() throws Exception {
          this.noteRepository.deleteAll();
          this.tagRepository.deleteAll();
        
          createTag("REST");
          createTag("Hypermedia");
          createTag("HTTP");
        
          this.mockMvc.perform(get("/tags"))
        .andExpect(status().isOk())
        .andDo(document("tags-list-example"));
       }
        
       @Test
       public void tagsCreateExample() throws Exception {
          Map<String, String> tag = new HashMap<String, String>();
          tag.put("name", "REST");
        
          this.mockMvc.perform(
        post("/tags").contentType(MediaTypes.HAL_JSON).content(
              this.objectMapper.writeValueAsString(tag)))
        .andExpect(status().isCreated())
        .andDo(document("tags-create-example"));
       }
        
       @Test
       public void noteUpdateExample() throws Exception {
          Map<String, Object> note = new HashMap<String, Object>();
          note.put("title", "REST maturity model");
          note.put("body", "http://martinfowler.com/articles/richardsonMaturityModel.html");
        
          String noteLocation = this.mockMvc
        .perform(
              post("/notes").contentType(MediaTypes.HAL_JSON).content(
                    this.objectMapper.writeValueAsString(note)))
        .andExpect(status().isCreated()).andReturn().getResponse()
        .getHeader("Location");
        
          this.mockMvc.perform(get(noteLocation)).andExpect(status().isOk())
        .andExpect(jsonPath("title", is(note.get("title"))))
        .andExpect(jsonPath("body", is(note.get("body"))))
        .andExpect(jsonPath("_links.self.href", is(noteLocation)))
        .andExpect(jsonPath("_links.note-tags", is(notNullValue())));
        
          Map<String, String> tag = new HashMap<String, String>();
          tag.put("name", "REST");
        
          String tagLocation = this.mockMvc
        .perform(
              post("/tags").contentType(MediaTypes.HAL_JSON).content(
                    this.objectMapper.writeValueAsString(tag)))
        .andExpect(status().isCreated()).andReturn().getResponse()
        .getHeader("Location");
        
          Map<String, Object> noteUpdate = new HashMap<String, Object>();
          noteUpdate.put("tags", Arrays.asList(tagLocation));
        
          this.mockMvc.perform(
        patch(noteLocation).contentType(MediaTypes.HAL_JSON).content(
              this.objectMapper.writeValueAsString(noteUpdate)))
        .andExpect(status().isNoContent())
        .andDo(document("note-update-example"));
       }
        
       @Test
       public void tagGetExample() throws Exception {
          Map<String, String> tag = new HashMap<String, String>();
          tag.put("name", "REST");
        
          String tagLocation = this.mockMvc
        .perform(
              post("/tags").contentType(MediaTypes.HAL_JSON).content(
                    this.objectMapper.writeValueAsString(tag)))
        .andExpect(status().isCreated()).andReturn().getResponse()
        .getHeader("Location");
        
          this.mockMvc.perform(get(tagLocation))
        .andExpect(status().isOk())
        .andExpect(jsonPath("name", is(tag.get("name"))))
        .andDo(document("tag-get-example").withLinks(
              linkWithRel("self").description("This <<resources-tag,tag>>"),
              linkWithRel("tagged-notes")
                    .description(
                          "The <<resources-tagged-notes,notes>> that have this tag")));
       }
        
       @Test
       public void tagUpdateExample() throws Exception {
          Map<String, String> tag = new HashMap<String, String>();
          tag.put("name", "REST");
        
          String tagLocation = this.mockMvc
        .perform(
              post("/tags").contentType(MediaTypes.HAL_JSON).content(
                    this.objectMapper.writeValueAsString(tag)))
        .andExpect(status().isCreated()).andReturn().getResponse()
        .getHeader("Location");
        
          Map<String, Object> tagUpdate = new HashMap<String, Object>();
          tagUpdate.put("name", "RESTful");
        
          this.mockMvc.perform(
        patch(tagLocation).contentType(MediaTypes.HAL_JSON).content(
              this.objectMapper.writeValueAsString(tagUpdate)))
        .andExpect(status().isNoContent())
        .andDo(document("tag-update-example"));
       }
        
       private void createNote(String title, String body) {
          Note note = new Note();
          note.setTitle(title);
          note.setBody(body);
        
          this.noteRepository.save(note);
       }
        
       private void createTag(String name) {
          Tag tag = new Tag();
          tag.setName(name);
          this.tagRepository.save(tag);
       }*/
}