-
Notifications
You must be signed in to change notification settings - Fork 510
/
test_admin_page_generator.rb
107 lines (97 loc) · 5.68 KB
/
test_admin_page_generator.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
require File.dirname(__FILE__) + '/../helper'
require 'thor/group'
require 'fakeweb'
require 'padrino-gen/generators/actions'
Dir[File.dirname(__FILE__) + '/generators/{components}/**/*.rb'].each { |lib| require lib }
class Person
def self.properties
[:id, :name, :age, :email].map { |c| OpenStruct.new(:name => c) }
end
end
class Page
def self.properties
[:id, :name, :body].map { |c| OpenStruct.new(:name => c) }
end
end
class TestAdminPageGenerator < Test::Unit::TestCase
def setup
`rm -rf /tmp/sample_project`
@project = Padrino::Generators::Project.dup
@admin = Padrino::Generators::AdminApp.dup
@page = Padrino::Generators::AdminPage.dup
@model = Padrino::Generators::Model.dup
end
context 'the admin page generator' do
should 'fail outside app root' do
output = silence_logger { @page.start(['foo', '-r=/tmp/sample_project']) }
assert_match(/not at the root/, output)
assert_no_file_exists('/tmp/admin')
end
should 'fail without argument and model' do
silence_logger { @project.start(['sample_project', '--root=/tmp', '-d=activerecord']) }
silence_logger { @admin.start(['--root=/tmp/sample_project']) }
assert_raise(Padrino::Admin::Generators::OrmError) { @page.start(['foo', '-r=/tmp/sample_project']) }
end
should 'correctly generate a new padrino admin application default renderer' do
silence_logger { @project.start(['sample_project', '--root=/tmp', '-d=datamapper']) }
silence_logger { @admin.start(['--root=/tmp/sample_project']) }
silence_logger { @model.start(['person', "name:string", "age:integer", "email:string", '-root=/tmp/sample_project']) }
silence_logger { @page.start(['person', '--root=/tmp/sample_project']) }
assert_file_exists '/tmp/sample_project/admin/controllers/people.rb'
assert_file_exists '/tmp/sample_project/admin/views/people/_form.haml'
assert_file_exists '/tmp/sample_project/admin/views/people/edit.haml'
assert_file_exists '/tmp/sample_project/admin/views/people/index.haml'
assert_file_exists '/tmp/sample_project/admin/views/people/new.haml'
%w(name age email).each do |field|
assert_match_in_file "label :#{field}", '/tmp/sample_project/admin/views/people/_form.haml'
assert_match_in_file "text_field :#{field}", '/tmp/sample_project/admin/views/people/_form.haml'
end
assert_match_in_file 'role.project_module :people, "/people"', '/tmp/sample_project/admin/app.rb'
end
should 'correctly generate a new padrino admin application with erb renderer' do
silence_logger { @project.start(['sample_project', '--root=/tmp', '-d=datamapper', '-e=erb']) }
silence_logger { @admin.start(['--root=/tmp/sample_project']) }
silence_logger { @model.start(['person', "name:string", "age:integer", "email:string", '-root=/tmp/sample_project']) }
silence_logger { @page.start(['person', '--root=/tmp/sample_project']) }
assert_file_exists '/tmp/sample_project/admin/controllers/people.rb'
assert_file_exists '/tmp/sample_project/admin/views/people/_form.erb'
assert_file_exists '/tmp/sample_project/admin/views/people/edit.erb'
assert_file_exists '/tmp/sample_project/admin/views/people/index.erb'
assert_file_exists '/tmp/sample_project/admin/views/people/new.erb'
%w(name age email).each do |field|
assert_match_in_file "label :#{field}", '/tmp/sample_project/admin/views/people/_form.erb'
assert_match_in_file "text_field :#{field}", '/tmp/sample_project/admin/views/people/_form.erb'
end
assert_match_in_file 'role.project_module :people, "/people"', '/tmp/sample_project/admin/app.rb'
end
should 'correctly generate a new padrino admin application with multiple models' do
silence_logger { @project.start(['sample_project', '--root=/tmp', '-d=datamapper']) }
silence_logger { @admin.start(['--root=/tmp/sample_project']) }
silence_logger { @model.start(['person', "name:string", "age:integer", "email:string", '-root=/tmp/sample_project']) }
silence_logger { @model.start(['page', "name:string", "body:string", '-root=/tmp/sample_project']) }
silence_logger { @page.start(['person', 'page', '--root=/tmp/sample_project']) }
# For Person
assert_file_exists '/tmp/sample_project/admin/controllers/people.rb'
assert_file_exists '/tmp/sample_project/admin/views/people/_form.haml'
assert_file_exists '/tmp/sample_project/admin/views/people/edit.haml'
assert_file_exists '/tmp/sample_project/admin/views/people/index.haml'
assert_file_exists '/tmp/sample_project/admin/views/people/new.haml'
%w(name age email).each do |field|
assert_match_in_file "label :#{field}", '/tmp/sample_project/admin/views/people/_form.haml'
assert_match_in_file "text_field :#{field}", '/tmp/sample_project/admin/views/people/_form.haml'
end
assert_match_in_file 'role.project_module :people, "/people"', '/tmp/sample_project/admin/app.rb'
# For Page
assert_file_exists '/tmp/sample_project/admin/controllers/pages.rb'
assert_file_exists '/tmp/sample_project/admin/views/pages/_form.haml'
assert_file_exists '/tmp/sample_project/admin/views/pages/edit.haml'
assert_file_exists '/tmp/sample_project/admin/views/pages/index.haml'
assert_file_exists '/tmp/sample_project/admin/views/pages/new.haml'
%w(name body).each do |field|
assert_match_in_file "label :#{field}", '/tmp/sample_project/admin/views/pages/_form.haml'
assert_match_in_file "text_field :#{field}", '/tmp/sample_project/admin/views/pages/_form.haml'
end
assert_match_in_file 'role.project_module :pages, "/pages"', '/tmp/sample_project/admin/app.rb'
end
end
end