func (s *ItemSuite) TestUpdateItemWithSet(c *gocheck.C) { attrs := []dynamodb.Attribute{ *dynamodb.NewStringSetAttribute("list", []string{"A", "B"}), } var rk string if s.WithRange { rk = "1" } if ok, err := s.table.PutItem("NewHashKeyVal", rk, attrs); !ok { c.Error(err) } // UpdateItem with Add attrs = []dynamodb.Attribute{ *dynamodb.NewStringSetAttribute("list", []string{"C"}), } pk := &dynamodb.Key{HashKey: "NewHashKeyVal", RangeKey: rk} if ok, err := s.table.AddAttributes(pk, attrs); !ok { c.Error(err) } // Get to verify Add operation if item, err := s.table.GetItem(pk); err != nil { c.Error(err) } else { if val, ok := item["list"]; ok { c.Check(val, gocheck.DeepEquals, dynamodb.NewStringSetAttribute("list", []string{"A", "B", "C"})) } else { c.Error("Expect count to be found") } } // UpdateItem with Delete attrs = []dynamodb.Attribute{ *dynamodb.NewStringSetAttribute("list", []string{"A"}), } if ok, err := s.table.DeleteAttributes(pk, attrs); !ok { c.Error(err) } // Get to verify Delete operation if item, err := s.table.GetItem(pk); err != nil { c.Error(err) } else { if val, ok := item["list"]; ok { c.Check(val, gocheck.DeepEquals, dynamodb.NewStringSetAttribute("list", []string{"B", "C"})) } else { c.Error("Expect list to be remained") } } }
func TestAddUpdates(t *testing.T) { auth := &aws.Auth{AccessKey: "", SecretKey: "wJalrXUtnFEMI/K7MDENG+bPxRfiCYEXAMPLEKEY"} server := dynamodb.Server{*auth, aws.USEast} primary := dynamodb.NewStringAttribute("domain", "") key := dynamodb.PrimaryKey{primary, nil} table := server.NewTable("sites", key) q := dynamodb.NewQuery(table) q.AddKey(table, &dynamodb.Key{HashKey: "test"}) attr := dynamodb.NewStringSetAttribute("StringSet", []string{"str", "str2"}) q.AddUpdates([]dynamodb.Attribute{*attr}, "ADD") queryString := []byte(q.String()) json, err := simplejson.NewJson(queryString) if err != nil { t.Logf("JSON err : %s\n", err) t.Fatalf("Invalid JSON : %s\n", queryString) } attributeUpdates := json.Get("AttributeUpdates") if _, err := attributeUpdates.Map(); err != nil { t.Fatalf("Expected a AttributeUpdates found") } attributesModified := attributeUpdates.Get("StringSet") if _, err := attributesModified.Map(); err != nil { t.Fatalf("Expected a StringSet found : %s", err) } action := attributesModified.Get("Action") if v, err := action.String(); err != nil { t.Fatalf("Expected a action to be string : %s", err) } else if v != "ADD" { t.Fatalf("Expected a action to be ADD : %s", v) } value := attributesModified.Get("Value") if _, err := value.Map(); err != nil { t.Fatalf("Expected a Value found : %s", err) } string_set := value.Get("SS") string_set_ary, err := string_set.StringArray() if err != nil { t.Fatalf("Expected a string set found : %s", err) } if len(string_set_ary) != 2 { t.Fatalf("Expected a string set length to be 2 was : %d", len(string_set_ary)) } for _, v := range string_set_ary { if v != "str" && v != "str2" { t.Fatalf("Expected a string to be str OR str2 was : %s", v) } } }
func (s *QueryBuilderSuite) TestAddUpdates(c *gocheck.C) { primary := dynamodb.NewStringAttribute("domain", "") key := dynamodb.PrimaryKey{primary, nil} table := s.server.NewTable("sites", key) q := dynamodb.NewQuery(table) q.AddKey(table, &dynamodb.Key{HashKey: "test"}) attr := dynamodb.NewStringSetAttribute("StringSet", []string{"str", "str2"}) q.AddUpdates([]dynamodb.Attribute{*attr}, "ADD") queryJson, err := simplejson.NewJson([]byte(q.String())) if err != nil { c.Fatal(err) } expectedJson, err := simplejson.NewJson([]byte(` { "AttributeUpdates": { "StringSet": { "Action": "ADD", "Value": { "SS": ["str", "str2"] } } }, "Key": { "domain": { "S": "test" } }, "TableName": "sites" } `)) if err != nil { c.Fatal(err) } c.Check(queryJson, gocheck.DeepEquals, expectedJson) }