diff --git a/indexedDb/impl/channels/implementation_test.go b/indexedDb/impl/channels/implementation_test.go index 386e5a7717859a67e8b51ea1c32d8d6fad6521af..b652931769ab0e1aac4c76f27c08e03135146213 100644 --- a/indexedDb/impl/channels/implementation_test.go +++ b/indexedDb/impl/channels/implementation_test.go @@ -590,3 +590,68 @@ func TestWasmModel_receiveHelper_UniqueIndex(t *testing.T) { }) } } + +func TestUpsertMessageDuplicates(t *testing.T) { + msgJSON := []byte(`{"pubkey":"4gFD38jRhf/aNDRzaguLJHHgTncs0pwvNiRvjTBOaXk=", + "dm_token":3173028031, + "nickname":"", + "message_id":"BTi+V2anHhrRAEcCMm6g2Bs9oKn7PhQzCzvM7x8Ml7A=", + "channel_id":"Gt1T8t1GcnQXijiOjX5yjiLt3F8tnPB9S70ntBx86h8D", + "parent_message_id":null, + "pinned":false, + "hidden":false, + "round":151369004, + "codeset_version":0, + "timestamp": "2023-06-06T19:39:27.281204113Z", + "lease_v2":"30000000000", + "status":2, + "type":1, + "text":"KzT25s76K9AEIv0HadhjULkU37dkCUp/8N9+5UkkA8pLEBK71P7KFMr2xii/enYr4jpQcayNm82WD4wisimkK2wtaKb0hJIELAxJHxHilF2qVcDYn7zmx2ZiYkerZGTlf7DkHPZrA+EJJIu9gZ4ApR8TNVf15GxPSDGKHV6iv7vEMrrdoi4JKOFTpNsUjjbDykc91ADmmRlh5LUR/lqyt7bEasyVY2Zo+UiZpJrUJII0fhhn0HLbfs6ekg1tkq+vbPap3vNoebLZag3nEnMk+JqNjVW93BFICSMFv8cYX9q0sSK6sgHtz0HX9b7xTEFVHlCb2Zv/ErOX2LiedsgM4aGpOvjGYQM9ludCutVJArfM/5ejupMpvVPimY69QdevqxMm6v7c8H3abLQf4iKNVoaTaRygYFYArTWWoKep7BDZhjhCd4XnILGLjq7oeBfb3enMUSmeYabIuQpjAfRXU6cZh4cVomhEbkF5kj/rAc3GLzWtN1XcE5PC8bTL3m6YVN6hMCd1S7dsnDQ4FJQoDoqYzmTLD7jtyQujS86JsPkkt7kAIi14VxHTNEAM07cN6rH4VifWWMgQo4djPJ+nnsW9zUnylT9KS1GGyeaUhGC7GmrJGd7DmfHrhdWb9iMboKyH7VTm5C6X71JW1AhmdFfjtIHmWfhbAFsrP2gwkb4e+F86urUmK5LTT6qhGklUsXsmMFjwiEUCBWLSOZLKfITkNOBGIuGGcMi8Jtvwo1f4DHQ6sm/Y8qaJFmesyVKpA3MAVNawqlZJSJXflUA/mpJprFxLm/J3mdnxkLrqQSeSCAxHgpEdH3jiSPNhmn6QaJOVT+wotm+8lAq7qWgBWfMmcVSgWdAfVwujeP71Uo1y24/Z4+jXulFz1hPfbfmHk6/Qz4JlSgHZIqgOS1FTsmXFvBUe4moHR/QFDEXnz2LroRIavt9gWZPE3z1FIcjwSmtUzvpE8gZud+dKVVrjm8YPseq+IJ/AwRRlkUR5D0vf1TwEm0yQ7E+EotFvibQ=" + }`) + + // Initial call + msg1 := &Message{} + err := json.Unmarshal(msgJSON, msg1) + require.NoError(t, err) + msg1.Status = 0 + + // Second call + msg2 := &Message{} + err = json.Unmarshal(msgJSON, msg2) + require.NoError(t, err) + msg2.Status = 1 + + // Final call + msg3 := &Message{} + err = json.Unmarshal(msgJSON, msg3) + require.NoError(t, err) + msg3.Status = 2 + + cipher, err := idbCrypto.NewCipher( + []byte("testPass"), []byte("testSalt"), 128, + csprng.NewSystemRNG()) + require.NoError(t, err) + testString := "test_duplicateUpsertMessage" + eventModel, err := newWASMModel(testString, cipher, + &dummyCbs{}) + require.NoError(t, err) + + uuid, err := eventModel.upsertMessage(msg1) + require.NoError(t, err) + require.NotEqual(t, uuid, 0) + + uuid2, err := eventModel.upsertMessage(msg2) + require.NoError(t, err) + require.Equal(t, uuid, uuid2) + + uuid3, err := eventModel.upsertMessage(msg3) + require.NoError(t, err) + require.Equal(t, uuid, uuid3) + + msgID, err := message.UnmarshalID(msg1.MessageID) + require.NoError(t, err) + + modelMsg, err := eventModel.GetMessage(msgID) + require.NoError(t, err) + require.Equal(t, channels.Delivered, modelMsg.Status) +}