From 8b3910d36c45b3103aee531592d9abc57b135fa5 Mon Sep 17 00:00:00 2001
From: "Richard T. Carback III" <rick.carback@gmail.com>
Date: Wed, 5 Oct 2022 17:15:46 +0000
Subject: [PATCH] Add test for duplicate inserts

---
 indexedDb/implementation.go      |  4 +--
 indexedDb/implementation_test.go | 45 +++++++++++++++++++++++++++++++-
 2 files changed, 46 insertions(+), 3 deletions(-)

diff --git a/indexedDb/implementation.go b/indexedDb/implementation.go
index 0b723642..0d536811 100644
--- a/indexedDb/implementation.go
+++ b/indexedDb/implementation.go
@@ -167,7 +167,7 @@ func (w *wasmModel) ReceiveMessage(channelID *id.ID,
 	if !messageID.Equals(cryptoChannel.MessageID{}) {
 		jww.DEBUG.Printf("non-empty messageID detected")
 		uuid, err := w.msgIDLookup(messageID)
-		if err != nil {
+		if err == nil {
 			jww.DEBUG.Printf("MessageID found: %d", uuid)
 			// message is already in the database, no
 			// insert necessary
@@ -241,7 +241,7 @@ func (w *wasmModel) ReceiveReaction(channelID *id.ID,
 	// receives their own message from the mixnet.
 	if !messageID.Equals(cryptoChannel.MessageID{}) {
 		uuid, err := w.msgIDLookup(messageID)
-		if err != nil {
+		if err == nil {
 			// message is already in the database, no insert necessary
 			return uuid
 		}
diff --git a/indexedDb/implementation_test.go b/indexedDb/implementation_test.go
index f47117f7..e76b2737 100644
--- a/indexedDb/implementation_test.go
+++ b/indexedDb/implementation_test.go
@@ -126,7 +126,7 @@ func TestWasmModel_JoinChannel_LeaveChannel(t *testing.T) {
 	}
 }
 
-// Test wasmModel.UpdateSentStatus happy path and ensure fields don't change.
+// Test UUID gets returned when different messages are added
 func TestWasmModel_UUIDTest(t *testing.T) {
 	testString := "testHello"
 	eventModel, err := newWASMModel(testString, dummyCallback)
@@ -167,3 +167,46 @@ func TestWasmModel_UUIDTest(t *testing.T) {
 		}
 	}
 }
+
+// TestWasmModel_DuplicateReceives tests if the same message ID being sent
+// always returns the same uuid
+func TestWasmModel_DuplicateReceives(t *testing.T) {
+	testString := "testHello"
+	eventModel, err := newWASMModel(testString, dummyCallback)
+	if err != nil {
+		t.Fatalf("%+v", err)
+	}
+
+	cid := channel.Identity{
+		Codename:       "codename123",
+		PubKey:         []byte{8, 6, 7, 5},
+		Color:          "#FFFFFF",
+		Extension:      "gif",
+		CodesetVersion: 0,
+	}
+
+	uuids := make([]uint64, 10)
+
+	msgID := channel.MessageID{}
+	copy(msgID[:], testString)
+	for i := 0; i < 10; i++ {
+		// Store a test message
+		channelID := id.NewIdFromBytes([]byte(testString), t)
+		rnd := rounds.Round{ID: id.Round(42)}
+		uuid := eventModel.ReceiveMessage(channelID, msgID,
+			"test", testString+fmt.Sprintf("%d", i), cid, time.Now(),
+			time.Hour, rnd, 0, channels.Sent)
+		uuids[i] = uuid
+	}
+
+	_, _ = eventModel.dump(messageStoreName)
+
+	for i := 0; i < 10; i++ {
+		for j := i + 1; j < 10; j++ {
+			if uuids[i] != uuids[j] {
+				t.Fatalf("uuid failed: %d[%d] != %d[%d]",
+					uuids[i], i, uuids[j], j)
+			}
+		}
+	}
+}
-- 
GitLab