Skip to content

Commit

Permalink
Merge pull request #266 from digitalnatives/ghatighorias/bulk_creatio…
Browse files Browse the repository at this point in the history
…n_accepts_down_cased_user_role

bulk creation capitalizes the role and downcase email
  • Loading branch information
rhnonose committed Oct 24, 2017
2 parents fc24ac6 + eb506bf commit ce9630e
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 1 deletion.
11 changes: 10 additions & 1 deletion lib/course_planner_web/models/bulk_helper.ex
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,21 @@ defmodule CoursePlanner.BulkHelper do
|> CSV.decode(strip_fields: true, headers: headers)
|> Enum.reduce_while({:ok, []}, fn(parsed_row, {_out_result, out_value}) ->
case parsed_row do
{:ok, value} -> {:cont, {:ok, [value | out_value]}}
{:ok, value} -> {:cont, {:ok, [fixes_row_element_case(value) | out_value]}}
{:error, value} -> {:halt, {:error, value}}
end
end)
end

defp fixes_row_element_case(%{"name" => name, "family_name" => family_name,
"nickname" => nickname, "email" => email, "role" => role}) do
email = String.downcase(email)
role = String.capitalize(role)

%{"name" => name, "family_name" => family_name, "nickname" => nickname,
"email" => email, "role" => role}
end

defp create_users_with_transaction([]),
do: {:error, "bulk_creation", "Input can not be empty", ""}
defp create_users_with_transaction(user_records) do
Expand Down
17 changes: 17 additions & 0 deletions test/controllers/bulk_controller_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,23 @@ defmodule CoursePlanner.BulkControllerTest do
assert Repo.get_by(User, email: "d@d.com")
end

test "creates bulk request with multiple rows of data even if role are downcased", %{conn: conn} do
params = create_input_params("user", "user bulk creation",
"""
Aname, AFamile,Anickname,a@a.com,student
Bname,BFamile,Bnickname,b@b.com,teacher
Cname,CFamile,Cnickname,c@c.com,volunteer
Dname,DFamile,Dnickname,d@d.com,coordinator
""")
conn = post conn, bulk_path(conn, :create), params
assert redirected_to(conn) == user_path(conn, :index)
assert get_flash(conn, "info") == "All users are created and notified by"
assert Repo.get_by(User, email: "a@a.com")
assert Repo.get_by(User, email: "b@b.com")
assert Repo.get_by(User, email: "c@c.com")
assert Repo.get_by(User, email: "d@d.com")
end

test "does not create bulk request if input file is missing", %{conn: conn} do
params = %{"input" => %{"target" => "user", "title" => "user bulk creation"}}
conn = post conn, bulk_path(conn, :create), params
Expand Down

0 comments on commit ce9630e

Please sign in to comment.