diff --git a/src/main/java/org/qortal/arbitrary/metadata/ArbitraryDataTransactionMetadata.java b/src/main/java/org/qortal/arbitrary/metadata/ArbitraryDataTransactionMetadata.java index d07d098a..e92f6828 100644 --- a/src/main/java/org/qortal/arbitrary/metadata/ArbitraryDataTransactionMetadata.java +++ b/src/main/java/org/qortal/arbitrary/metadata/ArbitraryDataTransactionMetadata.java @@ -42,7 +42,7 @@ public class ArbitraryDataTransactionMetadata extends ArbitraryDataMetadata { this.tags = metadata.getString("tags"); } if (metadata.has("category")) { - this.category = Category.valueOf(metadata.getString("category")); + this.category = Category.uncategorizedValueOf(metadata.getString("category")); } List chunksList = new ArrayList<>(); diff --git a/src/main/java/org/qortal/arbitrary/misc/Category.java b/src/main/java/org/qortal/arbitrary/misc/Category.java index 395e0ef2..d56e3d5d 100644 --- a/src/main/java/org/qortal/arbitrary/misc/Category.java +++ b/src/main/java/org/qortal/arbitrary/misc/Category.java @@ -64,4 +64,18 @@ public enum Category { return this.name; } + /** + * Same as valueOf() but with fallback to UNCATEGORIZED if there's no match + * @param name + * @return a Category (using UNCATEGORIZED if no match found) + */ + public static Category uncategorizedValueOf(String name) { + try { + return Category.valueOf(name); + } + catch (IllegalArgumentException e) { + return Category.UNCATEGORIZED; + } + } + } diff --git a/src/test/java/org/qortal/test/arbitrary/ArbitraryTransactionMetadataTests.java b/src/test/java/org/qortal/test/arbitrary/ArbitraryTransactionMetadataTests.java index a07cfbb6..79ac499a 100644 --- a/src/test/java/org/qortal/test/arbitrary/ArbitraryTransactionMetadataTests.java +++ b/src/test/java/org/qortal/test/arbitrary/ArbitraryTransactionMetadataTests.java @@ -164,4 +164,18 @@ public class ArbitraryTransactionMetadataTests extends Common { } } + @Test + public void testExistingCategories() { + // Matching categories should be correctly located + assertEquals(Category.QORTAL, Category.uncategorizedValueOf("QORTAL")); + assertEquals(Category.TECHNOLOGY, Category.uncategorizedValueOf("TECHNOLOGY")); + } + + @Test + public void testMissingCategory() { + // Missing or invalid categories should fall back to UNCATEGORIZED + assertEquals(Category.UNCATEGORIZED, Category.uncategorizedValueOf("INVALID_CATEGORY")); + assertEquals(Category.UNCATEGORIZED, Category.uncategorizedValueOf("Qortal")); // Case-sensitive match required + } + }