1 package org.unitedfront2.domain.communication;
2
3 import java.util.HashMap;
4 import java.util.Locale;
5 import java.util.Map;
6
7 import org.junit.Assert;
8 import org.junit.Test;
9 import org.springframework.beans.factory.annotation.Autowired;
10 import org.unitedfront2.domain.accesscontrol.AccessControl;
11 import org.unitedfront2.domain.accesscontrol.FriendOnly;
12 import org.unitedfront2.domain.accesscontrol.OwnerOnly;
13 import org.unitedfront2.domain.accesscontrol.Public;
14 import org.unitedfront2.domain.accesscontrol.UserOnly;
15 import org.unitedfront2.test.TransactionalTestCaseWithInitialData;
16
17 public class BlogTest extends TransactionalTestCaseWithInitialData {
18
19 @Autowired private BlogTable blogTable;
20
21 @Test
22 public void testPost() throws BlogCodeUsedByOtherException {
23 Blog blog = createBlog();
24 blog.store();
25 BlogEntry blogEntry = createBlogEntry(blog.getReadAccessControl(),
26 blog.getWriteAccessControl());
27
28 blog.retrieveEntries(0, 1);
29 Assert.assertSame(0, blog.getEntries().size());
30 blog.post(blogEntry);
31 blog.retrieveEntries(0, 1);
32 Assert.assertSame(1, blog.getEntries().size());
33 Assert.assertEquals(blogEntry, blog.getEntries().get(0));
34 }
35
36 private Blog createBlog() {
37 AccessControl readAccessControl = domainFactory.prototype(Public.class);
38 AccessControl writeAccessControl = domainFactory.prototype(OwnerOnly.class);
39 return domainFactory.prototype(new Blog("test",
40 createOverview(readAccessControl, writeAccessControl),
41 simpleUser1.getId(), readAccessControl, writeAccessControl,
42 domainFactory.prototype(UserOnly.class)));
43 }
44
45 private Message createOverview(AccessControl readAccessControl,
46 AccessControl writeAccessControl) {
47 MessageEntry entry = new MessageEntry();
48 entry.setSubject("テストブログ");
49 entry.setBody("これはテストブログです。");
50 Map<Locale, MessageEntry> entryMap
51 = new HashMap<Locale, MessageEntry>();
52 entryMap.put(Locale.JAPANESE, entry);
53 Message overview = domainFactory.prototype(new Message(null, entryMap,
54 simpleUser1.getId(), simpleUser1.getId(), readAccessControl,
55 writeAccessControl));
56 return overview;
57 }
58
59 private BlogEntry createBlogEntry(AccessControl readAccessControl,
60 AccessControl writeAccessControl) {
61 MessageEntry entry = new MessageEntry();
62 entry.setSubject("今日の記事です。");
63 entry.setBody("これは今日の記事です。");
64 Map<Locale, MessageEntry> entryMap
65 = new HashMap<Locale, MessageEntry>();
66 entryMap.put(Locale.JAPANESE, entry);
67 Message article = domainFactory.prototype(new Message(null, entryMap,
68 simpleUser1.getId(), simpleUser1.getId(), readAccessControl,
69 writeAccessControl));
70 return domainFactory.prototype(new BlogEntry(article));
71 }
72
73 @Test
74 public void testStore登録() throws BlogCodeUsedByOtherException {
75 Blog blog = createBlog();
76 blog.store();
77 Blog actual = blogTable.find(blog.getId());
78 Assert.assertEquals(blog, actual);
79 }
80
81 @Test(expected=BlogCodeUsedByOtherException.class)
82 public void testStore登録を試みるがコードが重複()
83 throws BlogCodeUsedByOtherException {
84 Blog blog = createBlog();
85 blog.store();
86 Blog blog2 = domainFactory.prototype(blog);
87 blog2.setId(null);
88 blog2.store();
89 }
90
91 @Test
92 public void testStore更新() throws BlogCodeUsedByOtherException {
93 Blog blog = createBlog();
94 blog.store();
95 blog.setCode("new_" + blog.getCode());
96 blog.getReadAccessControl().changeTo(FriendOnly.class);
97 blog.store();
98 Blog actual = blogTable.find(blog.getId());
99 Assert.assertEquals(blog, actual);
100 }
101
102 @Test(expected=BlogCodeUsedByOtherException.class)
103 public void testStore更新を試みるがコードが重複()
104 throws BlogCodeUsedByOtherException {
105 Blog blog = createBlog();
106 blog.store();
107 Blog blog2 = domainFactory.prototype(blog);
108 blog2.setId(null);
109 blog2.setCode(blog2.getCode() + "2");
110 blog2.store();
111 blog2.setCode(blog.getCode());
112 blog2.store();
113 }
114
115 @Test
116 public void testRetrieveEntriesAll() throws BlogCodeUsedByOtherException {
117 Blog blog = createBlog();
118 blog.store();
119 BlogEntry entry1 = createBlogEntry(blog.getReadAccessControl(), blog.getWriteAccessControl());
120 blog.post(entry1);
121 BlogEntry entry2 = createBlogEntry(blog.getReadAccessControl(), blog.getWriteAccessControl());
122 blog.post(entry2);
123 BlogEntry entry3 = createBlogEntry(blog.getReadAccessControl(), blog.getWriteAccessControl());
124 blog.post(entry3);
125 blog.retrieveEntries();
126 Assert.assertNotNull(blog.getEntries());
127 Assert.assertSame(3, blog.getEntries().size());
128 Assert.assertEquals(entry3, blog.getEntries().get(0));
129 Assert.assertEquals(entry2, blog.getEntries().get(1));
130 Assert.assertEquals(entry1, blog.getEntries().get(2));
131 }
132
133 @Test
134 public void testDelete() throws BlogCodeUsedByOtherException,
135 BlogEntryExistException {
136 Blog blog = createBlog();
137 blog.store();
138 blog.delete();
139 Assert.assertNull(blogTable.find(blog.getId()));
140 }
141
142 @Test(expected=BlogEntryExistException.class)
143 public void testDeleteブログ記事が存在する() throws BlogEntryExistException,
144 BlogCodeUsedByOtherException {
145 Blog blog = createBlog();
146 blog.store();
147 BlogEntry blogEntry = createBlogEntry(blog.getReadAccessControl(),
148 blog.getWriteAccessControl());
149 blog.post(blogEntry);
150 blog.delete();
151 }
152 }