riak jiak.py client_id / src / jiak_default_tests.erl

%% This file is provided to you under the Apache License,
%% Version 2.0 (the "License"); you may not use this file
%% except in compliance with the License.  You may obtain
%% a copy of the License at

%%   http://www.apache.org/licenses/LICENSE-2.0

%% Unless required by applicable law or agreed to in writing,
%% software distributed under the License is distributed on an
%% "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
%% KIND, either express or implied.  See the License for the
%% specific language governing permissions and limitations
%% under the License.    

%% @doc Tests for jiak_default.  Parameterized modules must
%%      have their eunit tests in a separate file.
-module(jiak_default_tests).

-include_lib("eunit/include/eunit.hrl").

static_props_test_() ->
    M = jiak_default:new(
          [{allowed_fields,  [foo, bar, baz, quux]},
           {required_fields, [foo, bar]},
           {read_mask,       [foo, bar, baz]},
           {write_mask,      [foo]}]),
    {"Static Properties",
     [{"init", ?_assertEqual({ok, context_ignored},
                             M:init(key_ignored, context_ignored))},
      {"auth_ok", ?_assertEqual({true, reqdata_ignored, context_ignored},
                                M:auth_ok(key_ignored, reqdata_ignored,
                                          context_ignored))},
      {"bucket_listable", ?_assert(M:bucket_listable())},
      {"allowed_fields", ?_assertEqual([foo, bar, baz, quux],
                                       M:allowed_fields())},
      {"required_fields", ?_assertEqual([foo, bar],
                                        M:required_fields())},
      {"read_mask", ?_assertEqual([foo, bar, baz], M:read_mask())},
      {"write_mask", ?_assertEqual([foo], M:write_mask())}
     ]}.

expires_test_() ->
    {"Expires",
     [{"default", ?_assertEqual({600, reqdata_ignored, context_ignored},
                                (jiak_default:new([])):expires_in_seconds(
                                  key_ignored, reqdata_ignored,
                                  context_ignored))},
      {"explicit",
       ?_assertEqual(
          {10, reqdata_ignored, context_ignored},
          (jiak_default:new([{expiry_seconds, 10}])):expires_in_seconds(
           key_ignored, reqdata_ignored, context_ignored))}
     ]}.

write_test_() ->
    M = jiak_default:new([]),
    O = jiak_object:new(<<"bucket_ignored">>, <<"key_ignored">>),
    {"*_write functions",
     [{"check_write", 
       ?_assertEqual(
          {{ok, O}, reqdata_ignored, context_ignored},
          M:check_write({type_ignored, key_ignored}, O,
                        reqdata_ignored, context_ignored))},
      {"effect_write",
       ?_assertEqual(
          {{ok, O}, reqdata_ignored, context_ignored},
          M:effect_write({type_ignored, key_ignored}, O,
                         reqdata_ignored, context_ignored))},
      {"after_write",
       ?_assertEqual(
          {ok, reqdata_ignored, context_ignored},
          M:after_write(key_ignored, O,
                        reqdata_ignored, context_ignored))}
     ]}.

sibling_test() ->
    M = jiak_default:new([]),
    A = {dict:store(<<"X-Riak-Last-Modified">>,
                    httpd_util:rfc1123_date(),
                    dict:store(a, a, dict:new())),
         {{struct, [{a,a}]},
          [a]}},
    B = {dict:store(<<"X-Riak-Last-Modified">>,
                    httpd_util:rfc1123_date(),
                    dict:store(b, b, dict:new())),
         {{struct, [{b,b}]},
          [b]}},
    {CM, {{struct, CO}, CL}} = M:merge_siblings([A,B]),

    ?assertEqual(3, dict:size(CM)),
    ?assertEqual([a,b], [ dict:fetch(P, CM) || P <- [a,b] ]),
    
    ?assertEqual(2, length(CO)),
    ?assertEqual([a,b], [ proplists:get_value(P, CO) || P <- [a,b] ]),
    
    ?assertEqual(2, length(CL)),
    ?assert(lists:all(fun(L) -> lists:member(L, CL) end, [a,b])).
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.