diff --git a/projjpn/GamesDB.accdb b/projjpn/GamesDB.accdb new file mode 100644 index 0000000000000000000000000000000000000000..1e9a2f9bfa7f641ec006b9f3b5d523ef0ace780c GIT binary patch literal 1015808 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 31) { + return false; + } + if (MM < 1 || MM > 12) { + return false; + } + if (YYYY < 1990 || YYYY > 2022) { + return false; + } + + return true; + } + +} diff --git a/projjpn/src/main/java/de/hs_fulda/ciip/projjpn/Customers.java b/projjpn/src/main/java/de/hs_fulda/ciip/projjpn/Customers.java new file mode 100644 index 0000000..e2fd71a --- /dev/null +++ b/projjpn/src/main/java/de/hs_fulda/ciip/projjpn/Customers.java @@ -0,0 +1,56 @@ +package de.hs_fulda.ciip.projjpn; + +import java.util.HashMap; + +public class Customers { + HashMap pool = new HashMap(); + + /** + * + * @param nickname Is the particular Nickname free to use? + * @return true if nickname is Available. + * @return false if nickname is Available. + */ + public boolean nickNameAvailable(String nickname) { + User u = pool.get(nickname); + if (null == u) { + return true; + } + return false; + } + + /** + * + * @param user New User to register. + * @return + */ + public User registerUser(User user) { + return pool.putIfAbsent(user.nickName, user); + } + + /** + * + * @param userNickname Delete a particular User with the given nickname + * @return null or the deleted user. + */ + public User deleteUser(String userNickname) { + return pool.remove(userNickname); + } + + /** + * + * @param nickname Find User by nickname + * @return + */ + public User getByNickname(String nickname) { + return pool.get(nickname); + } + + /** + * + * @return Number of Users. + */ + public int getCountOfUsers() { + return pool.size(); + } +} diff --git a/projjpn/src/main/java/de/hs_fulda/ciip/projjpn/Games.java b/projjpn/src/main/java/de/hs_fulda/ciip/projjpn/Games.java new file mode 100644 index 0000000..38172d4 --- /dev/null +++ b/projjpn/src/main/java/de/hs_fulda/ciip/projjpn/Games.java @@ -0,0 +1,2449 @@ +package de.hs_fulda.ciip.projjpn; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; + +public class Games { + private String databaseURL = "jdbc:ucanaccess://GamesDB.accdb"; + + /** + * Checks if the connection to the database can be established + * + * @return Returns true if it connects successfully and false if the connection + * fails. + */ + public boolean checkConnection() { + try { + Connection connection = DriverManager.getConnection(databaseURL); + + connection.close(); + return true; + + } catch (SQLException e) { + return false; + } + } + + /** + * Prints the whole table for those, who cannot access the Database for some + * reason. + * + * @return Returns a String of the whole table. + */ + public String printTable() { + String result = ""; + String query = "SELECT * FROM Games"; + + try { + Connection connection = DriverManager.getConnection(databaseURL); + + Statement statement = connection.createStatement(); + ResultSet resultSet = statement.executeQuery(query); + result += "Name, Console, Developer, Publisher EU, Publisher JP, Publisher NA, Genre, Release EU, Release JP, Release NA, Release AU, USK Rating, PEGI Rating, ESRB Rating, CERO Rating, ACB Rating, Players\n\n"; + + while (resultSet.next()) { + String gameName = resultSet.getString("Game_Name"); + String gameConsole = resultSet.getString("Game_Console"); + String gameDeveloper = resultSet.getString("Game_Developer"); + String gamePublisherEu = resultSet.getString("Game_Publisher_EU"); + String gamePublisherJp = resultSet.getString("Game_Publisher_JP"); + String gamePublisherNa = resultSet.getString("Game_Publisher_NA"); + String gameGenre = resultSet.getString("Game_Genre"); + + String gameReleaseEu = resultSet.getString("Game_Release_EU"); + String gameReleaseEuDots = gameReleaseEu.substring(8, 10) + "." + gameReleaseEu.substring(5, 7) + "." + + gameReleaseEu.substring(0, 4); + + String gameReleaseJp = resultSet.getString("Game_Release_JP"); + String gameReleaseJpDots = gameReleaseJp.substring(8, 10) + "." + gameReleaseJp.substring(5, 7) + "." + + gameReleaseJp.substring(0, 4); + + String gameReleaseNa = resultSet.getString("Game_Release_NA"); + String gameReleaseNaDots = gameReleaseNa.substring(8, 10) + "." + gameReleaseNa.substring(5, 7) + "." + + gameReleaseNa.substring(0, 4); + String gameReleaseAu = resultSet.getString("Game_Release_AU"); + String gameReleaseAuDots; + if (gameReleaseAu != null) { + gameReleaseAuDots = gameReleaseAu.substring(8, 10) + "." + gameReleaseAu.substring(5, 7) + "." + + gameReleaseAu.substring(0, 4); + } else { + gameReleaseAuDots = "Unknown"; + } + + int gameUsk = resultSet.getInt("Game_USK_Rating"); + int gamePegi = resultSet.getInt("Game_PEGI_Rating"); + String gameEsrb = resultSet.getString("Game_ESRB_Rating"); + String gameCero = resultSet.getString("Game_CERO_Rating"); + String gameAcb = resultSet.getString("Game_ACB_Rating"); + String gamePlayers = resultSet.getString("Game_Players"); + + if (gamePegi != 0) { + result += gameName + ", " + gameConsole + ", " + gameDeveloper + ", " + gamePublisherEu + ", " + + gamePublisherJp + ", " + gamePublisherNa + ", " + gameGenre + ", " + gameReleaseEuDots + + ", " + gameReleaseJpDots + ", " + gameReleaseNaDots + ", " + gameReleaseAuDots + ", " + + gameUsk + ", " + gamePegi + ", " + gameEsrb + ", " + gameCero + ", " + gameAcb + ", " + + gamePlayers + "\n"; + } else { + result += gameName + ", " + gameConsole + ", " + gameDeveloper + ", " + gamePublisherEu + ", " + + gamePublisherJp + ", " + gamePublisherNa + ", " + gameGenre + ", " + gameReleaseEuDots + + ", " + gameReleaseJpDots + ", " + gameReleaseNaDots + ", " + gameReleaseAuDots + ", " + + gameUsk + ", Unknown, " + gameEsrb + ", " + gameCero + ", " + gameAcb + ", " + gamePlayers + + "\n"; + } + + } + statement.close(); + + connection.close(); + + } catch (SQLException e) { + e.printStackTrace(); + } + // The substring removes the last New line in the String. + return result.substring(0, result.length() - 1); + } + + /** + * Prints out all game names from the table. + * + * @return Returns a String with the game names + */ + public String checkGames() { + String result = ""; + String query = "SELECT Game_Name FROM Games"; + + try { + Connection connection = DriverManager.getConnection(databaseURL); + + Statement statement = connection.createStatement(); + ResultSet resultSet = statement.executeQuery(query); + + while (resultSet.next()) { + String gameName = resultSet.getString("Game_Name"); + + result += gameName + ", "; + + } + statement.close(); + connection.close(); + + } catch (SQLException e) { + e.printStackTrace(); + } + + return result.substring(0, result.length() - 2); + } + + /** + * Prints out all of the consoles which are represented in the table. + * + * @return Returns a String with the consoles. + */ + public String checkConsoles() { + String result = ""; + String query = "SELECT Game_Console FROM Games"; + boolean ninSwitch = false; + boolean xbox = false; + boolean multiplat = false; + + try { + Connection connection = DriverManager.getConnection(databaseURL); + + Statement statement = connection.createStatement(); + ResultSet resultSet = statement.executeQuery(query); + + while (resultSet.next()) { + String gameConsole = resultSet.getString("Game_Console"); + + if (ninSwitch && gameConsole.equals("Nintendo Switch")) { + continue; + } else if (xbox && gameConsole.equals("Xbox")) { + continue; + } else if (multiplat && gameConsole.equals("Multiplatform")) { + continue; + } + + switch (gameConsole) { + case "Nintendo Switch": + ninSwitch = true; + break; + case "Xbox": + xbox = true; + break; + case "Multiplatform": + multiplat = true; + break; + } + + result += gameConsole + ", "; + + } + statement.close(); + connection.close(); + + } catch (SQLException e) { + e.printStackTrace(); + } + + return result.substring(0, result.length() - 2); + } + + /** + * Checks if the game has the same publishers across Europe, Japan and North + * America + * + * @return Prints the games, that have the same publishers. + */ + public String checkAllSamePublishers() { + String result = ""; + String query = "SELECT Game_Name, Game_Publisher_EU, Game_Publisher_JP, Game_Publisher_NA FROM Games"; + + try { + Connection connection = DriverManager.getConnection(databaseURL); + + Statement statement = connection.createStatement(); + ResultSet resultSet = statement.executeQuery(query); + + while (resultSet.next()) { + String gameName = resultSet.getString("Game_Name"); + String gamePublisherEu = resultSet.getString("Game_Publisher_EU"); + String gamePublisherJp = resultSet.getString("Game_Publisher_JP"); + String gamePublisherNa = resultSet.getString("Game_Publisher_NA"); + + if (gamePublisherEu.equals(gamePublisherJp) && gamePublisherJp.equals(gamePublisherNa) + && gamePublisherEu.equals(gamePublisherNa)) { + result += gameName + ", "; + } + + } + statement.close(); + connection.close(); + + } catch (SQLException e) { + e.printStackTrace(); + } + + return result.substring(0, result.length() - 2); + } + + /** + * Checks if the game has not the same publishers across Europe, Japan and North + * America + * + * @return Prints the games, that do not have the same publishers. + */ + public String checkAllDifferentPublishers() { + String result = ""; + String query = "SELECT Game_Name, Game_Publisher_EU, Game_Publisher_JP, Game_Publisher_NA FROM Games"; + + try { + Connection connection = DriverManager.getConnection(databaseURL); + + Statement statement = connection.createStatement(); + ResultSet resultSet = statement.executeQuery(query); + + while (resultSet.next()) { + String gameName = resultSet.getString("Game_Name"); + String gamePublisherEu = resultSet.getString("Game_Publisher_EU"); + String gamePublisherJp = resultSet.getString("Game_Publisher_JP"); + String gamePublisherNa = resultSet.getString("Game_Publisher_NA"); + + if (!gamePublisherEu.equals(gamePublisherJp) && !gamePublisherJp.equals(gamePublisherNa) + && !gamePublisherEu.equals(gamePublisherNa)) { + result += gameName + ", "; + } + + } + statement.close(); + connection.close(); + + } catch (SQLException e) { + e.printStackTrace(); + } + + return result.substring(0, result.length() - 2); + } + + /** + * Checks if the developers and the publishers are all the same. + * + * @return Prints the games, where publishers and developers are the same. + */ + public String checkAllDifferentPublishersDeveloper() { + String result = ""; + String query = "SELECT Game_Name, Game_Developer, Game_Publisher_EU, Game_Publisher_JP, Game_Publisher_NA FROM Games"; + + try { + Connection connection = DriverManager.getConnection(databaseURL); + + Statement statement = connection.createStatement(); + ResultSet resultSet = statement.executeQuery(query); + + while (resultSet.next()) { + String gameName = resultSet.getString("Game_Name"); + String gameDeveloper = resultSet.getString("Game_Developer"); + String gamePublisherEu = resultSet.getString("Game_Publisher_EU"); + String gamePublisherJp = resultSet.getString("Game_Publisher_JP"); + String gamePublisherNa = resultSet.getString("Game_Publisher_NA"); + + if (gamePublisherEu.equals(gamePublisherJp) && gamePublisherJp.equals(gamePublisherNa) + && gamePublisherEu.equals(gamePublisherNa) && gameDeveloper.equals(gamePublisherEu) + && gameDeveloper.equals(gamePublisherJp) && gameDeveloper.equals(gamePublisherNa)) { + result += gameName + ", "; + } + + } + statement.close(); + connection.close(); + + } catch (SQLException e) { + e.printStackTrace(); + } + + return result.substring(0, result.length() - 2); + } + + /** + * Checks if the release dates are all the same across Europe, Japan, North + * America and Australia. + * + * @return Prints the games which have the same release dates. + */ + public String checkAllSameReleaseDates() { + String result = ""; + String query = "SELECT Game_Name, Game_Release_EU, Game_Release_JP, Game_Release_NA, Game_Release_AU FROM Games"; + + try { + Connection connection = DriverManager.getConnection(databaseURL); + + Statement statement = connection.createStatement(); + ResultSet resultSet = statement.executeQuery(query); + + while (resultSet.next()) { + String gameName = resultSet.getString("Game_Name"); + String gameReleaseEu = resultSet.getString("Game_Release_EU"); + String gameReleaseJp = resultSet.getString("Game_Release_JP"); + String gameReleaseNa = resultSet.getString("Game_Release_NA"); + String gameReleaseAu = resultSet.getString("Game_Release_AU"); + + if (gameReleaseAu == null) { + if (gameReleaseEu.equals(gameReleaseJp) && gameReleaseJp.equals(gameReleaseNa) + && gameReleaseEu.equals(gameReleaseNa)) { + result += gameName + ", "; + } + } else { + if (gameReleaseEu.equals(gameReleaseJp) && gameReleaseJp.equals(gameReleaseNa) + && gameReleaseEu.equals(gameReleaseNa) && gameReleaseAu.equals(gameReleaseEu) + && gameReleaseAu.equals(gameReleaseJp) && gameReleaseAu.equals(gameReleaseNa)) { + result += gameName + ", "; + } + } + + } + statement.close(); + connection.close(); + + } catch (SQLException e) { + e.printStackTrace(); + } + + return result.substring(0, result.length() - 2); + } + + /** + * Checks if the release dates are not all the same across Europe, Japan, North + * America and Australia. + * + * @return Prints the games which do not have the same release dates. + */ + public String checkAllDifferentReleaseDates() { + String result = ""; + String query = "SELECT Game_Name, Game_Release_EU, Game_Release_JP, Game_Release_NA, Game_Release_AU FROM Games"; + + try { + Connection connection = DriverManager.getConnection(databaseURL); + + Statement statement = connection.createStatement(); + ResultSet resultSet = statement.executeQuery(query); + + while (resultSet.next()) { + String gameName = resultSet.getString("Game_Name"); + String gameReleaseEu = resultSet.getString("Game_Release_EU"); + String gameReleaseJp = resultSet.getString("Game_Release_JP"); + String gameReleaseNa = resultSet.getString("Game_Release_NA"); + String gameReleaseAu = resultSet.getString("Game_Release_AU"); + + if (gameReleaseAu == null) { + if (!gameReleaseEu.equals(gameReleaseJp) && !gameReleaseJp.equals(gameReleaseNa) + && !gameReleaseEu.equals(gameReleaseNa)) { + result += gameName + ", "; + } + } else { + if (!gameReleaseEu.equals(gameReleaseJp) && !gameReleaseJp.equals(gameReleaseNa) + && !gameReleaseEu.equals(gameReleaseNa) && !gameReleaseAu.equals(gameReleaseEu) + && !gameReleaseAu.equals(gameReleaseJp) && !gameReleaseAu.equals(gameReleaseNa)) { + result += gameName + ", "; + } + } + + } + statement.close(); + connection.close(); + + } catch (SQLException e) { + e.printStackTrace(); + } + + return result.substring(0, result.length() - 2); + } + + /** + * Checks the game genres that are available in the table + * + * @return Prints all the available game genres from the table. + */ + public String checkGameGenres() { + String result = ""; + String query = "SELECT Game_Genre FROM Games"; + boolean actAd = false; + boolean rpg = false; + + try { + Connection connection = DriverManager.getConnection(databaseURL); + + Statement statement = connection.createStatement(); + ResultSet resultSet = statement.executeQuery(query); + + while (resultSet.next()) { + String gameGenre = resultSet.getString("Game_Genre"); + + if (actAd && gameGenre.equals("Action-Adventure")) { + continue; + } else if (rpg && gameGenre.equals("RPG")) { + continue; + } + + switch (gameGenre) { + case "Action-Adventure": + actAd = true; + break; + case "RPG": + rpg = true; + break; + } + + result += gameGenre + ", "; + + } + statement.close(); + connection.close(); + + } catch (SQLException e) { + e.printStackTrace(); + } + + return result.substring(0, result.length() - 2); + } + + /** + * Checks if the games genre is Action-Adventure + * + * @return Prints all the Action-Adventure games. + */ + public String checkGameGenreActionAdventure() { + String result = ""; + String query = "SELECT Game_Name, Game_Genre FROM Games"; + + try { + Connection connection = DriverManager.getConnection(databaseURL); + + Statement statement = connection.createStatement(); + ResultSet resultSet = statement.executeQuery(query); + + while (resultSet.next()) { + String gameName = resultSet.getString("Game_Name"); + String gameGenre = resultSet.getString("Game_Genre"); + + if (gameGenre.equals("Action-Adventure")) { + result += gameName + ", "; + } + + } + statement.close(); + connection.close(); + + } catch (SQLException e) { + e.printStackTrace(); + } + + return result.substring(0, result.length() - 2); + } + + /** + * Checks if the games genre is RPG + * + * @return Prints all the RPG games. + */ + public String checkGameGenreRPG() { + String result = ""; + String query = "SELECT Game_Name, Game_Genre FROM Games"; + + try { + Connection connection = DriverManager.getConnection(databaseURL); + + Statement statement = connection.createStatement(); + ResultSet resultSet = statement.executeQuery(query); + + while (resultSet.next()) { + String gameName = resultSet.getString("Game_Name"); + String gameGenre = resultSet.getString("Game_Genre"); + + if (gameGenre.equals("RPG")) { + result += gameName + ", "; + } + + } + statement.close(); + connection.close(); + + } catch (SQLException e) { + e.printStackTrace(); + } + + return result.substring(0, result.length() - 2); + } + + /** + * Prints out all of the games which are on a PlayStation console. + * + * @return Returns a String with the games from a PlayStation console. + */ + public String checkConsolePlayStation() { + String result = ""; + String query = "SELECT Game_Name, Game_Console FROM Games"; + + try { + Connection connection = DriverManager.getConnection(databaseURL); + + Statement statement = connection.createStatement(); + ResultSet resultSet = statement.executeQuery(query); + + while (resultSet.next()) { + String gameName = resultSet.getString("Game_Name"); + String gameConsole = resultSet.getString("Game_Console"); + + if (gameConsole.length() >= 11) { + if (gameConsole.substring(0, 11).equals("PlayStation")) { + result += gameName + ", "; + } + + } + + } + statement.close(); + connection.close(); + + } catch (SQLException e) { + e.printStackTrace(); + } + + return result.substring(0, result.length() - 2); + } + + /** + * Prints out all of the games which are on a Nintendo console. + * + * @return Returns a String with the games from a Nintendo console. + */ + public String checkConsoleNintendo() { + String result = ""; + String query = "SELECT Game_Name, Game_Console FROM Games"; + + try { + Connection connection = DriverManager.getConnection(databaseURL); + + Statement statement = connection.createStatement(); + ResultSet resultSet = statement.executeQuery(query); + + while (resultSet.next()) { + String gameName = resultSet.getString("Game_Name"); + String gameConsole = resultSet.getString("Game_Console"); + + if (gameConsole.length() >= 8) { + if (gameConsole.substring(0, 8).equals("Nintendo")) { + result += gameName + ", "; + } + + } + + } + statement.close(); + connection.close(); + + } catch (SQLException e) { + e.printStackTrace(); + } + + return result.substring(0, result.length() - 2); + } + + /** + * Prints out all of the games which are on a Xbox console. + * + * @return Returns a String with the games from a Xbox console. + */ + public String checkConsoleXbox() { + String result = ""; + String query = "SELECT Game_Name, Game_Console FROM Games"; + + try { + Connection connection = DriverManager.getConnection(databaseURL); + + Statement statement = connection.createStatement(); + ResultSet resultSet = statement.executeQuery(query); + + while (resultSet.next()) { + String gameName = resultSet.getString("Game_Name"); + String gameConsole = resultSet.getString("Game_Console"); + + if (gameConsole.length() >= 4) { + if (gameConsole.substring(0, 4).equals("Xbox")) { + result += gameName + ", "; + } + + } + + } + statement.close(); + connection.close(); + + } catch (SQLException e) { + e.printStackTrace(); + } + + return result.substring(0, result.length() - 2); + } + + /** + * Prints out all of the games which are multiplatform. + * + * @return Returns a String with the multiplatform games . + */ + public String checkConsoleMultiplatform() { + String result = ""; + String query = "SELECT Game_Name, Game_Console FROM Games"; + + try { + Connection connection = DriverManager.getConnection(databaseURL); + + Statement statement = connection.createStatement(); + ResultSet resultSet = statement.executeQuery(query); + + while (resultSet.next()) { + String gameName = resultSet.getString("Game_Name"); + String gameConsole = resultSet.getString("Game_Console"); + + if (gameConsole.length() >= 13) { + if (gameConsole.substring(0, 13).equals("Multiplatform")) { + result += gameName + ", "; + } + + } + + } + statement.close(); + connection.close(); + + } catch (SQLException e) { + e.printStackTrace(); + } + + return result.substring(0, result.length() - 2); + } + + /** + * Prints out all of the games which are on a Nintendo Switch. + * + * @return Returns a String with the games from a Nintendo Switch. + */ + public String checkConsoleNintendoSwitch() { + String result = ""; + String query = "SELECT Game_Name, Game_Console FROM Games"; + + try { + Connection connection = DriverManager.getConnection(databaseURL); + + Statement statement = connection.createStatement(); + ResultSet resultSet = statement.executeQuery(query); + + while (resultSet.next()) { + String gameName = resultSet.getString("Game_Name"); + String gameConsole = resultSet.getString("Game_Console"); + + if (gameConsole.equals("Nintendo Switch")) { + result += gameName + ", "; + + } + + } + statement.close(); + connection.close(); + + } catch (SQLException e) { + e.printStackTrace(); + } + + return result.substring(0, result.length() - 2); + } + + /** + * Checks if the developer of the game is Atlus. + * + * @return Prints the games developed by Atlus. + */ + + public String checkDeveloperAtlus() { + String result = ""; + String query = "SELECT Game_Name, Game_Developer FROM Games"; + + try { + Connection connection = DriverManager.getConnection(databaseURL); + + Statement statement = connection.createStatement(); + ResultSet resultSet = statement.executeQuery(query); + + while (resultSet.next()) { + String gameName = resultSet.getString("Game_Name"); + String gameDeveloper = resultSet.getString("Game_Developer"); + + if (gameDeveloper.equals("Atlus")) { + result += gameName + ", "; + + } + + } + statement.close(); + connection.close(); + + } catch (SQLException e) { + e.printStackTrace(); + } + + return result.substring(0, result.length() - 2); + } + + /** + * Checks the developers that are available in the table. + * + * @return Prints the developers from the table. + */ + + public String checkDevelopers() { + String result = ""; + String query = "SELECT Game_Developer FROM Games"; + boolean atlus = false; + boolean nintendoSpd = false; + + try { + Connection connection = DriverManager.getConnection(databaseURL); + + Statement statement = connection.createStatement(); + ResultSet resultSet = statement.executeQuery(query); + + while (resultSet.next()) { + String gameDeveloper = resultSet.getString("Game_Developer"); + + if (atlus && gameDeveloper.equals("Atlus")) { + continue; + } else if (nintendoSpd && gameDeveloper.equals("Nintendo SPD")) { + continue; + } + + switch (gameDeveloper) { + case "Atlus": + atlus = true; + break; + case "Nintendo SPD": + nintendoSpd = true; + break; + } + + result += gameDeveloper + ", "; + + } + statement.close(); + connection.close(); + + } catch (SQLException e) { + e.printStackTrace(); + } + + return result.substring(0, result.length() - 2); + } + + /** + * Checks if the game has the publisher Nintendo across Europe, Japan and North + * America + * + * @return Prints the games, that have Nintendo as a publisher. + */ + public String checkPublisherNintendo() { + String result = ""; + String query = "SELECT Game_Name, Game_Publisher_EU, Game_Publisher_JP, Game_Publisher_NA FROM Games"; + + try { + Connection connection = DriverManager.getConnection(databaseURL); + + Statement statement = connection.createStatement(); + ResultSet resultSet = statement.executeQuery(query); + + while (resultSet.next()) { + String gameName = resultSet.getString("Game_Name"); + String gamePublisherEu = resultSet.getString("Game_Publisher_EU"); + String gamePublisherJp = resultSet.getString("Game_Publisher_JP"); + String gamePublisherNa = resultSet.getString("Game_Publisher_NA"); + + if (gamePublisherEu.equals("Nintendo") || gamePublisherJp.equals("Nintendo") + || gamePublisherNa.equals("Nintendo")) { + result += gameName + ", "; + + } + + } + statement.close(); + connection.close(); + + } catch (SQLException e) { + e.printStackTrace(); + } + + return result.substring(0, result.length() - 2); + } + + /** + * Checks if the game has the publisher Sega across Europe, Japan and North + * America + * + * @return Prints the games, that have Sega as a publisher. + */ + public String checkPublisherSega() { + String result = ""; + String query = "SELECT Game_Name, Game_Publisher_EU, Game_Publisher_JP, Game_Publisher_NA FROM Games"; + + try { + Connection connection = DriverManager.getConnection(databaseURL); + + Statement statement = connection.createStatement(); + ResultSet resultSet = statement.executeQuery(query); + + while (resultSet.next()) { + String gameName = resultSet.getString("Game_Name"); + String gamePublisherEu = resultSet.getString("Game_Publisher_EU"); + String gamePublisherJp = resultSet.getString("Game_Publisher_JP"); + String gamePublisherNa = resultSet.getString("Game_Publisher_NA"); + + if (gamePublisherEu.equals("Sega") || gamePublisherJp.equals("Sega") + || gamePublisherNa.equals("Sega")) { + result += gameName + ", "; + + } + + } + statement.close(); + connection.close(); + + } catch (SQLException e) { + e.printStackTrace(); + } + + return result.substring(0, result.length() - 2); + } + + /** + * Checks the publishers that are available in the table across Europe, Japan + * and North America + * + * @return Prints the publishers from Europe, Japan and North America. + */ + public String checkPublishers() { + String result = ""; + String query = "SELECT Game_Publisher_EU, Game_Publisher_JP, Game_Publisher_NA FROM Games"; + boolean sega = false; + boolean atlus = false; + boolean sce = false; + boolean nintendo = false; + boolean namco = false; + boolean spikeChun = false; + boolean bandaiNamco = false; + boolean activision = false; + + try { + Connection connection = DriverManager.getConnection(databaseURL); + + Statement statement = connection.createStatement(); + ResultSet resultSet = statement.executeQuery(query); + + while (resultSet.next()) { + String gamePublisherEu = resultSet.getString("Game_Publisher_EU"); + String gamePublisherJp = resultSet.getString("Game_Publisher_JP"); + String gamePublisherNa = resultSet.getString("Game_Publisher_NA"); + + while (true) { + while (true) { + if (sega && gamePublisherEu.equals("Sega")) { + break; + } else if (atlus && gamePublisherEu.equals("Atlus")) { + break; + } else if (sce && gamePublisherEu.equals("Sony Computer Entertainment")) { + break; + } else if (nintendo && gamePublisherEu.equals("Nintendo")) { + break; + } else if (namco && gamePublisherEu.equals("Namco")) { + break; + } else if (spikeChun && gamePublisherEu.equals("Spike Chunsoft")) { + break; + } else if (bandaiNamco && gamePublisherEu.equals("Bandai Namco Games")) { + break; + } else if (activision && gamePublisherEu.equals("Activision")) { + break; + } + + switch (gamePublisherEu) { + case "Sega": + sega = true; + break; + case "Atlus": + atlus = true; + break; + case "Sony Computer Entertainment": + sce = true; + break; + case "Nintendo": + nintendo = true; + break; + case "Namco": + namco = true; + break; + case "Spike Chunsoft": + spikeChun = true; + break; + case "Bandai Namco Games": + bandaiNamco = true; + break; + case "Activision": + activision = true; + break; + } + + result += gamePublisherEu + ", "; + break; + } + if (sega && gamePublisherJp.equals("Sega")) { + break; + } else if (atlus && gamePublisherJp.equals("Atlus")) { + break; + } else if (sce && gamePublisherJp.equals("Sony Computer Entertainment")) { + break; + } else if (nintendo && gamePublisherJp.equals("Nintendo")) { + break; + } else if (namco && gamePublisherJp.equals("Namco")) { + break; + } else if (spikeChun && gamePublisherJp.equals("Spike Chunsoft")) { + break; + } else if (bandaiNamco && gamePublisherJp.equals("Bandai Namco Games")) { + break; + } else if (activision && gamePublisherJp.equals("Activision")) { + break; + } + + switch (gamePublisherJp) { + case "Sega": + sega = true; + break; + case "Atlus": + atlus = true; + break; + case "Sony Computer Entertainment": + sce = true; + break; + case "Nintendo": + nintendo = true; + break; + case "Namco": + namco = true; + break; + case "Spike Chunsoft": + spikeChun = true; + break; + case "Bandai Namco Games": + bandaiNamco = true; + break; + case "Activision": + activision = true; + break; + } + + result += gamePublisherJp + ", "; + break; + } + if (sega && gamePublisherNa.equals("Sega")) { + continue; + } else if (atlus && gamePublisherNa.equals("Atlus")) { + continue; + } else if (sce && gamePublisherNa.equals("Sony Computer Entertainment")) { + continue; + } else if (nintendo && gamePublisherNa.equals("Nintendo")) { + continue; + } else if (namco && gamePublisherNa.equals("Namco")) { + continue; + } else if (spikeChun && gamePublisherNa.equals("Spike Chunsoft")) { + continue; + } else if (bandaiNamco && gamePublisherNa.equals("Bandai Namco Games")) { + continue; + } else if (activision && gamePublisherNa.equals("Activision")) { + continue; + } + + switch (gamePublisherNa) { + case "Sega": + sega = true; + break; + case "Atlus": + atlus = true; + break; + case "Sony Computer Entertainment": + sce = true; + break; + case "Nintendo": + nintendo = true; + break; + case "Namco": + namco = true; + break; + case "Spike Chunsoft": + spikeChun = true; + break; + case "Bandai Namco Games": + bandaiNamco = true; + break; + case "Activision": + activision = true; + break; + } + + result += gamePublisherNa + ", "; + + } + statement.close(); + connection.close(); + + } catch (SQLException e) { + e.printStackTrace(); + } + + return result.substring(0, result.length() - 2); + } + + /** + * Checks the publishers that are available in the table across Europe + * + * @return Prints the publishers from Europe. + */ + public String checkPublishersEu() { + String result = ""; + String query = "SELECT Game_Publisher_EU FROM Games"; + boolean sega = false; + boolean nintendo = false; + + try { + Connection connection = DriverManager.getConnection(databaseURL); + + Statement statement = connection.createStatement(); + ResultSet resultSet = statement.executeQuery(query); + + while (resultSet.next()) { + String gamePublisherEu = resultSet.getString("Game_Publisher_EU"); + + if (sega && gamePublisherEu.equals("Sega")) { + continue; + } else if (nintendo && gamePublisherEu.equals("Nintendo")) { + continue; + } + + switch (gamePublisherEu) { + case "Sega": + sega = true; + break; + case "Nintendo": + nintendo = true; + break; + } + + result += gamePublisherEu + ", "; + + } + statement.close(); + connection.close(); + + } catch (SQLException e) { + e.printStackTrace(); + } + + return result.substring(0, result.length() - 2); + } + + /** + * Checks the publishers that are available in the table across Japan + * + * @return Prints the publishers from Japan. + */ + public String checkPublishersJp() { + String result = ""; + String query = "SELECT Game_Publisher_JP FROM Games"; + boolean atlus = false; + boolean nintendo = false; + boolean sega = false; + + try { + Connection connection = DriverManager.getConnection(databaseURL); + + Statement statement = connection.createStatement(); + ResultSet resultSet = statement.executeQuery(query); + + while (resultSet.next()) { + String gamePublisherJp = resultSet.getString("Game_Publisher_JP"); + + if (atlus && gamePublisherJp.equals("Atlus")) { + continue; + } else if (nintendo && gamePublisherJp.equals("Nintendo")) { + continue; + } else if (sega && gamePublisherJp.equals("Sega")) { + continue; + } + + switch (gamePublisherJp) { + case "Atlus": + atlus = true; + break; + case "Nintendo": + nintendo = true; + break; + case "Sega": + sega = true; + break; + } + + result += gamePublisherJp + ", "; + + } + statement.close(); + connection.close(); + + } catch (SQLException e) { + e.printStackTrace(); + } + + return result.substring(0, result.length() - 2); + } + + /** + * Checks the publishers that are available in the table across North America + * + * @return Prints the publishers from North America. + */ + public String checkPublishersNa() { + String result = ""; + String query = "SELECT Game_Publisher_NA FROM Games"; + boolean atlus = false; + boolean nintendo = false; + boolean sega = false; + + try { + Connection connection = DriverManager.getConnection(databaseURL); + + Statement statement = connection.createStatement(); + ResultSet resultSet = statement.executeQuery(query); + + while (resultSet.next()) { + String gamePublisherNa = resultSet.getString("Game_Publisher_Na"); + + if (atlus && gamePublisherNa.equals("Atlus")) { + continue; + } else if (nintendo && gamePublisherNa.equals("Nintendo")) { + continue; + } else if (sega && gamePublisherNa.equals("Sega")) { + continue; + } + + switch (gamePublisherNa) { + case "Atlus": + atlus = true; + break; + case "Nintendo": + nintendo = true; + break; + case "Sega": + sega = true; + break; + } + + result += gamePublisherNa + ", "; + + } + statement.close(); + connection.close(); + + } catch (SQLException e) { + e.printStackTrace(); + } + + return result.substring(0, result.length() - 2); + } + + /** + * Checks the release dates that are unknown. + * + * @return Prints the games which do not have a release date. + */ + public String checkReleaseDateUnknown() { + String result = ""; + String query = "SELECT Game_Name, Game_Release_AU FROM Games"; + + try { + Connection connection = DriverManager.getConnection(databaseURL); + + Statement statement = connection.createStatement(); + ResultSet resultSet = statement.executeQuery(query); + + while (resultSet.next()) { + String gameName = resultSet.getString("Game_Name"); + String gameReleaseAu = resultSet.getString("Game_Release_AU"); + + if (gameReleaseAu == null) { + + result += gameName + ", "; + } + + } + statement.close(); + connection.close(); + + } catch (SQLException e) { + e.printStackTrace(); + } + + return result.substring(0, result.length() - 2); + } + + /** + * Checks if the release years are all the same across Europe, Japan, North + * America and Australia. + * + * @return Prints the games which have the same release year. + */ + public String checkAllSameReleaseYear() { + String result = ""; + String query = "SELECT Game_Name, Game_Release_EU, Game_Release_JP, Game_Release_NA, Game_Release_AU FROM Games"; + + try { + Connection connection = DriverManager.getConnection(databaseURL); + + Statement statement = connection.createStatement(); + ResultSet resultSet = statement.executeQuery(query); + + while (resultSet.next()) { + String gameName = resultSet.getString("Game_Name"); + String gameReleaseEu = resultSet.getString("Game_Release_EU"); + String gameReleaseJp = resultSet.getString("Game_Release_JP"); + String gameReleaseNa = resultSet.getString("Game_Release_NA"); + String gameReleaseAu = resultSet.getString("Game_Release_AU"); + + if (gameReleaseAu == null) { + + } else { + if (gameReleaseEu.substring(0, 4).equals(gameReleaseJp.substring(0, 4)) + && gameReleaseJp.substring(0, 4).equals(gameReleaseNa.substring(0, 4)) + && gameReleaseEu.substring(0, 4).equals(gameReleaseNa.substring(0, 4)) + && gameReleaseAu.substring(0, 4).equals(gameReleaseEu.substring(0, 4)) + && gameReleaseAu.substring(0, 4).equals(gameReleaseJp.substring(0, 4)) + && gameReleaseAu.substring(0, 4).equals(gameReleaseNa.substring(0, 4))) { + result += gameName + ", "; + } + } + + } + statement.close(); + connection.close(); + + } catch (SQLException e) { + e.printStackTrace(); + } + + return result.substring(0, result.length() - 2); + } + + /** + * Checks if the release year are not all the same across Europe, Japan, North + * America and Australia. + * + * @return Prints the games which do not have the same release year. + */ + public String checkAllDifferentReleaseYear() { + String result = ""; + String query = "SELECT Game_Name, Game_Release_EU, Game_Release_JP, Game_Release_NA, Game_Release_AU FROM Games"; + + try { + Connection connection = DriverManager.getConnection(databaseURL); + + Statement statement = connection.createStatement(); + ResultSet resultSet = statement.executeQuery(query); + + while (resultSet.next()) { + String gameName = resultSet.getString("Game_Name"); + String gameReleaseEu = resultSet.getString("Game_Release_EU"); + String gameReleaseJp = resultSet.getString("Game_Release_JP"); + String gameReleaseNa = resultSet.getString("Game_Release_NA"); + String gameReleaseAu = resultSet.getString("Game_Release_AU"); + + if (gameReleaseAu == null) { + result += gameName + ", "; + } else { + if (!gameReleaseEu.substring(0, 4).equals(gameReleaseJp.substring(0, 4)) + || !gameReleaseJp.substring(0, 4).equals(gameReleaseNa.substring(0, 4)) + || !gameReleaseEu.substring(0, 4).equals(gameReleaseNa.substring(0, 4)) + || !gameReleaseAu.substring(0, 4).equals(gameReleaseEu.substring(0, 4)) + || !gameReleaseAu.substring(0, 4).equals(gameReleaseJp.substring(0, 4)) + || !gameReleaseAu.substring(0, 4).equals(gameReleaseNa.substring(0, 4))) { + result += gameName + ", "; + } + } + + } + statement.close(); + connection.close(); + + } catch (SQLException e) { + e.printStackTrace(); + } + + return result.substring(0, result.length() - 2); + } + + /** + * Checks if the release months are all the same across Europe, Japan, North + * America and Australia. + * + * @return Prints the games which have the same release month. + */ + public String checkAllSameReleaseMonth() { + String result = ""; + String query = "SELECT Game_Name, Game_Release_EU, Game_Release_JP, Game_Release_NA, Game_Release_AU FROM Games"; + + try { + Connection connection = DriverManager.getConnection(databaseURL); + + Statement statement = connection.createStatement(); + ResultSet resultSet = statement.executeQuery(query); + + while (resultSet.next()) { + String gameName = resultSet.getString("Game_Name"); + String gameReleaseEu = resultSet.getString("Game_Release_EU"); + String gameReleaseJp = resultSet.getString("Game_Release_JP"); + String gameReleaseNa = resultSet.getString("Game_Release_NA"); + String gameReleaseAu = resultSet.getString("Game_Release_AU"); + + if (gameReleaseAu == null) { + + } else { + if (gameReleaseEu.substring(5, 7).equals(gameReleaseJp.substring(5, 7)) + && gameReleaseJp.substring(5, 7).equals(gameReleaseNa.substring(5, 7)) + && gameReleaseEu.substring(5, 7).equals(gameReleaseNa.substring(5, 7)) + && gameReleaseAu.substring(5, 7).equals(gameReleaseEu.substring(5, 7)) + && gameReleaseAu.substring(5, 7).equals(gameReleaseJp.substring(5, 7)) + && gameReleaseAu.substring(5, 7).equals(gameReleaseNa.substring(5, 7))) { + result += gameName + ", "; + } + } + + } + statement.close(); + connection.close(); + + } catch (SQLException e) { + e.printStackTrace(); + } + + return result.substring(0, result.length() - 2); + } + + /** + * Checks if the release months are not all the same across Europe, Japan, North + * America and Australia. + * + * @return Prints the games which do not have the same release month. + */ + public String checkAllDifferentReleaseMonth() { + String result = ""; + String query = "SELECT Game_Name, Game_Release_EU, Game_Release_JP, Game_Release_NA, Game_Release_AU FROM Games"; + + try { + Connection connection = DriverManager.getConnection(databaseURL); + + Statement statement = connection.createStatement(); + ResultSet resultSet = statement.executeQuery(query); + + while (resultSet.next()) { + String gameName = resultSet.getString("Game_Name"); + String gameReleaseEu = resultSet.getString("Game_Release_EU"); + String gameReleaseJp = resultSet.getString("Game_Release_JP"); + String gameReleaseNa = resultSet.getString("Game_Release_NA"); + String gameReleaseAu = resultSet.getString("Game_Release_AU"); + + if (gameReleaseAu == null) { + result += gameName + ", "; + } else { + if (!gameReleaseEu.substring(5, 7).equals(gameReleaseJp.substring(5, 7)) + || !gameReleaseJp.substring(5, 7).equals(gameReleaseNa.substring(5, 7)) + || !gameReleaseEu.substring(5, 7).equals(gameReleaseNa.substring(5, 7)) + || !gameReleaseAu.substring(5, 7).equals(gameReleaseEu.substring(5, 7)) + || !gameReleaseAu.substring(5, 7).equals(gameReleaseJp.substring(5, 7)) + || !gameReleaseAu.substring(5, 7).equals(gameReleaseNa.substring(5, 7))) { + result += gameName + ", "; + } + } + + } + statement.close(); + connection.close(); + + } catch (SQLException e) { + e.printStackTrace(); + } + + return result.substring(0, result.length() - 2); + } + + /** + * Checks if the game is compatible with one player or more. + * + * @return Prints out the games that can be played with one or more players. + */ + public String checkOnePlayer() { + String result = ""; + String query = "SELECT Game_Name, Game_Players FROM Games"; + + try { + Connection connection = DriverManager.getConnection(databaseURL); + + Statement statement = connection.createStatement(); + ResultSet resultSet = statement.executeQuery(query); + + while (resultSet.next()) { + String gameName = resultSet.getString("Game_Name"); + String gamePlayers = resultSet.getString("Game_Players"); + + if (gamePlayers.equals("1") || gamePlayers.equals("1-2") || gamePlayers.equals("1-4") + || gamePlayers.equals("1-8")) { + result += gameName + ", "; + } + + } + statement.close(); + connection.close(); + + } catch (SQLException e) { + e.printStackTrace(); + } + + return result.substring(0, result.length() - 2); + } + + /** + * Checks if the game is compatible with two players or more. + * + * @return Prints out the games that can be played with two or more players. + */ + public String checkTwoPlayer() { + String result = ""; + String query = "SELECT Game_Name, Game_Players FROM Games"; + + try { + Connection connection = DriverManager.getConnection(databaseURL); + + Statement statement = connection.createStatement(); + ResultSet resultSet = statement.executeQuery(query); + + while (resultSet.next()) { + String gameName = resultSet.getString("Game_Name"); + String gamePlayers = resultSet.getString("Game_Players"); + + if (gamePlayers.equals("1-2") || gamePlayers.equals("1-4") || gamePlayers.equals("1-8")) { + result += gameName + ", "; + } + + } + statement.close(); + connection.close(); + + } catch (SQLException e) { + e.printStackTrace(); + } + + return result.substring(0, result.length() - 2); + } + + /** + * Checks if the game is compatible with four players or more. + * + * @return Prints out the games that can be played with four or more players. + */ + public String checkFourPlayer() { + String result = ""; + String query = "SELECT Game_Name, Game_Players FROM Games"; + + try { + Connection connection = DriverManager.getConnection(databaseURL); + + Statement statement = connection.createStatement(); + ResultSet resultSet = statement.executeQuery(query); + + while (resultSet.next()) { + String gameName = resultSet.getString("Game_Name"); + String gamePlayers = resultSet.getString("Game_Players"); + + if (gamePlayers.equals("1-4") || gamePlayers.equals("1-8")) { + result += gameName + ", "; + } + + } + statement.close(); + connection.close(); + + } catch (SQLException e) { + e.printStackTrace(); + } + + return result.substring(0, result.length() - 2); + } + + /** + * Checks if the game is compatible with eight players + * + * @return Prints out the games that can be played with eight players. + */ + public String checkEightPlayer() { + String result = ""; + String query = "SELECT Game_Name, Game_Players FROM Games"; + + try { + Connection connection = DriverManager.getConnection(databaseURL); + + Statement statement = connection.createStatement(); + ResultSet resultSet = statement.executeQuery(query); + + while (resultSet.next()) { + String gameName = resultSet.getString("Game_Name"); + String gamePlayers = resultSet.getString("Game_Players"); + + if (gamePlayers.equals("1-8")) { + result += gameName + ", "; + } + + } + statement.close(); + connection.close(); + + } catch (SQLException e) { + e.printStackTrace(); + } + + return result.substring(0, result.length() - 2); + } + + /** + * Checks if the game is compatible with one player only. + * + * @return Prints out the games that can only be played alone. + */ + public String checkOnePlayerOnly() { + String result = ""; + String query = "SELECT Game_Name, Game_Players FROM Games"; + + try { + Connection connection = DriverManager.getConnection(databaseURL); + + Statement statement = connection.createStatement(); + ResultSet resultSet = statement.executeQuery(query); + + while (resultSet.next()) { + String gameName = resultSet.getString("Game_Name"); + String gamePlayers = resultSet.getString("Game_Players"); + + if (gamePlayers.equals("1")) { + result += gameName + ", "; + } + + } + statement.close(); + connection.close(); + + } catch (SQLException e) { + e.printStackTrace(); + } + + return result.substring(0, result.length() - 2); + } + + /** + * Checks if the game is USK 0 + * + * @return Prints all the USK 0 games. + */ + public String checkUskZero() { + String result = ""; + String query = "SELECT Game_Name, Game_USK_Rating FROM Games"; + + try { + Connection connection = DriverManager.getConnection(databaseURL); + + Statement statement = connection.createStatement(); + ResultSet resultSet = statement.executeQuery(query); + + while (resultSet.next()) { + String gameName = resultSet.getString("Game_Name"); + int gameUsk = resultSet.getInt("Game_USK_Rating"); + + if (gameUsk == 0) { + result += gameName + ", "; + } + + } + statement.close(); + connection.close(); + + } catch (SQLException e) { + e.printStackTrace(); + } + + return result.substring(0, result.length() - 2); + } + + /** + * Checks if the game is USK 6 + * + * @return Prints all the USK 6 games. + */ + public String checkUskSix() { + String result = ""; + String query = "SELECT Game_Name, Game_USK_Rating FROM Games"; + + try { + Connection connection = DriverManager.getConnection(databaseURL); + + Statement statement = connection.createStatement(); + ResultSet resultSet = statement.executeQuery(query); + + while (resultSet.next()) { + String gameName = resultSet.getString("Game_Name"); + int gameUsk = resultSet.getInt("Game_USK_Rating"); + + if (gameUsk == 6) { + result += gameName + ", "; + } + + } + statement.close(); + connection.close(); + + } catch (SQLException e) { + e.printStackTrace(); + } + + return result.substring(0, result.length() - 2); + } + + /** + * Checks if the game is USK 12 + * + * @return Prints all the USK 12 games. + */ + public String checkUskTwelve() { + String result = ""; + String query = "SELECT Game_Name, Game_USK_Rating FROM Games"; + + try { + Connection connection = DriverManager.getConnection(databaseURL); + + Statement statement = connection.createStatement(); + ResultSet resultSet = statement.executeQuery(query); + + while (resultSet.next()) { + String gameName = resultSet.getString("Game_Name"); + int gameUsk = resultSet.getInt("Game_USK_Rating"); + + if (gameUsk == 12) { + result += gameName + ", "; + } + + } + statement.close(); + connection.close(); + + } catch (SQLException e) { + e.printStackTrace(); + } + + return result.substring(0, result.length() - 2); + } + + /** + * Checks if the game is USK 16 + * + * @return Prints all the USK 16 games. + */ + public String checkUskSixteen() { + String result = ""; + String query = "SELECT Game_Name, Game_USK_Rating FROM Games"; + + try { + Connection connection = DriverManager.getConnection(databaseURL); + + Statement statement = connection.createStatement(); + ResultSet resultSet = statement.executeQuery(query); + + while (resultSet.next()) { + String gameName = resultSet.getString("Game_Name"); + int gameUsk = resultSet.getInt("Game_USK_Rating"); + + if (gameUsk == 16) { + result += gameName + ", "; + } + + } + statement.close(); + connection.close(); + + } catch (SQLException e) { + e.printStackTrace(); + } + + return result.substring(0, result.length() - 2); + } + + /** + * Checks if the game is USK 18 + * + * @return Prints all the USK 18 games. + */ + public String checkUskEighteen() { + String result = ""; + String query = "SELECT Game_Name, Game_USK_Rating FROM Games"; + + try { + Connection connection = DriverManager.getConnection(databaseURL); + + Statement statement = connection.createStatement(); + ResultSet resultSet = statement.executeQuery(query); + + while (resultSet.next()) { + String gameName = resultSet.getString("Game_Name"); + int gameUsk = resultSet.getInt("Game_USK_Rating"); + + if (gameUsk == 18) { + result += gameName + ", "; + } + + } + statement.close(); + connection.close(); + + } catch (SQLException e) { + e.printStackTrace(); + } + + return result.substring(0, result.length() - 2); + } + + /** + * Checks if the game is PEGI 3. + * + * @return Prints all the PEGI 3 games. + */ + public String checkPegiThree() { + String result = ""; + String query = "SELECT Game_Name, Game_PEGI_Rating FROM Games"; + + try { + Connection connection = DriverManager.getConnection(databaseURL); + + Statement statement = connection.createStatement(); + ResultSet resultSet = statement.executeQuery(query); + + while (resultSet.next()) { + String gameName = resultSet.getString("Game_Name"); + int gamePegi = resultSet.getInt("Game_PEGI_Rating"); + + if (gamePegi == 3) { + result += gameName + ", "; + } + + } + statement.close(); + connection.close(); + + } catch (SQLException e) { + e.printStackTrace(); + } + + return result.substring(0, result.length() - 2); + } + + /** + * Checks if the game is PEGI 7. + * + * @return Prints all the PEGI 7 games. + */ + public String checkPegiSeven() { + String result = ""; + String query = "SELECT Game_Name, Game_PEGI_Rating FROM Games"; + + try { + Connection connection = DriverManager.getConnection(databaseURL); + + Statement statement = connection.createStatement(); + ResultSet resultSet = statement.executeQuery(query); + + while (resultSet.next()) { + String gameName = resultSet.getString("Game_Name"); + int gamePegi = resultSet.getInt("Game_PEGI_Rating"); + + if (gamePegi == 7) { + result += gameName + ", "; + } + + } + statement.close(); + connection.close(); + + } catch (SQLException e) { + e.printStackTrace(); + } + + return result.substring(0, result.length() - 2); + } + + /** + * Checks if the game is PEGI 12. + * + * @return Prints all the PEGI 12 games. + */ + public String checkPegiTwelve() { + String result = ""; + String query = "SELECT Game_Name, Game_PEGI_Rating FROM Games"; + + try { + Connection connection = DriverManager.getConnection(databaseURL); + + Statement statement = connection.createStatement(); + ResultSet resultSet = statement.executeQuery(query); + + while (resultSet.next()) { + String gameName = resultSet.getString("Game_Name"); + int gamePegi = resultSet.getInt("Game_PEGI_Rating"); + + if (gamePegi == 12) { + result += gameName + ", "; + } + + } + statement.close(); + connection.close(); + + } catch (SQLException e) { + e.printStackTrace(); + } + + return result.substring(0, result.length() - 2); + } + + /** + * Checks if the game is PEGI 16. + * + * @return Prints all the PEGI 16 games. + */ + public String checkPegiSixteen() { + String result = ""; + String query = "SELECT Game_Name, Game_PEGI_Rating FROM Games"; + + try { + Connection connection = DriverManager.getConnection(databaseURL); + + Statement statement = connection.createStatement(); + ResultSet resultSet = statement.executeQuery(query); + + while (resultSet.next()) { + String gameName = resultSet.getString("Game_Name"); + int gamePegi = resultSet.getInt("Game_PEGI_Rating"); + + if (gamePegi == 16) { + result += gameName + ", "; + } + + } + statement.close(); + connection.close(); + + } catch (SQLException e) { + e.printStackTrace(); + } + + return result.substring(0, result.length() - 2); + } + + /** + * Checks if the game is PEGI 18. + * + * @return Prints all the PEGI 18 games. + */ + public String checkPegiEighteen() { + String result = ""; + String query = "SELECT Game_Name, Game_PEGI_Rating FROM Games"; + + try { + Connection connection = DriverManager.getConnection(databaseURL); + + Statement statement = connection.createStatement(); + ResultSet resultSet = statement.executeQuery(query); + + while (resultSet.next()) { + String gameName = resultSet.getString("Game_Name"); + int gamePegi = resultSet.getInt("Game_PEGI_Rating"); + + if (gamePegi == 18) { + result += gameName + ", "; + } + + } + statement.close(); + connection.close(); + + } catch (SQLException e) { + e.printStackTrace(); + } + + return result.substring(0, result.length() - 2); + } + + /** + * Checks if the game has no PEGI rating. + * + * @return Prints all the games without a PEGI rating. + */ + public String checkPegiUnknown() { + String result = ""; + String query = "SELECT Game_Name, Game_PEGI_Rating FROM Games"; + + try { + Connection connection = DriverManager.getConnection(databaseURL); + + Statement statement = connection.createStatement(); + ResultSet resultSet = statement.executeQuery(query); + + while (resultSet.next()) { + String gameName = resultSet.getString("Game_Name"); + int gamePegi = resultSet.getInt("Game_PEGI_Rating"); + + if (gamePegi == 0) { + result += gameName + ", "; + } + + } + statement.close(); + connection.close(); + + } catch (SQLException e) { + e.printStackTrace(); + } + + return result.substring(0, result.length() - 2); + } + + /** + * Checks if the game is ESRB E. + * + * @return Prints all the ESRB E games. + */ + public String checkEsrbE() { + String result = ""; + String query = "SELECT Game_Name, Game_ESRB_Rating FROM Games"; + + try { + Connection connection = DriverManager.getConnection(databaseURL); + + Statement statement = connection.createStatement(); + ResultSet resultSet = statement.executeQuery(query); + + while (resultSet.next()) { + String gameName = resultSet.getString("Game_Name"); + String gameEsrb = resultSet.getString("Game_ESRB_Rating"); + + if (gameEsrb.equals("E")) { + result += gameName + ", "; + } + + } + statement.close(); + connection.close(); + + } catch (SQLException e) { + e.printStackTrace(); + } + + return result.substring(0, result.length() - 2); + } + + /** + * Checks if the game is ESRB E10+. + * + * @return Prints all the ESRB E10+ games. + */ + public String checkEsrbEten() { + String result = ""; + String query = "SELECT Game_Name, Game_ESRB_Rating FROM Games"; + + try { + Connection connection = DriverManager.getConnection(databaseURL); + + Statement statement = connection.createStatement(); + ResultSet resultSet = statement.executeQuery(query); + + while (resultSet.next()) { + String gameName = resultSet.getString("Game_Name"); + String gameEsrb = resultSet.getString("Game_ESRB_Rating"); + + if (gameEsrb.equals("E10+")) { + result += gameName + ", "; + } + + } + statement.close(); + connection.close(); + + } catch (SQLException e) { + e.printStackTrace(); + } + + return result.substring(0, result.length() - 2); + } + + /** + * Checks if the game is ESRB T. + * + * @return Prints all the ESRB T games. + */ + public String checkEsrbT() { + String result = ""; + String query = "SELECT Game_Name, Game_ESRB_Rating FROM Games"; + + try { + Connection connection = DriverManager.getConnection(databaseURL); + + Statement statement = connection.createStatement(); + ResultSet resultSet = statement.executeQuery(query); + + while (resultSet.next()) { + String gameName = resultSet.getString("Game_Name"); + String gameEsrb = resultSet.getString("Game_ESRB_Rating"); + + if (gameEsrb.equals("T")) { + result += gameName + ", "; + } + + } + statement.close(); + connection.close(); + + } catch (SQLException e) { + e.printStackTrace(); + } + + return result.substring(0, result.length() - 2); + } + + /** + * Checks if the game is ESRB M. + * + * @return Prints all the ESRB M games. + */ + public String checkEsrbM() { + String result = ""; + String query = "SELECT Game_Name, Game_ESRB_Rating FROM Games"; + + try { + Connection connection = DriverManager.getConnection(databaseURL); + + Statement statement = connection.createStatement(); + ResultSet resultSet = statement.executeQuery(query); + + while (resultSet.next()) { + String gameName = resultSet.getString("Game_Name"); + String gameEsrb = resultSet.getString("Game_ESRB_Rating"); + + if (gameEsrb.equals("M")) { + result += gameName + ", "; + } + + } + statement.close(); + connection.close(); + + } catch (SQLException e) { + e.printStackTrace(); + } + + return result.substring(0, result.length() - 2); + } + + /** + * Checks if the game is CERO A. + * + * @return Prints all the CERO A games. + */ + public String checkCeroA() { + String result = ""; + String query = "SELECT Game_Name, Game_CERO_Rating FROM Games"; + + try { + Connection connection = DriverManager.getConnection(databaseURL); + + Statement statement = connection.createStatement(); + ResultSet resultSet = statement.executeQuery(query); + + while (resultSet.next()) { + String gameName = resultSet.getString("Game_Name"); + String gameCero = resultSet.getString("Game_CERO_Rating"); + + if (gameCero.equals("A")) { + result += gameName + ", "; + } + + } + statement.close(); + connection.close(); + + } catch (SQLException e) { + e.printStackTrace(); + } + + return result.substring(0, result.length() - 2); + } + + /** + * Checks if the game is CERO B. + * + * @return Prints all the CERO B games. + */ + public String checkCeroB() { + String result = ""; + String query = "SELECT Game_Name, Game_CERO_Rating FROM Games"; + + try { + Connection connection = DriverManager.getConnection(databaseURL); + + Statement statement = connection.createStatement(); + ResultSet resultSet = statement.executeQuery(query); + + while (resultSet.next()) { + String gameName = resultSet.getString("Game_Name"); + String gameCero = resultSet.getString("Game_CERO_Rating"); + + if (gameCero.equals("B")) { + result += gameName + ", "; + } + + } + statement.close(); + connection.close(); + + } catch (SQLException e) { + e.printStackTrace(); + } + + return result.substring(0, result.length() - 2); + } + + /** + * Checks if the game is CERO C. + * + * @return Prints all the CERO C games. + */ + public String checkCeroC() { + String result = ""; + String query = "SELECT Game_Name, Game_CERO_Rating FROM Games"; + + try { + Connection connection = DriverManager.getConnection(databaseURL); + + Statement statement = connection.createStatement(); + ResultSet resultSet = statement.executeQuery(query); + + while (resultSet.next()) { + String gameName = resultSet.getString("Game_Name"); + String gameCero = resultSet.getString("Game_CERO_Rating"); + + if (gameCero.equals("C")) { + result += gameName + ", "; + } + + } + statement.close(); + connection.close(); + + } catch (SQLException e) { + e.printStackTrace(); + } + + return result.substring(0, result.length() - 2); + } + + /** + * Checks if the game is CERO D. + * + * @return Prints all the CERO D games. + */ + public String checkCeroD() { + String result = ""; + String query = "SELECT Game_Name, Game_CERO_Rating FROM Games"; + + try { + Connection connection = DriverManager.getConnection(databaseURL); + + Statement statement = connection.createStatement(); + ResultSet resultSet = statement.executeQuery(query); + + while (resultSet.next()) { + String gameName = resultSet.getString("Game_Name"); + String gameCero = resultSet.getString("Game_CERO_Rating"); + + if (gameCero.equals("D")) { + result += gameName + ", "; + } + + } + statement.close(); + connection.close(); + + } catch (SQLException e) { + e.printStackTrace(); + } + + return result.substring(0, result.length() - 2); + } + + /** + * Checks if the game is CERO Z. + * + * @return Prints all the CERO Z games. + */ + public String checkCeroZ() { + String result = ""; + String query = "SELECT Game_Name, Game_CERO_Rating FROM Games"; + + try { + Connection connection = DriverManager.getConnection(databaseURL); + + Statement statement = connection.createStatement(); + ResultSet resultSet = statement.executeQuery(query); + + while (resultSet.next()) { + String gameName = resultSet.getString("Game_Name"); + String gameCero = resultSet.getString("Game_CERO_Rating"); + + if (gameCero.equals("Z")) { + result += gameName + ", "; + } + + } + statement.close(); + connection.close(); + + } catch (SQLException e) { + e.printStackTrace(); + } + + return result.substring(0, result.length() - 2); + } + + /** + * Checks if the game is ACB G. + * + * @return Prints all the ACB G games. + */ + public String checkAcbG() { + String result = ""; + String query = "SELECT Game_Name, Game_ACB_Rating FROM Games"; + + try { + Connection connection = DriverManager.getConnection(databaseURL); + + Statement statement = connection.createStatement(); + ResultSet resultSet = statement.executeQuery(query); + + while (resultSet.next()) { + String gameName = resultSet.getString("Game_Name"); + String gameAcb = resultSet.getString("Game_ACB_Rating"); + + if (gameAcb.equals("G")) { + result += gameName + ", "; + } + + } + statement.close(); + connection.close(); + + } catch (SQLException e) { + e.printStackTrace(); + } + + return result.substring(0, result.length() - 2); + } + + /** + * Checks if the game is ACB PG. + * + * @return Prints all the ACB PG games. + */ + public String checkAcbPg() { + String result = ""; + String query = "SELECT Game_Name, Game_ACB_Rating FROM Games"; + + try { + Connection connection = DriverManager.getConnection(databaseURL); + + Statement statement = connection.createStatement(); + ResultSet resultSet = statement.executeQuery(query); + + while (resultSet.next()) { + String gameName = resultSet.getString("Game_Name"); + String gameAcb = resultSet.getString("Game_ACB_Rating"); + + if (gameAcb.equals("PG")) { + result += gameName + ", "; + } + + } + statement.close(); + connection.close(); + + } catch (SQLException e) { + e.printStackTrace(); + } + + return result.substring(0, result.length() - 2); + } + + /** + * Checks if the game is ACB M. + * + * @return Prints all the ACB M games. + */ + public String checkAcbM() { + String result = ""; + String query = "SELECT Game_Name, Game_ACB_Rating FROM Games"; + + try { + Connection connection = DriverManager.getConnection(databaseURL); + + Statement statement = connection.createStatement(); + ResultSet resultSet = statement.executeQuery(query); + + while (resultSet.next()) { + String gameName = resultSet.getString("Game_Name"); + String gameAcb = resultSet.getString("Game_ACB_Rating"); + + if (gameAcb.equals("M")) { + result += gameName + ", "; + } + + } + statement.close(); + connection.close(); + + } catch (SQLException e) { + e.printStackTrace(); + } + + return result.substring(0, result.length() - 2); + } + + /** + * Checks if the game is ACB MA 15+. + * + * @return Prints all the ACB MA 15+ games. + */ + public String checkAcbMaFifteen() { + String result = ""; + String query = "SELECT Game_Name, Game_ACB_Rating FROM Games"; + + try { + Connection connection = DriverManager.getConnection(databaseURL); + + Statement statement = connection.createStatement(); + ResultSet resultSet = statement.executeQuery(query); + + while (resultSet.next()) { + String gameName = resultSet.getString("Game_Name"); + String gameAcb = resultSet.getString("Game_ACB_Rating"); + + if (gameAcb.equals("MA 15+")) { + result += gameName + ", "; + } + + } + statement.close(); + connection.close(); + + } catch (SQLException e) { + e.printStackTrace(); + } + + return result.substring(0, result.length() - 2); + } + + /** + * Checks if the game is ACB R 18+. + * + * @return Prints all the ACB R 18+ games. + */ + public String checkAcbReighteen() { + String result = ""; + String query = "SELECT Game_Name, Game_ACB_Rating FROM Games"; + + try { + Connection connection = DriverManager.getConnection(databaseURL); + + Statement statement = connection.createStatement(); + ResultSet resultSet = statement.executeQuery(query); + + while (resultSet.next()) { + String gameName = resultSet.getString("Game_Name"); + String gameAcb = resultSet.getString("Game_ACB_Rating"); + + if (gameAcb.equals("R 18+")) { + result += gameName + ", "; + } + + } + statement.close(); + connection.close(); + + } catch (SQLException e) { + e.printStackTrace(); + } + + return result.substring(0, result.length() - 2); + } +} diff --git a/projjpn/src/main/java/de/hs_fulda/ciip/projjpn/Item.java b/projjpn/src/main/java/de/hs_fulda/ciip/projjpn/Item.java new file mode 100644 index 0000000..1be3965 --- /dev/null +++ b/projjpn/src/main/java/de/hs_fulda/ciip/projjpn/Item.java @@ -0,0 +1,88 @@ +package de.hs_fulda.ciip.projjpn; + +public class Item { + + private String productTitle; + private String description; + private int availability = 0; + private float price; + + /** + * Creation of blank Item. + */ + public Item() { + } + + /** + * Creation of Item. + * @param titel + * @param description + * @param quantity + * @param price + */ + public Item(String titel, + String description, + int quantity, + float price) { + this.productTitle = titel; + this.description = description; + this.availability = quantity; + this.price = price; + } + + /** + * + * @return true if at least one item is in stock. + */ + public boolean inStock() { + return availability > 0; + } + + /** + * + * @return current number of this items + */ + public float getCurrentStock() { + return availability; + } + + /** + * + * @param newAmount of items + */ + public void updateAvailability(int newAmount) { + availability = newAmount; + } + + /** + * + * @param newPrice of this item. + */ + public void updatePrice(float newPrice) { + this.price = newPrice; + } + + /** + * + * @return Current Price of the Item. + */ + public float getCurrentPrice() { + return price; + } + + /** + * + * @return Current public Title of this Item. + */ + public String getTitel() { + return this.productTitle; + } + + /** + * + * @return Current public Description of this Item. + */ + public String getDescription() { + return this.description; + } +} diff --git a/projjpn/src/main/java/de/hs_fulda/ciip/projjpn/User.java b/projjpn/src/main/java/de/hs_fulda/ciip/projjpn/User.java new file mode 100644 index 0000000..710e097 --- /dev/null +++ b/projjpn/src/main/java/de/hs_fulda/ciip/projjpn/User.java @@ -0,0 +1,41 @@ +package de.hs_fulda.ciip.projjpn; + +public class User { + String firstName; + String lastName; + String nickName; + String eMail; + Birthdate birthdate; + + public User(String firstName, + String lastName, + String nickName, + String eMail, + Birthdate birthdate) { + this.firstName = firstName; + this.lastName = lastName; + this.nickName = nickName; + this.eMail = eMail; + this.birthdate = birthdate; + } + + public User(String nickName) { + this.nickName = nickName; + } + + public String getFirstName() { + return firstName; + } + public String getLastName() { + return lastName; + } + public String getNickName() { + return nickName; + } + public String getEMail() { + return eMail; + } + public Birthdate getBirthdate() { + return birthdate; + } +} diff --git a/projjpn/src/main/java/de/hs_fulda/ciip/projjpn/Warehouse.java b/projjpn/src/main/java/de/hs_fulda/ciip/projjpn/Warehouse.java new file mode 100644 index 0000000..c0fd4fa --- /dev/null +++ b/projjpn/src/main/java/de/hs_fulda/ciip/projjpn/Warehouse.java @@ -0,0 +1,28 @@ +package de.hs_fulda.ciip.projjpn; + +import java.util.HashMap; + +public class Warehouse { + protected HashMap pool = new HashMap(); + + /** + * + * @param item Item to insert. + * @return the inserted Item or null. + */ + public Item insertItem(Item item) { + return pool.putIfAbsent(item.getTitel(), item); + } + + /** + * + * @return The total amount of all Items. + */ + public int getCountOfStock() { + int sumItems = 0; + for (HashMap.Entry set : pool.entrySet()) { + sumItems += set.getValue().getCurrentStock(); + } + return sumItems; + } +} \ No newline at end of file diff --git a/projjpn/src/test/java/de/hs_fulda/ciip/projjpn/AppTest.java b/projjpn/src/test/java/de/hs_fulda/ciip/projjpn/AppTest.java index a5ea653..8d0a135 100644 --- a/projjpn/src/test/java/de/hs_fulda/ciip/projjpn/AppTest.java +++ b/projjpn/src/test/java/de/hs_fulda/ciip/projjpn/AppTest.java @@ -35,4 +35,8 @@ public class AppTest { assertTrue( true ); } + + public void testJenkins() { + assertTrue( true ); + } } diff --git a/projjpn/src/test/java/de/hs_fulda/ciip/projjpn/BirthdateTest.java b/projjpn/src/test/java/de/hs_fulda/ciip/projjpn/BirthdateTest.java new file mode 100644 index 0000000..b584b58 --- /dev/null +++ b/projjpn/src/test/java/de/hs_fulda/ciip/projjpn/BirthdateTest.java @@ -0,0 +1,63 @@ +package de.hs_fulda.ciip.projjpn; + +import junit.framework.TestCase; + +public class BirthdateTest extends TestCase { + + public void testToString() { + + // Given + Birthdate b = new Birthdate(1, 1, 2000); + + // When + String expectedDate = "1.1.2000"; + + // Then + assertEquals(expectedDate, b.toString()); + } + + public void test_changeBirthdate() { + // Given + Birthdate b = new Birthdate(1, 1, 2000); + + // Change Birthdate + b.changeBirthdate(2, 3, 2001); + + // When + int expectedDay = 2; + int expectedMonth = 3; + int expectedYear = 2001; + + // Then + assertEquals(2, b.getDay()); + assertEquals(3, b.getMonth()); + assertEquals(2001, b.getYear()); + } + + public void test_rejectInvalidBirthday() { + Birthdate birthdate = new Birthdate(0, 0, 0); + boolean expectedResult = false; + boolean gotResult = birthdate.isValid(0, 0, 0); + assertEquals(expectedResult, gotResult); + + gotResult = birthdate.isValid(32, 13, 1990); + assertEquals(expectedResult, gotResult); + + gotResult = birthdate.isValid(31, 0, 1980); + assertEquals(expectedResult, gotResult); + + gotResult = birthdate.isValid(31, 13, 1980); + assertEquals(expectedResult, gotResult); + + gotResult = birthdate.isValid(1, 1, 3000); + assertEquals(expectedResult, gotResult); + + gotResult = birthdate.isValid(1, 1, 1900); + assertEquals(expectedResult, gotResult); + + expectedResult = true; + gotResult = birthdate.isValid(1, 5, 2020); + assertEquals(expectedResult, gotResult); + } + +} diff --git a/projjpn/src/test/java/de/hs_fulda/ciip/projjpn/CustomersTest.java b/projjpn/src/test/java/de/hs_fulda/ciip/projjpn/CustomersTest.java new file mode 100644 index 0000000..6dc92c3 --- /dev/null +++ b/projjpn/src/test/java/de/hs_fulda/ciip/projjpn/CustomersTest.java @@ -0,0 +1,177 @@ +package de.hs_fulda.ciip.projjpn; + +import junit.framework.TestCase; + +public class CustomersTest extends TestCase { + + public void test_nicknameIsFree() { + // Given + Customers customers = new Customers(); + String availableNickname = "beastMaster64"; + + // When + boolean nicknameIsAvailable = customers.nickNameAvailable(availableNickname); + + // Then + assertTrue(nicknameIsAvailable); + } + + /** + * Register a user only when the given nickname is available. + */ + public void test_nicknameIsTaken() { + // Given + Customers customers = new Customers(); + String availableNickname = "beastMaster64"; + String takenNickname = "beastMaster64"; + User userToRegister = new User(availableNickname); + + customers.registerUser(userToRegister); + + // When + boolean nicknameIsTaken = customers.nickNameAvailable(availableNickname); + + // Then + assertFalse(nicknameIsTaken); + } + + /** + * Register a single user and check whether it worked. + */ + public void test_registerSingleUser() { + // Given + Customers customers = new Customers(); + String expectedNickNameInput = "Mougli"; + User expectedNewUser = new User(expectedNickNameInput); + + // Add a user + customers.registerUser(expectedNewUser); + + // Get the expected User + User expectedUser = customers.getByNickname(expectedNickNameInput); + // + assertNotNull(expectedNewUser); + String expectedNickNameGotBack = expectedUser.nickName; + + // When + boolean userRegistered = expectedNickNameGotBack.equals(expectedNickNameInput); + + // Then + assertTrue(userRegistered); + } + + /** + * Register multiple Users and then search for them in the same order. + */ + public void test_registerMultipleUsers() { + // Given + Customers customers = new Customers(); + String[] expectedNickNamesInput = {"Mougli", "Tarkan", "beastMaster64", "BlaBlaPew", "MuchDoge_321"}; + User[] expectedNewUsers = new User[expectedNickNamesInput.length]; + + for (int i = 0; i < expectedNickNamesInput.length; i++) { + // Create user + expectedNewUsers[i] = new User(expectedNickNamesInput[i]); + + // Add user + customers.registerUser(expectedNewUsers[i]); + } + + // Get the expected Users + User foundUser; + String expectedNickNameGotBack; + boolean userRegistered; + + for (int i = 0; i < expectedNickNamesInput.length; i++) { + // Get user + foundUser = customers.getByNickname(expectedNickNamesInput[i]); + assertNotNull(foundUser); + + // When + expectedNickNameGotBack = foundUser.nickName; + userRegistered = expectedNickNameGotBack.equals(expectedNickNamesInput[i]); + + // Then + assertTrue(userRegistered); + } + } + + /** + * Test if deletion of an allready registered customer works. + */ + public void test_removeRegisteredUser() { + // Given + Customers customers = new Customers(); + String userToRemove = "beastMaster64"; + User userToRegister = new User("beastMaster64"); + customers.registerUser(userToRegister); + + // When + boolean userExists = customers.nickNameAvailable(userToRemove); + assertFalse(userExists); + + // Then + User removedUser = customers.deleteUser(userToRemove); + assertEquals(userToRemove, removedUser.nickName); + + } + + /** + * Register a given number of users. + */ + public void test_registerAndCountUsers() { + // Given + Customers customers = new Customers(); + int expectedRegisteredUsers = 20; + int actualRegisteredUsers = -1; + String nickname; + + // Prepare + for(int i = 0, j = 1; i < expectedRegisteredUsers; i++, j++) { + nickname = "beastMaster_" + j; + customers.registerUser(new User(nickname)); + } + actualRegisteredUsers = customers.getCountOfUsers(); + assertEquals(expectedRegisteredUsers, actualRegisteredUsers); + } + + /** + * Check if the Registration of a User works as intended. + */ + public void test_createRegisterAndCheckUserData() { + // Given + Customers customers = new Customers(); + + String firstName = "Mia"; + String lastName = "Muster"; + String nickName = "harley"; + String eMail = "mia@muster.de"; + Birthdate birthdate = new Birthdate(30, 12, 1997); + + User userToCheck = new User(firstName, lastName, nickName, eMail, birthdate); + + // Register User + customers.registerUser(userToCheck); + + User gotUser = customers.getByNickname(nickName); + + assertNotNull(gotUser); + + // When + boolean correctFirstName = "Mia".equals(gotUser.getFirstName()); + boolean correctLastName = "Muster".equals(gotUser.getLastName()); + boolean correctNickName = "harley".equals(gotUser.getNickName()); + boolean correctEMail = "mia@muster.de".equals(gotUser.getEMail()); + boolean correctBirthdate = birthdate.toString().equals(gotUser.birthdate.toString()); + + // Then + assertTrue(correctFirstName); + assertTrue(correctLastName); + assertTrue(correctNickName); + assertTrue(correctEMail); + assertTrue(correctBirthdate); + + } + + +} diff --git a/projjpn/src/test/java/de/hs_fulda/ciip/projjpn/GamesTest.java b/projjpn/src/test/java/de/hs_fulda/ciip/projjpn/GamesTest.java new file mode 100644 index 0000000..c6a229d --- /dev/null +++ b/projjpn/src/test/java/de/hs_fulda/ciip/projjpn/GamesTest.java @@ -0,0 +1,442 @@ +package de.hs_fulda.ciip.projjpn; + +import junit.framework.TestCase; + +public class GamesTest extends TestCase { + public void test_checkConnection() { + Games testObject = new Games(); + boolean expected = true; + boolean actual = testObject.checkConnection(); + assertEquals(expected, actual); + } + + public void test_checkGames() { + Games testObject = new Games(); + String expected = "Persona 5 Royal, Ratchet & Clank, Astral Chain, Fire Emblem: Three Houses, Triangle Strategy, Rhythm Paradise, Super Smash Bros. Ultimate, Yakuza: Dead Souls, Jet Set Radio Future, Breakdown, AI: The Somnium Files, Persona 3 Portable, Tomodachi Life, Beautiful Katamari, Atelier Totori Plus, Crash Bandicoot N. Sane Trilogy"; + String actual = testObject.checkGames(); + assertEquals(expected, actual); + } + + public void test_checkConsoles() { + Games testObject = new Games(); + String expected = "PlayStation 4, Multiplatform, Nintendo Switch, Nintendo DS, PlayStation 3, Xbox, PlayStation Portable, Nintendo 3DS, Xbox 360, PlayStation Vita"; + String actual = testObject.checkConsoles(); + assertEquals(expected, actual); + } + + public void test_checkAllSamePublishers() { + Games testObject = new Games(); + String expected = "Ratchet & Clank, Astral Chain, Fire Emblem: Three Houses, Rhythm Paradise, Super Smash Bros. Ultimate, Yakuza: Dead Souls, Jet Set Radio Future, Tomodachi Life, Beautiful Katamari, Crash Bandicoot N. Sane Trilogy"; + String actual = testObject.checkAllSamePublishers(); + assertEquals(expected, actual); + } + + public void test_checkAllDifferentPublishers() { + Games testObject = new Games(); + String expected = "Atelier Totori Plus"; + String actual = testObject.checkAllDifferentPublishers(); + assertEquals(expected, actual); + } + + public void test_checkAllSamePublishersDeveloper() { + Games testObject = new Games(); + String expected = "Beautiful Katamari"; + String actual = testObject.checkAllDifferentPublishersDeveloper(); + assertEquals(expected, actual); + } + + public void test_checkAllSameReleaseDates() { + Games testObject = new Games(); + String expected = "Astral Chain, Fire Emblem: Three Houses, Triangle Strategy, Super Smash Bros. Ultimate"; + String actual = testObject.checkAllSameReleaseDates(); + assertEquals(expected, actual); + } + + public void test_checkAllDifferentReleaseDates() { + Games testObject = new Games(); + String expected = "Rhythm Paradise, Yakuza: Dead Souls, Breakdown, Persona 3 Portable, Beautiful Katamari, Atelier Totori Plus"; + String actual = testObject.checkAllDifferentReleaseDates(); + assertEquals(expected, actual); + } + + public void test_checkGameGenres() { + Games testObject = new Games(); + String expected = "JRPG, Action-Adventure, Tactical role-playing, Strategy, Rhythm, Fighting, Survival Horror, Action, Adventure, RPG, Life Simulation, Puzzle, Platformer"; + String actual = testObject.checkGameGenres(); + assertEquals(expected, actual); + } + + public void test_checkGameGenreActionAdventure() { + Games testObject = new Games(); + String expected = "Ratchet & Clank, Astral Chain, Breakdown"; + String actual = testObject.checkGameGenreActionAdventure(); + assertEquals(expected, actual); + } + + public void test_checkGameGenreRPG() { + Games testObject = new Games(); + String expected = "Persona 3 Portable, Atelier Totori Plus"; + String actual = testObject.checkGameGenreRPG(); + assertEquals(expected, actual); + } + + public void test_checkConsolePlayStation() { + Games testObject = new Games(); + String expected = "Persona 5 Royal, Yakuza: Dead Souls, Persona 3 Portable, Atelier Totori Plus"; + String actual = testObject.checkConsolePlayStation(); + assertEquals(expected, actual); + } + + public void test_checkConsoleNintendo() { + Games testObject = new Games(); + String expected = "Astral Chain, Fire Emblem: Three Houses, Triangle Strategy, Rhythm Paradise, Super Smash Bros. Ultimate, Tomodachi Life"; + String actual = testObject.checkConsoleNintendo(); + assertEquals(expected, actual); + } + + public void test_checkConsoleXbox() { + Games testObject = new Games(); + String expected = "Jet Set Radio Future, Breakdown, Beautiful Katamari"; + String actual = testObject.checkConsoleXbox(); + assertEquals(expected, actual); + } + + public void test_checkConsoleMultiplatform() { + Games testObject = new Games(); + String expected = "Ratchet & Clank, AI: The Somnium Files, Crash Bandicoot N. Sane Trilogy"; + String actual = testObject.checkConsoleMultiplatform(); + assertEquals(expected, actual); + } + + public void test_checkConsoleNintendoSwitch() { + Games testObject = new Games(); + String expected = "Astral Chain, Fire Emblem: Three Houses, Triangle Strategy, Super Smash Bros. Ultimate"; + String actual = testObject.checkConsoleNintendoSwitch(); + assertEquals(expected, actual); + } + + public void test_checkDeveloperAtlus() { + Games testObject = new Games(); + String expected = "Persona 5 Royal, Persona 3 Portable"; + String actual = testObject.checkDeveloperAtlus(); + assertEquals(expected, actual); + } + + public void test_checkDevelopers() { + Games testObject = new Games(); + String expected = "Atlus, Insomniac Games, Platinum Games, Intelligent Systems, Artdink, Nintendo SPD, Sora Ltd., Ryu Ga Gotoku Studio, Sega Sports R&D, Namco, Spike Chunsoft, Bandai Namco Games, Gust Co. Ltd., Vicarious Visions"; + String actual = testObject.checkDevelopers(); + assertEquals(expected, actual); + } + + public void test_checkPublisherNintendo() { + Games testObject = new Games(); + String expected = "Astral Chain, Fire Emblem: Three Houses, Triangle Strategy, Rhythm Paradise, Super Smash Bros. Ultimate, Tomodachi Life"; + String actual = testObject.checkPublisherNintendo(); + assertEquals(expected, actual); + } + + public void test_checkPublisherSega() { + Games testObject = new Games(); + String expected = "Persona 5 Royal, Yakuza: Dead Souls, Jet Set Radio Future"; + String actual = testObject.checkPublisherSega(); + assertEquals(expected, actual); + } + + public void test_checkPublishers() { + Games testObject = new Games(); + String expected = "Sega, Atlus, Sony Computer Entertainment, Nintendo, Square Enix, Electronic Arts, Namco, Numskull Games, Spike Chunsoft, Ghostlight, Bandai Namco Games, Tecmo Koei Europe, Gust Co. Ltd., Tecmo Koei America, Activision"; + String actual = testObject.checkPublishers(); + assertEquals(expected, actual); + } + + public void test_checkPublishersEu() { + Games testObject = new Games(); + String expected = "Sega, Sony Computer Entertainment, Nintendo, Electronic Arts, Numskull Games, Ghostlight, Bandai Namco Games, Tecmo Koei Europe, Activision"; + String actual = testObject.checkPublishersEu(); + assertEquals(expected, actual); + } + + public void test_checkPublishersJp() { + Games testObject = new Games(); + String expected = "Atlus, Sony Computer Entertainment, Nintendo, Square Enix, Sega, Namco, Spike Chunsoft, Bandai Namco Games, Gust Co. Ltd., Activision"; + String actual = testObject.checkPublishersJp(); + assertEquals(expected, actual); + } + + public void test_checkPublishersNa() { + Games testObject = new Games(); + String expected = "Atlus, Sony Computer Entertainment, Nintendo, Sega, Namco, Spike Chunsoft, Bandai Namco Games, Tecmo Koei America, Activision"; + String actual = testObject.checkPublishersNa(); + assertEquals(expected, actual); + } + + public void test_checkReleaseDateUnknown() { + Games testObject = new Games(); + String expected = "Breakdown, Atelier Totori Plus"; + String actual = testObject.checkReleaseDateUnknown(); + assertEquals(expected, actual); + } + + public void test_checkAllSameReleaseYear() { + Games testObject = new Games(); + String expected = "Ratchet & Clank, Astral Chain, Fire Emblem: Three Houses, Triangle Strategy, Super Smash Bros. Ultimate, Jet Set Radio Future, AI: The Somnium Files, Crash Bandicoot N. Sane Trilogy"; + String actual = testObject.checkAllSameReleaseYear(); + assertEquals(expected, actual); + } + + public void test_checkAllDifferentReleaseYear() { + Games testObject = new Games(); + String expected = "Persona 5 Royal, Rhythm Paradise, Yakuza: Dead Souls, Breakdown, Persona 3 Portable, Tomodachi Life, Beautiful Katamari, Atelier Totori Plus"; + String actual = testObject.checkAllDifferentReleaseYear(); + assertEquals(expected, actual); + } + + public void test_checkAllSameReleaseMonth() { + Games testObject = new Games(); + String expected = "Astral Chain, Fire Emblem: Three Houses, Triangle Strategy, Super Smash Bros. Ultimate, AI: The Somnium Files"; + String actual = testObject.checkAllSameReleaseMonth(); + assertEquals(expected, actual); + } + + public void test_checkAllDifferentReleaseMonth() { + Games testObject = new Games(); + String expected = "Persona 5 Royal, Ratchet & Clank, Rhythm Paradise, Yakuza: Dead Souls, Jet Set Radio Future, Breakdown, Persona 3 Portable, Tomodachi Life, Beautiful Katamari, Atelier Totori Plus, Crash Bandicoot N. Sane Trilogy"; + String actual = testObject.checkAllDifferentReleaseMonth(); + assertEquals(expected, actual); + } + + public void test_checkOnePlayer() { + Games testObject = new Games(); + String expected = "Persona 5 Royal, Ratchet & Clank, Astral Chain, Fire Emblem: Three Houses, Triangle Strategy, Rhythm Paradise, Super Smash Bros. Ultimate, Yakuza: Dead Souls, Jet Set Radio Future, Breakdown, AI: The Somnium Files, Persona 3 Portable, Tomodachi Life, Beautiful Katamari, Atelier Totori Plus, Crash Bandicoot N. Sane Trilogy"; + String actual = testObject.checkOnePlayer(); + assertEquals(expected, actual); + } + + public void test_checkTwoPlayer() { + Games testObject = new Games(); + String expected = "Astral Chain, Super Smash Bros. Ultimate, Jet Set Radio Future"; + String actual = testObject.checkTwoPlayer(); + assertEquals(expected, actual); + } + + public void test_checkFourPlayer() { + Games testObject = new Games(); + String expected = "Super Smash Bros. Ultimate, Jet Set Radio Future"; + String actual = testObject.checkFourPlayer(); + assertEquals(expected, actual); + } + + public void test_checkEightPlayer() { + Games testObject = new Games(); + String expected = "Super Smash Bros. Ultimate"; + String actual = testObject.checkEightPlayer(); + assertEquals(expected, actual); + } + + public void test_checkOnePlayerOnly() { + Games testObject = new Games(); + String expected = "Persona 5 Royal, Ratchet & Clank, Fire Emblem: Three Houses, Triangle Strategy, Rhythm Paradise, Yakuza: Dead Souls, Breakdown, AI: The Somnium Files, Persona 3 Portable, Tomodachi Life, Beautiful Katamari, Atelier Totori Plus, Crash Bandicoot N. Sane Trilogy"; + String actual = testObject.checkOnePlayerOnly(); + assertEquals(expected, actual); + } + + public void test_checkUskZero() { + Games testObject = new Games(); + String expected = "Rhythm Paradise, Tomodachi Life, Beautiful Katamari"; + String actual = testObject.checkUskZero(); + assertEquals(expected, actual); + } + + public void test_checkUskSix() { + Games testObject = new Games(); + String expected = "Ratchet & Clank, Atelier Totori Plus, Crash Bandicoot N. Sane Trilogy"; + String actual = testObject.checkUskSix(); + assertEquals(expected, actual); + } + + public void test_checkUskTwelve() { + Games testObject = new Games(); + String expected = "Fire Emblem: Three Houses, Triangle Strategy, Super Smash Bros. Ultimate, Jet Set Radio Future, Persona 3 Portable"; + String actual = testObject.checkUskTwelve(); + assertEquals(expected, actual); + } + + public void test_checkUskSixteen() { + Games testObject = new Games(); + String expected = "Persona 5 Royal, Astral Chain, Breakdown, AI: The Somnium Files"; + String actual = testObject.checkUskSixteen(); + assertEquals(expected, actual); + } + + public void test_checkUskEighteen() { + Games testObject = new Games(); + String expected = "Yakuza: Dead Souls"; + String actual = testObject.checkUskEighteen(); + assertEquals(expected, actual); + } + + public void test_checkPegiThree() { + Games testObject = new Games(); + String expected = "Ratchet & Clank, Rhythm Paradise, Tomodachi Life, Beautiful Katamari"; + String actual = testObject.checkPegiThree(); + assertEquals(expected, actual); + } + + public void test_checkPegiSeven() { + Games testObject = new Games(); + String expected = "Crash Bandicoot N. Sane Trilogy"; + String actual = testObject.checkPegiSeven(); + assertEquals(expected, actual); + } + + public void test_checkPegiTwelve() { + Games testObject = new Games(); + String expected = "Fire Emblem: Three Houses, Triangle Strategy, Super Smash Bros. Ultimate, Persona 3 Portable, Atelier Totori Plus"; + String actual = testObject.checkPegiTwelve(); + assertEquals(expected, actual); + } + + public void test_checkPegiSixteen() { + Games testObject = new Games(); + String expected = "Persona 5 Royal, Astral Chain"; + String actual = testObject.checkPegiSixteen(); + assertEquals(expected, actual); + } + + public void test_checkPegiEighteen() { + Games testObject = new Games(); + String expected = "Yakuza: Dead Souls, Breakdown, AI: The Somnium Files"; + String actual = testObject.checkPegiEighteen(); + assertEquals(expected, actual); + } + + public void test_checkPegiUnknown() { + Games testObject = new Games(); + String expected = "Jet Set Radio Future"; + String actual = testObject.checkPegiUnknown(); + assertEquals(expected, actual); + } + + public void test_checkEsrbE() { + Games testObject = new Games(); + String expected = "Rhythm Paradise, Tomodachi Life, Beautiful Katamari"; + String actual = testObject.checkEsrbE(); + assertEquals(expected, actual); + } + + public void test_checkEsrbEten() { + Games testObject = new Games(); + String expected = "Super Smash Bros. Ultimate, Crash Bandicoot N. Sane Trilogy"; + String actual = testObject.checkEsrbEten(); + assertEquals(expected, actual); + } + + public void test_checkEsrbT() { + Games testObject = new Games(); + String expected = "Ratchet & Clank, Astral Chain, Fire Emblem: Three Houses, Triangle Strategy, Jet Set Radio Future, Atelier Totori Plus"; + String actual = testObject.checkEsrbT(); + assertEquals(expected, actual); + } + + public void test_checkEsrbM() { + Games testObject = new Games(); + String expected = "Persona 5 Royal, Yakuza: Dead Souls, Breakdown, AI: The Somnium Files, Persona 3 Portable"; + String actual = testObject.checkEsrbM(); + assertEquals(expected, actual); + } + + public void test_checkCeroA() { + Games testObject = new Games(); + String expected = "Ratchet & Clank, Rhythm Paradise, Super Smash Bros. Ultimate, Jet Set Radio Future, Tomodachi Life, Beautiful Katamari, Crash Bandicoot N. Sane Trilogy"; + String actual = testObject.checkCeroA(); + assertEquals(expected, actual); + } + + public void test_checkCeroB() { + Games testObject = new Games(); + String expected = "Fire Emblem: Three Houses, Persona 3 Portable, Atelier Totori Plus"; + String actual = testObject.checkCeroB(); + assertEquals(expected, actual); + } + + public void test_checkCeroC() { + Games testObject = new Games(); + String expected = "Persona 5 Royal, Astral Chain, Triangle Strategy, Breakdown"; + String actual = testObject.checkCeroC(); + assertEquals(expected, actual); + } + + public void test_checkCeroD() { + Games testObject = new Games(); + String expected = "Yakuza: Dead Souls"; + String actual = testObject.checkCeroD(); + assertEquals(expected, actual); + } + + public void test_checkCeroZ() { + Games testObject = new Games(); + String expected = "AI: The Somnium Files"; + String actual = testObject.checkCeroZ(); + assertEquals(expected, actual); + } + + public void test_checkAcbG() { + Games testObject = new Games(); + String expected = "Rhythm Paradise, Beautiful Katamari"; + String actual = testObject.checkAcbG(); + assertEquals(expected, actual); + } + + public void test_checkAcbPg() { + Games testObject = new Games(); + String expected = "Ratchet & Clank, Super Smash Bros. Ultimate, Tomodachi Life, Crash Bandicoot N. Sane Trilogy"; + String actual = testObject.checkAcbPg(); + assertEquals(expected, actual); + } + + public void test_checkAcbM() { + Games testObject = new Games(); + String expected = "Astral Chain, Fire Emblem: Three Houses, Triangle Strategy, Jet Set Radio Future"; + String actual = testObject.checkAcbM(); + assertEquals(expected, actual); + } + + public void test_checkAcbMaFifteen() { + Games testObject = new Games(); + String expected = "Persona 5 Royal, Yakuza: Dead Souls, Breakdown, AI: The Somnium Files, Persona 3 Portable"; + String actual = testObject.checkAcbMaFifteen(); + assertEquals(expected, actual); + } + + public void test_checkAcbReighteen() { + Games testObject = new Games(); + String expected = "Atelier Totori Plus"; + String actual = testObject.checkAcbReighteen(); + assertEquals(expected, actual); + } + + public void test_printTable() { + Games testObject = new Games(); + String expected = "Name, Console, Developer, Publisher EU, Publisher JP, Publisher NA, Genre, Release EU, Release JP, Release NA, Release AU, USK Rating, PEGI Rating, ESRB Rating, CERO Rating, ACB Rating, Players\n" + + "\n" + + "Persona 5 Royal, PlayStation 4, Atlus, Sega, Atlus, Atlus, JRPG, 31.03.2020, 31.10.2019, 31.03.2020, 31.03.2020, 16, 16, M, C, MA 15+, 1\n" + + "Ratchet & Clank, Multiplatform, Insomniac Games, Sony Computer Entertainment, Sony Computer Entertainment, Sony Computer Entertainment, Action-Adventure, 08.11.2002, 03.12.2002, 04.11.2002, 08.11.2002, 6, 3, T, A, PG, 1\n" + + "Astral Chain, Nintendo Switch, Platinum Games, Nintendo, Nintendo, Nintendo, Action-Adventure, 30.08.2019, 30.08.2019, 30.08.2019, 30.08.2019, 16, 16, T, C, M, 1-2\n" + + "Fire Emblem: Three Houses, Nintendo Switch, Intelligent Systems, Nintendo, Nintendo, Nintendo, Tactical role-playing, 26.07.2019, 26.07.2019, 26.07.2019, 26.07.2019, 12, 12, T, B, M, 1\n" + + "Triangle Strategy, Nintendo Switch, Artdink, Nintendo, Square Enix, Nintendo, Strategy, 04.03.2022, 04.03.2022, 04.03.2022, 04.03.2022, 12, 12, T, C, M, 1\n" + + "Rhythm Paradise, Nintendo DS, Nintendo SPD, Nintendo, Nintendo, Nintendo, Rhythm, 01.05.2009, 31.07.2008, 05.04.2009, 04.06.2009, 0, 3, E, A, G, 1\n" + + "Super Smash Bros. Ultimate, Nintendo Switch, Sora Ltd., Nintendo, Nintendo, Nintendo, Fighting, 07.12.2018, 07.12.2018, 07.12.2018, 07.12.2018, 12, 12, E10+, A, PG, 1-8\n" + + "Yakuza: Dead Souls, PlayStation 3, Ryu Ga Gotoku Studio, Sega, Sega, Sega, Survival Horror, 16.03.2012, 09.06.2011, 13.03.2012, 15.03.2012, 18, 18, M, D, MA 15+, 1\n" + + "Jet Set Radio Future, Xbox, Sega Sports R&D, Sega, Sega, Sega, Action, 14.03.2002, 22.02.2002, 25.02.2002, 14.03.2002, 12, Unknown, T, A, M, 1-4\n" + + "Breakdown, Xbox, Namco, Electronic Arts, Namco, Namco, Action-Adventure, 18.06.2004, 29.01.2004, 16.03.2004, Unknown, 16, 18, M, C, MA 15+, 1\n" + + "AI: The Somnium Files, Multiplatform, Spike Chunsoft, Numskull Games, Spike Chunsoft, Spike Chunsoft, Adventure, 20.09.2019, 19.09.2019, 17.09.2019, 20.09.2019, 16, 18, M, Z, MA 15+, 1\n" + + "Persona 3 Portable, PlayStation Portable, Atlus, Ghostlight, Atlus, Atlus, RPG, 29.04.2011, 01.11.2009, 06.07.2010, 16.11.2011, 12, 12, M, B, MA 15+, 1\n" + + "Tomodachi Life, Nintendo 3DS, Nintendo SPD, Nintendo, Nintendo, Nintendo, Life Simulation, 06.06.2014, 18.04.2013, 06.06.2014, 07.06.2014, 0, 3, E, A, PG, 1\n" + + "Beautiful Katamari, Xbox 360, Bandai Namco Games, Bandai Namco Games, Bandai Namco Games, Bandai Namco Games, Puzzle, 29.02.2008, 16.10.2007, 18.10.2007, 07.03.2008, 0, 3, E, A, G, 1\n" + + "Atelier Totori Plus, PlayStation Vita, Gust Co. Ltd., Tecmo Koei Europe, Gust Co. Ltd., Tecmo Koei America, RPG, 20.03.2013, 29.11.2012, 19.03.2013, Unknown, 6, 12, T, B, R 18+, 1\n" + + "Crash Bandicoot N. Sane Trilogy, Multiplatform, Vicarious Visions, Activision, Activision, Activision, Platformer, 30.06.2017, 03.08.2017, 30.06.2017, 30.06.2017, 6, 7, E10+, A, PG, 1"; + String actual = testObject.printTable(); + assertEquals(expected, actual); + } +} diff --git a/projjpn/src/test/java/de/hs_fulda/ciip/projjpn/ItemTest.java b/projjpn/src/test/java/de/hs_fulda/ciip/projjpn/ItemTest.java new file mode 100644 index 0000000..aaf8886 --- /dev/null +++ b/projjpn/src/test/java/de/hs_fulda/ciip/projjpn/ItemTest.java @@ -0,0 +1,89 @@ +package de.hs_fulda.ciip.projjpn; + +import junit.framework.TestCase; + +public class ItemTest extends TestCase { + /** + * No Items are in Stock. + * Check the inStock() Method. + */ + public void test_ItemNotInStock() { + // Given + Item item = new Item(); + + // When + boolean notInStock = item.inStock(); + + // Then + assertFalse(notInStock); + } + + /** + * Stock is not Empty. + * Check the inStock() Method. + */ + public void test_ItemInStock() { + // Given + Item item = new Item(); + item.updateAvailability(1); + // When + boolean inStock = item.inStock(); + + // Then + assertTrue(inStock); + } + + /** + * One and the same type of an item costs the same. + * check getCurrentPrice() + */ + public void test_priceOfMultipleIdenticalItems() { + // Given + Item item = new Item(); + int quantity = 3; + float price = 5; + item.updateAvailability(quantity); + item.updatePrice(price); + + // When + float expectedPrice = quantity * price; + + // Then + float actualPrice = 0; + for(int i = 0; i < quantity; i++) { + actualPrice += item.getCurrentPrice(); + } + + assertEquals(expectedPrice, actualPrice); + } + + /** + * Check if creating a complete item with all attributes works as intended. + */ + public void test_buildCompleteItem() { + // Given + String expectedTitel = "Logitec Maus"; + String expectedDescription = "Gaming Maus fuer Fortgeschrittene."; + int expectedQuantity = 10; + float expectedPrice = 69.99f; + + // When + Item itemNotNull = new Item(expectedTitel, expectedDescription, expectedQuantity, expectedPrice); + + // Then + assertNotNull(itemNotNull); + + // When + boolean validDescription = itemNotNull.getDescription().equals(expectedDescription); + assertTrue(validDescription); + + boolean validTitle = itemNotNull.getTitel().equals(expectedTitel); + assertTrue(validTitle); + + boolean validQuantity = itemNotNull.getCurrentStock() == expectedQuantity; + assertTrue(validQuantity); + + boolean validPrice = itemNotNull.getCurrentPrice() == expectedPrice; + assertTrue(validPrice); + } +} diff --git a/projjpn/src/test/java/de/hs_fulda/ciip/projjpn/UserTest.java b/projjpn/src/test/java/de/hs_fulda/ciip/projjpn/UserTest.java new file mode 100644 index 0000000..5598b71 --- /dev/null +++ b/projjpn/src/test/java/de/hs_fulda/ciip/projjpn/UserTest.java @@ -0,0 +1,23 @@ +package de.hs_fulda.ciip.projjpn; + +import junit.framework.TestCase; + +public class UserTest extends TestCase { + /** + * Create User with a valid Birthday and check whether it worked as intended. + */ + public void test_initAndGetBirthdayOfUser() { + // Given + Customers customers = new Customers(); + String firstName = "Mia"; + String lastName = "Muster"; + String nickName = "harley"; + String eMail = "mia@muster.de"; + int DD = 30, MM = 12, YYYY = 1997; + String expectedBirthdate = new Birthdate(DD, MM, YYYY).toString(); + + User userToCheck = new User(firstName, lastName, nickName, eMail, new Birthdate(DD, MM, YYYY)); + String gotBirthdate = userToCheck.getBirthdate().toString(); + boolean gotExpectedBirthdayBack = gotBirthdate.equals(expectedBirthdate); + } +} diff --git a/projjpn/src/test/java/de/hs_fulda/ciip/projjpn/WarehouseTest.java b/projjpn/src/test/java/de/hs_fulda/ciip/projjpn/WarehouseTest.java new file mode 100644 index 0000000..5b7234e --- /dev/null +++ b/projjpn/src/test/java/de/hs_fulda/ciip/projjpn/WarehouseTest.java @@ -0,0 +1,63 @@ +package de.hs_fulda.ciip.projjpn; + +import junit.framework.TestCase; + +public class WarehouseTest extends TestCase { + /** + * Check if the insertion of an Item works properly. + */ + public void test_insertItemInWarehouse() { + // Given + Warehouse warehouse = new Warehouse(); + + String expectedTitel = "Logitec Maus"; + String expectedDescription = "Gaming Maus fuer Fortgeschrittene."; + int expectedQuantity = 10; + float expectedPrice = 69.69f; + + // When + Item expectedItem = new Item(expectedTitel, expectedDescription, expectedQuantity, expectedPrice); + assertNotNull(expectedItem); + warehouse.insertItem(expectedItem); + + Item gotItem = warehouse.pool.get(expectedTitel); + + // Then + assertEquals(expectedTitel, gotItem.getTitel()); + } + + /** + * Test the total Sum of Items in the whole Warehouse. + */ + public void test_growingCountOfItemsInWarehouse() { + // Given + Warehouse warehouse = new Warehouse(); + int unitsPerItemType = 3; + int expectedSize = 13; + for (int i = 0; i < expectedSize; i++) { + Item item = new Item("ItemDummy" + i, "DescriptionDummy" + i, unitsPerItemType, 12.0f); + warehouse.insertItem(item); + } + int expectedSum = expectedSize * unitsPerItemType; + int actualSumOfAllItems = warehouse.getCountOfStock(); + + // Then + assertEquals(expectedSum, actualSumOfAllItems); + } + + /** + * Empty Warehouse means there are a total of zero Items. + */ + public void test_emptyWarehouse() { + // Given + Warehouse warehouse = new Warehouse(); + + // When + int expectedSum = 0; + + // Then + int actualSumOfAllItems = warehouse.getCountOfStock(); + assertEquals(expectedSum, actualSumOfAllItems); + + } +}