merged cont.
[opensuse:yast-rest-service.git] / webyast / test / functional / resources_registration_test.rb
1 #--
2 # Webyast Webservice framework
3 #
4 # Copyright (C) 2009, 2010 Novell, Inc. 
5 #   This library is free software; you can redistribute it and/or modify
6 # it only under the terms of version 2.1 of the GNU Lesser General Public
7 # License as published by the Free Software Foundation. 
8 #
9 #   This library is distributed in the hope that it will be useful, but WITHOUT
10 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
11 # FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more 
12 # details. 
13 #
14 #   You should have received a copy of the GNU Lesser General Public
15 # License along with this library; if not, write to the Free Software 
16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17 #++
18
19 #
20 # test/functional/resource_registration_test.rb
21 #
22 # This tests the mapping from resource descriptions (yaml files) to the database
23 #
24 # See resource_route_test.rb for resource route tests.
25 #
26 class TestPlugin
27   attr_reader :directory
28   def initialize path
29     @directory = File.join(File.dirname(__FILE__), "..", path)
30   end
31 end
32
33 unless defined? RESOURCE_REGISTRATION_TESTING
34   RESOURCE_REGISTRATION_TESTING = true # prevent plugin registration in environment.rb
35 end
36
37 require File.join(File.dirname(__FILE__), "..", "test_helper")
38 require File.join(File.dirname(__FILE__), "..", "..", "lib", "resource_registration")
39
40 class ResourceRegistrationTest < ActiveSupport::TestCase
41
42   # Create resources from .yml file
43   
44   test "resource creation" do
45     plugin = TestPlugin.new "resource_fixtures/good"
46     ResourceRegistration.register_plugin plugin
47       
48     assert !ResourceRegistration.resources.empty?
49     assert_not_nil ResourceRegistration.resources["org.opensuse.yast.modules.yapi.time"][0]
50     time = ResourceRegistration.resources["org.opensuse.yast.modules.yapi.time"][0]
51     assert_equal "systemtimes", time[:controller]
52     assert time[:singular]
53   end
54   
55   # Create nested resources from .yml file
56   
57   test "resource creation nested" do
58     plugin = TestPlugin.new "resource_fixtures/nested"
59     ResourceRegistration.register_plugin plugin
60       
61     assert !ResourceRegistration.resources.empty?
62   end
63   
64   # Catch errors in interface
65   
66   test "bad interface" do
67     plugin = TestPlugin.new "resource_fixtures/bad_interface"
68     assert_raise ResourceRegistrationFormatError do
69       ResourceRegistration.register_plugin plugin
70     end
71   end
72   
73   test "no interface" do
74     plugin = TestPlugin.new "resource_fixtures/no_interface"
75     assert_raise ResourceRegistrationFormatError do
76       ResourceRegistration.register_plugin plugin
77     end
78   end
79   
80   # Catch errors in controller
81   
82   test "no controller" do
83     plugin = TestPlugin.new "resource_fixtures/no_controller"
84     assert_raise ResourceRegistrationFormatError do
85       ResourceRegistration.register_plugin plugin
86     end
87   end
88   
89   test "bad controller, go fix web-client to use modules" do
90     plugin = TestPlugin.new "resource_fixtures/bad_controller"
91 #    assert_raise RuntimeError do
92       ResourceRegistration.register_plugin plugin
93 #    end
94   end
95   
96   # Catch pluralization error
97   
98   test "interface is singular but not flagged as such" do
99     plugin = TestPlugin.new "resource_fixtures/bad_singular"
100     assert_raise ResourceRegistrationFormatError do
101       ResourceRegistration.register_plugin plugin
102     end
103   end
104
105   # Catch nested singular, which is not supported (yet?)
106   
107   test "nesting inside a singular resource" do
108     plugin = TestPlugin.new "resource_fixtures/nested_singular"
109     assert_raise ResourceRegistrationFormatError do
110       ResourceRegistration.register_plugin plugin
111     end
112   end
113   
114   # Pass bad values to register_plugin
115   
116   test "pass bad values to register_plugin" do
117     assert_raise NoMethodError do
118       ResourceRegistration.register_plugin nil
119     end
120     assert_raise NoMethodError do
121       ResourceRegistration.register_plugin 1
122     end
123     assert_raise NoMethodError do
124       ResourceRegistration.register_plugin true
125     end
126   end
127   
128   # Catch non-existing file
129   
130   test "file does not exist" do
131     assert_raise Errno::ENOENT do
132       ResourceRegistration.register "does_not_exist"
133     end
134   end
135   
136   # Bad call to register
137   
138   test "passing bad values to register" do
139     assert_raise TypeError do
140       ResourceRegistration.register nil
141     end
142     assert_raise TypeError do
143       ResourceRegistration.register 1
144     end
145     assert_raise TypeError do
146       ResourceRegistration.register true
147     end
148   end
149
150   # Complain about private routing
151   
152   test "complain about private routing" do
153     plugin = TestPlugin.new "resource_fixtures/private_routing"
154     assert_raise ResourceRegistrationFormatError do
155       ResourceRegistration.register_plugin plugin
156     end
157   end
158
159 end