ac.simons.tests.akismet.AkismetTest.java Source code

Java tutorial

Introduction

Here is the source code for ac.simons.tests.akismet.AkismetTest.java

Source

/**
 * Created by Michael Simons, michael-simons.eu
 * and released under The BSD License
 * http://www.opensource.org/licenses/bsd-license.php
 *
 * Copyright (c) 2011, Michael Simons
 * All rights reserved.
 *
 * Redistribution  and  use  in  source   and  binary  forms,  with  or   without
 * modification, are permitted provided that the following conditions are met:
 *
 * * Redistributions of source   code must retain   the above copyright   notice,
 *   this list of conditions and the following disclaimer.
 *
 * * Redistributions in binary  form must reproduce  the above copyright  notice,
 *   this list of conditions  and the following  disclaimer in the  documentation
 *   and/or other materials provided with the distribution.
 *
 * * Neither the name  of  michael-simons.eu   nor the names  of its contributors
 *   may be used  to endorse   or promote  products derived  from  this  software
 *   without specific prior written permission.
 *
 * THIS SOFTWARE IS  PROVIDED BY THE  COPYRIGHT HOLDERS AND  CONTRIBUTORS "AS IS"
 * AND ANY  EXPRESS OR  IMPLIED WARRANTIES,  INCLUDING, BUT  NOT LIMITED  TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 * DISCLAIMED. IN NO EVENT SHALL  THE COPYRIGHT HOLDER OR CONTRIBUTORS  BE LIABLE
 * FOR ANY  DIRECT, INDIRECT,  INCIDENTAL, SPECIAL,  EXEMPLARY, OR  CONSEQUENTIAL
 * DAMAGES (INCLUDING,  BUT NOT  LIMITED TO,  PROCUREMENT OF  SUBSTITUTE GOODS OR
 * SERVICES; LOSS  OF USE,  DATA, OR  PROFITS; OR  BUSINESS INTERRUPTION) HOWEVER
 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT  LIABILITY,
 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE  USE
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */
package ac.simons.tests.akismet;

import java.util.Collections;

import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.tapestry5.ioc.internal.services.TypeCoercerImpl;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.testng.Assert;
import org.testng.annotations.Test;

import ac.simons.akismet.AkismetComment;
import ac.simons.akismet.AkismetException;
import ac.simons.akismet.AkismetImpl;
import cl.quilt.tapestry.akismet.services.KnownAkismetCompatibleServices;

/**
 * @author Michael J. Simons
 */

public class AkismetTest {
    private final static String validApiKey;
    private final static String validApiConsumer;

    static {
        validApiKey = System.getProperty("akismetApiKey");
        validApiConsumer = System.getProperty("akismetConsumer");

        if (validApiKey == null || validApiConsumer == null)
            throw new RuntimeException("Both api key and consumer must be specified!");
    }

    private AkismetImpl<AkismetComment> newAkismet() {
        Logger logger = LoggerFactory.getLogger(AkismetImpl.class);
        return new AkismetImpl<AkismetComment>(new DefaultHttpClient(), new TypeCoercerImpl(Collections.EMPTY_LIST),
                logger, validApiKey, validApiConsumer, KnownAkismetCompatibleServices.TYPEPAD_ANTISPAM.toString(),
                null);
    }

    @Test
    public void verify() throws AkismetException {
        final AkismetImpl akismet = newAkismet();

        Assert.assertTrue(akismet.verifyKey());

        // This test fails... maybe TypePad AntiSpam always verifies the key??
        //      akismet.setApiKey("asdfghjkl");      
        //      akismet.setApiConsumer("http://blabla.com");
        //      Assert.assertFalse(akismet.verifyKey());

        akismet.setApiEndpoint("test.com");
        akismet.setApiKey("123test");
        akismet.setApiConsumer("http://test.com");
        Assert.assertFalse(akismet.verifyKey());
    }

    @Test
    public void checkComment() throws AkismetException {
        final AkismetImpl akismet = newAkismet();

        AkismetComment comment = new AkismetComment();
        comment.setUserIp("80.138.52.114");
        comment.setUserAgent(
                "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.10 (KHTML, like Gecko) Chrome/8.0.552.224 Safari/534.10");
        comment.setPermalink("http://dailyfratze.de/marie/2011/1/3");
        comment.setCommentType("comment");
        comment.setCommentAuthor("Michael");
        comment.setCommentAuthorEmail("misi@planet-punk.de");
        comment.setCommentAuthorUrl("http://planet-punk.de");
        comment.setCommentContent("Scharfes Outfit :D");
        Assert.assertFalse(akismet.commentCheck(comment));

        comment = new AkismetComment();
        comment.setUserIp("80.138.52.114");
        comment.setUserAgent(
                "Mozilla/5.0 (Windows; U; Windows NT 6.1; de; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13");
        comment.setPermalink("http://dailyfratze.de/marie/2011/1/3");
        comment.setCommentType("comment");
        comment.setCommentAuthor("viagra-test-123");
        comment.setCommentAuthorEmail("viagra-test-123@test.com");
        comment.setCommentAuthorUrl("http://test.com");
        comment.setCommentContent("Scharfes Outfit :D");
        Assert.assertTrue(akismet.commentCheck(comment));
    }

    @Test
    public void submitSpam() throws AkismetException {
        final AkismetImpl akismet = newAkismet();

        AkismetComment comment = new AkismetComment();
        comment.setUserIp("201.45.14.18");
        comment.setUserAgent("UserAgent");
        comment.setPermalink("http://dailyfratze.de/app/news/show/256");
        comment.setCommentType("comment");
        comment.setCommentAuthor("yohlctfwnem");
        comment.setCommentAuthorEmail("rcphwp@nvwcjd.com");
        comment.setCommentAuthorUrl("http://dzhnjufiaxlf.com/");
        comment.setCommentContent(
                "yKWClC  <a href=\"http://thmntcyecyjz.com/\">thmntcyecyjz</a>, [url=http://bfvheegcdlmi.com/]bfvheegcdlmi[/url], [link=http://pizhqyywdhzu.com/]pizhqyywdhzu[/link], http://gowqkgqrfpag.com/");
        Assert.assertTrue(akismet.submitSpam(comment));
    }

    @Test
    public void submitHam() throws AkismetException {
        final AkismetImpl akismet = newAkismet();

        AkismetComment comment = new AkismetComment();
        comment.setUserIp("80.138.52.114");
        comment.setUserAgent(
                "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.10 (KHTML, like Gecko) Chrome/8.0.552.224 Safari/534.10");
        comment.setPermalink("http://dailyfratze.de/marie/2011/1/3");
        comment.setCommentType("comment");
        comment.setCommentAuthor("Michael");
        comment.setCommentAuthorEmail("misi@planet-punk.de");
        comment.setCommentAuthorUrl("http://planet-punk.de");
        comment.setCommentContent("Scharfes Outfit :D");
        Assert.assertTrue(akismet.submitHam(comment));
    }
}