Skip to content

Commit 4b62332

Browse files
committed
feat: Adding tests to page_controller with mocking Stripe's services. #1
1 parent 8209fed commit 4b62332

File tree

5 files changed

+69
-7
lines changed

5 files changed

+69
-7
lines changed

mix.exs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,10 @@ defmodule App.MixProject do
6666
{:stripity_stripe, "~> 2.17"},
6767

6868
# Storage
69-
{:pockets, "~> 0.1.0"}
69+
{:pockets, "~> 0.1.0"},
70+
71+
# Mocking for testing
72+
{:mock, "~> 0.3.0", only: :test}
7073

7174
]
7275
end

mix.lock

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,12 @@
2020
"jason": {:hex, :jason, "1.4.0", "e855647bc964a44e2f67df589ccf49105ae039d4179db7f6271dfd3843dc27e6", [:mix], [{:decimal, "~> 1.0 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "79a3791085b2a0f743ca04cec0f7be26443738779d09302e01318f97bdb82121"},
2121
"joken": {:hex, :joken, "2.5.0", "09be497d804b8115eb6f07615cef2e60c2a1008fb89dc0aef0d4c4b4609b99aa", [:mix], [{:jose, "~> 1.11.2", [hex: :jose, repo: "hexpm", optional: false]}], "hexpm", "22b25c89617c5ed8ca7b31026340a25ea0f9ca7160f9706b79be9ed81fdf74e7"},
2222
"jose": {:hex, :jose, "1.11.5", "3bc2d75ffa5e2c941ca93e5696b54978323191988eb8d225c2e663ddfefd515e", [:mix, :rebar3], [], "hexpm", "dcd3b215bafe02ea7c5b23dafd3eb8062a5cd8f2d904fd9caa323d37034ab384"},
23+
"meck": {:hex, :meck, "0.9.2", "85ccbab053f1db86c7ca240e9fc718170ee5bda03810a6292b5306bf31bae5f5", [:rebar3], [], "hexpm", "81344f561357dc40a8344afa53767c32669153355b626ea9fcbc8da6b3045826"},
2324
"metrics": {:hex, :metrics, "1.0.1", "25f094dea2cda98213cecc3aeff09e940299d950904393b2a29d191c346a8486", [:rebar3], [], "hexpm", "69b09adddc4f74a40716ae54d140f93beb0fb8978d8636eaded0c31b6f099f16"},
2425
"mime": {:hex, :mime, "2.0.3", "3676436d3d1f7b81b5a2d2bd8405f412c677558c81b1c92be58c00562bb59095", [:mix], [], "hexpm", "27a30bf0db44d25eecba73755acf4068cbfe26a4372f9eb3e4ea3a45956bff6b"},
2526
"mimerl": {:hex, :mimerl, "1.2.0", "67e2d3f571088d5cfd3e550c383094b47159f3eee8ffa08e64106cdf5e981be3", [:rebar3], [], "hexpm", "f278585650aa581986264638ebf698f8bb19df297f66ad91b18910dfc6e19323"},
2627
"mint": {:hex, :mint, "1.4.2", "50330223429a6e1260b2ca5415f69b0ab086141bc76dc2fbf34d7c389a6675b2", [:mix], [{:castore, "~> 0.1.0", [hex: :castore, repo: "hexpm", optional: true]}, {:hpax, "~> 0.1.1", [hex: :hpax, repo: "hexpm", optional: false]}], "hexpm", "ce75a5bbcc59b4d7d8d70f8b2fc284b1751ffb35c7b6a6302b5192f8ab4ddd80"},
28+
"mock": {:hex, :mock, "0.3.7", "75b3bbf1466d7e486ea2052a73c6e062c6256fb429d6797999ab02fa32f29e03", [:mix], [{:meck, "~> 0.9.2", [hex: :meck, repo: "hexpm", optional: false]}], "hexpm", "4da49a4609e41fd99b7836945c26f373623ea968cfb6282742bcb94440cf7e5c"},
2729
"nimble_options": {:hex, :nimble_options, "0.5.2", "42703307b924880f8c08d97719da7472673391905f528259915782bb346e0a1b", [:mix], [], "hexpm", "4da7f904b915fd71db549bcdc25f8d56f378ef7ae07dc1d372cbe72ba950dce0"},
2830
"nimble_pool": {:hex, :nimble_pool, "0.2.6", "91f2f4c357da4c4a0a548286c84a3a28004f68f05609b4534526871a22053cde", [:mix], [], "hexpm", "1c715055095d3f2705c4e236c18b618420a35490da94149ff8b580a2144f653f"},
2931
"parse_trans": {:hex, :parse_trans, "3.3.1", "16328ab840cc09919bd10dab29e431da3af9e9e7e7e6f0089dd5a2d2820011d8", [:rebar3], [], "hexpm", "07cd9577885f56362d414e8c4c4e6bdf10d43a8767abb92d24cbe8b24c54888b"},

test/app_web/controllers/app_controller_test.exs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@ defmodule AppWeb.AppControllerTest do
33
import App.ConnFixtures
44

55
test "test dashboard with logged in user", %{conn: conn} do
6-
conn = setup_conn_with_user(conn)
6+
conn = setup_conn_with_user(conn, 2)
77
conn = get(conn, ~p"/dashboard")
8-
assert redirected_to(conn) == ~p"/"
8+
assert redirected_to(conn, 302) == ~p"/"
99
end
1010

1111
test "test dashboard with logged in and paid user", %{conn: conn} do
Lines changed: 58 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,65 @@
11
defmodule AppWeb.PageControllerTest do
22
use AppWeb.ConnCase
3+
import App.ConnFixtures
34

4-
test "GET /", %{conn: conn} do
5+
import Mock
6+
7+
test "get homepage", %{conn: conn} do
58
conn = get(conn, ~p"/")
69
assert html_response(conn, 200) =~ "This is a small project showcasing how to integrate Stripe in a Phoenix project."
710
end
11+
12+
test "get success with loggedin user without session_id", %{conn: conn} do
13+
conn = setup_conn_with_user(conn)
14+
conn = get(conn, ~p"/purchase/success")
15+
assert redirected_to(conn, 303) == ~p"/"
16+
end
17+
18+
test "get success with loggedin user with session_id", %{conn: conn} do
19+
conn = setup_conn_with_user(conn)
20+
21+
with_mock Stripe.Session, [retrieve: fn(_session_id) -> {:ok, %{customer: 1}} end] do
22+
23+
conn = get(conn, ~p"/purchase/success?session_id=123")
24+
25+
assert html_response(conn, 200) =~ "Thank you for completing your secure online payment."
26+
end
27+
end
28+
29+
test "get success with loggedin user with session_id but stripe session errors out", %{conn: conn} do
30+
conn = setup_conn_with_user(conn)
31+
32+
with_mock Stripe.Session, [retrieve: fn(_session_id) -> {:error, nil} end] do
33+
34+
conn = get(conn, ~p"/purchase/success?session_id=123")
35+
assert redirected_to(conn, 303) == ~p"/"
36+
end
37+
end
38+
39+
test "get cancel with loggedin user without session_id", %{conn: conn} do
40+
conn = setup_conn_with_user(conn)
41+
conn = get(conn, ~p"/purchase/cancel")
42+
assert redirected_to(conn, 303) == ~p"/"
43+
end
44+
45+
test "get cancel with loggedin user with session_id", %{conn: conn} do
46+
conn = setup_conn_with_user(conn)
47+
48+
with_mock Stripe.Session, [retrieve: fn(_session_id) -> {:ok, %{customer: 1}} end] do
49+
50+
conn = get(conn, ~p"/purchase/cancel?session_id=123")
51+
52+
assert html_response(conn, 200) =~ "looks like something went wrong"
53+
end
54+
end
55+
56+
test "get cancel with loggedin user with session_id but stripe session errors out", %{conn: conn} do
57+
conn = setup_conn_with_user(conn)
58+
59+
with_mock Stripe.Session, [retrieve: fn(_session_id) -> {:error, nil} end] do
60+
61+
conn = get(conn, ~p"/purchase/cancel?session_id=123")
62+
assert redirected_to(conn, 303) == ~p"/"
63+
end
64+
end
865
end

test/support/fixtures/conn_fixtures.ex

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ defmodule App.ConnFixtures do
99
@doc """
1010
Generate a connection with a logged in user.
1111
"""
12-
def setup_conn_with_user(conn) do
12+
def setup_conn_with_user(conn, person_id \\ @person_id) do
1313
new_assigns = %{
1414
person: %{
1515
app_id: 5,
@@ -18,7 +18,7 @@ defmodule App.ConnFixtures do
1818
1919
exp: 1_702_132_323,
2020
iat: 1_670_595_323,
21-
id: @person_id,
21+
id: person_id,
2222
iss: "Joken",
2323
jti: "2snib63q7a9l9sfmdg00117h",
2424
nbf: 1_670_595_323,
@@ -41,7 +41,7 @@ defmodule App.ConnFixtures do
4141
picture: "this",
4242
auth_provider: "GitHub",
4343
sid: 1,
44-
id: @person_id
44+
id: person_id
4545
})
4646
)
4747

0 commit comments

Comments
 (0)