/*
* Copyright (c) 2011-2014 Jeppetto and Jonathan Thompson
*
* 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.iternine.jeppetto.dao.test.examples.gamescore;
import org.junit.After;
import org.junit.Assert;
import org.junit.Test;
import java.util.Date;
/**
*/
public abstract class GameScoreTest {
//-------------------------------------------------------------
// Constants
//-------------------------------------------------------------
protected static final Date oneDayAgo = new Date((new Date()).getTime() - (1*24*60*60*1000));
protected static final Date sevenDaysAgo = new Date((new Date()).getTime() - (7*24*60*60*1000));
protected static final Date fourteenDaysAgo = new Date((new Date()).getTime() - (14*24*60*60*1000));
protected static final Date twentyOneDaysAgo = new Date((new Date()).getTime() - (21*24*60*60*1000));
//-------------------------------------------------------------
// Methods - Abstract
//-------------------------------------------------------------
protected abstract GameScoreDAO getGameScoreDAO();
protected abstract UserProgressDAO getUserProgressDAO();
protected abstract void reset();
//-------------------------------------------------------------
// Methods - Test Lifecycle
//-------------------------------------------------------------
@After
public void after() {
reset();
}
//-------------------------------------------------------------
// Tests
//-------------------------------------------------------------
@Test
public void findTopScores() {
createData();
Iterable<GameScore> gameScores = getGameScoreDAO().findByGameTitleOrderByTopScoreDesc("Galaxy Invaders");
int lastTopScore = Integer.MAX_VALUE;
int count = 0;
for (GameScore gameScore : gameScores) {
Assert.assertEquals("Galaxy Invaders", gameScore.getGameTitle());
Assert.assertTrue(gameScore.getTopScore() <= lastTopScore);
lastTopScore = gameScore.getTopScore();
count++;
}
Assert.assertEquals(3, count);
}
@Test
public void findZeroScores() {
createData();
getUserProgressDAO().save(new UserProgress("123", "Comet Quest", 0, oneDayAgo, 0, 1));
getUserProgressDAO().save(new UserProgress("201", "Comet Quest", 0, oneDayAgo, 0, 1));
getUserProgressDAO().save(new UserProgress("301", "Comet Quest", 0, oneDayAgo, 0, 1));
getUserProgressDAO().save(new UserProgress("400", "Comet Quest", 1000, oneDayAgo, 1, 0));
Iterable<GameScore> gameScores = getGameScoreDAO().findByGameTitleAndTopScore("Comet Quest", 0);
int count = 0;
for (GameScore gameScore : gameScores) {
Assert.assertEquals("Comet Quest", gameScore.getGameTitle());
Assert.assertEquals(0, gameScore.getTopScore());
count++;
}
Assert.assertEquals(3, count);
}
//-------------------------------------------------------------
// Methods - Private
//-------------------------------------------------------------
private void createData() {
getUserProgressDAO().save(new UserProgress("101", "Galaxy Invaders", 5842, oneDayAgo, 21, 72));
getUserProgressDAO().save(new UserProgress("101", "Meteor Blasters", 1000, sevenDaysAgo, 12, 3));
getUserProgressDAO().save(new UserProgress("101", "Starship X", 24, fourteenDaysAgo, 4, 9));
getUserProgressDAO().save(new UserProgress("102", "Alien Adventure", 192, oneDayAgo, 32, 192));
getUserProgressDAO().save(new UserProgress("102", "Galaxy Invaders", 0, sevenDaysAgo, 0, 5));
getUserProgressDAO().save(new UserProgress("103", "Attack Ships", 3, oneDayAgo, 1, 8));
getUserProgressDAO().save(new UserProgress("103", "Galaxy Invaders", 2317, sevenDaysAgo, 40, 3));
getUserProgressDAO().save(new UserProgress("103", "Meteor Blasters", 723, fourteenDaysAgo, 22, 12));
getUserProgressDAO().save(new UserProgress("103", "Starship X", 42, twentyOneDaysAgo, 4, 19));
}
}