Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions lib/code_corps/analytics/segment_data_extractor.ex
Original file line number Diff line number Diff line change
Expand Up @@ -23,4 +23,12 @@ defmodule CodeCorps.Analytics.SegmentDataExtractor do
def get_user_id(%Plug.Conn{assigns: %{current_user: %CodeCorps.User{id: id}}}, _), do: id
def get_user_id(_, %CodeCorps.User{id: id}), do: id
def get_user_id(_, %{user_id: user_id}), do: user_id

@doc """
Tries to extract project id from given resource.
Returns `nil` if project id can't be extracted.
"""
@spec get_project_id(CodeCorps.ProjectUser.t) :: String.t | nil
def get_project_id(%CodeCorps.ProjectUser{project_id: id}), do: "project_#{id}"
def get_project_id(_), do: nil
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would move this up above get_resource just to keep things alpha-ordered. We try to generally alpha-order things for quick scannability.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is resolved, but github did not mark it outdated.

end
6 changes: 6 additions & 0 deletions lib/code_corps/analytics/segment_plug_tracker.ex
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,12 @@ defmodule CodeCorps.Analytics.SegmentPlugTracker do
if successful? && SegmentTrackingSupport.includes?(action, resource) do
user_id = SegmentDataExtractor.get_user_id(conn, resource)
SegmentTracker.track(user_id, action, resource)

project_id = SegmentDataExtractor.get_project_id(resource)
if project_id do
SegmentTracker.track(project_id, action, resource)
end

mark_tracked(conn)
else
mark_untracked(conn)
Expand Down
23 changes: 23 additions & 0 deletions test/lib/code_corps/analytics/segment_data_extractor_test.exs
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
defmodule CodeCorps.Analytics.SegmentDataExtractorTest do
@moduledoc false

use ExUnit.Case, async: true

import CodeCorps.Factories

alias CodeCorps.Analytics.SegmentDataExtractor

describe "get_project_id/1" do
test "should return correct id for project user" do
project_user = build(:project_user)
project_id = "project_#{project_user.project_id}"

assert SegmentDataExtractor.get_project_id(project_user) == project_id
end

test "should return nil for unknown resource" do
assert SegmentDataExtractor.get_project_id(%{}) == nil
end
end

end
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ defmodule CodeCorpsWeb.ProjectUserControllerTest do
assert conn |> request_create(attrs) |> json_response(201)

user_id = user.id
project_id = "project_#{project.id}"

tracking_properties = %{
project: project.title,
Expand All @@ -58,6 +59,7 @@ defmodule CodeCorpsWeb.ProjectUserControllerTest do
}

assert_received {:track, ^user_id, "Requested Project Membership", ^tracking_properties}
assert_received {:track, ^project_id, "Requested Project Membership", ^tracking_properties}

email =
CodeCorps.ProjectUser
Expand Down Expand Up @@ -106,6 +108,7 @@ defmodule CodeCorpsWeb.ProjectUserControllerTest do
assert json["data"]["attributes"]["role"] == "contributor"

user_id = current_user.id
project_id = "project_#{project.id}"

tracking_properties = %{
project: project.title,
Expand All @@ -115,6 +118,7 @@ defmodule CodeCorpsWeb.ProjectUserControllerTest do
}

assert_received {:track, ^user_id, "Approved Project Membership", ^tracking_properties}
assert_received {:track, ^project_id, "Approved Project Membership", ^tracking_properties}

email =
CodeCorps.ProjectUser
Expand Down