Skip to content

Commit 84ac192

Browse files
committed
Added ProjectGithubRepo tracking
1 parent adbb0e9 commit 84ac192

File tree

4 files changed

+62
-2
lines changed

4 files changed

+62
-2
lines changed

lib/code_corps/analytics/segment_traits_builder.ex

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,18 @@ defmodule CodeCorps.Analytics.SegmentTraitsBuilder do
3737
user_id: installation.user_id
3838
}
3939
end
40+
defp traits(%CodeCorps.ProjectGithubRepo{} = record) do
41+
record = record |> Repo.preload([:project, :github_repo])
42+
%{
43+
project: record.project.title,
44+
project_id: record.project_id,
45+
github_repo_id: record.github_repo_id,
46+
github_repo_github_account_login: record.github_repo.github_account_login,
47+
github_repo_github_account_type: record.github_repo.github_account_type,
48+
github_repo_github_id: record.github_repo.github_id,
49+
github_repo_name: record.github_repo.name
50+
}
51+
end
4052
defp traits(%CodeCorps.ProjectSkill{} = record) do
4153
record = record |> Repo.preload([:project, :skill])
4254
%{

lib/code_corps_web/controllers/project_github_repo_controller.ex

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ defmodule CodeCorpsWeb.ProjectGithubRepoController do
22
@moduledoc false
33
use CodeCorpsWeb, :controller
44

5-
alias CodeCorps.{ProjectGithubRepo, User, Helpers.Query}
5+
alias CodeCorps.{Analytics.SegmentTracker, ProjectGithubRepo, User, Helpers.Query}
66

77
action_fallback CodeCorpsWeb.FallbackController
88
plug CodeCorpsWeb.Plug.DataToAttributes
@@ -27,6 +27,9 @@ defmodule CodeCorpsWeb.ProjectGithubRepoController do
2727
with %User{} = current_user <- conn |> Guardian.Plug.current_resource,
2828
{:ok, :authorized} <- current_user |> Policy.authorize(:create, %ProjectGithubRepo{}, params),
2929
{:ok, %ProjectGithubRepo{} = project_github_repo} <- create_project_repo_changeset(params) |> Repo.insert do
30+
31+
current_user |> track_created(project_github_repo)
32+
3033
conn |> put_status(:created) |> render("show.json-api", data: project_github_repo)
3134
end
3235
end
@@ -36,7 +39,10 @@ defmodule CodeCorpsWeb.ProjectGithubRepoController do
3639
with %ProjectGithubRepo{} = project_github_repo <- ProjectGithubRepo |> Repo.get(id),
3740
%User{} = current_user <- conn |> Guardian.Plug.current_resource,
3841
{:ok, :authorized} <- current_user |> Policy.authorize(:delete, project_github_repo, params),
39-
{:ok, _project_github_repo} <- project_github_repo |> Repo.delete do
42+
{:ok, project_github_repo} <- project_github_repo |> Repo.delete do
43+
44+
current_user |> track_deleted(project_github_repo)
45+
4046
conn |> send_resp(:no_content, "")
4147
end
4248
end
@@ -46,4 +52,14 @@ defmodule CodeCorpsWeb.ProjectGithubRepoController do
4652
%ProjectGithubRepo{}
4753
|> ProjectGithubRepo.create_changeset(params)
4854
end
55+
56+
@spec track_created(User.t, ProjectGithubRepo.t) :: any
57+
defp track_created(%User{id: user_id}, %ProjectGithubRepo{} = project_github_repo) do
58+
user_id |> SegmentTracker.track("Added ProjectGithubRepo", project_github_repo)
59+
end
60+
61+
@spec track_deleted(User.t, ProjectGithubRepo.t) :: any
62+
defp track_deleted(%User{id: user_id}, %ProjectGithubRepo{} = project_github_repo) do
63+
user_id |> SegmentTracker.track("Removed ProjectGithubRepo", project_github_repo)
64+
end
4965
end

test/lib/code_corps/analytics/segment_traits_builder_test.exs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ defmodule CodeCorps.Analytics.SegmentTraitsBuilderTest do
2020

2121
assert :project_skill |> insert |> SegmentTraitsBuilder.build
2222
assert :project_user |> insert |> SegmentTraitsBuilder.build
23+
assert :project_github_repo |> insert |> SegmentTraitsBuilder.build
2324

2425
assert :stripe_connect_account |> insert |> SegmentTraitsBuilder.build
2526
assert :stripe_connect_charge |> insert |> SegmentTraitsBuilder.build

test/lib/code_corps_web/controllers/project_github_repo_controller_test.exs

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
defmodule CodeCorpsWeb.ProjectGithubRepoControllerTest do
22
use CodeCorpsWeb.ApiCase, resource_name: :project_github_repo
33

4+
alias CodeCorps.{Analytics.SegmentTraitsBuilder, ProjectGithubRepo, Repo}
5+
46
describe "index" do
57
test "lists all entries on index", %{conn: conn} do
68
[project_github_repo_1, project_github_repo_2] = insert_pair(:project_github_repo)
@@ -51,6 +53,21 @@ defmodule CodeCorpsWeb.ProjectGithubRepoControllerTest do
5153
assert conn |> request_create(attrs) |> json_response(201)
5254
end
5355

56+
@tag :authenticated
57+
test "is being tracked", %{conn: conn, current_user: current_user} do
58+
project = insert(:project)
59+
insert(:project_user, project: project, user: current_user, role: "owner")
60+
github_repo = insert(:github_repo)
61+
62+
attrs = %{project: project, github_repo: github_repo}
63+
conn |> request_create(attrs)
64+
65+
user_id = current_user.id
66+
traits = ProjectGithubRepo |> Repo.one |> SegmentTraitsBuilder.build
67+
68+
assert_receive({:track, ^user_id, "Added ProjectGithubRepo", ^traits})
69+
end
70+
5471
@tag :authenticated
5572
test "renders 422 error when data is invalid", %{conn: conn, current_user: current_user} do
5673
project = insert(:project)
@@ -79,6 +96,20 @@ defmodule CodeCorpsWeb.ProjectGithubRepoControllerTest do
7996
assert conn |> request_delete(project_github_repo) |> response(204)
8097
end
8198

99+
@tag :authenticated
100+
test "is being tracked", %{conn: conn, current_user: current_user} do
101+
project = insert(:project)
102+
insert(:project_user, project: project, user: current_user, role: "owner")
103+
project_github_repo = insert(:project_github_repo, project: project)
104+
105+
conn |> request_delete(project_github_repo)
106+
107+
user_id = current_user.id
108+
traits = project_github_repo |> SegmentTraitsBuilder.build
109+
110+
assert_receive({:track, ^user_id, "Removed ProjectGithubRepo", ^traits})
111+
end
112+
82113
test "renders 401 when unauthenticated", %{conn: conn} do
83114
assert conn |> request_delete |> json_response(401)
84115
end

0 commit comments

Comments
 (0)