-
Notifications
You must be signed in to change notification settings - Fork 10
/
Copy pathminifacture_test.rb
128 lines (104 loc) · 3.14 KB
/
minifacture_test.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
116
117
118
119
120
121
122
123
124
125
126
127
128
require './minifacture'
require 'minitest/autorun'
class MinifactureTest < Minitest::Test
def test_should_define_factories
factories = Minifacture.class_variable_get :@@attrs
refute_nil factories["user"]
refute_nil factories["blog_entry"]
end
def test_should_build_object
user = Factory.build :user
assert_instance_of User, user
assert user.new_record?
end
def test_should_create_object
user = Factory.create :user
assert_instance_of User, user
assert !user.new_record?
end
def test_should_create_object_with_shorthand
user = Factory :user
assert !user.new_record?
end
def test_should_assign_attributes
user = Factory.create :user
refute_nil user.login
refute_nil user.email
refute_nil user.password
refute_nil user.password_confirmation
end
def test_should_chain_attributes
user = Factory.create :user
assert_equal user.password, user.password_confirmation
end
def test_should_override_attributes_on_the_fly
user = Factory.create :user, :login => (login = "janedoe"),
:email => (email = "janedoe@example.com"),
:password => (password = "password"),
:password_confirmation => (password_confirmation = "passwrod")
assert_equal login, user.login
assert_equal email, user.email
assert_equal password, user.password
assert_equal password_confirmation, user.password_confirmation
user = Factory.create :user
refute_equal login, user.login
refute_equal email, user.email
refute_equal password, user.password
refute_equal password_confirmation, user.password_confirmation
end
def test_should_sequence
user1 = Factory.create :user
user2 = Factory.create :user
assert_equal user1.login.sub(/\d+$/) { |n| n.to_i.succ.to_s }, user2.login
end
def test_should_sequence_with_parent
user = Factory.create :user
admin = Factory.create :admin
assert_equal user.login, 'johndoe1'
assert_equal admin.login, 'admin2'
end
def test_should_interpolate
user = Factory.create :user
assert_equal user.email, "#{user.login}@example.com"
end
def test_should_inherit
admin = Factory.create :admin
assert_equal 'admin1', admin.login
assert_equal 'admin1@example.com', admin.email
end
def test_should_alias
blog_entry = Factory.create :blog_entry
assert_equal 'admin1', blog_entry.user.login
end
def test_should_accept_class_as_symbol
guest = Factory.create :guest
end
def teardown
counts = Minifacture.class_variable_get(:@@counts)
counts.each { |k,_| counts[k] = 0 }
end
end
class Mock
def save!() @saved = true end
def new_record?() !@saved end
end
class User < Mock
attr_accessor :login, :email, :password, :password_confirmation
end
class Post < Mock
attr_accessor :user
end
Minifacture.define :admin, :parent => :user do |f|
f.login "admin%d"
end
Minifacture.define :user do |f|
f.login "johndoe%d"
f.email "%{login}@example.com"
f.password f.password_confirmation("foobarbaz")
end
Minifacture.define :blog_entry, :class => Post do |f|
f.user { Minifacture :admin }
end
Minifacture.define :guest, :class => :user do |f|
f.login "guest"
end