diff --git a/src/main/java/org/qortal/controller/repository/NamesDatabaseIntegrityCheck.java b/src/main/java/org/qortal/controller/repository/NamesDatabaseIntegrityCheck.java index 272bd5ba..4214eccf 100644 --- a/src/main/java/org/qortal/controller/repository/NamesDatabaseIntegrityCheck.java +++ b/src/main/java/org/qortal/controller/repository/NamesDatabaseIntegrityCheck.java @@ -319,7 +319,7 @@ public class NamesDatabaseIntegrityCheck { this.nameTransactions = nameTransactions; } - private List fetchAllTransactionsInvolvingName(String name, Repository repository) throws DataException { + public List fetchAllTransactionsInvolvingName(String name, Repository repository) throws DataException { List transactions = new ArrayList<>(); String reducedName = Unicode.sanitize(name); diff --git a/src/test/java/org/qortal/test/naming/IntegrityTests.java b/src/test/java/org/qortal/test/naming/IntegrityTests.java index d278cf3a..419f6870 100644 --- a/src/test/java/org/qortal/test/naming/IntegrityTests.java +++ b/src/test/java/org/qortal/test/naming/IntegrityTests.java @@ -13,6 +13,8 @@ import org.qortal.test.common.TransactionUtils; import org.qortal.test.common.transaction.TestTransaction; import org.qortal.transaction.Transaction; +import java.util.List; + import static org.junit.Assert.*; public class IntegrityTests extends Common { @@ -45,6 +47,63 @@ public class IntegrityTests extends Common { } } + @Test + public void testBlankReducedName() throws DataException { + try (final Repository repository = RepositoryManager.getRepository()) { + // Register-name + PrivateKeyAccount alice = Common.getTestAccount(repository, "alice"); + String name = "\uD83E\uDD73"; // Translates to a reducedName of "" + String data = "\uD83E\uDD73"; + + RegisterNameTransactionData transactionData = new RegisterNameTransactionData(TestTransaction.generateBase(alice), name, data); + TransactionUtils.signAndMint(repository, transactionData, alice); + + // Ensure the name exists and the data is correct + assertEquals(data, repository.getNameRepository().fromName(name).getData()); + + // Ensure the reducedName is blank + assertEquals("", repository.getNameRepository().fromName(name).getReducedName()); + + // Run the database integrity check for this name + NamesDatabaseIntegrityCheck integrityCheck = new NamesDatabaseIntegrityCheck(); + assertEquals(1, integrityCheck.rebuildName(name, repository)); + + // Ensure the name still exists and the data is still correct + assertEquals(data, repository.getNameRepository().fromName(name).getData()); + assertEquals("", repository.getNameRepository().fromName(name).getReducedName()); + } + } + + @Test + public void testUpdateWithBlankNewName() throws DataException { + try (final Repository repository = RepositoryManager.getRepository()) { + // Register-name to Alice + PrivateKeyAccount alice = Common.getTestAccount(repository, "alice"); + String name = "initial_name"; + String data = "initial_data"; + RegisterNameTransactionData transactionData = new RegisterNameTransactionData(TestTransaction.generateBase(alice), name, data); + TransactionUtils.signAndMint(repository, transactionData, alice); + + // Update the name, but keep the new name blank + String newName = ""; + String newData = "updated_data"; + UpdateNameTransactionData updateTransactionData = new UpdateNameTransactionData(TestTransaction.generateBase(alice), name, newName, newData); + TransactionUtils.signAndMint(repository, updateTransactionData, alice); + + // Ensure the original name exists and the data is correct + assertEquals(name, repository.getNameRepository().fromName(name).getName()); + assertEquals(newData, repository.getNameRepository().fromName(name).getData()); + + // Run the database integrity check for this name + NamesDatabaseIntegrityCheck integrityCheck = new NamesDatabaseIntegrityCheck(); + assertEquals(2, integrityCheck.rebuildName(name, repository)); + + // Ensure the name still exists and the data is still correct + assertEquals(name, repository.getNameRepository().fromName(name).getName()); + assertEquals(newData, repository.getNameRepository().fromName(name).getData()); + } + } + @Test public void testMissingName() throws DataException { try (final Repository repository = RepositoryManager.getRepository()) {