From 8abeb9b04930752ea5694d69fb898f445fbee640 Mon Sep 17 00:00:00 2001
From: Eduardo Pedroni <e.pedroni91@gmail.com>
Date: Sat, 7 Nov 2015 18:19:55 +0100
Subject: Started refactoring CLI tests AGAIN, properly this time by emulating
 user input

---
 src/eu/equalparts/cardbase/cli/CardbaseCLI.java   | 69 +++++++++++++----------
 src/eu/equalparts/cardbase/utils/MTGUniverse.java |  6 +-
 2 files changed, 42 insertions(+), 33 deletions(-)

(limited to 'src/eu/equalparts/cardbase')

diff --git a/src/eu/equalparts/cardbase/cli/CardbaseCLI.java b/src/eu/equalparts/cardbase/cli/CardbaseCLI.java
index 98cce21..4db9473 100644
--- a/src/eu/equalparts/cardbase/cli/CardbaseCLI.java
+++ b/src/eu/equalparts/cardbase/cli/CardbaseCLI.java
@@ -30,7 +30,7 @@ public final class CardbaseCLI {
 	 * 
 	 * @author Eduardo Pedroni
 	 */
-	enum Action {
+	private enum Action {
 		ADD, REMOVE;
 		public Card card;
 	}
@@ -38,44 +38,50 @@ public final class CardbaseCLI {
 	/**
 	 * Location of the help file.
 	 */
-	static final String HELP_FILE_PATH = "/help_en";
+	private static final String HELP_FILE_PATH = "/help_en";
 	/**
 	 * Program version.
 	 */
-	static final String VERSION = "1.0";
+	private static final String VERSION = "1.0";
+	/**
+	 * This is the default remote URL from where card data is queried.
+	 */
+	private static final String REMOTE_URL = "http://mtgjson.com/json/";
 	/**
 	 * The last action performed by the user.
 	 */
-	Action lastAction = null;
+	private Action lastAction = null;
 	/**
-	 * 
+	 * This is the universe of MTG cards. The URL to query from
+	 * is by default {@code REMOTE_URL}, but it can be overridden
+	 * in the default constructor.
 	 */
-	MTGUniverse mtgUniverse = new MTGUniverse();
+	private MTGUniverse mtgUniverse;
 	/**
 	 * The currently selected set, from which new cards are added.
 	 */
-	FullCardSet selectedSet = null;
+	private FullCardSet selectedSet = null;
 	/**
 	 * The actual cardbase being interfaced with.
 	 */
-	Cardbase cardbase;
+	private Cardbase cardbase;
 	/**
 	 * Printed to the console when the user enters the help command.
 	 */
-	String help = "Not available, check project page on GitHub.";
+	private String help = "Not available, check project page on GitHub.";
 	/**
 	 * The cardbase file off which we are currently working, if any.
 	 */
-	File cardbaseFile = null;
+	private File cardbaseFile = null;
 	/**
 	 * Save flag is raised when cards are added or removed and causes a prompt to be shown
 	 * if the user tries to exit with unsaved changed.
 	 */
-	boolean savePrompt = false;
+	private boolean savePrompt = false;
 	/**
 	 * Exit flag, program breaks out of the main loop when true.
 	 */
-	boolean exit = false;
+	private boolean exit = false;
 
 	/**
 	 * Execute the interface.
@@ -84,14 +90,14 @@ public final class CardbaseCLI {
 	 */
 	public static void main(String... args) {
 		try {
-			new CardbaseCLI(args).startInterface();
+			new CardbaseCLI(REMOTE_URL, args).startInterface();
 		} catch (JsonParseException e) {
 			System.out.println("Error: poorly formatted cardbase, check the syntax and try again.");
 			// although the problem could also be with the upstream CardSetList json.
 			if (Cardbase.DEBUG) e.printStackTrace();
 			System.exit(1);
 		} catch (JsonMappingException e) {
-			System.out.println("Error: unexpected fields found in cardbase, it may be from an old version?");
+			System.out.println("Error: unexpected fields found in cardbase, is it from an old version?");
 			if (Cardbase.DEBUG) e.printStackTrace();
 			System.exit(1);
 		} catch (IOException e) {
@@ -99,7 +105,7 @@ public final class CardbaseCLI {
 			if (Cardbase.DEBUG) e.printStackTrace();
 			System.exit(1);
 		} catch (IllegalArgumentException e) {
-			System.out.println("Error: the provided file is invalid.");
+			System.out.println("Error: the file provided is invalid.");
 			if (Cardbase.DEBUG) e.printStackTrace();
 			System.exit(1);
 		}
@@ -110,17 +116,21 @@ public final class CardbaseCLI {
 	 * This does not actually produce the CLI, for that use {@code startInterface()}
 	 * on the constructed object.
 	 * 
+	 * @param remoteURL the remote URL used to query for card and set data.
 	 * @param args a list of arguments. Only the first argument is used, as a cardbase JSON.
 	 * @throws IOException if something goes wrong while reading the provided file.
 	 * @throws JsonMappingException if the provided json did not correspond to the expected format.
 	 * @throws JsonParseException if the provided file did not contain valid json.
 	 */
-	CardbaseCLI(String... args) throws JsonParseException, JsonMappingException, IOException {
+	CardbaseCLI(String remoteURL, String... args) throws JsonParseException, JsonMappingException, IOException {
 		System.out.println("Welcome to Cardbase CLI!");
 
 		// set debug flag if we are debugging
 		if (Cardbase.DEBUG) System.out.println("Debug mode is on.");
 
+		// initialise the universe
+		mtgUniverse = new MTGUniverse(remoteURL);
+		
 		// make the Cardbase
 		if (args != null && args.length > 0 && !args[0].isEmpty()) {
 			cardbaseFile = new File(args[0]);
@@ -263,7 +273,7 @@ public final class CardbaseCLI {
 	 * Print program version.
 	 */
 	private void version() {
-		System.out.println("Cardbase v" + VERSION);
+		System.out.println("CardbaseCLI v" + VERSION);
 	}
 	
 	/**
@@ -369,21 +379,23 @@ public final class CardbaseCLI {
 	private void remove(String... args) {
 		if (selectedSet != null) {
 			if (args != null && args.length > 0) {
-//				Card cardToRemove = selectedSet.getCardByNumber(args[0]);
-				Card cardToRemove = cardbase.getCard(selectedSet.code, args[0]);
+				Card cardToRemove = selectedSet.getCardByNumber(args[0]);
 				if (cardToRemove != null) {
-					Integer count = 1;
-					if (args.length > 1 && args[1].matches("[0-9]+")) {
-						count = Integer.valueOf(args[1]);
-						if (count <= 0) {
-							System.out.println("Can't remove " + count + " cards.");
-							return;
+					String count = args.length > 1 ? args[1] : "1";
+					
+					if (count.matches("[-]?[0-9]+")) {
+						Integer intCount = Integer.valueOf(count);
+						if (intCount > 0) {
+							cardToRemove.count = intCount;
+							removeCard(cardToRemove);
+						} else {
+							System.out.println("Cannot remove " + count + " cards.");
 						}
+					} else {
+						System.out.println(count + " is not a valid number of cards.");
 					}
-					cardToRemove.count = count;
-					removeCard(cardToRemove);
 				} else {
-					System.out.println("Card " + selectedSet.code + " " + args[0] + " is not in the cardbase.");
+					System.out.println(args[0] + " does not correspond to a card in " + selectedSet.name + ".");
 				}
 			} else {
 				System.out.println("Please specify a card number to remove.");
@@ -476,7 +488,6 @@ public final class CardbaseCLI {
 		} else {
 			System.out.println(card.name + " is not in the cardbase.");
 		}
-
 	}
 
 	/**
diff --git a/src/eu/equalparts/cardbase/utils/MTGUniverse.java b/src/eu/equalparts/cardbase/utils/MTGUniverse.java
index dd6f6ad..2e33eff 100644
--- a/src/eu/equalparts/cardbase/utils/MTGUniverse.java
+++ b/src/eu/equalparts/cardbase/utils/MTGUniverse.java
@@ -32,9 +32,9 @@ public final class MTGUniverse {
 	/**
 	 * The base URL from where the information is fetched.
 	 */
-	private String BASE_DATA_URL = "http://mtgjson.com/json/";
+	private String BASE_DATA_URL;
 	/**
-	 * If the upstream set code list can't be loaded, this is loaded instead.
+	 * If the upstream set code list can't be loaded, this local copy is loaded instead.
 	 */
 	private final String FALLBACK_LIST_PATH = "/fallbackSetList.json";
 	/**
@@ -46,8 +46,6 @@ public final class MTGUniverse {
 	 */
 	private HashMap<String, FullCardSet> cardSetCache = new HashMap<String, FullCardSet>();
 	
-	public MTGUniverse() {}
-	
 	public MTGUniverse(String dataLocation) {
 		this.BASE_DATA_URL = dataLocation;
 	}
-- 
cgit v1.2.3