package org.ryu22e.nico2cal.controller; import static org.hamcrest.CoreMatchers.*; import static org.junit.Assert.*; import static org.junit.matchers.JUnitMatchers.*; import java.util.LinkedList; import java.util.List; import org.joda.time.DateTime; import org.junit.Test; import org.ryu22e.nico2cal.meta.NicoliveIndexMeta; import org.ryu22e.nico2cal.meta.NicoliveMeta; import org.ryu22e.nico2cal.model.Nicolive; import org.ryu22e.nico2cal.model.NicoliveIndex; import org.slim3.datastore.Datastore; import org.slim3.tester.ControllerTestCase; import com.google.appengine.api.NamespaceManager; import com.google.appengine.api.datastore.Key; import com.google.appengine.api.datastore.Link; import com.google.appengine.api.datastore.Text; /** * @author ryu22e * */ public class GenerateNicoliveIndexControllerTest extends ControllerTestCase { /** * */ private List<Key> testDataKeys = new LinkedList<Key>(); /** * */ private void clearDataStore() { NicoliveMeta n = NicoliveMeta.get(); Datastore.delete(Datastore.query(n).asKeyList()); NicoliveIndexMeta ni = NicoliveIndexMeta.get(); Datastore.delete(Datastore.query(ni).asKeyList()); } /* * (non-Javadoc) {@inheritDoc} */ @Override public void setUp() throws Exception { super.setUp(); NamespaceManager.set("test"); clearDataStore(); // テストデータを登録する。 testDataKeys.clear(); List<Nicolive> nicolives = new LinkedList<Nicolive>(); for (int i = 0; i < 10; i++) { Nicolive nicolive = new Nicolive(); nicolive.setTitle("テスト" + i); nicolive.setDescription(new Text("テスト説明文" + i)); DateTime datetime = new DateTime(); datetime = datetime.minusHours(i); nicolive.setOpenTime(datetime.toDate()); nicolive.setLink(new Link("http://ryu22e.org/" + i)); nicolives.add(nicolive); } testDataKeys.addAll(Datastore.put(nicolives)); } /* * (non-Javadoc) {@inheritDoc} */ @Override public void tearDown() throws Exception { // テストデータを削除する。 if (0 < testDataKeys.size()) { Datastore.delete(testDataKeys); } NicoliveIndexMeta ni = NicoliveIndexMeta.get(); Datastore.delete(Datastore .query(ni) .filter(ni.keyword.startsWith("テスト")) .asKeyList()); super.tearDown(); } /** * @throws Exception */ @Test public void バリデーションのテスト_キーが指定されていない() throws Exception { tester.start("/GenerateNicoliveIndex"); GenerateNicoliveIndexController controller = tester.getController(); assertThat(controller, is(notNullValue())); assertThat(tester.isRedirect(), is(false)); assertThat(tester.response.getStatus(), is(401)); assertThat(tester.getDestinationPath(), is(nullValue())); } /** * @throws Exception */ @Test public void 全文検索用インデックスを作成する() throws Exception { assertThat(testDataKeys.size(), not(0)); List<String> keysString = new LinkedList<String>(); for (Key key : testDataKeys) { keysString.add(Datastore.keyToString(key)); } tester.paramValues("keys[]", keysString.toArray(new String[0])); tester.start("/GenerateNicoliveIndex"); GenerateNicoliveIndexController controller = tester.getController(); assertThat(controller, is(notNullValue())); assertThat(tester.isRedirect(), is(false)); assertThat(tester.response.getStatus(), is(200)); assertThat(tester.getDestinationPath(), is(nullValue())); NicoliveIndexMeta ni = NicoliveIndexMeta.get(); List<NicoliveIndex> indexes1 = Datastore.query(ni).filter(ni.keyword.equal("テスト")).asList(); assertThat(indexes1, is(notNullValue())); List<Key> indexKeys1 = new LinkedList<Key>(); for (NicoliveIndex index1 : indexes1) { indexKeys1.add(index1.getNicoliveKey()); } assertThat(indexKeys1, hasItems(testDataKeys.toArray(new Key[0]))); List<NicoliveIndex> indexes2 = Datastore.query(ni).filter(ni.keyword.equal("説明")).asList(); assertThat(indexes2, is(notNullValue())); List<Key> indexKeys2 = new LinkedList<Key>(); for (NicoliveIndex index2 : indexes2) { indexKeys2.add(index2.getNicoliveKey()); } assertThat(indexKeys2, hasItems(testDataKeys.toArray(new Key[0]))); List<NicoliveIndex> indexes3 = Datastore.query(ni).filter(ni.keyword.equal("文")).asList(); assertThat(indexes3, is(notNullValue())); List<Key> indexKeys3 = new LinkedList<Key>(); for (NicoliveIndex index3 : indexes3) { indexKeys3.add(index3.getNicoliveKey()); } assertThat(indexKeys3, hasItems(testDataKeys.toArray(new Key[0]))); } /** * @throws Exception */ @Test public void パラメータのキーに不正が含まれている() throws Exception { // 不正な値は無視して処理を続行する。 assertThat(testDataKeys.size(), not(0)); List<String> keysString = new LinkedList<String>(); for (Key key : testDataKeys) { keysString.add(Datastore.keyToString(key)); } keysString.add("invalid"); tester.paramValues("keys[]", keysString.toArray(new String[0])); tester.start("/GenerateNicoliveIndex"); GenerateNicoliveIndexController controller = tester.getController(); assertThat(controller, is(notNullValue())); assertThat(tester.isRedirect(), is(false)); assertThat(tester.response.getStatus(), is(200)); assertThat(tester.getDestinationPath(), is(nullValue())); NicoliveIndexMeta ni = NicoliveIndexMeta.get(); List<NicoliveIndex> indexes1 = Datastore.query(ni).filter(ni.keyword.equal("テスト")).asList(); assertThat(indexes1, is(notNullValue())); List<Key> indexKeys1 = new LinkedList<Key>(); for (NicoliveIndex index1 : indexes1) { indexKeys1.add(index1.getNicoliveKey()); } assertThat(indexKeys1, hasItems(testDataKeys.toArray(new Key[0]))); List<NicoliveIndex> indexes2 = Datastore.query(ni).filter(ni.keyword.equal("説明")).asList(); assertThat(indexes2, is(notNullValue())); List<Key> indexKeys2 = new LinkedList<Key>(); for (NicoliveIndex index2 : indexes2) { indexKeys2.add(index2.getNicoliveKey()); } assertThat(indexKeys2, hasItems(testDataKeys.toArray(new Key[0]))); List<NicoliveIndex> indexes3 = Datastore.query(ni).filter(ni.keyword.equal("文")).asList(); assertThat(indexes3, is(notNullValue())); List<Key> indexKeys3 = new LinkedList<Key>(); for (NicoliveIndex index3 : indexes3) { indexKeys3.add(index3.getNicoliveKey()); } assertThat(indexKeys3, hasItems(testDataKeys.toArray(new Key[0]))); } }