test PlayerStatsMapper
This commit is contained in:
@@ -44,10 +44,11 @@ public class PrisonAPI extends JavaPlugin {
|
|||||||
public void onEnable() {
|
public void onEnable() {
|
||||||
saveDefaultConfig();
|
saveDefaultConfig();
|
||||||
|
|
||||||
|
final String dbDriver = getConfig().getString("database.driver");
|
||||||
final String dbUrl = getConfig().getString("database.url");
|
final String dbUrl = getConfig().getString("database.url");
|
||||||
final String dbUser = getConfig().getString("database.user");
|
final String dbUser = getConfig().getString("database.user");
|
||||||
final String dbPasswd = getConfig().getString("database.password");
|
final String dbPasswd = getConfig().getString("database.password");
|
||||||
|
|
||||||
sqlStore = new SQLStore(dbUrl, dbUser, dbPasswd);
|
sqlStore = new SQLStore(dbDriver, dbUrl, dbUser, dbPasswd);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import java.util.Objects;
|
|||||||
|
|
||||||
public class DailyRespectTaskEntity {
|
public class DailyRespectTaskEntity {
|
||||||
|
|
||||||
|
private String name;
|
||||||
private String uuid;
|
private String uuid;
|
||||||
private Integer cooldownRespect;
|
private Integer cooldownRespect;
|
||||||
|
|
||||||
@@ -35,4 +36,12 @@ public class DailyRespectTaskEntity {
|
|||||||
public int hashCode() {
|
public int hashCode() {
|
||||||
return Objects.hash(getUuid());
|
return Objects.hash(getUuid());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import java.util.Objects;
|
|||||||
public class PlayerStatsEntity {
|
public class PlayerStatsEntity {
|
||||||
|
|
||||||
private String uuid;
|
private String uuid;
|
||||||
|
private String name;
|
||||||
private Integer wallet;
|
private Integer wallet;
|
||||||
private Integer faction;
|
private Integer faction;
|
||||||
private Integer rang;
|
private Integer rang;
|
||||||
@@ -143,4 +144,12 @@ public class PlayerStatsEntity {
|
|||||||
public void setSuspect(Integer suspect) {
|
public void setSuspect(Integer suspect) {
|
||||||
this.suspect = suspect;
|
this.suspect = suspect;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,8 +10,9 @@ public class SQLStore {
|
|||||||
|
|
||||||
private SqlSessionFactory sqlSessionFactory;
|
private SqlSessionFactory sqlSessionFactory;
|
||||||
|
|
||||||
public SQLStore(String url, String user, String password) {
|
public SQLStore(String driver, String url, String user, String password) {
|
||||||
Properties properties = new Properties();
|
Properties properties = new Properties();
|
||||||
|
properties.put("driver", driver);
|
||||||
properties.put("url", url);
|
properties.put("url", url);
|
||||||
properties.put("user", user);
|
properties.put("user", user);
|
||||||
properties.put("password", password);
|
properties.put("password", password);
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
package ru.prisonlife.api.template;
|
package ru.prisonlife.api.template;
|
||||||
|
|
||||||
import com.google.common.collect.ImmutableMap;
|
|
||||||
import org.apache.ibatis.session.SqlSession;
|
import org.apache.ibatis.session.SqlSession;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
@@ -8,11 +7,12 @@ import org.bukkit.configuration.file.FileConfiguration;
|
|||||||
import org.bukkit.configuration.file.YamlConfiguration;
|
import org.bukkit.configuration.file.YamlConfiguration;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import ru.prisonlife.api.PrisonAPI;
|
import ru.prisonlife.api.PrisonAPI;
|
||||||
|
import ru.prisonlife.api.store.DailyRespectTaskEntity;
|
||||||
|
import ru.prisonlife.api.store.PlayerStatsEntity;
|
||||||
import ru.prisonlife.api.store.PlayersInCagesEntity;
|
import ru.prisonlife.api.store.PlayersInCagesEntity;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.lang.ref.WeakReference;
|
import java.lang.ref.WeakReference;
|
||||||
import java.sql.SQLException;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
@@ -165,22 +165,12 @@ public class Prisoner extends AbstractApiData {
|
|||||||
return stats;
|
return stats;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void register() throws SQLException {
|
public void register() {
|
||||||
try (SqlSession sqlSession = getSqlStore().openSession()) {
|
try (SqlSession sqlSession = getSqlStore().openSession()) {
|
||||||
Integer result = sqlSession.selectOne("PlayerStats.countByUuid", getPlayer().getUniqueId().toString());
|
Integer result = sqlSession.selectOne("PlayerStats.countByUuid", getPlayer().getUniqueId().toString());
|
||||||
if (result == null || result == 0) {
|
if (result == null || result == 0) {
|
||||||
sqlSession.insert("PlayerStats.register", ImmutableMap.builder()
|
registerPlayerStats(sqlSession);
|
||||||
.put("name", getPlayer().getName())
|
registerDailyRespectTask(sqlSession);
|
||||||
.put("uuid", getPlayer().getUniqueId().toString())
|
|
||||||
.build()
|
|
||||||
);
|
|
||||||
|
|
||||||
sqlSession.insert("DailyRespectTask.register", ImmutableMap.builder()
|
|
||||||
.put("name", getPlayer().getName())
|
|
||||||
.put("uuid", getPlayer().getUniqueId().toString())
|
|
||||||
.put("cooldown", 3600 * 24)
|
|
||||||
.build()
|
|
||||||
);
|
|
||||||
|
|
||||||
level = new Level(this);
|
level = new Level(this);
|
||||||
stats = new Stats(this);
|
stats = new Stats(this);
|
||||||
@@ -189,6 +179,23 @@ public class Prisoner extends AbstractApiData {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void registerPlayerStats(SqlSession sqlSession) {
|
||||||
|
final PlayerStatsEntity entity = new PlayerStatsEntity();
|
||||||
|
entity.setName(getPlayer().getName());
|
||||||
|
entity.setUuid(getPlayer().getUniqueId().toString());
|
||||||
|
|
||||||
|
sqlSession.insert("PlayerStats.register", entity);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void registerDailyRespectTask(SqlSession sqlSession) {
|
||||||
|
final DailyRespectTaskEntity entity = new DailyRespectTaskEntity();
|
||||||
|
entity.setName(getPlayer().getName());
|
||||||
|
entity.setUuid(getPlayer().getUniqueId().toString());
|
||||||
|
entity.setCooldownRespect(3600 * 24);
|
||||||
|
|
||||||
|
sqlSession.insert("DailyRespectTask.register", entity);
|
||||||
|
}
|
||||||
|
|
||||||
private PlayersInCagesEntity getPlayersInCagesEntity() {
|
private PlayersInCagesEntity getPlayersInCagesEntity() {
|
||||||
PlayersInCagesEntity entity;
|
PlayersInCagesEntity entity;
|
||||||
if (refPlayersInCagesEntity != null) {
|
if (refPlayersInCagesEntity != null) {
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
database:
|
database:
|
||||||
|
driver: com.mysql.jdbc.Driver
|
||||||
url: jdbc:mysql://localhost:3306/prison4life
|
url: jdbc:mysql://localhost:3306/prison4life
|
||||||
user: root
|
user: root
|
||||||
password: root
|
password: root
|
||||||
@@ -3,6 +3,7 @@
|
|||||||
<mapper namespace="PlayerStats">
|
<mapper namespace="PlayerStats">
|
||||||
|
|
||||||
<resultMap id="result" type="PlayerStatsEntity">
|
<resultMap id="result" type="PlayerStatsEntity">
|
||||||
|
<result property = "name" column = "NAME"/>
|
||||||
<result property = "uuid" column = "UUID"/>
|
<result property = "uuid" column = "UUID"/>
|
||||||
<result property = "wallet" column = "WALLET"/>
|
<result property = "wallet" column = "WALLET"/>
|
||||||
<result property = "faction" column = "FACTION"/>
|
<result property = "faction" column = "FACTION"/>
|
||||||
@@ -27,9 +28,9 @@
|
|||||||
SELECT COUNT(*) FROM player_stats WHERE UUID = #{id}
|
SELECT COUNT(*) FROM player_stats WHERE UUID = #{id}
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<insert id="register">
|
<insert id="register" parameterType="PlayerStatsEntity">
|
||||||
INSERT INTO player_stats (NAME, UUID, LEVEL, POINTS, FACTION, RESPECT, F_RANG, SUSPECT, WALLET, G_TIME, D_BLOCKS, K_PLAYERS, K_MOBS, DEATHS)
|
INSERT INTO player_stats (NAME, UUID, LEVEL, POINTS, FACTION, RESPECT, F_RANG, SUSPECT, WALLET, G_TIME, D_BLOCKS, K_PLAYERS, K_MOBS, DEATHS, COOLDOWN)
|
||||||
VALUES (#{name}, #{uuid}, 1, 0, 'NONE', 0, 0, 0, 0, 0, 0, 0, 0, 0)
|
VALUES (#{name}, #{uuid}, #{level}, #{points}, #{faction}, #{respect}, #{rang}, #{suspect}, #{wallet}, #{serverTime}, #{blocks}, #{players}, #{mobs}, #{deaths}, #{cooldownRespect})
|
||||||
</insert>
|
</insert>
|
||||||
|
|
||||||
<update id="update" parameterType="PlayerStatsEntity">
|
<update id="update" parameterType="PlayerStatsEntity">
|
||||||
@@ -45,7 +46,9 @@
|
|||||||
D_BLOCKS = #{blocks},
|
D_BLOCKS = #{blocks},
|
||||||
K_PLAYERS = #{players},
|
K_PLAYERS = #{players},
|
||||||
K_MOBS = #{mobs},
|
K_MOBS = #{mobs},
|
||||||
DEATHS = #{deaths}
|
DEATHS = #{deaths},
|
||||||
|
NAME = #{name},
|
||||||
|
SUSPECT = #{suspect}
|
||||||
WHERE UUID = #{uuid};
|
WHERE UUID = #{uuid};
|
||||||
</update>
|
</update>
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
<environment id="main">
|
<environment id="main">
|
||||||
<transactionManager type="JDBC"/>
|
<transactionManager type="JDBC"/>
|
||||||
<dataSource type="POOLED">
|
<dataSource type="POOLED">
|
||||||
<property name = "driver" value = "com.mysql.jdbc.Driver"/>
|
<property name = "driver" value = "${driver}"/>
|
||||||
<property name = "url" value = "${url}"/>
|
<property name = "url" value = "${url}"/>
|
||||||
<property name = "username" value = "${user}"/>
|
<property name = "username" value = "${user}"/>
|
||||||
<property name = "password" value = "${password}"/>
|
<property name = "password" value = "${password}"/>
|
||||||
|
|||||||
205
src/test/java/ru/prisonlife/api/store/PlayerStatsMapperTest.java
Normal file
205
src/test/java/ru/prisonlife/api/store/PlayerStatsMapperTest.java
Normal file
@@ -0,0 +1,205 @@
|
|||||||
|
package ru.prisonlife.api.store;
|
||||||
|
|
||||||
|
import org.apache.ibatis.session.SqlSession;
|
||||||
|
import org.junit.After;
|
||||||
|
import org.junit.BeforeClass;
|
||||||
|
import org.junit.Test;
|
||||||
|
import ru.prisonlife.api.PrisonAPI;
|
||||||
|
|
||||||
|
import java.lang.reflect.Field;
|
||||||
|
import java.sql.PreparedStatement;
|
||||||
|
import java.sql.ResultSet;
|
||||||
|
import java.sql.SQLException;
|
||||||
|
import java.sql.Statement;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Optional;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
import static org.junit.Assert.*;
|
||||||
|
|
||||||
|
public class PlayerStatsMapperTest {
|
||||||
|
|
||||||
|
private static SQLStore sqlStore;
|
||||||
|
|
||||||
|
@BeforeClass
|
||||||
|
public static void beforeAll() {
|
||||||
|
sqlStore = new SQLStore(
|
||||||
|
"org.h2.Driver",
|
||||||
|
"jdbc:h2:mem:testDb;DB_CLOSE_DELAY=-1",
|
||||||
|
"sa",
|
||||||
|
""
|
||||||
|
);
|
||||||
|
|
||||||
|
assertNotNull(sqlStore);
|
||||||
|
|
||||||
|
try (SqlSession sqlSession = sqlStore.openSession()) {
|
||||||
|
assertNotNull(sqlSession);
|
||||||
|
|
||||||
|
final String sql = "CREATE TABLE IF NOT EXISTS player_stats (" +
|
||||||
|
"NAME VARCHAR(16)," +
|
||||||
|
"UUID VARCHAR(64)," +
|
||||||
|
"WALLET INT," +
|
||||||
|
"FACTION INT," +
|
||||||
|
"F_RANG INT," +
|
||||||
|
"RESPECT INT," +
|
||||||
|
"COOLDOWN INT," +
|
||||||
|
"POINTS DOUBLE," +
|
||||||
|
"LEVEL DOUBLE," +
|
||||||
|
"G_TIME INT," +
|
||||||
|
"D_BLOCKS INT," +
|
||||||
|
"K_PLAYERS INT," +
|
||||||
|
"K_MOBS INT," +
|
||||||
|
"DEATHS INT," +
|
||||||
|
"SUSPECT INT);";
|
||||||
|
|
||||||
|
try (Statement statement = sqlSession.getConnection().createStatement()) {
|
||||||
|
statement.execute(sql);
|
||||||
|
} catch (SQLException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
|
||||||
|
fail(e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@After
|
||||||
|
public void after() {
|
||||||
|
try(SqlSession session = sqlStore.openSession()) {
|
||||||
|
try(Statement statement = session.getConnection().createStatement()) {
|
||||||
|
statement.execute("DELETE FROM player_stats");
|
||||||
|
}
|
||||||
|
} catch (SQLException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
|
||||||
|
fail(e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private PlayerStatsEntity createPlayerStatsEntity() {
|
||||||
|
PlayerStatsEntity entity = new PlayerStatsEntity();
|
||||||
|
|
||||||
|
entity.setName("Fake Player");
|
||||||
|
entity.setUuid(UUID.randomUUID().toString());
|
||||||
|
entity.setWallet(1);
|
||||||
|
entity.setFaction(PrisonAPI.Factions.NONE.getId());
|
||||||
|
entity.setRang(2);
|
||||||
|
entity.setRespect(3);
|
||||||
|
entity.setCooldownRespect(4);
|
||||||
|
entity.setPoints(5.0D);
|
||||||
|
entity.setLevel(6.0D);
|
||||||
|
entity.setServerTime(7);
|
||||||
|
entity.setBlocks(8);
|
||||||
|
entity.setPlayers(9);
|
||||||
|
entity.setMobs(10);
|
||||||
|
entity.setDeaths(11);
|
||||||
|
entity.setSuspect(12);
|
||||||
|
|
||||||
|
return entity;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testRegisterAndSelectOne() {
|
||||||
|
final PlayerStatsEntity savedEntity = createPlayerStatsEntity();
|
||||||
|
|
||||||
|
try (SqlSession session = sqlStore.openSession()) {
|
||||||
|
assertEquals(1, session.insert("PlayerStats.register", savedEntity));
|
||||||
|
session.commit();
|
||||||
|
}
|
||||||
|
|
||||||
|
assertRegister(savedEntity);
|
||||||
|
|
||||||
|
PlayerStatsEntity entity;
|
||||||
|
try (SqlSession session = sqlStore.openSession()) {
|
||||||
|
entity = session.selectOne("PlayerStats.selectOne", savedEntity.getUuid());
|
||||||
|
}
|
||||||
|
|
||||||
|
assertNotNull(entity);
|
||||||
|
assertEquals(entity, savedEntity);
|
||||||
|
assertFields(entity, savedEntity);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testCount() {
|
||||||
|
final PlayerStatsEntity savedEntity = createPlayerStatsEntity();
|
||||||
|
|
||||||
|
try (SqlSession session = sqlStore.openSession()) {
|
||||||
|
assertEquals(1, session.insert("PlayerStats.register", savedEntity));
|
||||||
|
session.commit();
|
||||||
|
}
|
||||||
|
|
||||||
|
Integer result;
|
||||||
|
try (SqlSession session = sqlStore.openSession()) {
|
||||||
|
result = session.selectOne("PlayerStats.countByUuid", savedEntity.getUuid());
|
||||||
|
}
|
||||||
|
|
||||||
|
assertNotNull(result);
|
||||||
|
assertEquals(1, result.intValue());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testUpdate() {
|
||||||
|
final PlayerStatsEntity savedEntity = createPlayerStatsEntity();
|
||||||
|
|
||||||
|
try (SqlSession session = sqlStore.openSession()) {
|
||||||
|
assertEquals(1, session.insert("PlayerStats.register", savedEntity));
|
||||||
|
session.commit();
|
||||||
|
}
|
||||||
|
|
||||||
|
savedEntity.setName("New Name");
|
||||||
|
|
||||||
|
try (SqlSession session = sqlStore.openSession()) {
|
||||||
|
assertEquals(1, session.update("PlayerStats.update", savedEntity));
|
||||||
|
session.commit();
|
||||||
|
}
|
||||||
|
|
||||||
|
PlayerStatsEntity entity;
|
||||||
|
try (SqlSession session = sqlStore.openSession()) {
|
||||||
|
entity = session.selectOne("PlayerStats.selectOne", savedEntity.getUuid());
|
||||||
|
}
|
||||||
|
|
||||||
|
assertNotNull(entity);
|
||||||
|
assertEquals(entity.getName(), savedEntity.getName());
|
||||||
|
}
|
||||||
|
|
||||||
|
private void assertRegister(PlayerStatsEntity savedEntity) {
|
||||||
|
try (SqlSession session = sqlStore.openSession()) {
|
||||||
|
final String sql = "SELECT COUNT(*) FROM player_stats WHERE UUID = ?";
|
||||||
|
|
||||||
|
try (PreparedStatement stmt = session.getConnection().prepareStatement(sql)) {
|
||||||
|
stmt.setString(1, savedEntity.getUuid());
|
||||||
|
|
||||||
|
try(ResultSet resultSet = stmt.executeQuery()) {
|
||||||
|
assertTrue(resultSet.next());
|
||||||
|
assertEquals(1, resultSet.getInt(1));
|
||||||
|
}
|
||||||
|
} catch (SQLException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
fail(e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void assertFields(PlayerStatsEntity expected, PlayerStatsEntity actual) {
|
||||||
|
final List<Field> expectedFields = Arrays.asList(expected.getClass().getDeclaredFields());
|
||||||
|
final List<Field> actualFields = Arrays.asList(actual.getClass().getDeclaredFields());
|
||||||
|
|
||||||
|
assertEquals(expectedFields.size(), actualFields.size());
|
||||||
|
|
||||||
|
expectedFields.forEach(expField -> {
|
||||||
|
Optional<Field> optField = actualFields.stream().filter(field -> field.getName().equals(expField.getName())).findFirst();
|
||||||
|
assertTrue(optField.isPresent());
|
||||||
|
Field actField = optField.get();
|
||||||
|
|
||||||
|
expField.setAccessible(true);
|
||||||
|
actField.setAccessible(true);
|
||||||
|
|
||||||
|
try {
|
||||||
|
assertEquals("Fields '" + expField.getName() + "' is not equals!",
|
||||||
|
expField.get(expected), actField.get(actual));
|
||||||
|
} catch (IllegalAccessException e) {
|
||||||
|
fail(e.getMessage());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -3,14 +3,15 @@ package ru.prisonlife.api.store;
|
|||||||
import org.apache.ibatis.session.SqlSession;
|
import org.apache.ibatis.session.SqlSession;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
import static org.junit.Assert.*;
|
import static org.junit.Assert.assertNotNull;
|
||||||
|
|
||||||
public class SQLStoreTest {
|
public class SQLStoreTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testCreate() {
|
public void testCreate() {
|
||||||
SQLStore sqlStore = new SQLStore(
|
SQLStore sqlStore = new SQLStore(
|
||||||
"jdbc:h2:mem:testDb",
|
"org.h2.Driver",
|
||||||
|
"jdbc:h2:mem:testDb;DB_CLOSE_DELAY=-1",
|
||||||
"sa",
|
"sa",
|
||||||
""
|
""
|
||||||
);
|
);
|
||||||
|
|||||||
Reference in New Issue
Block a user