Skip to content

Commit 3ccd28e

Browse files
committed
Add some ordering tests
1 parent 15b95de commit 3ccd28e

3 files changed

Lines changed: 41 additions & 6 deletions

File tree

test/lib/code_corps/services/markdown_renderer_test.exs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ defmodule CodeCorps.Services.MarkdownRendererServiceTest do
77

88
@valid_attrs %{
99
title: "Test task",
10+
task_list_id: 1,
1011
task_type: "issue",
1112
markdown: "A **strong** body",
1213
status: "open"

test/models/task_test.exs

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ defmodule CodeCorps.TaskTest do
66
@valid_attrs %{
77
title: "Test task",
88
task_type: "issue",
9-
markdown: "A test task",
9+
markdown: "A test task"
1010
}
1111
@invalid_attrs %{
1212
task_type: "nonexistent"
@@ -27,9 +27,11 @@ defmodule CodeCorps.TaskTest do
2727
test "renders body html from markdown" do
2828
user = insert(:user)
2929
project = insert(:project)
30+
task_list = insert(:task_list)
3031
changes = Map.merge(@valid_attrs, %{
3132
markdown: "A **strong** body",
3233
project_id: project.id,
34+
task_list_id: task_list.id,
3335
user_id: user.id
3436
})
3537
changeset = Task.changeset(%Task{}, changes)
@@ -120,6 +122,36 @@ defmodule CodeCorps.TaskTest do
120122
assert result_a.order == result_b.order
121123
end
122124

125+
test "repositions tasks correctly" do
126+
user = insert(:user)
127+
project = insert(:project)
128+
task_list = insert(:task_list, name: "Task List", project: project)
129+
130+
task_1 = insert(:task, project: project, user: user, task_list: task_list, order: 1000)
131+
task_2 = insert(:task, project: project, user: user, task_list: task_list, order: 2000)
132+
133+
task_list_2 = insert(:task_list, name: "Task List 2", project: project)
134+
task_3 = insert(:task, project: project, user: user, task_list: task_list_2)
135+
136+
{:ok, task_1_result} =
137+
task_1
138+
|> Task.update_changeset(%{position: 0})
139+
|> Repo.update
140+
141+
{:ok, task_2_result} =
142+
task_2
143+
|> Task.update_changeset(%{position: 1})
144+
|> Repo.update
145+
146+
{:ok, task_3_result} =
147+
task_3
148+
|> Task.update_changeset(%{position: 2, task_list_id: task_list.id})
149+
|> Repo.update
150+
151+
assert task_1_result.order < task_2_result.order
152+
assert task_2_result.order < task_3_result.order
153+
end
154+
123155
test "sets state to 'published'" do
124156
changeset = Task.create_changeset(%Task{}, %{})
125157
assert changeset |> get_change(:state) == "published"

web/models/task.ex

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,18 @@ defmodule CodeCorps.Task do
77
field :body, :string
88
field :markdown, :string
99
field :number, :integer, read_after_writes: true
10-
field :task_type, :string
10+
field :order, :integer
1111
field :state, :string
1212
field :status, :string, default: "open"
13+
field :task_type, :string
1314
field :title, :string
15+
1416
field :position, :integer, virtual: true
15-
field :order, :integer
1617

1718
belongs_to :project, CodeCorps.Project
18-
belongs_to :user, CodeCorps.User
1919
belongs_to :task_list, CodeCorps.TaskList
20+
belongs_to :user, CodeCorps.User
21+
2022
has_many :comments, CodeCorps.Comment
2123

2224
timestamps()
@@ -25,7 +27,7 @@ defmodule CodeCorps.Task do
2527
def changeset(struct, params \\ %{}) do
2628
struct
2729
|> cast(params, [:title, :markdown, :task_type, :task_list_id, :position])
28-
|> validate_required([:title, :markdown, :task_type])
30+
|> validate_required([:title, :markdown, :task_list_id, :task_type])
2931
|> validate_inclusion(:task_type, task_types)
3032
|> assoc_constraint(:task_list)
3133
|> apply_position()
@@ -37,7 +39,7 @@ defmodule CodeCorps.Task do
3739
struct
3840
|> changeset(params)
3941
|> cast(params, [:project_id, :user_id])
40-
|> validate_required([:project_id, :user_id, :task_list_id])
42+
|> validate_required([:project_id, :user_id])
4143
|> assoc_constraint(:project)
4244
|> assoc_constraint(:user)
4345
|> put_change(:state, "published")

0 commit comments

Comments
 (0)