cn.aozhi.songify.functional.rest.TaskRestFT.java Source code

Java tutorial

Introduction

Here is the source code for cn.aozhi.songify.functional.rest.TaskRestFT.java

Source

/*******************************************************************************
 * Copyright (c) 2005, 2014 springside.github.io
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 *******************************************************************************/
package cn.aozhi.songify.functional.rest;

import static org.assertj.core.api.Assertions.*;

import java.net.URI;
import java.util.ArrayList;
import java.util.Map;

import org.apache.commons.lang3.StringUtils;
import org.junit.Test;
import org.junit.experimental.categories.Category;
import org.springframework.http.HttpStatus;
import org.springframework.web.client.HttpStatusCodeException;
import org.springframework.web.client.RestTemplate;
import cn.aozhi.songify.data.TaskData;
import cn.aozhi.songify.entity.Task;
import cn.aozhi.songify.functional.BaseFunctionalTestCase;
import org.springside.modules.mapper.JsonMapper;
import org.springside.modules.test.category.Smoke;

/**
 * ?, ?JavaScript???.
 * 
 * @author calvin
 */
public class TaskRestFT extends BaseFunctionalTestCase {

    private static String resourceUrl = baseUrl + "/api/v1/task";

    private final RestTemplate restTemplate = new RestTemplate();
    private final JsonMapper jsonMapper = new JsonMapper();

    /**
     * .
     */
    @Test
    @Category(Smoke.class)
    public void listTasks() {
        TaskList tasks = restTemplate.getForObject(resourceUrl, TaskList.class);
        assertThat(tasks).hasSize(5);
        assertThat(tasks.get(0).getTitle()).isEqualTo("Study PlayFramework 2.0");
    }

    /**
     * ?.
     */
    @Test
    @Category(Smoke.class)
    public void getTask() {
        Task task = restTemplate.getForObject(resourceUrl + "/{id}", Task.class, 1L);
        assertThat(task.getTitle()).isEqualTo("Study PlayFramework 2.0");
    }

    /**
     * //.
     */
    @Test
    @Category(Smoke.class)
    public void createUpdateAndDeleteTask() {

        // create
        Task task = TaskData.randomTask();

        URI createdTaskUri = restTemplate.postForLocation(resourceUrl, task);
        System.out.println(createdTaskUri.toString());
        Task createdTask = restTemplate.getForObject(createdTaskUri, Task.class);
        assertThat(createdTask.getTitle()).isEqualTo(task.getTitle());

        // update
        String id = StringUtils.substringAfterLast(createdTaskUri.toString(), "/");
        task.setId(new Long(id));
        task.setTitle(TaskData.randomTitle());

        restTemplate.put(createdTaskUri, task);

        Task updatedTask = restTemplate.getForObject(createdTaskUri, Task.class);
        assertThat(updatedTask.getTitle()).isEqualTo(task.getTitle());

        // delete
        restTemplate.delete(createdTaskUri);

        try {
            restTemplate.getForObject(createdTaskUri, Task.class);
            fail("Get should fail while feth a deleted task");
        } catch (HttpStatusCodeException e) {
            assertThat(e.getStatusCode()).isEqualTo(HttpStatus.NOT_FOUND);
        }
    }

    @Test
    public void invalidInput() {

        // create
        Task titleBlankTask = new Task();
        try {
            restTemplate.postForLocation(resourceUrl, titleBlankTask);
            fail("Create should fail while title is blank");
        } catch (HttpStatusCodeException e) {
            assertThat(e.getStatusCode()).isEqualTo(HttpStatus.BAD_REQUEST);
            Map messages = jsonMapper.fromJson(e.getResponseBodyAsString(), Map.class);
            assertThat(messages).hasSize(1);
            assertThat(messages.get("title")).isIn("may not be empty", "?");
        }

        // update
        titleBlankTask.setId(1L);
        try {
            restTemplate.put(resourceUrl + "/1", titleBlankTask);
            fail("Update should fail while title is blank");
        } catch (HttpStatusCodeException e) {
            assertThat(e.getStatusCode()).isEqualTo(HttpStatus.BAD_REQUEST);
            Map messages = jsonMapper.fromJson(e.getResponseBodyAsString(), Map.class);
            assertThat(messages).hasSize(1);
            assertThat(messages.get("title")).isIn("may not be empty", "?");
        }
    }

    // ArrayList<Task>RestTemplate????
    private static class TaskList extends ArrayList<Task> {
    }
}