diff --git a/app/models/tagging.rb b/app/models/tagging.rb index d00b1406..46291f6a 100644 --- a/app/models/tagging.rb +++ b/app/models/tagging.rb @@ -1,5 +1,5 @@ -# The Tagging join model. This model is automatically generated and added to your app if you run the tagging generator included with has_many_polymorphs. +# The Tagging join model. class Tagging < ActiveRecord::Base diff --git a/test/unit/is_taggable_test.rb b/test/unit/is_taggable_test.rb new file mode 100644 index 00000000..c9d67b43 --- /dev/null +++ b/test/unit/is_taggable_test.rb @@ -0,0 +1,46 @@ +require File.expand_path(File.dirname(__FILE__) + '/../test_helper') + +class IsTaggableTest < ActiveSupport::TestCase + fixtures :todos, :recurring_todos + + def test_models_are_taggable + assert Todo.find(:first).respond_to?(:tag_list) + assert RecurringTodo.find(:first).respond_to?(:tag_list) + end + + def test_test_to_s + t = Todo.create(:description => "test", :context => Context.first) + t.tag_list = "one, two, three" + + # tags will be sorted alphabetical + assert_equal "one, three, two", t.tag_list + assert_equal "one, three, two", t.tags.to_s + end + + def test_getting_all_tags_except_starred + t = Todo.create(:description => "test", :context => Context.first) + t.tag_list = "one, two, three" + t.toggle_star! + + assert_equal "one, starred, three, two", t.tag_list + assert_equal "one, three, two", t.tags.all_except_starred.map(&:name).sort.join(", ") + end + + def test_editing_tags + t = Todo.create(:description => "test", :context => Context.first) + t.tag_list = "a, b, c" + + assert_equal 3, t.tags.count + + t.tag_with "a, b" + + assert_equal "a, b", t.tag_list, "should remove tag c" + + t.tag_with "a, b, c, d" + assert_equal "a, b, c, d", t.tag_list, "should add c and d" + + t.tag_with "a, b, e, f" + assert_equal "a, b, e, f", t.tag_list, "should add e and f and remove c and d" + end + +end \ No newline at end of file diff --git a/test/unit/tag_test.rb b/test/unit/tag_test.rb index fff511b9..e2f5d54a 100644 --- a/test/unit/tag_test.rb +++ b/test/unit/tag_test.rb @@ -3,7 +3,6 @@ require File.expand_path(File.dirname(__FILE__) + '/../test_helper') class TagTest < ActiveSupport::TestCase fixtures :tags - # Replace this with your real tests. def test_find_or_create_with_single_word tag = Tag.find_or_create_by_name("test") assert !tag.new_record? @@ -26,5 +25,21 @@ class TagTest < ActiveSupport::TestCase tag = Tag.find_or_create_by_name("8.1.2") assert !tag.new_record? end - + + def test_tag_name_always_lowercase + tag = Tag.find_or_create_by_name("UPPER") + assert !tag.new_record? + + upper = Tag.find_by_name("UPPER") + assert_not_nil upper + assert upper.name == "upper" + end + + def test_tag_name_stripped_of_spaces + tag = Tag.find_or_create_by_name(" strip spaces ") + assert !tag.new_record? + + assert tag.name == "strip spaces" + end + end diff --git a/test/unit/tagging_test.rb b/test/unit/tagging_test.rb index b660ea2e..7335450e 100644 --- a/test/unit/tagging_test.rb +++ b/test/unit/tagging_test.rb @@ -1,10 +1,16 @@ require File.expand_path(File.dirname(__FILE__) + '/../test_helper') class TaggingTest < ActiveSupport::TestCase - fixtures :taggings + fixtures :taggings, :tags - # Replace this with your real tests. - def test_truth - assert true + def test_removes_unused_tags + tag = Tag.create!(:name => "hello") + tagging = Tagging.create!(:tag => tag, :taggable_id => 1) + + assert_equal 1, Tagging.find(:all, :conditions => ["tag_id = ?", tag.id]).count + + tagging.destroy + + assert_nil Tag.find_by_name("hello") end end diff --git a/test/unit/todo_test.rb b/test/unit/todo_test.rb index 481c4894..48ee7c07 100644 --- a/test/unit/todo_test.rb +++ b/test/unit/todo_test.rb @@ -256,11 +256,11 @@ class TodoTest < ActiveSupport::TestCase tag_c = Tag.find_by_name("c") todos_with_a = Todo.with_tag(tag_a) - assert 1, todos_with_a.count + assert_equal 1, todos_with_a.count assert_equal todo.description, todos_with_a.first.description todos_with_b = Todo.with_tag(tag_b) - assert 1, todos_with_b.count + assert_equal 1, todos_with_b.count assert_equal todo.id, todos_with_b.first.id todo2 = @not_completed2 @@ -270,10 +270,10 @@ class TodoTest < ActiveSupport::TestCase tag_d = Tag.find_by_name("d") todos_with_a = Todo.with_tag(tag_a) - assert 2, todos_with_a.count + assert_equal 2, todos_with_a.count todos_with_d = Todo.with_tag(tag_d) - assert 1, todos_with_a.count + assert_equal 1, todos_with_d.count end def test_finding_todos_with_more_tags_using_OR @@ -293,12 +293,12 @@ class TodoTest < ActiveSupport::TestCase # overlapping tags tag_ids = [tag_a.id, tag_c.id] todos_with_a_or_c = Todo.with_tags(tag_ids) - assert 2, todos_with_a_or_c.count + assert_equal 2, todos_with_a_or_c.count # non-overlapping tags tag_ids = [tag_b.id, tag_d.id] todos_with_b_or_d = Todo.with_tags(tag_ids) - assert 2, todos_with_b_or_d.count + assert_equal 2, todos_with_b_or_d.count end def test_finding_todos_with_more_tags_using_AND @@ -314,8 +314,8 @@ class TodoTest < ActiveSupport::TestCase tag_b_id = Tag.find_by_name("b").id todos_with_a_and_b = Todo.with_tags([tag_a_id]).with_tags([tag_b_id]) - assert 1, todos_with_a_and_b.count - assert todo1.id, todos_with_a_and_b.first.id + assert_equal 1, todos_with_a_and_b.count + assert_equal todo1.id, todos_with_a_and_b.first.id end def test_finding_todos_with_more_tags_using_AND_and_OR @@ -332,14 +332,14 @@ class TodoTest < ActiveSupport::TestCase tag_c_id = Tag.find_by_name("c").id todos_with_aORc_and_b = Todo.with_tags([tag_a_id, tag_c_id]).with_tags([tag_b_id]) - assert 1, todos_with_aORc_and_b.count - assert todo1.id, todos_with_aORc_and_b.first.id + assert_equal 1, todos_with_aORc_and_b.count + assert_equal todo1.id, todos_with_aORc_and_b.first.id # let todo2 fit the expression todo2.tag_list = "a, b, r" todo2.save! todos_with_aORc_and_b = Todo.with_tags([tag_a_id, tag_c_id]).with_tags([tag_b_id]) - assert 2, todos_with_aORc_and_b.count + assert_equal 2, todos_with_aORc_and_b.count end # test named_scopes @@ -385,6 +385,5 @@ class TodoTest < ActiveSupport::TestCase assert !older_created_todos.include?(todo_now) assert !recent_created_todos.include?(todo_old) end - end