Skip to content

Commit ee13cfd

Browse files
authored
Merge pull request #776 from code-corps/add-sign-up-context
Add sign up context
2 parents 55bde3c + adea6cc commit ee13cfd

File tree

8 files changed

+71
-13
lines changed

8 files changed

+71
-13
lines changed
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,24 @@
11
defmodule CodeCorps.Transition.UserState do
22
def next(_current, nil), do: nil
3+
34
def next("signed_up", "edit_profile"), do: {:ok, "edited_profile"}
5+
6+
# Select/skip categories
47
def next("edited_profile", "select_categories"), do: {:ok, "selected_categories"}
8+
def next("edited_profile", "skip_categories"), do: {:ok, "skipped_categories"}
9+
10+
# Select/skip roles
511
def next("selected_categories", "select_roles"), do: {:ok, "selected_roles"}
12+
def next("selected_categories", "skip_roles"), do: {:ok, "skipped_roles"}
13+
def next("skipped_categories", "select_roles"), do: {:ok, "selected_roles"}
14+
def next("skipped_categories", "skip_roles"), do: {:ok, "skipped_roles"}
15+
16+
# Select/skip skills
617
def next("selected_roles", "select_skills"), do: {:ok, "selected_skills"}
18+
def next("selected_roles", "skip_skills"), do: {:ok, "skipped_skills"}
19+
def next("skipped_roles", "select_skills"), do: {:ok, "selected_skills"}
20+
def next("skipped_roles", "skip_skills"), do: {:ok, "skipped_skills"}
21+
22+
# Invalid transitions
723
def next(current, invalid_transition), do: {:error, "invalid transition #{invalid_transition} from #{current}"}
824
end
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
defmodule CodeCorps.Repo.Migrations.AddSignUpContextToUsers do
2+
use Ecto.Migration
3+
4+
def change do
5+
alter table(:users) do
6+
add :sign_up_context, :string, default: "default"
7+
end
8+
end
9+
end

priv/repo/structure.sql

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1319,7 +1319,8 @@ CREATE TABLE users (
13191319
admin boolean DEFAULT false NOT NULL,
13201320
state character varying(255) DEFAULT 'signed_up'::character varying,
13211321
cloudinary_public_id character varying(255),
1322-
default_color character varying(255)
1322+
default_color character varying(255),
1323+
sign_up_context character varying(255) DEFAULT 'default'::character varying
13231324
);
13241325

13251326

@@ -2593,5 +2594,5 @@ ALTER TABLE ONLY user_tasks
25932594
-- PostgreSQL database dump complete
25942595
--
25952596

2596-
INSERT INTO "schema_migrations" (version) VALUES (20160723215749), (20160804000000), (20160804001111), (20160805132301), (20160805203929), (20160808143454), (20160809214736), (20160810124357), (20160815125009), (20160815143002), (20160816020347), (20160816034021), (20160817220118), (20160818000944), (20160818132546), (20160820113856), (20160820164905), (20160822002438), (20160822004056), (20160822011624), (20160822020401), (20160822044612), (20160830081224), (20160830224802), (20160911233738), (20160912002705), (20160912145957), (20160918003206), (20160928232404), (20161003185918), (20161019090945), (20161019110737), (20161020144622), (20161021131026), (20161031001615), (20161121005339), (20161121014050), (20161121043941), (20161121045709), (20161122015942), (20161123081114), (20161123150943), (20161124085742), (20161125200620), (20161126045705), (20161127054559), (20161205024856), (20161207112519), (20161209192504), (20161212005641), (20161214005935), (20161215052051), (20161216051447), (20161218005913), (20161219160401), (20161219163909), (20161220141753), (20161221085759), (20161226213600), (20161231063614), (20170102130055), (20170102181053), (20170104113708), (20170104212623), (20170104235423), (20170106013143), (20170115035159), (20170115230549), (20170121014100), (20170131234029), (20170201014901), (20170201025454), (20170201035458), (20170201183258), (20170220032224), (20170224233516), (20170226050552), (20170228085250), (20170308214128), (20170308220713), (20170308222552), (20170313130611), (20170318032449), (20170318082740);
2597+
INSERT INTO "schema_migrations" (version) VALUES (20160723215749), (20160804000000), (20160804001111), (20160805132301), (20160805203929), (20160808143454), (20160809214736), (20160810124357), (20160815125009), (20160815143002), (20160816020347), (20160816034021), (20160817220118), (20160818000944), (20160818132546), (20160820113856), (20160820164905), (20160822002438), (20160822004056), (20160822011624), (20160822020401), (20160822044612), (20160830081224), (20160830224802), (20160911233738), (20160912002705), (20160912145957), (20160918003206), (20160928232404), (20161003185918), (20161019090945), (20161019110737), (20161020144622), (20161021131026), (20161031001615), (20161121005339), (20161121014050), (20161121043941), (20161121045709), (20161122015942), (20161123081114), (20161123150943), (20161124085742), (20161125200620), (20161126045705), (20161127054559), (20161205024856), (20161207112519), (20161209192504), (20161212005641), (20161214005935), (20161215052051), (20161216051447), (20161218005913), (20161219160401), (20161219163909), (20161220141753), (20161221085759), (20161226213600), (20161231063614), (20170102130055), (20170102181053), (20170104113708), (20170104212623), (20170104235423), (20170106013143), (20170115035159), (20170115230549), (20170121014100), (20170131234029), (20170201014901), (20170201025454), (20170201035458), (20170201183258), (20170220032224), (20170224233516), (20170226050552), (20170228085250), (20170308214128), (20170308220713), (20170308222552), (20170313130611), (20170318032449), (20170318082740), (20170324194827);
25972598

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
defmodule CodeCorps.Transition.UserStateTest do
2+
use ExUnit.Case, async: true
3+
4+
alias CodeCorps.Transition.UserState
5+
6+
describe "next/2" do
7+
test "returns nil if state_transition is nil" do
8+
assert UserState.next("foo", nil) == nil
9+
end
10+
11+
test "returns {:ok, next_state} for valid transitions" do
12+
assert UserState.next("signed_up", "edit_profile") == {:ok, "edited_profile"}
13+
14+
assert UserState.next("edited_profile", "select_categories") == {:ok, "selected_categories"}
15+
assert UserState.next("edited_profile", "skip_categories") == {:ok, "skipped_categories"}
16+
17+
assert UserState.next("selected_categories", "select_roles") == {:ok, "selected_roles"}
18+
assert UserState.next("selected_categories", "skip_roles") == {:ok, "skipped_roles"}
19+
20+
assert UserState.next("skipped_categories", "select_roles") == {:ok, "selected_roles"}
21+
assert UserState.next("skipped_categories", "skip_roles") == {:ok, "skipped_roles"}
22+
23+
assert UserState.next("selected_roles", "select_skills") == {:ok, "selected_skills"}
24+
assert UserState.next("selected_roles", "skip_skills") == {:ok, "skipped_skills"}
25+
26+
assert UserState.next("skipped_roles", "select_skills") == {:ok, "selected_skills"}
27+
assert UserState.next("skipped_roles", "skip_skills") == {:ok, "skipped_skills"}
28+
end
29+
30+
test "returns {:error, message} for invalid transitions" do
31+
assert UserState.next("foo", "bar") == {:error, "invalid transition bar from foo"}
32+
end
33+
end
34+
end

test/models/user_test.exs

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -64,15 +64,11 @@ defmodule CodeCorps.UserTest do
6464
assert_error_message(changeset, :username, "has already been taken")
6565
end
6666

67-
test "allows setting state to 'signed_up_donating'" do
68-
attrs = @valid_attrs |> Map.put(:state, "signed_up_donating")
67+
test "allows setting sign_up_context to 'donation'" do
68+
attrs = @valid_attrs |> Map.put(:sign_up_context, "donation")
6969
changeset = User.registration_changeset(%User{}, attrs)
7070
assert changeset.valid?
71-
assert changeset |> Ecto.Changeset.get_change(:state) == "signed_up_donating"
72-
73-
attrs = @valid_attrs |> Map.put(:state, "selected_skills")
74-
changeset = User.registration_changeset(%User{}, attrs)
75-
refute changeset.valid?
71+
assert changeset |> Ecto.Changeset.get_change(:sign_up_context) == "donation"
7672
end
7773
end
7874

test/views/user_view_test.exs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ defmodule CodeCorps.UserViewTest do
3333
"name" => "First Last",
3434
"photo-large-url" => "#{host}/icons/user_default_large_blue.png",
3535
"photo-thumb-url" => "#{host}/icons/user_default_thumb_blue.png",
36+
"sign-up-context" => "default",
3637
"state" => "signed_up",
3738
"state-transition" => nil,
3839
"twitter" => user.twitter,

web/models/user.ex

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ defmodule CodeCorps.User do
2626
field :last_name, :string
2727
field :password, :string, virtual: true
2828
field :password_confirmation, :string, virtual: true
29+
field :sign_up_context, :string, default: "default"
2930
field :twitter, :string
3031
field :username, :string
3132
field :website, :string
@@ -71,11 +72,11 @@ defmodule CodeCorps.User do
7172
def registration_changeset(struct, params) do
7273
struct
7374
|> changeset(params)
74-
|> cast(params, [:password, :username, :state])
75+
|> cast(params, [:password, :sign_up_context, :username])
7576
|> validate_required([:password, :username])
7677
|> validate_length(:password, min: 6)
7778
|> validate_length(:username, min: 1, max: 39)
78-
|> validate_inclusion(:state, ["signed_up_donating"])
79+
|> validate_inclusion(:sign_up_context, ["default", "donation"])
7980
|> validate_slug(:username)
8081
|> unique_constraint(:username, name: :users_lower_username_index)
8182
|> unique_constraint(:email)

web/views/user_view.ex

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ defmodule CodeCorps.UserView do
1212

1313
attributes [
1414
:biography, :cloudinary_public_id, :email, :first_name, :last_name, :name,
15-
:photo_large_url, :photo_thumb_url, :state, :state_transition,
16-
:twitter, :username, :website, :inserted_at, :updated_at
15+
:photo_large_url, :photo_thumb_url, :sign_up_context, :state,
16+
:state_transition, :twitter, :username, :website, :inserted_at, :updated_at
1717
]
1818

1919
has_one :slugged_route, serializer: CodeCorps.SluggedRouteView

0 commit comments

Comments
 (0)