~michaelforrest/use-case-mapper/trunk

« back to all changes in this revision

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

  • Committer: Michael Forrest
  • Date: 2010-10-15 16:28:50 UTC
  • Revision ID: michael.forrest@canonical.com-20101015162850-tj2vchanv0kr0dun
refrozeĀ gems

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