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 (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) }