~michaelforrest/use-case-mapper/trunk

« back to all changes in this revision

Viewing changes to vendor/rails/activerecord/test/cases/readonly_test.rb

  • Committer: Richard Lee (Canonical)
  • Date: 2010-10-15 15:17:58 UTC
  • mfrom: (190.1.3 use-case-mapper)
  • Revision ID: richard.lee@canonical.com-20101015151758-wcvmfxrexsongf9d
Merge

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
require "cases/helper"
2
 
require 'models/post'
3
 
require 'models/comment'
4
 
require 'models/developer'
5
 
require 'models/project'
6
 
require 'models/reader'
7
 
require 'models/person'
8
 
 
9
 
# Dummy class methods to test implicit association scoping.
10
 
def Comment.foo() find :first end
11
 
def Project.foo() find :first end
12
 
 
13
 
 
14
 
class ReadOnlyTest < ActiveRecord::TestCase
15
 
  fixtures :posts, :comments, :developers, :projects, :developers_projects
16
 
 
17
 
  def test_cant_save_readonly_record
18
 
    dev = Developer.find(1)
19
 
    assert !dev.readonly?
20
 
 
21
 
    dev.readonly!
22
 
    assert dev.readonly?
23
 
 
24
 
    assert_nothing_raised do
25
 
      dev.name = 'Luscious forbidden fruit.'
26
 
      assert !dev.save
27
 
      dev.name = 'Forbidden.'
28
 
    end
29
 
    assert_raise(ActiveRecord::ReadOnlyRecord) { dev.save  }
30
 
    assert_raise(ActiveRecord::ReadOnlyRecord) { dev.save! }
31
 
  end
32
 
 
33
 
 
34
 
  def test_find_with_readonly_option
35
 
    Developer.find(:all).each { |d| assert !d.readonly? }
36
 
    Developer.find(:all, :readonly => false).each { |d| assert !d.readonly? }
37
 
    Developer.find(:all, :readonly => true).each { |d| assert d.readonly? }
38
 
  end
39
 
 
40
 
 
41
 
  def test_find_with_joins_option_implies_readonly
42
 
    # Blank joins don't count.
43
 
    Developer.find(:all, :joins => '  ').each { |d| assert !d.readonly? }
44
 
    Developer.find(:all, :joins => '  ', :readonly => false).each { |d| assert !d.readonly? }
45
 
 
46
 
    # Others do.
47
 
    Developer.find(:all, :joins => ', projects').each { |d| assert d.readonly? }
48
 
    Developer.find(:all, :joins => ', projects', :readonly => false).each { |d| assert !d.readonly? }
49
 
  end
50
 
 
51
 
 
52
 
  def test_habtm_find_readonly
53
 
    dev = Developer.find(1)
54
 
    assert !dev.projects.empty?
55
 
    assert dev.projects.all?(&:readonly?)
56
 
    assert dev.projects.find(:all).all?(&:readonly?)
57
 
    assert dev.projects.find(:all, :readonly => true).all?(&:readonly?)
58
 
  end
59
 
 
60
 
  def test_has_many_find_readonly
61
 
    post = Post.find(1)
62
 
    assert !post.comments.empty?
63
 
    assert !post.comments.any?(&:readonly?)
64
 
    assert !post.comments.find(:all).any?(&:readonly?)
65
 
    assert post.comments.find(:all, :readonly => true).all?(&:readonly?)
66
 
  end
67
 
 
68
 
  def test_has_many_with_through_is_not_implicitly_marked_readonly
69
 
    assert people = Post.find(1).people
70
 
    assert !people.any?(&:readonly?)
71
 
  end
72
 
 
73
 
  def test_readonly_scoping
74
 
    Post.with_scope(:find => { :conditions => '1=1' }) do
75
 
      assert !Post.find(1).readonly?
76
 
      assert Post.find(1, :readonly => true).readonly?
77
 
      assert !Post.find(1, :readonly => false).readonly?
78
 
    end
79
 
 
80
 
    Post.with_scope(:find => { :joins => '   ' }) do
81
 
      assert !Post.find(1).readonly?
82
 
      assert Post.find(1, :readonly => true).readonly?
83
 
      assert !Post.find(1, :readonly => false).readonly?
84
 
    end
85
 
 
86
 
    # Oracle barfs on this because the join includes unqualified and
87
 
    # conflicting column names
88
 
    unless current_adapter?(:OracleAdapter)
89
 
      Post.with_scope(:find => { :joins => ', developers' }) do
90
 
        assert Post.find(1).readonly?
91
 
        assert Post.find(1, :readonly => true).readonly?
92
 
        assert !Post.find(1, :readonly => false).readonly?
93
 
      end
94
 
    end
95
 
 
96
 
    Post.with_scope(:find => { :readonly => true }) do
97
 
      assert Post.find(1).readonly?
98
 
      assert Post.find(1, :readonly => true).readonly?
99
 
      assert !Post.find(1, :readonly => false).readonly?
100
 
    end
101
 
  end
102
 
 
103
 
  def test_association_collection_method_missing_scoping_not_readonly
104
 
    assert !Developer.find(1).projects.foo.readonly?
105
 
    assert !Post.find(1).comments.foo.readonly?
106
 
  end
107
 
end