mirror of
https://github.com/TracksApp/tracks.git
synced 2025-12-17 15:50:13 +01:00
Add tests for the new object and fix a bug
Each of the individual query chunks has their own test, in addition to a test for the full combination of parameters that could influence a query. There is also a bugfix for the tag query in here, since I want, as much as possible, to have passing tests on every commit.
This commit is contained in:
parent
df091c7ec5
commit
fc17a03bc0
5 changed files with 154 additions and 2 deletions
|
|
@ -27,7 +27,7 @@ module Todos
|
||||||
|
|
||||||
if params[:tag]
|
if params[:tag]
|
||||||
tag = Tag.where(:name => params['tag']).first
|
tag = Tag.where(:name => params['tag']).first
|
||||||
not_done_todos = not_done_todos.where('taggings.tag_id = ?', tag.id)
|
not_done_todos = not_done_todos.joins(:taggings).where('taggings.tag_id = ?', tag.id)
|
||||||
end
|
end
|
||||||
|
|
||||||
if params[:context_id]
|
if params[:context_id]
|
||||||
|
|
|
||||||
10
test/fixtures/projects.yml
vendored
10
test/fixtures/projects.yml
vendored
|
|
@ -56,3 +56,13 @@ attendrailsconf:
|
||||||
user_id: 2
|
user_id: 2
|
||||||
created_at: <%= today %>
|
created_at: <%= today %>
|
||||||
updated_at: <%= today %>
|
updated_at: <%= today %>
|
||||||
|
|
||||||
|
attendgophercon:
|
||||||
|
id: 5
|
||||||
|
name: Attend Gophercon
|
||||||
|
description: 'Because those little gopher drawing are cute'
|
||||||
|
position: 2
|
||||||
|
state: 'active'
|
||||||
|
user_id: 2
|
||||||
|
created_at: <%= today %>
|
||||||
|
updated_at: <%= today %>
|
||||||
|
|
|
||||||
12
test/fixtures/taggings.yml
vendored
12
test/fixtures/taggings.yml
vendored
|
|
@ -23,3 +23,15 @@ foo2:
|
||||||
tag_id: 1
|
tag_id: 1
|
||||||
taggable_id: 3 # Buy milk - completed
|
taggable_id: 3 # Buy milk - completed
|
||||||
taggable_type: Todo
|
taggable_type: Todo
|
||||||
|
|
||||||
|
bar1:
|
||||||
|
id: 5
|
||||||
|
tag_id: 2
|
||||||
|
taggable_id: 16
|
||||||
|
taggable_type: Todo
|
||||||
|
|
||||||
|
bar2:
|
||||||
|
tag_id: 2
|
||||||
|
taggable_id: 20
|
||||||
|
taggable_type: Todo
|
||||||
|
|
||||||
|
|
|
||||||
33
test/fixtures/todos.yml
vendored
33
test/fixtures/todos.yml
vendored
|
|
@ -4,10 +4,17 @@
|
||||||
# rails does automatically in models or controllers! Convert to utc manually!
|
# rails does automatically in models or controllers! Convert to utc manually!
|
||||||
|
|
||||||
<%
|
<%
|
||||||
|
def yesterday
|
||||||
|
Time.zone.now.utc.beginning_of_day - 1.day
|
||||||
|
end
|
||||||
def today
|
def today
|
||||||
Time.zone.now.utc.beginning_of_day.to_s(:db)
|
Time.zone.now.utc.beginning_of_day.to_s(:db)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def tomorrow
|
||||||
|
(Time.zone.now.utc.beginning_of_day + 1.day).to_s(:db)
|
||||||
|
end
|
||||||
|
|
||||||
def next_week
|
def next_week
|
||||||
1.week.from_now.utc.beginning_of_day.to_s(:db)
|
1.week.from_now.utc.beginning_of_day.to_s(:db)
|
||||||
end
|
end
|
||||||
|
|
@ -255,3 +262,29 @@ email_broker:
|
||||||
description: Ask about better stocks
|
description: Ask about better stocks
|
||||||
notes: ~
|
notes: ~
|
||||||
state: pending
|
state: pending
|
||||||
|
|
||||||
|
package_delivered:
|
||||||
|
id: 20
|
||||||
|
context_id: 11
|
||||||
|
project_id: 5
|
||||||
|
description: Package delivery date
|
||||||
|
notes: ~
|
||||||
|
state: active
|
||||||
|
created_at: <%= two_weeks_ago %>
|
||||||
|
due: <%= today %>
|
||||||
|
completed_at: ~
|
||||||
|
show_from: ~
|
||||||
|
user_id: 2
|
||||||
|
|
||||||
|
assemble_furniture:
|
||||||
|
id: 21
|
||||||
|
context_id: 11
|
||||||
|
project_id: 5
|
||||||
|
description: Put together the furniture we bought
|
||||||
|
notes: ~
|
||||||
|
state: completed
|
||||||
|
created_at: <%= two_weeks_ago %>
|
||||||
|
due: <%= today %>
|
||||||
|
completed_at: <%= yesterday %>
|
||||||
|
show_from: ~
|
||||||
|
user_id: 2
|
||||||
|
|
|
||||||
97
test/models/todos/undone_todos_query_test.rb
Normal file
97
test/models/todos/undone_todos_query_test.rb
Normal file
|
|
@ -0,0 +1,97 @@
|
||||||
|
require 'test_helper'
|
||||||
|
|
||||||
|
module Todos
|
||||||
|
class UndoneTodosQueryTest < ActiveSupport::TestCase
|
||||||
|
def test_requires_a_user
|
||||||
|
assert_raises(ArgumentError) { UndoneTodosQuery.new }
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_default_query_is_all_active_not_hidden_todos
|
||||||
|
user = users(:other_user)
|
||||||
|
undone_todos = UndoneTodosQuery.new(user).query({})
|
||||||
|
expected = [todos(:package_delivered),
|
||||||
|
todos(:buy_tix),
|
||||||
|
todos(:pal_confirmation)]
|
||||||
|
assert_equal expected, undone_todos.to_a
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_filtering_by_done
|
||||||
|
user = users(:other_user)
|
||||||
|
# This gets everything done from a week ago until now
|
||||||
|
undone_todos = UndoneTodosQuery.new(user).query(done: '7')
|
||||||
|
expected = [todos(:assemble_furniture)]
|
||||||
|
assert_equal expected, undone_todos.to_a
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_limiting_results
|
||||||
|
user = users(:other_user)
|
||||||
|
undone_todos = UndoneTodosQuery.new(user).query(limit: '1')
|
||||||
|
expected = [todos(:package_delivered)]
|
||||||
|
assert_equal expected, undone_todos.to_a
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_filtering_by_due_date
|
||||||
|
user = users(:other_user)
|
||||||
|
# FIXME normalize HashWithIndifferentHash usage
|
||||||
|
# Only gets todos that are due today or are past their due date.
|
||||||
|
undone_todos = UndoneTodosQuery.new(user).query(due: '0', 'due' => '0')
|
||||||
|
expected = [todos(:package_delivered)]
|
||||||
|
assert_equal expected, undone_todos.to_a
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_filtering_by_tag
|
||||||
|
user = users(:other_user)
|
||||||
|
# FIXME normalize HashWithIndifferentHash usage
|
||||||
|
undone_todos = UndoneTodosQuery.new(user).query(tag: 'bar', "tag" => "bar")
|
||||||
|
expected = [todos(:package_delivered),
|
||||||
|
todos(:buy_tix)]
|
||||||
|
assert_equal expected, undone_todos.to_a
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_filtering_by_context
|
||||||
|
user = users(:other_user)
|
||||||
|
# FIXME normalize HashWithIndifferentHash usage
|
||||||
|
undone_todos = UndoneTodosQuery.new(user).query(context_id: '11', 'context_id' => '11')
|
||||||
|
expected = [todos(:package_delivered),
|
||||||
|
todos(:pal_confirmation)]
|
||||||
|
assert_equal expected, undone_todos.to_a
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_using_a_non_existant_context_raises_an_exception
|
||||||
|
user = users(:other_user)
|
||||||
|
# FIXME normalize HashWithIndifferentHash usage
|
||||||
|
assert_raises(ActiveRecord::RecordNotFound) do
|
||||||
|
undone_todos = UndoneTodosQuery.new(user).query(context_id: '110', 'context_id' => '110')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_filtering_by_project
|
||||||
|
user = users(:other_user)
|
||||||
|
# FIXME normalize HashWithIndifferentHash usage
|
||||||
|
undone_todos = UndoneTodosQuery.new(user).query(project_id: '5', 'project_id' => '5')
|
||||||
|
expected = [todos(:package_delivered)]
|
||||||
|
assert_equal expected, undone_todos.to_a
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_using_a_non_existant_project_raises_an_exception
|
||||||
|
user = users(:other_user)
|
||||||
|
# FIXME normalize HashWithIndifferentHash usage
|
||||||
|
assert_raises(ActiveRecord::RecordNotFound) do
|
||||||
|
undone_todos = UndoneTodosQuery.new(user).query(project_id: '110', 'project_id' => '110')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_combination_of_all_params
|
||||||
|
user = users(:other_user)
|
||||||
|
# FIXME normalize HashWithIndifferentHash usage
|
||||||
|
undone_todos = UndoneTodosQuery.new(user).query({
|
||||||
|
limit: "1",
|
||||||
|
project_id: "5", "project_id" => "5",
|
||||||
|
context_id: "11", "context_id" => "11",
|
||||||
|
tag: "bar", "tag" => "bar",
|
||||||
|
due: "0", "due" => "0"})
|
||||||
|
expected = [todos(:package_delivered)]
|
||||||
|
assert_equal expected, undone_todos.to_a
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
Loading…
Add table
Add a link
Reference in a new issue