Skip to content

Commit

Permalink
Merge pull request #1303 from chef/bs+ph/allow-blank-middle-name
Browse files Browse the repository at this point in the history
[POOL-589] Allow user creation with blank middle name.
  • Loading branch information
Kartik Null Cating-Subramanian authored Jun 13, 2017
2 parents 583c53f + 151de48 commit 5dbee6d
Show file tree
Hide file tree
Showing 3 changed files with 125 additions and 5 deletions.
77 changes: 77 additions & 0 deletions oc-chef-pedant/spec/api/user_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -415,6 +415,83 @@
end
end

context "with a blank middle name" do
let(:request_body) do
{
"username" => username,
"email" => "#{username}@chef.io",
"display_name" => username,
"password" => "badger badger",
"first_name" => username,
"last_name" => username,
"middle_name" => "",
}
end

it "can create new user" do
post(request_url, platform.superuser,
:payload => request_body).should look_like({
:status => 201,
:body_exact => response_body
})
get(request_url, platform.superuser).should look_like({
:status => 200,
:body => users_with_new_user
})
end
end

context "with a blank first name" do
let(:request_body) do
{
"username" => username,
"email" => "#{username}@chef.io",
"display_name" => username,
"password" => "badger badger",
"first_name" => "",
"last_name" => username,
"middle_name" => username,
}
end

it "can create new user" do
post(request_url, platform.superuser,
:payload => request_body).should look_like({
:status => 201,
:body_exact => response_body
})
get(request_url, platform.superuser).should look_like({
:status => 200,
:body => users_with_new_user
})
end
end

context "with a blank last name" do
let(:request_body) do
{
"username" => username,
"email" => "#{username}@chef.io",
"display_name" => username,
"password" => "badger badger",
"first_name" => username,
"last_name" => "",
"middle_name" => username,
}
end

it "can create new user" do
post(request_url, platform.superuser,
:payload => request_body).should look_like({
:status => 201,
:body_exact => response_body
})
get(request_url, platform.superuser).should look_like({
:status => 200,
:body => users_with_new_user
})
end
end
context "without email" do
let(:request_body) do
{
Expand Down
13 changes: 8 additions & 5 deletions src/oc_erchef/apps/chef_objects/src/chef_regex.erl
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,10 @@
-define(USERNAME_REGEX, "[a-z0-9\-_]+").

%% Validation regex for various names
-define(HUMAN_NAME_REGEX, "[[:word:][:digit:]!'. -]+").
-define(REQUIRED_NAME_REGEX, "[[:word:][:digit:]!'. -]+").

%% Validation regex for various names that can be empty.
-define(OPTIONAL_NAME_REGEX, "[[:word:][:digit:]!'. -]*").

%% Non-blank string regex
-define(NON_BLANK_REGEX, ".+").
Expand Down Expand Up @@ -171,16 +174,16 @@ regex_for(user_name) ->
generate_regex_msg_tuple(?ANCHOR_REGEX(?USERNAME_REGEX),
<<"Malformed user name. Must only contain a-z, 0-9, _, or -">>);
regex_for(first_name) ->
generate_regex_msg_tuple(?ANCHOR_REGEX(?HUMAN_NAME_REGEX),
generate_regex_msg_tuple(?ANCHOR_REGEX(?OPTIONAL_NAME_REGEX),
<<"Denied first_name. Must only contain word characters, digits, ', or .">>, [unicode, ucp]);
regex_for(middle_name) ->
generate_regex_msg_tuple(?ANCHOR_REGEX(?HUMAN_NAME_REGEX),
generate_regex_msg_tuple(?ANCHOR_REGEX(?OPTIONAL_NAME_REGEX),
<<"Denied middle_name. Must only contain word characters, digits, ', or .">>, [unicode, ucp]);
regex_for(last_name) ->
generate_regex_msg_tuple(?ANCHOR_REGEX(?HUMAN_NAME_REGEX),
generate_regex_msg_tuple(?ANCHOR_REGEX(?OPTIONAL_NAME_REGEX),
<<"Denied last_name. Must only contain word characters, digits, ', or .">>, [unicode, ucp]);
regex_for(display_name) ->
generate_regex_msg_tuple(?ANCHOR_REGEX(?HUMAN_NAME_REGEX),
generate_regex_msg_tuple(?ANCHOR_REGEX(?REQUIRED_NAME_REGEX),
<<"Denied display_name. Must only contain word characters, digits, ', or .">>, [unicode, ucp]);
regex_for(non_blank_string) ->
generate_regex_msg_tuple(?ANCHOR_REGEX(?NON_BLANK_REGEX), <<"Field must have a non-empty string value">>);
Expand Down
40 changes: 40 additions & 0 deletions src/oc_erchef/apps/chef_objects/test/chef_user_tests.erl
Original file line number Diff line number Diff line change
Expand Up @@ -180,6 +180,46 @@ parse_binary_json_tests(Version) ->
?assertEqual(lists:sort(MinValid), lists:sort(GotData))
end
},
{?VD("Can create user with empty first name"),
fun() ->
UserEJson = make_min_valid_create_user_ejson() ++ [{<<"first_name">>, <<>>},
{<<"last_name">>, <<"Bobson">>},
{<<"middle_name">>, <<"Joe">>}],
UserJson = chef_json:encode({UserEJson}),
{ok, {GotData}} = chef_user:parse_binary_json(Version, UserJson, create, undefined),
?assertEqual(lists:sort(UserEJson), lists:sort(GotData))
end
},
{?VD("Can create user with empty last name"),
fun() ->
UserEJson = make_min_valid_create_user_ejson() ++ [{<<"first_name">>, <<"Alice">>},
{<<"last_name">>, <<>>},
{<<"middle_name">>, <<"Joe">>}],
UserJson = chef_json:encode({UserEJson}),
{ok, {GotData}} = chef_user:parse_binary_json(Version, UserJson, create, undefined),
?assertEqual(lists:sort(UserEJson), lists:sort(GotData))
end
},
{?VD("Can create user with empty middle name"),
fun() ->
UserEJson = make_min_valid_create_user_ejson() ++ [{<<"first_name">>, <<"Alice">>},
{<<"last_name">>, <<"Bobson">>},
{<<"middle_name">>, <<>>}],
UserJson = chef_json:encode({UserEJson}),
{ok, {GotData}} = chef_user:parse_binary_json(Version, UserJson, create, undefined),
?assertEqual(lists:sort(UserEJson), lists:sort(GotData))
end
},
{?VD("Can create user with all required fields and first, middle, and last names"),
fun() ->
UserEJson = make_min_valid_create_user_ejson() ++ [{<<"first_name">>, <<"Alice">>},
{<<"last_name">>, <<"Bobson">>},
{<<"middle_name">>, <<"Joe">>}],
UserJson = chef_json:encode({UserEJson}),
{ok, {GotData}} = chef_user:parse_binary_json(Version, UserJson, create, undefined),
?assertEqual(lists:sort(UserEJson), lists:sort(GotData))
end
},
{?VD("Can create user when external auth uid is present"),
fun() ->
MinValid = make_external_auth_create_user_ejson(),
Expand Down

0 comments on commit 5dbee6d

Please sign in to comment.