@@ -3,44 +3,59 @@ defmodule CodeCorps.GitHub.Sync.Issue.TaskTest do
33
44 use CodeCorps.DbAccessCase
55
6- alias CodeCorps . {
7- Project ,
8- Repo ,
9- Task
10- }
6+ alias CodeCorps . { Repo , Task }
117 alias CodeCorps.GitHub.Sync.Issue.Task , as: IssueTaskSyncer
128
139 describe "sync all/3" do
14- test "creates missing, updates existing tasks for each project associated with the github repo" do
10+ defp setup_test_data do
11+ # Creates a user, 3 projects and a github issue all linked to a
12+ # github repo. Returns that data as a map
1513 user = insert ( :user )
14+ projects = insert_list ( 3 , :project )
15+ github_repo = insert ( :github_repo )
16+ github_issue = insert (
17+ :github_issue ,
18+ github_repo: github_repo ,
19+ github_updated_at: DateTime . utc_now |> Timex . shift ( hours: 1 )
20+ )
1621
17- % { github_repo: github_repo } = github_issue =
18- insert ( :github_issue , github_updated_at: DateTime . utc_now |> Timex . shift ( hours: 1 ) )
22+ projects |> Enum . each ( & insert ( :task_list , project: & 1 , inbox: true ) )
1923
20- [ % { project: project_1 } , _ , _ ] = project_github_repos =
21- insert_list ( 3 , :project_github_repo , github_repo: github_repo )
24+ projects
25+ |> Enum . each ( & insert ( :project_github_repo , project: & 1 , github_repo: github_repo ) )
2226
23- task_1 = insert ( :task , project: project_1 , github_issue: github_issue , github_repo: github_repo , user: user )
27+ % { github_issue: github_issue , github_repo: github_repo , projects: projects , user: user }
28+ end
2429
25- project_ids = project_github_repos |> Enum . map ( & Map . get ( & 1 , :project_id ) )
30+ test "creates missing, updates existing tasks for each project associated with the github repo" do
31+ % {
32+ github_issue: github_issue ,
33+ github_repo: github_repo ,
34+ projects: [ project_1 | _ ] = projects ,
35+ user: user
36+ } = setup_test_data ( )
2637
27- project_ids |> Enum . each ( fn project_id ->
28- project = Project |> Repo . get_by ( id: project_id )
29- insert ( :task_list , project: project , inbox: true )
30- end )
38+ existing_task =
39+ insert ( :task , project: project_1 , github_issue: github_issue , github_repo: github_repo , user: user )
3140
3241 { :ok , tasks } = github_issue |> IssueTaskSyncer . sync_all ( user )
3342
34- assert Repo . aggregate ( Task , :count , :id ) == 3
43+ assert Repo . aggregate ( Task , :count , :id ) == projects |> Enum . count
44+ assert tasks |> Enum . count == projects |> Enum . count
3545
3646 tasks |> Enum . each ( fn task ->
3747 assert task . user_id == user . id
3848 assert task . markdown == github_issue . body
3949 assert task . github_issue_id == github_issue . id
4050 end )
4151
42- task_ids = tasks |> Enum . map ( & Map . get ( & 1 , :id ) )
43- assert task_1 . id in task_ids
52+ assert existing_task . id in ( tasks |> Enum . map ( & Map . get ( & 1 , :id ) ) )
53+ end
54+
55+ test "sets task :modified_from to 'github'" do
56+ % { github_issue: github_issue , user: user } = setup_test_data ( )
57+ { :ok , tasks } = github_issue |> IssueTaskSyncer . sync_all ( user )
58+ assert tasks |> Enum . all? ( fn task -> task . modified_from == "github" end )
4459 end
4560
4661 test "fails on validation errors" do
0 commit comments