foreman_datacenter 1.22.1 → 1.24.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/foreman_datacenter/application_controller.rb +2 -0
  3. data/app/controllers/foreman_datacenter/racks_controller.rb +8 -1
  4. data/app/models/foreman_datacenter/rack.rb +36 -0
  5. data/app/views/foreman_datacenter/device_roles/show.html.erb +1 -2
  6. data/app/views/foreman_datacenter/device_types/show.html.erb +1 -2
  7. data/app/views/foreman_datacenter/manufacturers/show.html.erb +1 -2
  8. data/app/views/foreman_datacenter/platforms/show.html.erb +1 -2
  9. data/app/views/foreman_datacenter/rack_groups/show.html.erb +1 -2
  10. data/app/views/foreman_datacenter/racks/_device_position.html.erb +10 -1
  11. data/app/views/foreman_datacenter/racks/show.html.erb +1 -2
  12. data/app/views/foreman_datacenter/sites/show.html.erb +1 -2
  13. data/config/routes.rb +21 -1
  14. data/lib/foreman_datacenter/version.rb +1 -1
  15. data/test/controllers/foreman_datacenter/device_roles_controller_test.rb +133 -0
  16. data/test/controllers/foreman_datacenter/device_types_contoller_test.rb +108 -47
  17. data/test/controllers/foreman_datacenter/devices_controller_test.rb +132 -0
  18. data/test/controllers/foreman_datacenter/manufacturers_controller_test.rb +133 -0
  19. data/test/controllers/foreman_datacenter/platforms_contoller_test.rb +91 -48
  20. data/test/controllers/foreman_datacenter/rack_groups_contoller_test.rb +90 -43
  21. data/test/controllers/foreman_datacenter/racks_contoller_test.rb +111 -42
  22. data/test/controllers/foreman_datacenter/sites_contoller_test.rb +108 -81
  23. data/test/datacenter_helper.rb +8 -1
  24. data/test/factories/device.rb +5 -0
  25. data/test/factories/device_role.rb +6 -0
  26. data/test/factories/device_type.rb +30 -0
  27. data/test/factories/rack_group.rb +13 -14
  28. data/test/fixtures/foreman_datacenter/device_roles.yml +0 -1
  29. data/test/integration/foreman_datacenter/device_role_test.rb +35 -0
  30. data/test/integration/foreman_datacenter/device_type_test.rb +33 -0
  31. data/test/integration/foreman_datacenter/manufacturer_test.rb +33 -0
  32. data/test/integration/foreman_datacenter/platform_test.rb +35 -0
  33. data/test/integration/foreman_datacenter/rack_group_test.rb +35 -25
  34. data/test/integration/foreman_datacenter/rack_test.rb +37 -25
  35. data/test/integration/foreman_datacenter/site_test.rb +39 -29
  36. data/test/unit/foreman_datacenter_test.rb +1 -1
  37. metadata +56 -37
@@ -13,71 +13,140 @@ module ForemanDatacenter
13
13
  basic_pagination_per_page_test
14
14
  basic_pagination_rendered_test
15
15
 
16
- def test_new_submit_button_id
17
- get :new, session: set_session_user
18
- assert_select "[data-id='aid_datacenter_racks']"
19
- end
20
-
21
- def test_new_cancel_button_id
22
- get :new, session: set_session_user
23
- assert_select "[data-id='aid_datacenter_racks']"
24
- end
25
-
26
- def test_show_edit_button_id
27
- get :show, params: { :id => ForemanDatacenter::Rack.first.to_param }, session: set_session_user
28
- assert_select "[data-id='aid_racks_#{ForemanDatacenter::Rack.first.id}_edit']"
29
- end
30
-
31
- def test_show_delete_button_id
32
- get :show, params: { :id => ForemanDatacenter::Rack.first.to_param }, session: set_session_user
33
- assert_select "[data-id='aid_datacenter_racks_#{ForemanDatacenter::Rack.first.id}']"
34
- end
35
-
36
16
  def test_create_invalid
37
17
  ForemanDatacenter::Rack.any_instance.stubs(:valid?).returns(false)
38
- post :create, params: { :rack => {:name => nil} }, session: set_session_user
18
+ post :create, params: { rack: { name: nil } }, session: set_session_user
39
19
  assert_template 'new'
40
20
  end
41
21
 
42
- def test_create_valid
22
+ def test_create_valid(name = "test rack")
43
23
  ForemanDatacenter::Rack.any_instance.stubs(:valid?).returns(true)
44
- post :create, params: { :rack => {:name => 'test rg'} }, session: set_session_user
24
+ post :create, params: { rack: { name: name } }, session: set_session_user
45
25
  assert_redirected_to racks_url
46
26
  end
47
27
 
48
- def test_edit_submit_button_id
49
- get :edit, params: { :id => ForemanDatacenter::Rack.first }, session: set_session_user
50
- assert_select "[data-id='aid_update_foreman_datacenter_rack']"
51
- end
52
-
53
28
  def test_update_invalid
54
29
  ForemanDatacenter::Rack.any_instance.stubs(:valid?).returns(false)
55
- put :update, params: { :id => ForemanDatacenter::Rack.first.to_param, :rack => {:name => "3243"} }, session: set_session_user
30
+ put :update, params: { id: @model.to_param, rack: { name: '3243' } }, session: set_session_user
56
31
  assert_template 'edit'
57
32
  end
58
33
 
59
34
  def test_update_valid
60
35
  ForemanDatacenter::Rack.any_instance.stubs(:valid?).returns(true)
61
- put :update, params: { :id => ForemanDatacenter::Rack.first.to_param, :rack => {:name => ForemanDatacenter::Rack.first.name} }, session: set_session_user
36
+ put :update, params: { id: @model.to_param, rack: { name: @model.name } }, session: set_session_user
62
37
  assert_redirected_to racks_url
63
38
  end
64
39
 
65
- # def test_destroy
66
- # rack = ForemanDatacenter::Rack.first
67
- # # architecture.hosts.delete_all
68
- # # architecture.hostgroups.delete_all
69
- # delete :destroy, params: { :id => rack }, session: set_session_user
70
- # assert_redirected_to racks_url
71
- # assert !ForemanDatacenter::Rack.exists?(rack.id)
72
- # end
40
+ def test_destroy
41
+ test_create_valid "tobedeleted_test"
42
+ @new_rack = ForemanDatacenter::Rack.find_by_name("tobedeleted_test")
43
+ delete :destroy, params: { id: @new_rack.id }, session: set_session_user
44
+ assert_redirected_to racks_url
45
+ assert !ForemanDatacenter::Rack.exists?(@new_rack.id)
46
+ end
47
+
48
+ test "should not get index when not permitted" do
49
+ setup_user
50
+ get :index, session: { :user => users(:one).id, :expires_at => 5.minutes.from_now }
51
+ assert_response :forbidden
52
+ assert_includes @response.body, 'view_racks'
53
+ end
54
+
55
+ test 'should not get show when not permitted' do
56
+ setup_user
57
+ get :show, params: { :id => @model.id }, session: {:user => users(:one).id, :expires_at => 5.minutes.from_now}
58
+ assert_response :forbidden
59
+ assert_includes @response.body, 'view_racks'
60
+ end
61
+
62
+ test 'should not get edit when not permitted' do
63
+ setup_user
64
+ get :edit, params: { :id => @model.id }, session: {:user => users(:one).id, :expires_at => 5.minutes.from_now}
65
+ assert_response :forbidden
66
+ assert_includes @response.body, 'edit_racks'
67
+ end
68
+
69
+ test "should get index" do
70
+ setup_user("Viewer")
71
+ get :index, session: set_session_user
72
+ assert_response :success
73
+ assert_template 'index'
74
+ end
73
75
 
74
- def setup_user
76
+ test 'should get show' do
77
+ setup_user("Viewer")
78
+ get :show, params: { :id => @model.id }, session: set_session_user
79
+ assert_response :success
80
+ assert_template 'show'
81
+ end
82
+
83
+ test 'should not get edit with viewer permissions' do
84
+ setup_user("Viewer")
85
+ get :edit, params: { :id => @model.id }, session: {:user => users(:one).id, :expires_at => 5.minutes.from_now}
86
+ assert_response :forbidden
87
+ assert_includes @response.body, 'edit_racks'
88
+ end
89
+
90
+ test 'should get edit' do
91
+ get :edit, params: { :id => @model.id }, session: set_session_user
92
+ assert_response :success
93
+ assert_template 'edit'
94
+ end
95
+
96
+ def setup_user(role = "")
75
97
  @request.session[:user] = users(:one).id
76
- users(:one).roles = [Role.default, Role.find_by_name('Viewer')]
98
+ users(:one).roles = [Role.default]
99
+ users(:one).roles << Role.find_by_name(role) if role != ""
100
+ # users(:one).roles = [Role.default, Role.find_by_name("Viewer")]
101
+ end
102
+
103
+ test "should_render_404_when_rack_is_not_found" do
104
+ get :show, params: { id: 'no.such.rack' }, session: set_session_user
105
+ assert_response :not_found
106
+ assert_template 'common/404'
107
+ end
108
+
109
+ test "should_not_destroy_rack_when_not_permitted" do
110
+ setup_user
111
+ assert_difference('ForemanDatacenter::Rack.count', 0) do
112
+ delete :destroy, params: { :id => @model.id }, session: {:user => users(:one).id, :expires_at => 5.minutes.from_now}
113
+ end
114
+ assert_response :forbidden
115
+ end
116
+
117
+ test "should search by name" do
118
+ get :index, params: {:search => "name=\"rack_1\""}, session: set_session_user
119
+ assert_response :success
120
+ refute_empty assigns(:racks)
121
+ assert assigns(:racks).include?(racks(:one))
122
+ end
123
+
124
+ test "should search by rack group" do
125
+ get :index, params: {:search => "rack_group=\"rack_group_1\""}, session: set_session_user
126
+ assert_response :success
127
+ refute_empty assigns(:racks)
128
+ assert assigns(:racks).include?(racks(:one))
129
+ end
130
+
131
+ test "should search by site" do
132
+ get :index, params: {:search => "site=\"site_1\""}, session: set_session_user
133
+ assert_response :success
134
+ refute_empty assigns(:racks)
135
+ assert assigns(:racks).include?(racks(:one))
136
+ end
137
+
138
+ test "should search by facility_id" do
139
+ get :index, params: {:search => "facility_id=\"1\""}, session: set_session_user
140
+ assert_response :success
141
+ refute_empty assigns(:racks)
142
+ assert assigns(:racks).include?(racks(:one))
77
143
  end
78
144
 
79
- def get_factory_name
80
- :rack
145
+ test "should search by height" do
146
+ get :index, params: {:search => "height=\"10\""}, session: set_session_user
147
+ assert_response :success
148
+ refute_empty assigns(:racks)
149
+ assert assigns(:racks).include?(racks(:one))
81
150
  end
82
151
  end
83
152
  end
@@ -13,115 +13,142 @@ module ForemanDatacenter
13
13
  basic_pagination_per_page_test
14
14
  basic_pagination_rendered_test
15
15
 
16
- def test_new_submit_button_id
17
- get :new, session: set_session_user
18
- assert_select "[data-id='aid_datacenter_sites']"
19
- end
20
-
21
- def test_new_cancel_button_id
22
- get :new, session: set_session_user
23
- assert_select "[data-id='aid_datacenter_sites']"
24
- end
25
-
26
- def test_show_edit_button_id
27
- get :show, params: { :id => ForemanDatacenter::Site.first.to_param }, session: set_session_user
28
- assert_select "[data-id='aid_sites_#{ForemanDatacenter::Site.first.id}_edit']"
29
- end
30
-
31
- def test_show_delete_button_id
32
- get :show, params: { :id => ForemanDatacenter::Site.first.to_param }, session: set_session_user
33
- assert_select "[data-id='aid_datacenter_sites_#{ForemanDatacenter::Site.first.id}']"
34
- end
35
-
36
- test "should_show_site" do
37
- setup_user
38
- get :show, params: { :id => ForemanDatacenter::Site.first.to_param }, session: set_session_user
39
- assert_response :success
40
- end
41
-
42
16
  def test_create_invalid
43
17
  ForemanDatacenter::Site.any_instance.stubs(:valid?).returns(false)
44
18
  post :create, params: { :site => {:name => nil} }, session: set_session_user
45
19
  assert_template 'new'
46
20
  end
47
21
 
48
- def test_create_valid
22
+ def test_create_valid(name = "test site")
49
23
  ForemanDatacenter::Site.any_instance.stubs(:valid?).returns(true)
50
- post :create, params: { :site => {:name => 'test site'} }, session: set_session_user
24
+ post :create, params: { :site => {:name => name} }, session: set_session_user
51
25
  assert_redirected_to sites_url
52
26
  end
53
27
 
54
- def test_edit_submit_button_id
55
- get :edit, params: { :id => ForemanDatacenter::Site.first }, session: set_session_user
56
- assert_select "[data-id='aid_update_foreman_datacenter_site']"
57
- end
58
-
59
28
  def test_update_invalid
60
29
  ForemanDatacenter::Site.any_instance.stubs(:valid?).returns(false)
61
- put :update, params: { :id => ForemanDatacenter::Site.first.to_param, :site => {:name => "3243", :asn => "string"} }, session: set_session_user
30
+ put :update, params: { :id => @model.to_param, :site => {:name => "", :asn => "string"} }, session: set_session_user
62
31
  assert_template 'edit'
63
32
  end
64
33
 
65
34
  def test_update_valid
66
35
  ForemanDatacenter::Site.any_instance.stubs(:valid?).returns(true)
67
- put :update, params: { :id => ForemanDatacenter::Site.first.to_param, :site => {:name => ForemanDatacenter::Site.first.name} }, session: set_session_user
36
+ put :update, params: { :id => @model.to_param, :site => {:name => @model.name} }, session: set_session_user
37
+ assert_redirected_to sites_url
38
+ end
39
+
40
+ def test_destroy
41
+ test_create_valid "tobedeleted_test"
42
+ @new_site = ForemanDatacenter::Site.find_by_name("tobedeleted_test")
43
+ delete :destroy, params: { :id => @new_site.id }, session: set_session_user
68
44
  assert_redirected_to sites_url
45
+ assert !ForemanDatacenter::Site.exists?(@new_site.id)
46
+ end
47
+
48
+ test "should not get index when not permitted" do
49
+ setup_user
50
+ get :index, session: { :user => users(:one).id, :expires_at => 5.minutes.from_now }
51
+ assert_response :forbidden
52
+ assert_includes @response.body, 'view_sites'
69
53
  end
70
54
 
71
- # def test_destroy
72
- # site = ForemanDatacenter::Site.first
73
- # # architecture.hosts.delete_all
74
- # # architecture.hostgroups.delete_all
75
- # delete :destroy, params: { :id => site }, session: set_session_user
76
- # assert_redirected_to sites_url
77
- # assert !ForemanDatacenter::Site.exists?(site.id)
78
- # end
55
+ test 'should not get show when not permitted' do
56
+ setup_user
57
+ get :show, params: { :id => @model.id }, session: {:user => users(:one).id, :expires_at => 5.minutes.from_now}
58
+ assert_response :forbidden
59
+ assert_includes @response.body, 'view_sites'
60
+ end
79
61
 
80
- test '403 response contains missing permissions' do
62
+ test 'should not get edit when not permitted' do
81
63
  setup_user
82
- get :edit, params: { :id => ForemanDatacenter::Site.first.id }, session: {:user => users(:one).id, :expires_at => 5.minutes.from_now}
64
+ get :edit, params: { :id => @model.id }, session: {:user => users(:one).id, :expires_at => 5.minutes.from_now}
83
65
  assert_response :forbidden
84
66
  assert_includes @response.body, 'edit_sites'
85
67
  end
86
68
 
87
- def setup_user
69
+ test "should get index" do
70
+ setup_user("Viewer")
71
+ get :index, session: set_session_user
72
+ assert_response :success
73
+ assert_template 'index'
74
+ end
75
+
76
+ test 'should get show' do
77
+ setup_user("Viewer")
78
+ get :show, params: { :id => @model.id }, session: set_session_user
79
+ assert_response :success
80
+ assert_template 'show'
81
+ end
82
+
83
+ test 'should not get edit with viewer permissions' do
84
+ setup_user("Viewer")
85
+ get :edit, params: { :id => @model.id }, session: {:user => users(:one).id, :expires_at => 5.minutes.from_now}
86
+ assert_response :forbidden
87
+ assert_includes @response.body, 'edit_sites'
88
+ end
89
+
90
+ test 'should get edit' do
91
+ get :edit, params: { :id => @model.id }, session: set_session_user
92
+ assert_response :success
93
+ assert_template 'edit'
94
+ end
95
+
96
+ def setup_user(role = "")
88
97
  @request.session[:user] = users(:one).id
89
- users(:one).roles = [Role.default, Role.find_by_name('Viewer')]
90
- end
91
-
92
- # TODO Not executed
93
- # Expected response to be a <403: forbidden>, but was a <302: Found> redirect to <http://test.host/users/login>
94
- # test "user with viewer rights should fail to edit a site" do
95
- # setup_user
96
- # get :edit, params: {:id => ForemanDatacenter::Site.first.id}
97
- # assert_response :forbidden
98
- # end
99
-
100
- # TODO
101
- # Expected response to be a <403: forbidden>, but was a <302: Found> redirect to <http://test.host/users/login>
102
- # test "user_with_viewer_rights_should_succeed_in_viewing_sites" do
103
- # setup_user
104
- # get :index
105
- # assert_response :success
106
- # end
107
-
108
- # TODO
109
- # test "should not show site when not permitted" do
110
- # setup_user "none"
111
- # get :show, params: { :id => ForemanDatacenter::Site.first.to_param }#, session: set_session_user
112
- # assert_response 403
113
- # end
114
-
115
- # TODO
116
- # test "should not show site when restricted" do
117
- # setup_user "view"
118
- # get :show, params: { :id => @your_site.to_param }, session: set_session_user
119
- # assert_response 404
120
- # end
121
-
122
- def get_factory_name
123
- :site
98
+ users(:one).roles = [Role.default]
99
+ users(:one).roles << Role.find_by_name(role) if role != ""
100
+ # users(:one).roles = [Role.default, Role.find_by_name("Viewer")]
124
101
  end
102
+
103
+ test "should search by name" do
104
+ get :index, params: {:search => "name=\"site_1\""}, session: set_session_user
105
+ assert_response :success
106
+ refute_empty assigns(:sites)
107
+ assert assigns(:sites).include?(sites(:one))
108
+ end
109
+
110
+ test "should search by facility" do
111
+ get :index, params: {:search => "facility=\"facility_for_site_1\""}, session: set_session_user
112
+ assert_response :success
113
+ refute_empty assigns(:sites)
114
+ assert assigns(:sites).include?(sites(:one))
115
+ end
116
+
117
+ test "should search by physical_address" do
118
+ get :index, params: {:search => "physical_address=\"phisycal_address_for_site_1\""}, session: set_session_user
119
+ assert_response :success
120
+ refute_empty assigns(:sites)
121
+ assert assigns(:sites).include?(sites(:one))
122
+ end
123
+
124
+ test "should search by shipping_address" do
125
+ get :index, params: {:search => "shipping_address=\"shipping_address_for_site_1\""}, session: set_session_user
126
+ assert_response :success
127
+ refute_empty assigns(:sites)
128
+ assert assigns(:sites).include?(sites(:one))
129
+ end
130
+
131
+ test "should search by asn" do
132
+ get :index, params: {:search => "asn=\"1\""}, session: set_session_user
133
+ assert_response :success
134
+ refute_empty assigns(:sites)
135
+ assert assigns(:sites).include?(sites(:one))
136
+ end
137
+
138
+ test "should_render_404_when_site_is_not_found" do
139
+ get :show, params: { id: 'no.such.site' }, session: set_session_user
140
+ assert_response :not_found
141
+ assert_template 'common/404'
142
+ end
143
+
144
+ test "should_not_destroy_site_when_not_permitted" do
145
+ setup_user
146
+ assert_difference('ForemanDatacenter::Site.count', 0) do
147
+ delete :destroy, params: { :id => @model.id }, session: {:user => users(:one).id, :expires_at => 5.minutes.from_now}
148
+ end
149
+ assert_response :forbidden
150
+ end
151
+
125
152
  end
126
153
  end
127
154
  end
@@ -1,4 +1,11 @@
1
1
  class ActiveSupport::TestCase
2
- fixtures :all
3
2
  set_fixture_class :sites => ForemanDatacenter::Site
3
+ set_fixture_class :racks => ForemanDatacenter::Rack
4
+ set_fixture_class :rack_groups => ForemanDatacenter::RackGroup
5
+ set_fixture_class :platforms => ForemanDatacenter::Platform
6
+ set_fixture_class :manufacturers => ForemanDatacenter::Manufacturer
7
+ set_fixture_class :device_types => ForemanDatacenter::DeviceType
8
+ set_fixture_class :device_roles => ForemanDatacenter::DeviceRole
9
+ set_fixture_class :devices => ForemanDatacenter::Device
10
+ fixtures :all
4
11
  end
@@ -0,0 +1,5 @@
1
+ FactoryBot.define do
2
+ factory :device, :class => ForemanDatacenter::Device do
3
+ sequence(:name) {|n| "device-#{n}"}
4
+ end
5
+ end
@@ -0,0 +1,6 @@
1
+ FactoryBot.define do
2
+ factory :device_role, :class => ForemanDatacenter::DeviceRole do
3
+ sequence(:name) {|n| "dev_role_#{n}"}
4
+ color { "Red" }
5
+ end
6
+ end
@@ -2,6 +2,36 @@ FactoryBot.define do
2
2
  factory :device_type, :class => ForemanDatacenter::DeviceType do
3
3
  sequence(:model) {|n| "dt-#{n}"}
4
4
  sequence(:manufacturer_id) { 1 }
5
+
6
+ trait :full_depth do
7
+ is_full_depth { true }
8
+ end
9
+
10
+ trait :console_server do
11
+ is_console_server { true }
12
+ end
13
+
14
+ trait :pdu do
15
+ is_pdu { true }
16
+ end
17
+
18
+ trait :network_device do
19
+ is_network_device { true }
20
+ end
21
+
22
+ trait :parent do
23
+ subdevice_role "Parent"
24
+ end
25
+
26
+ trait :child do
27
+ subdevice_role "Child"
28
+ u_height 0
29
+ end
30
+
31
+ trait :none do
32
+ subdevice_role "None"
33
+ end
34
+
5
35
  # sequence(:u_height) { 5 }
6
36
  # sequence(:is_full_depth) { true }
7
37
  # sequence(:is_console_server) { true }