@@ -24,6 +24,63 @@ defmodule CodeCorps.GitHub.SyncTest do
2424
2525 alias Ecto.Changeset
2626
27+ describe "pull_request_event" do
28+ [ "pull_request_opened" , "pull_request_closed" , "pull_request_edited" , "pull_request_opened_by_bot" , "pull_request_reopened" ]
29+ |> Enum . each ( fn payload_name ->
30+ @ event payload_name
31+ test "runs succesfully when " <> @ event do
32+ payload = load_event_fixture ( @ event )
33+ project = insert ( :project )
34+ insert ( :github_repo , github_id: payload [ "repository" ] [ "id" ] , project: project )
35+ insert ( :task_list , project: project , done: true )
36+ insert ( :task_list , project: project , inbox: true )
37+ insert ( :task_list , project: project , pull_requests: true )
38+ { :ok , _map } = Sync . pull_request_event ( payload )
39+ end
40+
41+ test "fails if repo not found when " <> @ event do
42+ payload = load_event_fixture ( @ event )
43+ { :error , :repo_not_found } = Sync . pull_request_event ( payload )
44+ end
45+
46+ test "fails if api errors out when " <> @ event do
47+ payload = load_event_fixture ( @ event )
48+ project = insert ( :project )
49+ insert ( :github_repo , github_id: payload [ "repository" ] [ "id" ] , project: project )
50+ insert ( :task_list , project: project , done: true )
51+ insert ( :task_list , project: project , inbox: true )
52+ insert ( :task_list , project: project , pull_requests: true )
53+
54+ with_mock_api ( CodeCorps.GitHub.FailureAPI ) do
55+ assert { :error , :fetching_issue , _error } = Sync . pull_request_event ( payload )
56+ end
57+ end
58+
59+ test "fails with validation error if pull request is invalid when " <> @ event do
60+ payload = load_event_fixture ( @ event )
61+ project = insert ( :project )
62+ insert ( :github_repo , github_id: payload [ "repository" ] [ "id" ] , project: project )
63+ insert ( :task_list , project: project , done: true )
64+ insert ( :task_list , project: project , inbox: true )
65+ insert ( :task_list , project: project , pull_requests: true )
66+
67+ % { "pull_request" => pull } = payload
68+ corrupt_pull = % { pull | "created_at" => nil , "updated_at" => nil , "html_url" => nil , "locked" => nil ,
69+ "number" => nil , "state" => nil , "title" => nil }
70+ corrupt_pull_request = Map . put ( payload , "pull_request" , corrupt_pull )
71+ { :error , :validating_github_pull_request , _changeset } = Sync . pull_request_event ( corrupt_pull_request )
72+ end
73+
74+ test "fails with validation error if task_list isn't found " <> @ event do
75+ payload = load_event_fixture ( @ event )
76+ project = insert ( :project )
77+ insert ( :github_repo , github_id: payload [ "repository" ] [ "id" ] , project: project )
78+ { :error , :validating_task , _changeset } = Sync . pull_request_event ( payload )
79+ end
80+
81+ end )
82+ end
83+
2784
2885 # Some clauses defined seem difficult or impossible to reach so their tests were omitted
2986 # - {:error, :validation_error_on_syncing_installation, Changeset.t()}
0 commit comments