Skip to content
Snippets Groups Projects
Commit b612d21e authored by Jono Wenger's avatar Jono Wenger Committed by Jake Taylor
Browse files

Fix error reporting in UpdateSentStatus and make Get check if the result is undefined

parent ddcac782
No related branches found
No related tags found
2 merge requests!60Revert "Fail a test to be sure it works",!44Fix error reporting in UpdateSentStatus and make Get check if the result is undefined
......@@ -288,6 +288,8 @@ func (w *wasmModel) UpdateSentStatus(uuid uint64,
// Use the key to get the existing Message
currentMsg, err := indexedDb.Get(w.db, messageStoreName, key)
if err != nil {
jww.ERROR.Printf("%+v", errors.WithMessagef(parentErr,
"Unable to get message: %+v", err))
return
}
......@@ -295,8 +297,11 @@ func (w *wasmModel) UpdateSentStatus(uuid uint64,
newMessage := &Message{}
err = json.Unmarshal([]byte(utils.JsToJson(currentMsg)), newMessage)
if err != nil {
jww.ERROR.Printf("%+v", errors.WithMessagef(parentErr,
"Could not JSON unmarshal message: %+v", err))
return
}
newMessage.Status = uint8(status)
if !messageID.Equals(cryptoChannel.MessageID{}) {
newMessage.MessageID = messageID.Bytes()
......
......@@ -38,6 +38,7 @@ func dummyCallback(uint64, *id.ID, bool) {}
// Happy path, insert message and look it up
func TestWasmModel_msgIDLookup(t *testing.T) {
storage.GetLocalStorage().Clear()
testString := "test"
testMsgId := channel.MakeMessageID([]byte(testString), &id.ID{1})
eventModel, err := newWASMModel(testString, nil, dummyCallback)
......@@ -64,6 +65,7 @@ func TestWasmModel_msgIDLookup(t *testing.T) {
// Test wasmModel.UpdateSentStatus happy path and ensure fields don't change.
func Test_wasmModel_UpdateSentStatus(t *testing.T) {
storage.GetLocalStorage().Clear()
testString := "test"
testMsgId := channel.MakeMessageID([]byte(testString), &id.ID{1})
eventModel, err := newWASMModel(testString, nil, dummyCallback)
......@@ -158,6 +160,7 @@ func Test_wasmModel_JoinChannel_LeaveChannel(t *testing.T) {
// Test UUID gets returned when different messages are added.
func Test_wasmModel_UUIDTest(t *testing.T) {
storage.GetLocalStorage().Clear()
testString := "testHello"
eventModel, err := newWASMModel(testString, nil, dummyCallback)
if err != nil {
......@@ -224,6 +227,7 @@ func Test_wasmModel_DuplicateReceives(t *testing.T) {
// Happy path: Inserts many messages, deletes some, and checks that the final
// result is as expected.
func Test_wasmModel_deleteMsgByChannel(t *testing.T) {
storage.GetLocalStorage().Clear()
testString := "test_deleteMsgByChannel"
totalMessages := 10
expectedMessages := 5
......@@ -280,6 +284,7 @@ func Test_wasmModel_deleteMsgByChannel(t *testing.T) {
// This test is designed to prove the behavior of unique indexes.
// Inserts will not fail, they simply will not happen.
func TestWasmModel_receiveHelper_UniqueIndex(t *testing.T) {
storage.GetLocalStorage().Clear()
testString := "test_receiveHelper_UniqueIndex"
eventModel, err := newWASMModel(testString, nil, dummyCallback)
if err != nil {
......
......@@ -61,6 +61,9 @@ func Get(db *idb.Database, objectStoreName string, key js.Value) (js.Value, erro
if err != nil {
return js.Undefined(), errors.WithMessagef(parentErr,
"Unable to get from ObjectStore: %+v", err)
} else if resultObj.IsUndefined() {
return js.Undefined(), errors.WithMessage(parentErr,
"Unable to get from ObjectStore: result is undefined")
}
// Process result into string
......@@ -107,6 +110,9 @@ func GetIndex(db *idb.Database, objectStoreName string,
if err != nil {
return js.Undefined(), errors.WithMessagef(parentErr,
"Unable to get from ObjectStore: %+v", err)
} else if resultObj.IsUndefined() {
return js.Undefined(), errors.WithMessage(parentErr,
"Unable to get from ObjectStore: result is undefined")
}
// Process result into string
......
////////////////////////////////////////////////////////////////////////////////
// Copyright © 2022 xx foundation //
// //
// Use of this source code is governed by a license that can be found in the //
// LICENSE file. //
////////////////////////////////////////////////////////////////////////////////
//go:build js && wasm
package indexedDb
import (
"github.com/hack-pad/go-indexeddb/idb"
"strings"
"syscall/js"
"testing"
)
// Error path: Tests that Get returns an error when trying to get a message that
// does not exist.
func TestGet_NoMessageError(t *testing.T) {
db := newTestDB("messages", "index", t)
_, err := Get(db, "messages", js.ValueOf(5))
if err == nil || !strings.Contains(err.Error(), "undefined") {
t.Errorf("Did not get expected error when getting a message that "+
"does not exist: %+v", err)
}
}
// Error path: Tests that GetIndex returns an error when trying to get a message
// that does not exist.
func TestGetIndex_NoMessageError(t *testing.T) {
db := newTestDB("messages", "index", t)
_, err := GetIndex(db, "messages", "index", js.ValueOf(5))
if err == nil || !strings.Contains(err.Error(), "undefined") {
t.Errorf("Did not get expected error when getting a message that "+
"does not exist: %+v", err)
}
}
// newTestDB creates a new idb.Database for testing.
func newTestDB(name, index string, t *testing.T) *idb.Database {
// Attempt to open database object
ctx, cancel := NewContext()
defer cancel()
openRequest, err := idb.Global().Open(ctx, "databaseName", 0,
func(db *idb.Database, _ uint, _ uint) error {
storeOpts := idb.ObjectStoreOptions{
KeyPath: js.ValueOf("id"),
AutoIncrement: true,
}
// Build Message ObjectStore and Indexes
messageStore, err := db.CreateObjectStore(name, storeOpts)
if err != nil {
return err
}
_, err = messageStore.CreateIndex(
index, js.ValueOf("id"), idb.IndexOptions{})
if err != nil {
return err
}
return nil
})
if err != nil {
t.Fatal(err)
}
// Wait for database open to finish
db, err := openRequest.Await(ctx)
if err != nil {
t.Fatal(err)
}
return db
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment