Current section

Files

Jump to
riak test map_test.exs
Raw

test/map_test.exs

defmodule Riak.CRDT.MapTest do
require IEx
use Riak.Case
alias Riak.CRDT.Map
alias Riak.CRDT.Register
alias Riak.CRDT.Flag
alias Riak.CRDT.Counter
alias Riak.CRDT.Set
@moduletag :riak2
test "create, update and find a map with other CRDTs" do
key = Riak.Helper.random_key
reg_data = "Register data"
reg = Register.new(reg_data)
reg_key = "register_key"
flag = Flag.new |> Flag.enable
flag_key = "flag_key"
counter = Counter.new |> Counter.increment
counter_key = "counter_key"
set = Set.new |> Set.put("foo")
set_key = "set_key"
Map.new
|> Map.put(reg_key, reg)
|> Map.put(flag_key, flag)
|> Map.update(:counter, counter_key, fn _ -> counter end)
|> Map.put(set_key, set)
|> Riak.update("maps", "bucketmap", key)
map = Riak.find("maps", "bucketmap", key)
|> Map.value
map_keys = :orddict.fetch_keys(map)
assert {"counter_key", :counter} in map_keys
assert {"flag_key", :flag} in map_keys
assert {"register_key", :register} in map_keys
assert {"set_key", :set} in map_keys
assert :orddict.size(map) == 4
data = :orddict.to_list(map)
assert {{reg_key, :register}, reg_data} in data
assert {{flag_key, :flag}, true} in data
assert {{counter_key, :counter}, 1} in data
assert {{set_key, :set}, ["foo"]} in data
end
test "create, update and find nested maps" do
key = Riak.Helper.random_key
flag = Flag.new |> Flag.enable
flag_key = "flag_key"
nested = Map.new |> Map.put(flag_key, flag)
nested_key = "nested_key"
Map.new
|> Map.put(nested_key, nested)
|> Riak.update("maps", "bucketmap", key)
map = Riak.find("maps", "bucketmap", key)
value_map = map |> Map.value
assert :orddict.size(value_map) == 1
assert :orddict.fetch({nested_key, :map}, value_map) == [{{flag_key, :flag}, true}]
exists = Riak.find("maps", "bucketmap", key)
|> Map.has_key?({nested_key, :map})
assert exists == true
Riak.find("maps", "bucketmap", key) |> Map.delete({nested_key, :map})
|> Riak.update("maps", "bucketmap", key)
exists = Riak.find("maps", "bucketmap", key)
|> Map.has_key?({nested_key, :map})
assert exists == false
end
test "create, update, delete map" do
key = Riak.Helper.random_key
Map.new
|> Map.put("register_key", Register.new("Some Data"))
|> Riak.update("maps", "users", key)
reg_data = Riak.find("maps", "users", key)
|> Map.get(:register, "register_key")
assert "Some Data" == reg_data
Riak.delete("maps", "users", key)
assert Riak.find("maps", "users", key) == nil
end
test "map key exists" do
key = Riak.Helper.random_key
Map.new
|> Map.put("register_key", Register.new("Some Data"))
|> Riak.update("maps", "users", key)
exists = Riak.find("maps", "users", key)
|> Map.has_key?({"nothere", :register})
assert exists == false
exists = Riak.find("maps", "users", key)
|> Map.has_key?({"register_key", :register})
assert exists == true
keys = Riak.find("maps", "users", key)
|> Map.keys()
assert keys == [{"register_key", :register}]
end
end