therealadam (owner)

Revisions

gist: 49017 Download_button fork
public
Public Clone URL: git://gist.github.com/49017.git
Embed All Files: show embed
dm_factory_girl.rb #
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
require 'test/unit'
require 'rubygems'
require 'shoulda'
require 'factory_girl'
 
require 'dm-core'
require 'dm-validations' # Needed for save!
 
class User
  
  include DataMapper::Resource
  
  property :id, Serial
  property :name, String
  property :key, String
  property :domain, String
  property :email, String
  
  has 1, :gizmo
  
  def self.generate_key
    'BONK'
  end
  
end
 
class Gizmo
  
  include DataMapper::Resource
  
  property :id, Serial
  property :name, String
  property :user_id, Integer
  
  belongs_to :user
  
end
 
DataMapper.setup(:default, :adapter => 'in_memory')
 
Factory.sequence :gizmo_name do |n|
  "widget#{n}"
end
 
Factory.define(:user) do |u|
  u.name 'Adam'
  u.key { User.generate_key }
  u.domain 'example.com'
  u.email { |u| "#{u.name.downcase}@#{u.domain}" }
end
 
Factory.define(:thingy, :class => Gizmo) do |g|
  g.name 'Thingy'
  g.user { |user| user.association(:user, :domain => 'foo.com') }
end
 
Factory.define(:doodad, :class => Gizmo) do |d|
  d.name 'Doodad'
  d.association :user, :factory => :user
end
 
Factory.define(:widget, :class => Gizmo) do |w|
  w.name Factory.next(:gizmo_name)
  w.association :user
end
 
class TestUser < Test::Unit::TestCase
  
  def teardown
    User.all.destroy!
    Gizmo.all.destroy!
  end
  
  should 'build a user' do
    user = Factory.build(:user)
    assert_equal 'Adam', user.name
  end
  
  should 'create a user' do
    user = Factory(:user)
    assert !user.dirty?
  end
  
  should 'have a lazy-generated key' do
    user = Factory.build(:user)
    assert_equal 'BONK', user.key
  end
  
  should 'have a dependent email address' do
    user = Factory.build(:user)
    assert_equal 'adam@example.com', user.email
  end
  
  should 'create a user with a dependent gizmo' do
    gizmo = Factory(:thingy)
    assert_equal 'Adam', gizmo.user.name
  end
  
  should 'create a user with a dependent gizmo via syntactic sugar' do
    gizmo = Factory(:doodad)
    assert_equal 'Adam', gizmo.user.name
  end
  
  should 'use a sequence to generate a widget' do
    Factory(:widget)
    Factory(:widget)
    gizmo = Factory(:widget)
    
    assert_equal 3, Gizmo.all.length
    assert_match /widget/, gizmo.name
  end
  
end