/** * Copyright (C) 2015 BITPlan GmbH * * Pater-Delp-Str. 1 * D-47877 Willich-Schiefbahn * * http://www.bitplan.com * */ package com.bitplan.mediawiki.japi; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; import java.util.List; import java.util.logging.Level; import javax.xml.datatype.DatatypeFactory; import javax.xml.datatype.XMLGregorianCalendar; import org.junit.Test; import com.bitplan.mediawiki.japi.api.Api; import com.bitplan.mediawiki.japi.api.Rc; /** * http://www.mediawiki.org/wiki/API:Recentchanges * @author wf * */ public class TestAPI_Recentchanges extends APITestbase { /** * test http://www.mediawiki.org/wiki/API:Recentchanges * * @throws Exception */ @Test public void testGetRecentChanges() throws Exception { Api api = getQueryResult("&list=recentchanges&rcprop=title%7Cids%7Csizes%7Cflags%7Cuser&rclimit=3"); List<Rc> rcList = api.getQuery().getRecentchanges(); assertEquals(3, rcList.size()); for (Rc rc:rcList) { assertNotNull(rc.getTitle()); } } /** * show a list of recent changes * @param rcList */ public void showRCList(List<Rc> rcList) { LOGGER.log(Level.INFO,"found "+rcList.size()+" recent changes"); for (Rc rc:rcList) { LOGGER.log(Level.INFO,rc.getTitle()+"("+rc.getPageid()+"/"+rc.getTimestamp()+")"); } } /** * get recent changes specifying the number of days * @throws Exception */ @Test public void testGetRecentChangesWithDays() throws Exception { // debug=true; Mediawiki lwiki = super.getWiki().getMediaWikiJapi(); if (debug) lwiki.setDebug(debug); Date today = new Date(); Calendar cal = new GregorianCalendar(); cal.setTime(today); cal.add(Calendar.DAY_OF_MONTH, -30); Date date30daysbefore = cal.getTime(); String rcstart=lwiki.dateToMWTimeStamp(today); String rcend=lwiki.dateToMWTimeStamp(date30daysbefore); int rclimit=4; List<Rc> rcList=lwiki.getRecentChanges(rcstart,rcend,rclimit); assertNotNull(rcList); if (debug) { showRCList(rcList); } assertTrue(rcList.size()>0); } @Test public void testGetMostRecentChanges() throws Exception { //debug=true; ExampleWiki lewiki = ewm.get("mediawiki-japi-test1_24"); lewiki.login(); Mediawiki lwiki = lewiki.getMediaWikiJapi(); String pageTitle="Examplepage for recent change"; String summary="changed for testGetMostRecentChanges at "+lwiki.getIsoTimeStamp(); String change1="Change it to change1"; lwiki.edit(pageTitle, change1, summary); String change2="Change it to change2"; lwiki.edit(pageTitle, change2, summary); if (debug) lwiki.setDebug(debug); int rcLimit=5; int days=30; List<Rc> rcList=lwiki.getMostRecentChanges(days,rcLimit); assertNotNull(rcList); if (debug) { showRCList(rcList); } } @Test public void sortByTitleAndFilterDoubles() throws Exception { List<Rc> rcList=new ArrayList<Rc>(); String[] titles={"Title1","Title2","Title2","Title1","Title3"}; String[] ts={"2015-01-01","2015-01-01","2016-01-02","2016-01-01","2015-07-01"}; SimpleDateFormat tsFormat = new SimpleDateFormat("yyyy-MM-dd"); int index=0; for (String title:titles) { Rc testRc=new Rc(); testRc.setTitle(title); Date tsDate=tsFormat.parse(ts[index++]); GregorianCalendar cal = new GregorianCalendar(); cal.setTime(tsDate); XMLGregorianCalendar xdate=DatatypeFactory.newInstance().newXMLGregorianCalendar(cal); testRc.setTimestamp(xdate); rcList.add(testRc); } ExampleWiki lewiki = ewm.get("mediawiki-japi-test1_24"); Mediawiki lwiki = lewiki.getMediaWikiJapi(); //debug=true; List<Rc> sortedFilteredList = lwiki.sortByTitleAndFilterDoubles(rcList); if (debug) { showRCList(rcList); showRCList(sortedFilteredList); } } }