238 lines
5.5 KiB
Go
238 lines
5.5 KiB
Go
package mongo
|
|
|
|
import (
|
|
"os"
|
|
"context"
|
|
"strings"
|
|
"testing"
|
|
"encoding/json"
|
|
|
|
"go.mongodb.org/mongo-driver/v2/bson"
|
|
)
|
|
|
|
func TestInsertOne(t *testing.T) {
|
|
client := GetMongoClient()
|
|
|
|
data := map[string]any {
|
|
"_id": "su_123456",
|
|
"name": "MyName",
|
|
"age": int32(25),
|
|
}
|
|
|
|
o, err := client.InsertOne(context.Background(), "mydb", "mycollection", data)
|
|
if err != nil {
|
|
t.Fatalf("Failed to insertOne %#v", err)
|
|
}
|
|
|
|
// raw query
|
|
var results bson.M
|
|
filter := bson.M{ "name": "MyName" }
|
|
|
|
c := client.Client.Database("mydb").Collection("mycollection")
|
|
c.FindOne(context.Background(), filter).Decode(&results)
|
|
|
|
AssertSubset(t, o, results, "Should have been equal")
|
|
}
|
|
|
|
func TestInsertOne_DataStruct(t *testing.T) {
|
|
client := GetMongoClient()
|
|
|
|
data := &Sample {
|
|
Id: "su_123457",
|
|
Name: "MyName200",
|
|
Age: 25,
|
|
}
|
|
|
|
o, err := client.InsertOneFromStruct(context.Background(), "mydb", "mycollection", data)
|
|
if err != nil {
|
|
t.Fatalf("Failed to insertOne %#v", err)
|
|
}
|
|
|
|
// raw query
|
|
var results bson.M
|
|
filter := map[string]any { "name": "MyName200" }
|
|
|
|
c := client.Client.Database("mydb").Collection("mycollection")
|
|
c.FindOne(context.Background(), filter).Decode(&results)
|
|
|
|
AssertSubset(t, o, results, "Should have been equal")
|
|
}
|
|
|
|
func TestInsertOne_WithIdPrefix(t *testing.T) {
|
|
// Read JSON file
|
|
data, err := os.ReadFile("./.test/user.json")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
var user bson.M
|
|
if err := json.Unmarshal(data, &user); err != nil {
|
|
t.Fatalf("Length: %d, First bytes: %x\n", len(data), data[:4])
|
|
}
|
|
|
|
client := GetMongoClient()
|
|
client.AddDefinition(user)
|
|
|
|
in := map[string]any {
|
|
"name": "MyName112",
|
|
"age": int32(25),
|
|
}
|
|
|
|
o, err := client.InsertOne(context.Background(), "mydb", "user", in)
|
|
if err != nil {
|
|
t.Fatalf("Failed to insertOne %#v", err)
|
|
}
|
|
|
|
// raw query
|
|
var results bson.M
|
|
filter := map[string]any { "name": "MyName112" }
|
|
c := client.Client.Database("mydb").Collection("user")
|
|
c.FindOne(context.Background(), filter).Decode(&results)
|
|
|
|
if !strings.HasPrefix(results["_id"].(string), "usr_") {
|
|
t.Fatal("_id should have been prefixed")
|
|
}
|
|
|
|
AssertSubset(t, o, results, "Should have been equal")
|
|
}
|
|
|
|
func TestPrepareForInsert_WithoutId(t *testing.T) {
|
|
data := map[string]any {
|
|
"name": "My Name Is",
|
|
}
|
|
|
|
prepareForInsert(data, "")
|
|
|
|
if id, okid := data["_id"]; !okid || id == "" {
|
|
t.Fatal("Failed to add Id")
|
|
}
|
|
}
|
|
|
|
func TestPrepareForInsert_ExistingId(t *testing.T) {
|
|
data := map[string]any {
|
|
"_id": "myidxxxxxx",
|
|
"name": "My Name Is",
|
|
}
|
|
|
|
prepareForInsert(data, "")
|
|
|
|
if data["_id"] == "" {
|
|
t.Fatal("id was updated")
|
|
}
|
|
}
|
|
|
|
func TestInsertOne_Discriminate(t *testing.T) {
|
|
// 1. Register schemas
|
|
schemaStore, err := os.ReadFile("./.test/store.json")
|
|
if err != nil { t.Fatal(err) }
|
|
|
|
schemaOffer, err := os.ReadFile("./.test/offer.json")
|
|
if err != nil { t.Fatal(err) }
|
|
|
|
var store bson.M
|
|
if err := json.Unmarshal(schemaStore, &store); err != nil {
|
|
t.Fatalf("Length: %d, First bytes: %x\n", len(schemaStore), schemaStore[:4])
|
|
}
|
|
|
|
var offer bson.M
|
|
if err := json.Unmarshal(schemaOffer, &offer); err != nil {
|
|
t.Fatalf("Length: %d, First bytes: %x\n", len(schemaOffer), schemaOffer[:4])
|
|
}
|
|
|
|
client := GetMongoClient()
|
|
client.AddDefinition(store)
|
|
client.AddDefinition(offer)
|
|
|
|
// Test
|
|
ctx := context.Background()
|
|
ctx = context.WithValue(ctx, "account", "xxxxxx")
|
|
ctx = context.WithValue(ctx, "store", "str_1234")
|
|
|
|
// 2. Insert data
|
|
offer1 := map[string]any {
|
|
"name": "Offer 1",
|
|
}
|
|
|
|
saved, err := client.InsertOne(ctx, "mydb", "offer", offer1)
|
|
if err != nil { t.Fatalf("Failed to insertOne %#v", err) }
|
|
|
|
v, ok := saved["store"]
|
|
if !ok || v != "str_1234" {
|
|
t.Fatalf("Should have set store not %s", v)
|
|
}
|
|
}
|
|
|
|
func TestInsertOne_Discriminate_NoStore(t *testing.T) {
|
|
// 1. Register schemas
|
|
schemaStore, err := os.ReadFile("./.test/store.json")
|
|
if err != nil { t.Fatal(err) }
|
|
|
|
schemaOffer, err := os.ReadFile("./.test/offer.json")
|
|
if err != nil { t.Fatal(err) }
|
|
|
|
var store bson.M
|
|
if err := json.Unmarshal(schemaStore, &store); err != nil {
|
|
t.Fatalf("Length: %d, First bytes: %x\n", len(schemaStore), schemaStore[:4])
|
|
}
|
|
|
|
var offer bson.M
|
|
if err := json.Unmarshal(schemaOffer, &offer); err != nil {
|
|
t.Fatalf("Length: %d, First bytes: %x\n", len(schemaOffer), schemaOffer[:4])
|
|
}
|
|
|
|
client := GetMongoClient()
|
|
client.AddDefinition(store)
|
|
client.AddDefinition(offer)
|
|
|
|
// Test
|
|
ctx := context.Background()
|
|
|
|
// 2. Insert data
|
|
offer1 := map[string]any {
|
|
"name": "Offer 1",
|
|
}
|
|
|
|
_, err = client.InsertOne(ctx, "mydb", "offer", offer1)
|
|
if err == nil {
|
|
t.Fatal("Should have required store")
|
|
}
|
|
}
|
|
|
|
func TestInsertOne_Discriminate_EnsureStore(t *testing.T) {
|
|
// 1. Register schemas
|
|
schemaStore, err := os.ReadFile("./.test/store.json")
|
|
if err != nil { t.Fatal(err) }
|
|
|
|
schemaOffer, err := os.ReadFile("./.test/offer.json")
|
|
if err != nil { t.Fatal(err) }
|
|
|
|
var store bson.M
|
|
if err := json.Unmarshal(schemaStore, &store); err != nil {
|
|
t.Fatalf("Length: %d, First bytes: %x\n", len(schemaStore), schemaStore[:4])
|
|
}
|
|
|
|
var offer bson.M
|
|
if err := json.Unmarshal(schemaOffer, &offer); err != nil {
|
|
t.Fatalf("Length: %d, First bytes: %x\n", len(schemaOffer), schemaOffer[:4])
|
|
}
|
|
|
|
client := GetMongoClient()
|
|
client.AddDefinition(store)
|
|
client.AddDefinition(offer)
|
|
|
|
// Test
|
|
ctx := context.Background()
|
|
ctx = context.WithValue(ctx, "store", "str_1234")
|
|
|
|
// 2. Insert data
|
|
offer1 := map[string]any {
|
|
"name": "Offer 100",
|
|
"store": "str_0000",
|
|
}
|
|
|
|
saved, err := client.InsertOne(ctx, "mydb", "offer", offer1)
|
|
|
|
if saved["store"] != "str_1234" {
|
|
t.Fatal("Wrong store")
|
|
}
|
|
} |