merged cont.
[opensuse:yast-rest-service.git] / webyast / test / unit / base_model_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 require File.dirname(__FILE__) + '/../test_helper'
20 require "active_resource/http_mock"
21 class BaseModelTest < ActiveSupport::TestCase
22   class  Test < BaseModel::Base
23     validates_presence_of :arg1
24     validates_format_of :arg2, :with => /^\d$/
25     before_save :call
26
27     attr_accessor :arg1, :arg2, :callback_used, :carg
28     attr_protected :callback_used
29     def call
30       @callback_used = true;
31     end
32   end
33
34   class  Test2 < BaseModel::Base
35
36     attr_accessor :arg1, :arg2
37     attr_accessible :arg1
38     attr_serialized :arg1
39     def call
40       @callback_used = true;
41     end
42   end
43
44   class  Test3 < BaseModel::Base
45
46     attr_accessor :arg1, :arg2
47     attr_serialized :arg1
48     validates_uri :arg1
49     def call
50       @callback_used = true;
51     end
52   end
53
54   class TestClient < ActiveResource::Base
55     self.element_name = "test"
56     self.site = "http://localhost"
57   end
58
59
60   def test_validations
61     test = Test.new
62     test.arg1 = "last"
63     test.arg2 = "5"
64     assert test.valid?
65     test.arg1 = nil
66     test.arg2 = "sda"
67     assert test.invalid?
68     test = Test3.new
69     test.arg1 = "localhost:3000"
70     assert test.valid?
71     test.arg1 = "localhost:3000<script>frozen hell</script>"
72     assert test.invalid?
73   end
74
75   def test_save!
76     test = Test.new
77     test.arg1 = nil
78     test.arg2 = "sda"
79     assert_raise InvalidParameters do
80       test.save!
81     end
82   end
83
84   def test_callbacks
85     test = Test.new
86     test.callback_used = false
87     assert test.save(false)
88     assert test.callback_used
89   end
90
91 MASS_DATA = { :arg1 => "last", :arg2 => "5", :callback_used => false }
92   def test_mass_assignment
93     test = Test.new
94     test.callback_used = true
95     test.load MASS_DATA
96     assert_equal "last", test.arg1
97     assert_equal "5", test.arg2
98 #test blacklisting
99     assert test.callback_used
100 #test whitelisting
101     test2 = Test2.new(MASS_DATA)
102     assert_equal "last", test2.arg1
103     assert test2.arg2.nil?
104   end
105
106 class TestSerializeItself
107   def to_xml(options={})
108     root = options[:root] || @model.class.model_name.singular
109     builder = options[:builder] || Builder::XmlMarkup.new(options)
110     builder.instruct! unless options[:skip_instruct]
111     builder.tag!(root) do
112       builder.test "lest"
113       builder.test2 "lest2"
114     end
115   end
116 end
117
118 COMPLEX_DATA = {
119   "test_data" => [ "a","b"], #serializers doesn't differ symbol from string and always sue string
120   "test_data2" => [ 5,6], #number test
121 #  "test4" => [ true,false], # boolean doesn't work https://rails.lighthouseapp.com/projects/8994/tickets/5036-activeresource-load-problem-with-array-of-booleans#ticket-5036-1
122   "test_data3" => { "a" => "b","c"=> "d" }, 
123   "test_escapes" => "<arg>/&\\test",
124   "test_hash" => [{"a"=>"a"},{"b"=>"b"}]
125 }
126
127   def test_xml_serialization
128     test= Test.new(MASS_DATA)
129     test.carg = COMPLEX_DATA
130     test.arg1 = TestSerializeItself.new
131     xml = test.to_xml
132     assert xml
133     ActiveResource::HttpMock.respond_to do |mock|
134       mock.get "test.xml",{},xml,200
135     end
136     TestClient.format = ActiveResource::Formats::XmlFormat
137     test2 = TestClient.find :one, :from => "test.xml"
138     assert_equal "lest", test2.arg1.test
139     assert_equal "5", test2.arg2
140     assert_equal COMPLEX_DATA["test_data"], test2.carg.test_data
141     assert_equal COMPLEX_DATA["test_data2"], test2.carg.test_data2
142     assert_equal COMPLEX_DATA["test_data3"]["a"], test2.carg.test_data3.a
143     assert_equal COMPLEX_DATA["test_escapes"], test2.carg.test_escapes
144     assert_equal COMPLEX_DATA["test_hash"][0]["a"], test2.carg.test_hash[0].a
145   end
146
147   def test_json_serialization
148     test= Test.new(MASS_DATA)
149     test.carg = COMPLEX_DATA
150     json = test.to_json
151     assert json
152     ActiveResource::HttpMock.respond_to do |mock|
153       mock.get "test.json",{},json,200
154     end
155     TestClient.format = :json
156     test2 = TestClient.find :one, :from => "test.json"
157     assert_equal "last", test2.arg1
158     assert_equal "5", test2.arg2
159     assert_equal COMPLEX_DATA["test_data"], test2.carg.test_data
160     assert_equal COMPLEX_DATA["test_data2"], test2.carg.test_data2
161     assert_equal COMPLEX_DATA["test_data3"]["a"], test2.carg.test_data3.a
162     assert_equal COMPLEX_DATA["test_escapes"], test2.carg.test_escapes
163     assert_equal COMPLEX_DATA["test_hash"][0]["a"], test2.carg.test_hash[0].a
164   end
165
166   def test_attr_serializable
167     test = Test3.new
168     test.arg1 = "dev"
169     test.arg2 = "null"
170     xml = test.to_xml
171     assert xml
172     ActiveResource::HttpMock.respond_to do |mock|
173       mock.get "test.xml",{},xml,200
174     end
175     TestClient.format = ActiveResource::Formats::XmlFormat
176     test2 = TestClient.find :one, :from => "test.xml"
177     assert_equal "dev",test2.arg1
178     assert !test2.respond_to?(:arg2)
179     test = Test3.new
180     test.arg1 = "dev"
181     test.arg2 = "null"
182     json = test.to_json
183     assert json
184     test2 = Test3.new
185     test2.from_json json
186     assert_equal "dev",test2.arg1
187     assert_nil test2.arg2
188   end
189 end