/*
* Copyright (c) 2009, 2010, 2011, 2012, B3log Team
*
* 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 org.b3log.solo.repository.impl;
import java.util.Date;
import java.util.List;
import org.b3log.latke.Keys;
import org.b3log.latke.repository.Query;
import org.b3log.latke.repository.Transaction;
import org.b3log.solo.AbstractTestCase;
import org.b3log.solo.model.Article;
import org.b3log.solo.repository.ArticleRepository;
import org.json.JSONArray;
import org.json.JSONObject;
import org.testng.Assert;
import org.testng.annotations.Test;
/**
* {@link ArticleRepositoryImpl} test case.
*
* @author <a href="mailto:DL88250@gmail.com">Liang Ding</a>
* @version 1.0.0.3, May 1, 2012
*/
@Test(suiteName = "repository")
public final class ArticleRepositoryImplTestCase extends AbstractTestCase {
/**
* Adds successfully.
*
* @throws Exception exception
*/
@Test
public void add() throws Exception {
final ArticleRepository articleRepository = getArticleRepository();
final JSONObject article = new JSONObject();
article.put(Article.ARTICLE_TITLE, "article title1");
article.put(Article.ARTICLE_ABSTRACT, "article abstract");
article.put(Article.ARTICLE_TAGS_REF, "tag1, tag2");
article.put(Article.ARTICLE_AUTHOR_EMAIL, "test@gmail.com");
article.put(Article.ARTICLE_COMMENT_COUNT, 0);
article.put(Article.ARTICLE_VIEW_COUNT, 0);
article.put(Article.ARTICLE_CONTENT, "article content");
article.put(Article.ARTICLE_PERMALINK, "article permalink1");
article.put(Article.ARTICLE_HAD_BEEN_PUBLISHED, true);
article.put(Article.ARTICLE_IS_PUBLISHED, true);
article.put(Article.ARTICLE_PUT_TOP, false);
article.put(Article.ARTICLE_CREATE_DATE, new Date());
article.put(Article.ARTICLE_UPDATE_DATE, new Date());
article.put(Article.ARTICLE_RANDOM_DOUBLE, Math.random());
article.put(Article.ARTICLE_SIGN_ID, "1");
article.put(Article.ARTICLE_COMMENTABLE, true);
article.put(Article.ARTICLE_VIEW_PWD, "");
article.put(Article.ARTICLE_EDITOR_TYPE, "");
final Transaction transaction = articleRepository.beginTransaction();
articleRepository.add(article);
transaction.commit();
final JSONArray results = articleRepository.getByAuthorEmail("test@gmail.com", 1, Integer.MAX_VALUE).getJSONArray(Keys.RESULTS);
Assert.assertEquals(results.length(), 1);
}
/**
* Get by permalink.
*
* @throws Exception exception
*/
@Test(dependsOnMethods = "add")
public void getByPermalink() throws Exception {
final ArticleRepository articleRepository = getArticleRepository();
final JSONObject article = articleRepository.getByPermalink("article permalink1");
Assert.assertNotNull(article);
Assert.assertEquals(article.getString(Article.ARTICLE_TITLE), "article title1");
Assert.assertNull(articleRepository.getByPermalink("not found"));
}
/**
* Get by permalink.
*
* @throws Exception exception
*/
@Test(dependsOnMethods = {"add"})
public void previousAndNext() throws Exception {
final ArticleRepository articleRepository = getArticleRepository();
final JSONObject article = new JSONObject();
article.put(Article.ARTICLE_TITLE, "article title2");
article.put(Article.ARTICLE_ABSTRACT, "article abstract");
article.put(Article.ARTICLE_TAGS_REF, "tag1, tag2");
article.put(Article.ARTICLE_AUTHOR_EMAIL, "test@gmail.com");
article.put(Article.ARTICLE_COMMENT_COUNT, 1);
article.put(Article.ARTICLE_VIEW_COUNT, 1);
article.put(Article.ARTICLE_CONTENT, "article content");
article.put(Article.ARTICLE_PERMALINK, "article permalink2");
article.put(Article.ARTICLE_HAD_BEEN_PUBLISHED, true);
article.put(Article.ARTICLE_IS_PUBLISHED, true);
article.put(Article.ARTICLE_PUT_TOP, false);
article.put(Article.ARTICLE_CREATE_DATE, new Date());
article.put(Article.ARTICLE_UPDATE_DATE, new Date());
article.put(Article.ARTICLE_RANDOM_DOUBLE, Math.random());
article.put(Article.ARTICLE_SIGN_ID, "1");
article.put(Article.ARTICLE_COMMENTABLE, true);
article.put(Article.ARTICLE_VIEW_PWD, "");
article.put(Article.ARTICLE_EDITOR_TYPE, "");
final Transaction transaction = articleRepository.beginTransaction();
articleRepository.add(article);
transaction.commit();
Assert.assertEquals(articleRepository.count(), 2);
JSONObject previousArticle = articleRepository.getPreviousArticle(article.getString(Keys.OBJECT_ID));
Assert.assertNotNull(previousArticle);
Assert.assertEquals(previousArticle.getString(Article.ARTICLE_TITLE), "article title1");
Assert.assertEquals(previousArticle.getString(Article.ARTICLE_PERMALINK), "article permalink1");
Assert.assertNull(previousArticle.opt(Keys.OBJECT_ID));
previousArticle = articleRepository.getByPermalink(previousArticle.getString(Article.ARTICLE_PERMALINK));
final JSONObject nextArticle = articleRepository.getNextArticle(previousArticle.getString(Keys.OBJECT_ID));
Assert.assertNotNull(previousArticle);
Assert.assertEquals(nextArticle.getString(Article.ARTICLE_TITLE), "article title2");
}
/**
* Get Most Comment Articles.
*
* @throws Exception exception
*/
@Test(dependsOnMethods = {"add", "previousAndNext"})
public void getMostCommentArticles() throws Exception {
final ArticleRepository articleRepository = getArticleRepository();
final JSONObject article = new JSONObject();
article.put(Article.ARTICLE_TITLE, "article title3");
article.put(Article.ARTICLE_ABSTRACT, "article abstract");
article.put(Article.ARTICLE_TAGS_REF, "tag1, tag2");
article.put(Article.ARTICLE_AUTHOR_EMAIL, "test@gmail.com");
article.put(Article.ARTICLE_COMMENT_COUNT, 2);
article.put(Article.ARTICLE_VIEW_COUNT, 2);
article.put(Article.ARTICLE_CONTENT, "article content");
article.put(Article.ARTICLE_PERMALINK, "article permalink3");
article.put(Article.ARTICLE_HAD_BEEN_PUBLISHED, true);
article.put(Article.ARTICLE_IS_PUBLISHED, true);
article.put(Article.ARTICLE_PUT_TOP, false);
article.put(Article.ARTICLE_CREATE_DATE, new Date());
article.put(Article.ARTICLE_UPDATE_DATE, new Date());
article.put(Article.ARTICLE_RANDOM_DOUBLE, Math.random());
article.put(Article.ARTICLE_SIGN_ID, "1");
article.put(Article.ARTICLE_COMMENTABLE, true);
article.put(Article.ARTICLE_VIEW_PWD, "");
article.put(Article.ARTICLE_EDITOR_TYPE, "");
final Transaction transaction = articleRepository.beginTransaction();
articleRepository.add(article);
transaction.commit();
List<JSONObject> mostCommentArticles = articleRepository.getMostCommentArticles(2);
Assert.assertNotNull(mostCommentArticles);
Assert.assertEquals(mostCommentArticles.size(), 2);
Assert.assertEquals(mostCommentArticles.get(0).getInt(Article.ARTICLE_COMMENT_COUNT), 2);
Assert.assertEquals(mostCommentArticles.get(1).getInt(Article.ARTICLE_COMMENT_COUNT), 1);
mostCommentArticles = articleRepository.getMostCommentArticles(1);
Assert.assertNotNull(mostCommentArticles);
Assert.assertEquals(mostCommentArticles.size(), 1);
Assert.assertEquals(mostCommentArticles.get(0).getInt(Article.ARTICLE_COMMENT_COUNT), 2);
}
/**
* Get Most View Count Articles
*
* @throws Exception exception
*/
@Test(dependsOnMethods = {"add",
"previousAndNext",
"getMostCommentArticles"})
public void getMostViewCountArticles() throws Exception {
final ArticleRepository articleRepository = getArticleRepository();
final JSONObject article = new JSONObject();
article.put(Article.ARTICLE_TITLE, "article title4");
article.put(Article.ARTICLE_ABSTRACT, "article abstract");
article.put(Article.ARTICLE_TAGS_REF, "tag1, tag2");
article.put(Article.ARTICLE_AUTHOR_EMAIL, "test@gmail.com");
article.put(Article.ARTICLE_COMMENT_COUNT, 3);
article.put(Article.ARTICLE_VIEW_COUNT, 3);
article.put(Article.ARTICLE_CONTENT, "article content");
article.put(Article.ARTICLE_PERMALINK, "article permalink4");
article.put(Article.ARTICLE_HAD_BEEN_PUBLISHED, false);
article.put(Article.ARTICLE_IS_PUBLISHED, false); // Unpublished
article.put(Article.ARTICLE_PUT_TOP, false);
article.put(Article.ARTICLE_CREATE_DATE, new Date());
article.put(Article.ARTICLE_UPDATE_DATE, new Date());
article.put(Article.ARTICLE_RANDOM_DOUBLE, Math.random());
article.put(Article.ARTICLE_SIGN_ID, "1");
article.put(Article.ARTICLE_COMMENTABLE, true);
article.put(Article.ARTICLE_VIEW_PWD, "");
article.put(Article.ARTICLE_EDITOR_TYPE, "");
final Transaction transaction = articleRepository.beginTransaction();
articleRepository.add(article);
transaction.commit();
List<JSONObject> mostViewCountArticles = articleRepository.getMostViewCountArticles(2);
Assert.assertNotNull(mostViewCountArticles);
Assert.assertEquals(mostViewCountArticles.size(), 2);
Assert.assertEquals(mostViewCountArticles.get(0).getInt(Article.ARTICLE_VIEW_COUNT), 2);
Assert.assertEquals(mostViewCountArticles.get(1).getInt(Article.ARTICLE_VIEW_COUNT), 1);
mostViewCountArticles = articleRepository.getMostViewCountArticles(1);
Assert.assertNotNull(mostViewCountArticles);
Assert.assertEquals(mostViewCountArticles.size(), 1);
Assert.assertEquals(mostViewCountArticles.get(0).getInt(Article.ARTICLE_VIEW_COUNT), 2);
}
/**
* Get Randomly.
*
* @throws Exception exception
*/
@Test(dependsOnMethods = {"add",
"previousAndNext",
"getMostCommentArticles",
"getMostViewCountArticles"})
public void getRandomly() throws Exception {
final ArticleRepository articleRepository = getArticleRepository();
List<JSONObject> articles = articleRepository.getRandomly(3);
Assert.assertNotNull(articles);
}
/**
* Get Recent Articles.
*
* @throws Exception exception
*/
@Test(dependsOnMethods = {"add",
"previousAndNext",
"getMostCommentArticles",
"getMostViewCountArticles"})
public void getRecentArticles() throws Exception {
final ArticleRepository articleRepository = getArticleRepository();
Assert.assertEquals(articleRepository.count(), 4);
List<JSONObject> recentArticles = articleRepository.getRecentArticles(3);
Assert.assertNotNull(recentArticles);
Assert.assertEquals(recentArticles.size(), 3);
Assert.assertEquals(recentArticles.get(0).getString(Article.ARTICLE_TITLE), "article title3");
Assert.assertEquals(recentArticles.get(1).getString(Article.ARTICLE_TITLE), "article title2");
Assert.assertEquals(recentArticles.get(2).getString(Article.ARTICLE_TITLE), "article title1");
}
/**
* Is Published.
*
* @throws Exception exception
*/
@Test(dependsOnMethods = {"add", "getMostViewCountArticles"})
public void isPublished() throws Exception {
final ArticleRepository articleRepository = getArticleRepository();
final JSONArray all = articleRepository.get(new Query()).getJSONArray(Keys.RESULTS);
Assert.assertNotNull(all);
final JSONObject article = all.getJSONObject(0);
Assert.assertTrue(articleRepository.isPublished(article.getString(Keys.OBJECT_ID)));
final JSONObject notPublished = articleRepository.getByPermalink("article permalink4");
Assert.assertNotNull(notPublished);
Assert.assertFalse(notPublished.getBoolean(Article.ARTICLE_IS_PUBLISHED));
Assert.assertFalse(articleRepository.isPublished("not found"));
}
}