messenger-android

Android graphical user interfaces for GNUnet Messenger
Log | Files | Refs | README | LICENSE

commit 66e2c61f523be343df1c190c139e7f066dd772f4
parent 2ecf3f5679331a4a1f10550471743f43b776a7a1
Author: t3sserakt <t3sserakt@posteo.de>
Date:   Tue,  4 Nov 2025 17:20:33 +0100

implemented mock test with

Diffstat:
MGNUnetMessenger/app/src/main/java/org/gnunet/gnunetmessenger/model/ChatContext.kt | 5+++--
MGNUnetMessenger/app/src/main/java/org/gnunet/gnunetmessenger/service/mock/GnunetChatMock.kt | 52+++++++++++++++++++++++++++++++++++++++-------------
MGNUnetMessenger/app/src/test/java/org/gnunet/gnunetmessenger/logic/MessageValidatorTest.kt | 15+++++++++++++++
AGNUnetMessenger/app/src/test/java/org/gnunet/gnunetmessenger/service/mock/GnunetChatMockTest.kt | 157+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
4 files changed, 214 insertions(+), 15 deletions(-)

diff --git a/GNUnetMessenger/app/src/main/java/org/gnunet/gnunetmessenger/model/ChatContext.kt b/GNUnetMessenger/app/src/main/java/org/gnunet/gnunetmessenger/model/ChatContext.kt @@ -29,8 +29,9 @@ import kotlinx.parcelize.Parcelize @Parcelize data class ChatContext ( - val chatContextType: ChatContextType, + val chatContextType: ChatContextType?, var userPointer: String?, val isGroup: Boolean, - val isPlatform: Boolean): Parcelable + val isPlatform: Boolean +): Parcelable diff --git a/GNUnetMessenger/app/src/main/java/org/gnunet/gnunetmessenger/service/mock/GnunetChatMock.kt b/GNUnetMessenger/app/src/main/java/org/gnunet/gnunetmessenger/service/mock/GnunetChatMock.kt @@ -44,6 +44,17 @@ class GnunetChatMock : GnunetChat { private lateinit var messageCallback: (ChatContext, ChatMessage) -> Unit private var uuidCounter: Long = 0 + var lastDestroyedUri: ChatUri? = null + private set + + var lastSetUserPointer: Pair<ChatContact?, String?>? = null + private set + var lastSetGroupPointer: Pair<ChatGroup?, String?>? = null + private set + + var lastSetMessageForGroupContact: Triple<ChatGroup?, ChatContact?, ChatMessage?>? = null + private set + override suspend fun awaitReady(handle: ChatHandle) { return } @@ -146,11 +157,14 @@ class GnunetChatMock : GnunetChat { } override fun parseUri(uri: String): ChatUri { - TODO("Not yet implemented") + // Return a fake, hard-coded ChatUri. + // We'll just put the URI we received inside it. + return ChatUri(uri) } override fun destroyUri(uri: ChatUri) { - TODO("Not yet implemented") + // This is our "side effect" that the test can check + lastDestroyedUri = uri } override fun inviteContactToGroup(group: ChatGroup, contact: ChatContact) { @@ -179,19 +193,30 @@ class GnunetChatMock : GnunetChat { } override fun getMessageForGroupContact(group: ChatGroup, contact: ChatContact): ChatMessage { - TODO("Not yet implemented") + // Return a fixed, hard-coded ChatMessage for testing + return ChatMessage( + ChatContext(null, null, false, false), + "fake-message-for-group", + 12345L, + contact, + MessageKind.TEXT, + null + ) } override fun getMessageKind(message: ChatMessage): MessageKind { - TODO("Not yet implemented") + // Always return TEXT for our mock + return MessageKind.TEXT } override fun isMessageRecent(message: ChatMessage): GnunetReturnValue { - TODO("Not yet implemented") + // Always return OK for our mock + return GnunetReturnValue.OK } override fun getMessageTimestamp(message: ChatMessage): Long { - TODO("Not yet implemented") + // Return a fixed, hard-coded timestamp for testing + return 123456789L } override fun setMessageForGroupContact( @@ -199,7 +224,7 @@ class GnunetChatMock : GnunetChat { contact: ChatContact, message: ChatMessage ) { - TODO("Not yet implemented") + lastSetMessageForGroupContact = Triple(group, contact, message) } override fun iterateContacts(handle: ChatHandle, callback: (ChatContact) -> Int) { @@ -268,19 +293,21 @@ class GnunetChatMock : GnunetChat { } override fun getContactUserPointer(chatContact: ChatContact): String { - TODO("Not yet implemented") + // Return a fixed, hard-coded string for testing + return "fake-user-pointer-123" } override fun setContactUserPointer(chatContact: ChatContact, userPointer: String) { - TODO("Not yet implemented") + lastSetUserPointer = Pair(chatContact, userPointer) } override fun getGroupUserPointer(chatGroup: ChatGroup): String { - TODO("Not yet implemented") + // Return a fixed, hard-coded string for testing + return "fake-group-pointer-789" } override fun setGroupUserPointer(chatGroup: ChatGroup, userPointer: String) { - println("set group name") + lastSetGroupPointer = Pair(chatGroup, userPointer) } override fun sendText(chatContext: ChatContext, text: String) { @@ -348,4 +375,4 @@ class GnunetChatMock : GnunetChat { override fun unshareAttributes(handle: ChatHandle, contact: ChatContact, key: String) { println("unshare ${key} for contact ${contact.name}") } -} -\ No newline at end of file +} diff --git a/GNUnetMessenger/app/src/test/java/org/gnunet/gnunetmessenger/logic/MessageValidatorTest.kt b/GNUnetMessenger/app/src/test/java/org/gnunet/gnunetmessenger/logic/MessageValidatorTest.kt @@ -20,4 +20,19 @@ class MessageValidatorTest { // We expect 'true' because the message is valid assertEquals(true, result) } + + // Test case 2: Check an empty message + @Test + fun `isValid returns false for an empty message`() { + // Arrange + val validator = MessageValidator() + val message = "" // Empty string + + // Act + val result = validator.isValid(message) + + // Assert + // This time, we expect the result to be 'false' + assertEquals(false, result) + } } \ No newline at end of file diff --git a/GNUnetMessenger/app/src/test/java/org/gnunet/gnunetmessenger/service/mock/GnunetChatMockTest.kt b/GNUnetMessenger/app/src/test/java/org/gnunet/gnunetmessenger/service/mock/GnunetChatMockTest.kt @@ -0,0 +1,156 @@ +package org.gnunet.gnunetmessenger.service.mock + +import org.gnunet.gnunetmessenger.model.ChatHandle +import org.gnunet.gnunetmessenger.model.ChatContext +import org.gnunet.gnunetmessenger.model.ChatMessage +import org.gnunet.gnunetmessenger.model.MessageKind +import org.gnunet.gnunetmessenger.model.ChatUri +import org.gnunet.gnunetmessenger.model.GnunetReturnValue +import org.gnunet.gnunetmessenger.model.ChatContact +import org.gnunet.gnunetmessenger.model.ChatGroup +import org.junit.Assert.assertEquals +import org.junit.Test + +class GnunetChatMockTest { + + @Test + fun `iterateAccounts returns the hardcoded account names`() { + val mock = GnunetChatMock() + + val fakeHandle = ChatHandle(1) + + val resultingNames = mutableListOf<String>() + + mock.iterateAccounts(fakeHandle) { account -> + resultingNames.add(account.name) + } + + val expectedNames = listOf("Alice", "Bob", "Charlie") + + assertEquals(3, resultingNames.size) + assertEquals(expectedNames, resultingNames) + } + + @Test + fun `getMessageTimestamp returns the hardcoded timestamp`() { + val mock = GnunetChatMock() + + val fakeMessage = ChatMessage(ChatContext(null, null, false, false), "", 0, null, MessageKind.TEXT, null) + val resultTimestamp = mock.getMessageTimestamp(fakeMessage) + + assertEquals(123456789L, resultTimestamp) + } + + @Test + fun `parseUri returns a ChatUri object with the correct uri`() { + val mock = GnunetChatMock() + val testUriString = "gnunet://example-uri/12345" + + val resultChatUri = mock.parseUri(testUriString) + + assertEquals(testUriString, resultChatUri.error) + } + + @Test + fun `isMessageRecent always returns OK`() { + val mock = GnunetChatMock() + + val fakeMessage = ChatMessage(ChatContext(null, null, false, false), "", 0, null, MessageKind.TEXT, null) + + val result = mock.isMessageRecent(fakeMessage) + + assertEquals(GnunetReturnValue.OK, result) + } + + @Test + fun `getMessageKind always returns TEXT`() { + val mock = GnunetChatMock() + + val fakeMessage = ChatMessage(ChatContext(null, null, false, false), "", 0, null, MessageKind.TEXT, null) + + val result = mock.getMessageKind(fakeMessage) + + assertEquals(MessageKind.TEXT, result) + } + + @Test + fun `destroyUri sets the lastDestroyedUri property`() { + val mock = GnunetChatMock() + val fakeUri = ChatUri("gnunet://test-uri-to-destroy") + + mock.destroyUri(fakeUri) + + assertEquals(fakeUri, mock.lastDestroyedUri) + } + + @Test + fun `getContactUserPointer returns a hardcoded string`() { + val mock = GnunetChatMock() + + val fakeContact = ChatContact(ChatContext(null, null, false, false), "") + + val result = mock.getContactUserPointer(fakeContact) + + assertEquals("fake-user-pointer-123", result) + } + + @Test + fun `setContactUserPointer sets the lastSetUserPointer property`() { + val mock = GnunetChatMock() + val fakeContact = ChatContact(ChatContext(null, null, false, false), "test-contact") + val fakePointer = "test-pointer-456" + + mock.setContactUserPointer(fakeContact, fakePointer) + + assertEquals(Pair(fakeContact, fakePointer), mock.lastSetUserPointer) + } + + @Test + fun `getGroupUserPointer returns a hardcoded string`() { + val mock = GnunetChatMock() + + val fakeGroup = ChatGroup(ChatContext(null, null, false, false), "") + + val result = mock.getGroupUserPointer(fakeGroup) + + assertEquals("fake-group-pointer-789", result) + } + + @Test + fun `setGroupUserPointer sets the lastSetGroupPointer property`() { + val mock = GnunetChatMock() + val fakeGroup = ChatGroup(ChatContext(null, null, false, false), "test-group") + val fakePointer = "test-group-pointer-xyz" + + mock.setGroupUserPointer(fakeGroup, fakePointer) + + assertEquals(Pair(fakeGroup, fakePointer), mock.lastSetGroupPointer) + } + + @Test + fun `getMessageForGroupContact returns a hardcoded chat message`() { + + val mock = GnunetChatMock() + val fakeGroup = ChatGroup(ChatContext(null, null, false, false), "test-group") + val fakeContact = ChatContact(ChatContext(null, null, false, false), "test-contact") + + val resultMessage = mock.getMessageForGroupContact(fakeGroup, fakeContact) + + assertEquals("fake-message-for-group", resultMessage.text) + assertEquals(MessageKind.TEXT, resultMessage.kind) + assertEquals(fakeContact, resultMessage.sender) // Check it attached the contact + } + + @Test + fun `setMessageForGroupContact sets the lastSetMessageForGroupContact property`() { + val mock = GnunetChatMock() + val fakeGroup = ChatGroup(ChatContext(null, null, false, false), "test-group") + val fakeContact = ChatContact(ChatContext(null, null, false, false), "test-contact") + val fakeMessage = ChatMessage(ChatContext(null, null, false, false), "test-msg", 0, null, MessageKind.TEXT, null) + + + mock.setMessageForGroupContact(fakeGroup, fakeContact, fakeMessage) + + assertEquals(Triple(fakeGroup, fakeContact, fakeMessage), mock.lastSetMessageForGroupContact) + } +} +\ No newline at end of file