Skip to content
Snippets Groups Projects
Commit 9f3539b1 authored by Jake Taylor's avatar Jake Taylor :lips:
Browse files

Merge branch 'jono/dbErrorChecking' into 'release'

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

See merge request !44
parents ddcac782 b612d21e
Branches
Tags
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, ...@@ -288,6 +288,8 @@ func (w *wasmModel) UpdateSentStatus(uuid uint64,
// Use the key to get the existing Message // Use the key to get the existing Message
currentMsg, err := indexedDb.Get(w.db, messageStoreName, key) currentMsg, err := indexedDb.Get(w.db, messageStoreName, key)
if err != nil { if err != nil {
jww.ERROR.Printf("%+v", errors.WithMessagef(parentErr,
"Unable to get message: %+v", err))
return return
} }
...@@ -295,8 +297,11 @@ func (w *wasmModel) UpdateSentStatus(uuid uint64, ...@@ -295,8 +297,11 @@ func (w *wasmModel) UpdateSentStatus(uuid uint64,
newMessage := &Message{} newMessage := &Message{}
err = json.Unmarshal([]byte(utils.JsToJson(currentMsg)), newMessage) err = json.Unmarshal([]byte(utils.JsToJson(currentMsg)), newMessage)
if err != nil { if err != nil {
jww.ERROR.Printf("%+v", errors.WithMessagef(parentErr,
"Could not JSON unmarshal message: %+v", err))
return return
} }
newMessage.Status = uint8(status) newMessage.Status = uint8(status)
if !messageID.Equals(cryptoChannel.MessageID{}) { if !messageID.Equals(cryptoChannel.MessageID{}) {
newMessage.MessageID = messageID.Bytes() newMessage.MessageID = messageID.Bytes()
......
...@@ -38,6 +38,7 @@ func dummyCallback(uint64, *id.ID, bool) {} ...@@ -38,6 +38,7 @@ func dummyCallback(uint64, *id.ID, bool) {}
// Happy path, insert message and look it up // Happy path, insert message and look it up
func TestWasmModel_msgIDLookup(t *testing.T) { func TestWasmModel_msgIDLookup(t *testing.T) {
storage.GetLocalStorage().Clear()
testString := "test" testString := "test"
testMsgId := channel.MakeMessageID([]byte(testString), &id.ID{1}) testMsgId := channel.MakeMessageID([]byte(testString), &id.ID{1})
eventModel, err := newWASMModel(testString, nil, dummyCallback) eventModel, err := newWASMModel(testString, nil, dummyCallback)
...@@ -64,6 +65,7 @@ func TestWasmModel_msgIDLookup(t *testing.T) { ...@@ -64,6 +65,7 @@ func TestWasmModel_msgIDLookup(t *testing.T) {
// Test wasmModel.UpdateSentStatus happy path and ensure fields don't change. // Test wasmModel.UpdateSentStatus happy path and ensure fields don't change.
func Test_wasmModel_UpdateSentStatus(t *testing.T) { func Test_wasmModel_UpdateSentStatus(t *testing.T) {
storage.GetLocalStorage().Clear()
testString := "test" testString := "test"
testMsgId := channel.MakeMessageID([]byte(testString), &id.ID{1}) testMsgId := channel.MakeMessageID([]byte(testString), &id.ID{1})
eventModel, err := newWASMModel(testString, nil, dummyCallback) eventModel, err := newWASMModel(testString, nil, dummyCallback)
...@@ -158,6 +160,7 @@ func Test_wasmModel_JoinChannel_LeaveChannel(t *testing.T) { ...@@ -158,6 +160,7 @@ func Test_wasmModel_JoinChannel_LeaveChannel(t *testing.T) {
// Test UUID gets returned when different messages are added. // Test UUID gets returned when different messages are added.
func Test_wasmModel_UUIDTest(t *testing.T) { func Test_wasmModel_UUIDTest(t *testing.T) {
storage.GetLocalStorage().Clear()
testString := "testHello" testString := "testHello"
eventModel, err := newWASMModel(testString, nil, dummyCallback) eventModel, err := newWASMModel(testString, nil, dummyCallback)
if err != nil { if err != nil {
...@@ -224,6 +227,7 @@ func Test_wasmModel_DuplicateReceives(t *testing.T) { ...@@ -224,6 +227,7 @@ func Test_wasmModel_DuplicateReceives(t *testing.T) {
// Happy path: Inserts many messages, deletes some, and checks that the final // Happy path: Inserts many messages, deletes some, and checks that the final
// result is as expected. // result is as expected.
func Test_wasmModel_deleteMsgByChannel(t *testing.T) { func Test_wasmModel_deleteMsgByChannel(t *testing.T) {
storage.GetLocalStorage().Clear()
testString := "test_deleteMsgByChannel" testString := "test_deleteMsgByChannel"
totalMessages := 10 totalMessages := 10
expectedMessages := 5 expectedMessages := 5
...@@ -280,6 +284,7 @@ func Test_wasmModel_deleteMsgByChannel(t *testing.T) { ...@@ -280,6 +284,7 @@ func Test_wasmModel_deleteMsgByChannel(t *testing.T) {
// This test is designed to prove the behavior of unique indexes. // This test is designed to prove the behavior of unique indexes.
// Inserts will not fail, they simply will not happen. // Inserts will not fail, they simply will not happen.
func TestWasmModel_receiveHelper_UniqueIndex(t *testing.T) { func TestWasmModel_receiveHelper_UniqueIndex(t *testing.T) {
storage.GetLocalStorage().Clear()
testString := "test_receiveHelper_UniqueIndex" testString := "test_receiveHelper_UniqueIndex"
eventModel, err := newWASMModel(testString, nil, dummyCallback) eventModel, err := newWASMModel(testString, nil, dummyCallback)
if err != nil { if err != nil {
......
...@@ -61,6 +61,9 @@ func Get(db *idb.Database, objectStoreName string, key js.Value) (js.Value, erro ...@@ -61,6 +61,9 @@ func Get(db *idb.Database, objectStoreName string, key js.Value) (js.Value, erro
if err != nil { if err != nil {
return js.Undefined(), errors.WithMessagef(parentErr, return js.Undefined(), errors.WithMessagef(parentErr,
"Unable to get from ObjectStore: %+v", err) "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 // Process result into string
...@@ -107,6 +110,9 @@ func GetIndex(db *idb.Database, objectStoreName string, ...@@ -107,6 +110,9 @@ func GetIndex(db *idb.Database, objectStoreName string,
if err != nil { if err != nil {
return js.Undefined(), errors.WithMessagef(parentErr, return js.Undefined(), errors.WithMessagef(parentErr,
"Unable to get from ObjectStore: %+v", err) "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 // 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.
Please register or to comment