diff --git a/indexedDb/channels/implementation.go b/indexedDb/channels/implementation.go index 919ccaebf372295b978cd21bbb36a438dde636dd..eac2b5cd4d42e1bf8d1050b296adee794d021de9 100644 --- a/indexedDb/channels/implementation.go +++ b/indexedDb/channels/implementation.go @@ -167,9 +167,9 @@ func (w *wasmModel) deleteMsgByChannel(channelID *id.ID) error { // user of the API to filter such called by message ID. func (w *wasmModel) ReceiveMessage(channelID *id.ID, messageID cryptoChannel.MessageID, nickname, text string, - pubKey ed25519.PublicKey, codeset uint8, - timestamp time.Time, lease time.Duration, round rounds.Round, - mType channels.MessageType, status channels.SentStatus, hidden bool) uint64 { + pubKey ed25519.PublicKey, codeset uint8, timestamp time.Time, + lease time.Duration, round rounds.Round, mType channels.MessageType, + status channels.SentStatus, hidden bool) uint64 { textBytes := []byte(text) var err error @@ -183,9 +183,9 @@ func (w *wasmModel) ReceiveMessage(channelID *id.ID, } msgToInsert := buildMessage( - channelID.Marshal(), messageID.Bytes(), nil, nickname, - textBytes, pubKey, codeset, timestamp, lease, round.ID, mType, - false, hidden, status) + channelID.Marshal(), messageID.Bytes(), nil, nickname, textBytes, + pubKey, codeset, timestamp, lease, round.ID, mType, false, hidden, + status) uuid, err := w.receiveHelper(msgToInsert, false) if err != nil { @@ -219,9 +219,10 @@ func (w *wasmModel) ReceiveReply(channelID *id.ID, } } - msgToInsert := buildMessage(channelID.Marshal(), messageID.Bytes(), - replyTo.Bytes(), nickname, textBytes, pubKey, codeset, timestamp, lease, - round.ID, mType, false, hidden, status) + msgToInsert := buildMessage( + channelID.Marshal(), messageID.Bytes(), replyTo.Bytes(), nickname, + textBytes, pubKey, codeset, timestamp, lease, round.ID, mType, false, + hidden, status) uuid, err := w.receiveHelper(msgToInsert, false) diff --git a/indexedDb/channels/implementation_test.go b/indexedDb/channels/implementation_test.go index 1760cf31c4733013d385e388e1a99864dfdd9840..f51b226fe8073b4b05f7c93b874b635d4680e73b 100644 --- a/indexedDb/channels/implementation_test.go +++ b/indexedDb/channels/implementation_test.go @@ -36,6 +36,32 @@ func TestMain(m *testing.M) { func dummyCallback(uint64, *id.ID, bool) {} +// Happy path, insert message and look it up +func TestWasmModel_msgIDLookup(t *testing.T) { + testString := "test" + testMsgId := channel.MakeMessageID([]byte(testString), &id.ID{1}) + eventModel, err := newWASMModel(testString, nil, dummyCallback) + if err != nil { + t.Fatalf("%+v", err) + } + + testMsg := buildMessage([]byte(testString), testMsgId.Bytes(), nil, + testString, []byte(testString), []byte{8, 6, 7, 5}, 0, netTime.Now(), + time.Second, 0, 0, channels.Sent) + _, err = eventModel.receiveHelper(testMsg, false) + if err != nil { + t.Fatalf("%+v", err) + } + + uuid, err := eventModel.msgIDLookup(testMsgId) + if err != nil { + t.Fatalf("%+v", err) + } + if uuid == 0 { + t.Fatalf("Expected to get a UUID!") + } +} + // Test wasmModel.UpdateSentStatus happy path and ensure fields don't change. func Test_wasmModel_UpdateSentStatus(t *testing.T) { testString := "test" diff --git a/indexedDb/channels/init.go b/indexedDb/channels/init.go index 0b52434ff260ee3df42c8b0f201527f08377205b..12d6bb8840f3d75c8778b871ac883a84ad008ada 100644 --- a/indexedDb/channels/init.go +++ b/indexedDb/channels/init.go @@ -211,7 +211,7 @@ func (w *wasmModel) hackTestDb() error { if err != nil { return err } - if len(result) == 0 { + if result.IsUndefined() { return errors.Errorf("Failed to test db, record not present") } return nil diff --git a/indexedDb/utils.go b/indexedDb/utils.go index 7d7e7e6b394eb492ea09519f5939f4fd5c79ca59..e11c8e10a75e8187f55d4a2e13c7a9a4c765db5e 100644 --- a/indexedDb/utils.go +++ b/indexedDb/utils.go @@ -32,25 +32,25 @@ func NewContext() (context.Context, context.CancelFunc) { } // Get is a generic helper for getting values from the given [idb.ObjectStore]. -func Get(db *idb.Database, objectStoreName string, key js.Value) (string, error) { +func Get(db *idb.Database, objectStoreName string, key js.Value) (js.Value, error) { parentErr := errors.Errorf("failed to Get %s/%s", objectStoreName, key) // Prepare the Transaction txn, err := db.Transaction(idb.TransactionReadOnly, objectStoreName) if err != nil { - return "", errors.WithMessagef(parentErr, + return js.Undefined(), errors.WithMessagef(parentErr, "Unable to create Transaction: %+v", err) } store, err := txn.ObjectStore(objectStoreName) if err != nil { - return "", errors.WithMessagef(parentErr, + return js.Undefined(), errors.WithMessagef(parentErr, "Unable to get ObjectStore: %+v", err) } // Perform the operation getRequest, err := store.Get(key) if err != nil { - return "", errors.WithMessagef(parentErr, + return js.Undefined(), errors.WithMessagef(parentErr, "Unable to Get from ObjectStore: %+v", err) } @@ -59,14 +59,14 @@ func Get(db *idb.Database, objectStoreName string, key js.Value) (string, error) resultObj, err := getRequest.Await(ctx) cancel() if err != nil { - return "", errors.WithMessagef(parentErr, + return js.Undefined(), errors.WithMessagef(parentErr, "Unable to get from ObjectStore: %+v", err) } // Process result into string - resultStr := utils.JsToJson(resultObj) - jww.DEBUG.Printf("Got from %s/%s: %s", objectStoreName, key, resultStr) - return resultStr, nil + jww.DEBUG.Printf("Got from %s/%s: %s", + objectStoreName, key, utils.JsToJson(resultObj)) + return resultObj, nil } // GetIndex is a generic helper for getting values from the given @@ -79,24 +79,24 @@ func GetIndex(db *idb.Database, objectStoreName string, // Prepare the Transaction txn, err := db.Transaction(idb.TransactionReadOnly, objectStoreName) if err != nil { - return js.Value{}, errors.WithMessagef(parentErr, + return js.Undefined(), errors.WithMessagef(parentErr, "Unable to create Transaction: %+v", err) } store, err := txn.ObjectStore(objectStoreName) if err != nil { - return js.Value{}, errors.WithMessagef(parentErr, + return js.Undefined(), errors.WithMessagef(parentErr, "Unable to get ObjectStore: %+v", err) } idx, err := store.Index(indexName) if err != nil { - return js.Value{}, errors.WithMessagef(parentErr, + return js.Undefined(), errors.WithMessagef(parentErr, "Unable to get Index: %+v", err) } // Perform the operation getRequest, err := idx.Get(key) if err != nil { - return js.Value{}, errors.WithMessagef(parentErr, + return js.Undefined(), errors.WithMessagef(parentErr, "Unable to Get from ObjectStore: %+v", err) } @@ -105,14 +105,13 @@ func GetIndex(db *idb.Database, objectStoreName string, resultObj, err := getRequest.Await(ctx) cancel() if err != nil { - return js.Value{}, errors.WithMessagef(parentErr, + return js.Undefined(), errors.WithMessagef(parentErr, "Unable to get from ObjectStore: %+v", err) } // Process result into string - resultStr := utils.JsToJson(resultObj) jww.DEBUG.Printf("Got from %s/%s/%s: %s", - objectStoreName, indexName, key, resultStr) + objectStoreName, indexName, key, utils.JsToJson(resultObj)) return resultObj, nil } @@ -143,7 +142,7 @@ func Put(db *idb.Database, objectStoreName string, value js.Value) (*idb.Request return nil, errors.Errorf("Putting value failed: %+v", err) } jww.DEBUG.Printf("Successfully put value in %s: %v", - objectStoreName, value.String()) + objectStoreName, utils.JsToJson(value)) return request, nil } diff --git a/storage/version.go b/storage/version.go index 61bc23937a227f407b059b08362938c62222d558..b560dc0f7baeca598c77d33e23c32aebbdd47941 100644 --- a/storage/version.go +++ b/storage/version.go @@ -18,7 +18,7 @@ import ( ) // SEMVER is the current semantic version of xxDK WASM. -const SEMVER = "0.1.8" +const SEMVER = "0.1.9" // Storage keys. const (