has_many_through_generator 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +3 -0
- data/HOWTO +473 -0
- data/MIT-LICENSE +20 -0
- data/README +18 -0
- data/has_many_through_generator.rb +330 -0
- data/templates/controller.rb +116 -0
- data/templates/controller_manytomany.rb +56 -0
- data/templates/fixtures.yml +8 -0
- data/templates/fixtures_manytomany.yml +13 -0
- data/templates/functional_test.rb +78 -0
- data/templates/functional_test_manytomany.rb +75 -0
- data/templates/helper.rb +2 -0
- data/templates/layout.rhtml +15 -0
- data/templates/migration.rb +11 -0
- data/templates/migration_manytomany.rb +12 -0
- data/templates/model.rb +4 -0
- data/templates/model_manytomany.rb +8 -0
- data/templates/partial_form.rhtml +3 -0
- data/templates/stylesheet.css +5 -0
- data/templates/unit_test.rb +67 -0
- data/templates/unit_test_manytomany.rb +68 -0
- data/templates/view_index.rhtml +1 -0
- metadata +67 -0
@@ -0,0 +1,56 @@
|
|
1
|
+
class <%= controller_class_name %>Controller < ApplicationController
|
2
|
+
|
3
|
+
def index
|
4
|
+
end
|
5
|
+
|
6
|
+
def create
|
7
|
+
begin
|
8
|
+
@<%= singular_name %> = <%= class_name %>.new(
|
9
|
+
params[:<%= singular_name %>].merge(
|
10
|
+
:<%= first_id_column %> => params[:<%= first_id_column %>],
|
11
|
+
:<%= second_id_column %> => params[:<%= second_id_column %>]
|
12
|
+
))
|
13
|
+
@successful = @<%= singular_name %>.save
|
14
|
+
rescue
|
15
|
+
flash[:error], @successful = $!.to_s, false
|
16
|
+
end
|
17
|
+
|
18
|
+
respond_to do |type|
|
19
|
+
type.html {return redirect_to_main}
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def update
|
24
|
+
begin
|
25
|
+
@<%= singular_name %> = <%= class_name %>.find(params[:id])
|
26
|
+
@successful = @<%= singular_name %>.update_attributes(params[:<%= singular_name %>])
|
27
|
+
rescue
|
28
|
+
flash[:error], @successful = $!.to_s, false
|
29
|
+
end
|
30
|
+
|
31
|
+
respond_to do |type|
|
32
|
+
type.html {return redirect_to_main}
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def destroy
|
37
|
+
begin
|
38
|
+
@successful = <%= class_name %>.find(params[:id]).destroy
|
39
|
+
rescue
|
40
|
+
flash[:error], @successful = $!.to_s, false
|
41
|
+
end
|
42
|
+
|
43
|
+
respond_to do |type|
|
44
|
+
type.html {return redirect_to_main}
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
protected
|
49
|
+
def redirect_to_main
|
50
|
+
redirect_to common_redirection
|
51
|
+
end
|
52
|
+
|
53
|
+
def common_redirection
|
54
|
+
{ :action => 'index' }
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
|
2
|
+
<%= first_singular_name %>1_<%= second_singular_name %>1:
|
3
|
+
id: 1
|
4
|
+
<%= first_singular_name %>_id: 1
|
5
|
+
<%= second_singular_name %>_id: 1
|
6
|
+
<%= first_singular_name %>1_<%= second_singular_name %>2:
|
7
|
+
id: 2
|
8
|
+
<%= first_singular_name %>_id: 1
|
9
|
+
<%= second_singular_name %>_id: 2
|
10
|
+
<%= first_singular_name %>2_<%= second_singular_name %>2:
|
11
|
+
id: 3
|
12
|
+
<%= first_singular_name %>_id: 2
|
13
|
+
<%= second_singular_name %>_id: 2
|
@@ -0,0 +1,78 @@
|
|
1
|
+
require File.dirname(__FILE__) + '<%= "/.." * controller_class_nesting_depth %>/../test_helper'
|
2
|
+
require '<%= controller_file_path %>_controller'
|
3
|
+
|
4
|
+
# Re-raise errors caught by the controller.
|
5
|
+
class <%= controller_class_name %>Controller; def rescue_action(e) raise e end; end
|
6
|
+
|
7
|
+
class <%= controller_class_name %>ControllerTest < Test::Unit::TestCase
|
8
|
+
fixtures :<%= plural_name %>, :<%= other_plural_name %>, :<%= manytomany_plural_name %>
|
9
|
+
|
10
|
+
NEW_<%= singular_name.upcase %> = { } # e.g. {:name => 'Test <%= class_name %>', :description => 'Dummy'}
|
11
|
+
REDIRECT_TO_MAIN = { :action => 'index' } # put hash or string redirection that you normally expect
|
12
|
+
|
13
|
+
def setup
|
14
|
+
@controller = <%= controller_class_name %>Controller.new
|
15
|
+
@request = ActionController::TestRequest.new
|
16
|
+
@response = ActionController::TestResponse.new
|
17
|
+
# Retrieve fixtures via their name
|
18
|
+
# @first = <%= plural_name %>(:first)
|
19
|
+
@first = <%= class_name %>.find_first
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_index
|
23
|
+
post :index
|
24
|
+
assert_response :success
|
25
|
+
assert_template '<%= plural_name %>/index'
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_create
|
29
|
+
<%= singular_name %>_count = <%= class_name %>.find(:all).length
|
30
|
+
post :create, {:<%= singular_name %> => NEW_<%= singular_name.upcase %>}
|
31
|
+
<%= singular_name %>, successful = check_attrs(%w(<%= singular_name %> successful))
|
32
|
+
assert <%= singular_name %>.errors.blank?, "Should be no flash error messages, found #{<%= singular_name %>.errors.inspect}"
|
33
|
+
assert_equal "<%= class_name %> created", flash[:info], "Flash message incorrect"
|
34
|
+
assert successful, "Should be successful"
|
35
|
+
assert_response :redirect
|
36
|
+
assert_redirected_to REDIRECT_TO_MAIN
|
37
|
+
assert_equal <%= singular_name %>_count + 1, <%= class_name %>.find(:all).length, "Expected an additional <%= class_name %>"
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_update
|
41
|
+
<%= singular_name %>_count = <%= class_name %>.find(:all).length
|
42
|
+
post :update, {:id => @first.id, :<%= singular_name %> => NEW_<%= singular_name.upcase %>}
|
43
|
+
<%= singular_name %>, successful = check_attrs(%w(<%= singular_name %> successful))
|
44
|
+
assert <%= singular_name %>.errors.blank?, "Should be no flash error messages, found #{<%= singular_name %>.errors.inspect}"
|
45
|
+
assert_equal "<%= class_name %> updated", flash[:info], "Flash message incorrect"
|
46
|
+
assert successful, "Should be successful"
|
47
|
+
<%= singular_name %>.reload
|
48
|
+
NEW_<%= singular_name.upcase %>.each do |attr_name|
|
49
|
+
assert_equal NEW_<%= singular_name.upcase %>[attr_name], <%= singular_name %>.attributes[attr_name], "@<%= singular_name %>.#{attr_name.to_s} incorrect"
|
50
|
+
end
|
51
|
+
assert_equal <%= singular_name %>_count, <%= class_name %>.find(:all).length, "Number of <%= class_name %>s should be the same"
|
52
|
+
assert_response :redirect
|
53
|
+
assert_redirected_to REDIRECT_TO_MAIN
|
54
|
+
end
|
55
|
+
|
56
|
+
def test_destroy
|
57
|
+
<%= singular_name %>_count = <%= class_name %>.find(:all).length
|
58
|
+
post :destroy, {:id => @first.id}
|
59
|
+
assert flash[:error].blank?, "Should be no flash error messages, found #{flash[:error].inspect}"
|
60
|
+
assert_equal "<%= class_name %> deleted", flash[:info], "Flash message incorrect"
|
61
|
+
assert_response :redirect
|
62
|
+
assert_equal <%= singular_name %>_count - 1, <%= class_name %>.find(:all).length, "Number of <%= class_name %>s should be one less"
|
63
|
+
assert_redirected_to REDIRECT_TO_MAIN
|
64
|
+
end
|
65
|
+
|
66
|
+
protected
|
67
|
+
# Could be put in a Helper library and included at top of test class
|
68
|
+
def check_attrs(attr_list)
|
69
|
+
attrs = []
|
70
|
+
attr_list.each do |attr_sym|
|
71
|
+
attr = assigns(attr_sym.to_sym)
|
72
|
+
assert_not_nil attr, "Attribute @#{attr_sym} should not be nil"
|
73
|
+
assert !attr.new_record?, "Should have saved the @#{attr_sym} obj" if attr.class == ActiveRecord
|
74
|
+
attrs << attr
|
75
|
+
end
|
76
|
+
attrs.length > 1 ? attrs : attrs[0]
|
77
|
+
end
|
78
|
+
end
|
@@ -0,0 +1,75 @@
|
|
1
|
+
require File.dirname(__FILE__) + '<%= "/.." * controller_class_nesting_depth %>/../test_helper'
|
2
|
+
require '<%= controller_file_path %>_controller'
|
3
|
+
|
4
|
+
# Re-raise errors caught by the controller.
|
5
|
+
class <%= controller_class_name %>Controller; def rescue_action(e) raise e end; end
|
6
|
+
|
7
|
+
class <%= controller_class_name %>ControllerTest < Test::Unit::TestCase
|
8
|
+
fixtures :<%= first_table_name %>, :<%= second_table_name %>, :<%= table_name %>
|
9
|
+
|
10
|
+
UPDATE_<%= singular_name.upcase %> = { } # Put data for the <%= class_name %> model here
|
11
|
+
NEW_<%= singular_name.upcase %> = { :<%= first_id_column %> => 3, :<%= second_id_column %> => 3,
|
12
|
+
:<%= singular_name %> => UPDATE_<%= singular_name.upcase %>
|
13
|
+
}
|
14
|
+
REDIRECT_TO_MAIN = { :action => 'index' } # put hash or string redirection that you normally expect
|
15
|
+
|
16
|
+
def setup
|
17
|
+
@controller = <%= controller_class_name %>Controller.new
|
18
|
+
@request = ActionController::TestRequest.new
|
19
|
+
@response = ActionController::TestResponse.new
|
20
|
+
# Retrieve fixtures via their name
|
21
|
+
# @first = <%= plural_name %>(:first)
|
22
|
+
@first = <%= class_name %>.find_first
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_index
|
26
|
+
post :index
|
27
|
+
assert_response :success
|
28
|
+
assert_template '<%= plural_name %>/index'
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_create
|
32
|
+
<%= singular_name %>_count = <%= class_name %>.find(:all).length
|
33
|
+
post :create, NEW_<%= singular_name.upcase %>
|
34
|
+
<%= singular_name %>, successful = check_attrs(%w(<%= singular_name %> successful))
|
35
|
+
assert successful, "Should be successful"
|
36
|
+
assert_response :redirect
|
37
|
+
assert_redirected_to REDIRECT_TO_MAIN
|
38
|
+
assert_equal <%= singular_name %>_count + 1, <%= class_name %>.find(:all).length, "Expected an additional <%= class_name %>"
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_update
|
42
|
+
<%= singular_name %>_count = <%= class_name %>.find(:all).length
|
43
|
+
post :update, {:id => @first.id, :<%= singular_name %> => UPDATE_<%= singular_name.upcase %>}
|
44
|
+
<%= singular_name %>, successful = check_attrs(%w(<%= singular_name %> successful))
|
45
|
+
assert successful, "Should be successful"
|
46
|
+
<%= singular_name %>.reload
|
47
|
+
UPDATE_<%= singular_name.upcase %>.each do |attr_name|
|
48
|
+
assert_equal NEW_<%= singular_name.upcase %>[attr_name], <%= singular_name %>.attributes[attr_name], "@<%= singular_name %>.#{attr_name.to_s} incorrect"
|
49
|
+
end
|
50
|
+
assert_equal <%= singular_name %>_count, <%= class_name %>.find(:all).length, "Number of <%= class_name %>s should be the same"
|
51
|
+
assert_response :redirect
|
52
|
+
assert_redirected_to REDIRECT_TO_MAIN
|
53
|
+
end
|
54
|
+
|
55
|
+
def test_destroy
|
56
|
+
<%= singular_name %>_count = <%= class_name %>.find(:all).length
|
57
|
+
post :destroy, {:id => @first.id}
|
58
|
+
assert_response :redirect
|
59
|
+
assert_equal <%= singular_name %>_count - 1, <%= class_name %>.find(:all).length, "Number of <%= class_name %>s should be one less"
|
60
|
+
assert_redirected_to REDIRECT_TO_MAIN
|
61
|
+
end
|
62
|
+
|
63
|
+
protected
|
64
|
+
# Could be put in a Helper library and included at top of test class
|
65
|
+
def check_attrs(attr_list)
|
66
|
+
attrs = []
|
67
|
+
attr_list.each do |attr_sym|
|
68
|
+
attr = assigns(attr_sym.to_sym)
|
69
|
+
assert_not_nil attr, "Attribute @#{attr_sym} should not be nil"
|
70
|
+
assert !attr.new_record?, "Should have saved the @#{attr_sym} obj" if attr.class == ActiveRecord
|
71
|
+
attrs << attr
|
72
|
+
end
|
73
|
+
attrs.length > 1 ? attrs : attrs[0]
|
74
|
+
end
|
75
|
+
end
|
data/templates/helper.rb
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
<!DOCTYPE html
|
2
|
+
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
3
|
+
"DTD/xhtml1-strict.dtd">
|
4
|
+
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
|
5
|
+
<head>
|
6
|
+
<title><%= Inflector.titleize(plural_name) %></title>
|
7
|
+
<%%= stylesheet_link_tag '<%= plural_name %>', :media => 'all' %>
|
8
|
+
<%%= javascript_include_tag :defaults %>
|
9
|
+
</head>
|
10
|
+
<body>
|
11
|
+
|
12
|
+
<%%= yield %>
|
13
|
+
|
14
|
+
</body>
|
15
|
+
</html>
|
@@ -0,0 +1,12 @@
|
|
1
|
+
class <%= migration_name %> < ActiveRecord::Migration
|
2
|
+
def self.up
|
3
|
+
create_table :<%= table_name %> do |t|
|
4
|
+
t.column :<%= first_id_column %>, :integer
|
5
|
+
t.column :<%= second_id_column %>, :integer
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
def self.down
|
10
|
+
drop_table :<%= table_name %>
|
11
|
+
end
|
12
|
+
end
|
data/templates/model.rb
ADDED
@@ -0,0 +1,8 @@
|
|
1
|
+
class <%= class_name %> < ActiveRecord::Base
|
2
|
+
belongs_to :<%= first_singular_name %>
|
3
|
+
belongs_to :<%= second_singular_name %>
|
4
|
+
|
5
|
+
validates_presence_of :<%= first_id_column %>, :<%= second_singular_name %>_id
|
6
|
+
validates_uniqueness_of :<%= first_singular_name %>_id, :scope => :<%= second_id_column %>
|
7
|
+
validates_uniqueness_of :<%= second_id_column %>, :scope => :<%= first_id_column %>
|
8
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
require File.dirname(__FILE__) + '<%= '/..' * class_nesting_depth %>/../test_helper'
|
2
|
+
|
3
|
+
class <%= class_name %>Test < Test::Unit::TestCase
|
4
|
+
fixtures :<%= plural_name %>, :<%= other_plural_name %>, :<%= manytomany_plural_name %>
|
5
|
+
|
6
|
+
NEW_<%= singular_name.upcase %> = { } # e.g. {:name => 'Test <%= class_name %>', :description => 'Dummy'}
|
7
|
+
REQ_ATTR_NAMES = %w( ) # name of fields that must be present, e.g. %(name description)
|
8
|
+
DUPLICATE_ATTR_NAMES = %w( ) # name of fields that cannot be a duplicate, e.g. %(name description)
|
9
|
+
|
10
|
+
def setup
|
11
|
+
# Retrieve fixtures via their name
|
12
|
+
# @first = <%= plural_name %>(:first)
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_raw_validation
|
16
|
+
<%= singular_name %> = <%= class_name %>.new
|
17
|
+
if REQ_ATTR_NAMES.blank?
|
18
|
+
assert <%= singular_name %>.valid?, "<%= class_name %> should be valid without initialisation parameters"
|
19
|
+
else
|
20
|
+
# If <%= class_name %> has validation, then use the following:
|
21
|
+
assert !<%= singular_name %>.valid?, "<%= class_name %> should not be valid without initialisation parameters"
|
22
|
+
REQ_ATTR_NAMES.each {|attr_name| assert <%= singular_name %>.errors.invalid?(attr_name.to_sym), "Should be an error message for :#{attr_name}"}
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_new
|
27
|
+
<%= singular_name %> = <%= class_name %>.new(NEW_<%= singular_name.upcase %>)
|
28
|
+
assert <%= singular_name %>.valid?, "<%= class_name %> should be valid"
|
29
|
+
NEW_<%= singular_name.upcase %>.each do |attr_name|
|
30
|
+
assert_equal NEW_<%= singular_name.upcase %>[attr_name], <%= singular_name %>.attributes[attr_name], "<%= class_name %>.@#{attr_name.to_s} incorrect"
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_validates_presence_of
|
35
|
+
REQ_ATTR_NAMES.each do |attr_name|
|
36
|
+
tmp_<%= singular_name %> = NEW_<%= singular_name.upcase %>.clone
|
37
|
+
tmp_<%= singular_name %>.delete attr_name.to_sym
|
38
|
+
<%= singular_name %> = <%= class_name %>.new(tmp_<%= singular_name %>)
|
39
|
+
assert !<%= singular_name %>.valid?, "<%= class_name %> should be invalid, as @#{attr_name} is invalid"
|
40
|
+
assert <%= singular_name %>.errors.invalid?(attr_name.to_sym), "Should be an error message for :#{attr_name}"
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_duplicate
|
45
|
+
current_<%= singular_name %> = <%= class_name %>.find_first
|
46
|
+
DUPLICATE_ATTR_NAMES.each do |attr_name|
|
47
|
+
<%= singular_name %> = <%= class_name %>.new(NEW_<%= singular_name.upcase %>.merge(attr_name.to_sym => current_<%= singular_name %>[attr_name]))
|
48
|
+
assert !<%= singular_name %>.valid?, "<%= class_name %> should be invalid, as @#{attr_name} is a duplicate"
|
49
|
+
assert <%= singular_name %>.errors.invalid?(attr_name.to_sym), "Should be an error message for :#{attr_name}"
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def test_<%= manytomany_plural_name %>_to_<%= singular_name %>
|
54
|
+
assert_equal <%= plural_name %>(:first), <%= manytomany_class_name %>.find_first.<%= singular_name %>, "<%= manytomany_class_name %>.<%= singular_name %> should be a <%= class_name %>"
|
55
|
+
end
|
56
|
+
|
57
|
+
def test_<%= singular_name %>_to_<%= manytomany_plural_name %>
|
58
|
+
assert_not_nil <%= plural_name %>(:first).<%= manytomany_plural_name %>, "<%= class_name %>.<%= plural_name %> should not be nil"
|
59
|
+
assert_equal <%= manytomany_class_name %>, <%= plural_name %>(:first).<%= manytomany_plural_name %>[0].class, "<%= class_name %>.<%= manytomany_plural_name %> should be an array of <%= manytomany_class_name %>"
|
60
|
+
end
|
61
|
+
|
62
|
+
def test_<%= other_plural_name %>
|
63
|
+
assert_not_nil <%= plural_name %>(:first).<%= other_plural_name %>, "<%= class_name %>.<%= other_plural_name %> should not be nil"
|
64
|
+
assert_equal <%= other_class_name %>, <%= plural_name %>(:first).<%= other_plural_name %>[0].class, "<%= class_name %>.<%= other_plural_name %> should be an array of <%= other_class_name %>"
|
65
|
+
end
|
66
|
+
|
67
|
+
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
require File.dirname(__FILE__) + '<%= '/..' * class_nesting_depth %>/../test_helper'
|
2
|
+
|
3
|
+
class <%= class_name %>Test < Test::Unit::TestCase
|
4
|
+
fixtures :<%= first_table_name %>, :<%= second_table_name %>, :<%= table_name %>
|
5
|
+
|
6
|
+
NEW_<%= singular_name.upcase %> = { :<%= first_id_column %> => 3, :<%= second_id_column %> => 3 }
|
7
|
+
REQ_ATTR_NAMES = %w( <%= first_id_column %> <%= second_id_column %> ) # name of fields that must be present, e.g. %(name description)
|
8
|
+
|
9
|
+
def setup
|
10
|
+
# Retrieve fixtures via their name
|
11
|
+
# @<%= first_singular_name %>1_and_<%= second_singular_name %>1 = <%= table_name %>(:<%= first_singular_name %>1_and_<%= second_singular_name %>1)
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_raw_validation
|
15
|
+
<%= singular_name %> = <%= class_name %>.new
|
16
|
+
if REQ_ATTR_NAMES.blank?
|
17
|
+
assert <%= singular_name %>.valid?, "<%= class_name %> should be valid without initialisation parameters"
|
18
|
+
else
|
19
|
+
# If <%= class_name %> has validation, then use the following:
|
20
|
+
assert !<%= singular_name %>.valid?, "<%= class_name %> should not be valid without initialisation parameters"
|
21
|
+
REQ_ATTR_NAMES.each {|attr_name| assert <%= singular_name %>.errors.invalid?(attr_name.to_sym), "Should be an error message for :#{attr_name}"}
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_new
|
26
|
+
<%= singular_name %> = <%= class_name %>.new(NEW_<%= singular_name.upcase %>)
|
27
|
+
assert <%= singular_name %>.valid?, "<%= class_name %> should be valid"
|
28
|
+
NEW_<%= singular_name.upcase %>.each do |attr_name|
|
29
|
+
assert_equal NEW_<%= singular_name.upcase %>[attr_name], <%= singular_name %>.attributes[attr_name], "<%= class_name %>.@#{attr_name.to_s} incorrect"
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_validates_presence_of
|
34
|
+
REQ_ATTR_NAMES.each do |attr_name|
|
35
|
+
tmp_<%= singular_name %> = NEW_<%= singular_name.upcase %>.clone
|
36
|
+
tmp_<%= singular_name %>.delete attr_name.to_sym
|
37
|
+
<%= singular_name %> = <%= class_name %>.new(tmp_<%= singular_name %>)
|
38
|
+
assert !<%= singular_name %>.valid?, "<%= class_name %> should be invalid, as @#{attr_name} is invalid"
|
39
|
+
assert <%= singular_name %>.errors.invalid?(attr_name.to_sym), "Should be an error message for :#{attr_name}"
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_duplicate
|
44
|
+
current_<%= singular_name %> = <%= class_name %>.find_first
|
45
|
+
<%= singular_name %> = <%= class_name %>.new(current_<%= singular_name %>.attributes)
|
46
|
+
assert !<%= singular_name %>.valid?, "<%= class_name %> should be invalid, as <%= class_name %> is a duplicate"
|
47
|
+
end
|
48
|
+
|
49
|
+
def test_<%= plural_name %>_to_<%= first_singular_name %>
|
50
|
+
assert_equal <%= first_table_name %>(:first), <%= table_name %>(:<%= first_singular_name %>1_<%= second_singular_name %>1).<%= first_singular_name %>, "<%= class_name %>.<%= first_singular_name %> should be a <%= first_class_name %>"
|
51
|
+
end
|
52
|
+
|
53
|
+
def test_<%= first_singular_name %>_to_<%= plural_name %>
|
54
|
+
assert_not_nil <%= first_table_name %>(:first).<%= plural_name %>, "<%= first_class_name %>.<%= plural_name %> should not be nil"
|
55
|
+
assert_equal <%= class_name %>, <%= first_table_name %>(:first).<%= plural_name %>[0].class, "<%= first_class_name %>.<%= plural_name %> should be an array of <%= class_name %>"
|
56
|
+
assert_equal 2, <%= first_table_name %>(:first).<%= plural_name %>.length, "Incorrect number of <%= class_name %>"
|
57
|
+
end
|
58
|
+
|
59
|
+
def test_<%= plural_name %>_to_<%= second_singular_name %>
|
60
|
+
assert_equal <%= second_table_name %>(:first), <%= table_name %>(:<%= first_singular_name %>1_<%= second_singular_name %>1).<%= second_singular_name %>, "<%= class_name %>.<%= second_singular_name %> should be a <%= second_class_name %>"
|
61
|
+
end
|
62
|
+
|
63
|
+
def test_<%= second_singular_name %>_to_<%= plural_name %>
|
64
|
+
assert_not_nil <%= second_table_name %>(:first).<%= plural_name %>, "<%= second_class_name %>.<%= plural_name %> should not be nil"
|
65
|
+
assert_equal <%= class_name %>, <%= second_table_name %>(:first).<%= plural_name %>[0].class, "<%= second_class_name %>.<%= plural_name %> should be an array of <%= class_name %>"
|
66
|
+
assert_equal 1, <%= second_table_name %>(:first).<%= plural_name %>.length, "Incorrect number of <%= class_name %>"
|
67
|
+
end
|
68
|
+
end
|