Play Framework 完整實現一個APP(三)

 

 1.添加Post類java

package models;

import java.util.*;
import javax.persistence.*;
import play.db.jpa.*;

@Entity
@Table(name = "blog_post")
public class Post extends Model {
	public String title;
	public Date postedAt;

	@Lob
	public String content;

	@ManyToOne
	public User author;

	public Post(User author, String title, String content) {
		this.author = author;
		this.title = title;
		this.content = title;
	}
}

@Lob 標識,字段是一個large text的類型,@ManyToOne 標識每一個Post只能對應一個User,一個User能夠對應多個Postapp

 

2. 添加測試用例post

        @Test
	public void createPost() {
		// Create a new user and save it
		User user = new User("bob@gmail.com", "####", "Bob").save();

		// Create a new post
		new Post(user, "My first post", "Hello world").save();

		// Test that the post has been created
		assertEquals(1, Post.count());

		// Retrieve all posts created by user
		List<Post> posts = Post.find("byAuthor", user).fetch();

		// Tests
		assertEquals(1, posts.size());
		Post firstPost = posts.get(0);
		assertNotNull(firstPost);
		assertEquals(user, firstPost.author);
		assertEquals("My first post", firstPost.title);
		assertEquals("Hello world", firstPost.content);
		assertNotNull(firstPost.postedAt);
	}    

  

3.添加Comment類測試

@Entity
public class Comment extends Model {
	public String author;
	public Date postedAt;

	@Lob
	public String content;

	@ManyToOne
	public Post post;

	public Comment(Post post, String author, String content) {
		this.post = post;
		this.author = author;
		this.content = content;
		this.postedAt = new Date();
	}
}

  

4.添加測試用例fetch

@Test
public void postComments() {
    // Create a new user and save it
    User bob = new User("bob@gmail.com", "secret", "Bob").save();
 
    // Create a new post
    Post bobPost = new Post(bob, "My first post", "Hello world").save();
 
    // Post a first comment
    new Comment(bobPost, "Jeff", "Nice post").save();
    new Comment(bobPost, "Tom", "I knew that !").save();
 
    // Retrieve all comments
    List<Comment> bobPostComments = Comment.find("byPost", bobPost).fetch();
 
    // Tests
    assertEquals(2, bobPostComments.size());
 
    Comment firstComment = bobPostComments.get(0);
    assertNotNull(firstComment);
    assertEquals("Jeff", firstComment.author);
    assertEquals("Nice post", firstComment.content);
    assertNotNull(firstComment.postedAt);
 
    Comment secondComment = bobPostComments.get(1);
    assertNotNull(secondComment);
    assertEquals("Tom", secondComment.author);
    assertEquals("I knew that !", secondComment.content);
    assertNotNull(secondComment.postedAt);
}

  

5.在Post類中添加Commentthis

@OneToMany(mappedBy="post", cascade=CascadeType.ALL)
public List<Comment> comments;
	
public Post(User author, String title, String content) {
	this.comments = new ArrayList<Comment>();
	this.author = author;
	this.title = title;
	this.content = title;
	this.postedAt = new Date();
}

  

6.在Post類中添加方法blog

public Post addComment(String author, String content) {
    Comment newComment = new Comment(this, author, content).save();
    this.comments.add(newComment);
    this.save();
    return this;
}

  

7.添加測試用例get

@Test
public void useTheCommentsRelation() {
    // Create a new user and save it
    User bob = new User("bob@gmail.com", "secret", "Bob").save();
 
    // Create a new post
    Post bobPost = new Post(bob, "My first post", "Hello world").save();
 
    // Post a first comment
    bobPost.addComment("Jeff", "Nice post");
    bobPost.addComment("Tom", "I knew that !");
 
    // Count things
    assertEquals(1, User.count());
    assertEquals(1, Post.count());
    assertEquals(2, Comment.count());
 
    // Retrieve Bob's post
    bobPost = Post.find("byAuthor", bob).first();
    assertNotNull(bobPost);
 
    // Navigate to comments
    assertEquals(2, bobPost.comments.size());
    assertEquals("Jeff", bobPost.comments.get(0).author);
    
    // Delete the post
    bobPost.delete();
    
    // Check that all comments have been deleted
    assertEquals(1, User.count());
    assertEquals(0, Post.count());
    assertEquals(0, Comment.count());
}

  

 

運行Test,若有異常會出現下方提示it

 

 

 

.io

相關文章
相關標籤/搜索