talia_core 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (119) hide show
  1. data/README.rdoc +41 -0
  2. data/bin/talia +33 -0
  3. data/lib/JXslt/jxslt.rb +60 -0
  4. data/lib/acts_as_roled.rb +11 -0
  5. data/lib/core_ext/platform.rb +9 -0
  6. data/lib/core_ext/string.rb +6 -0
  7. data/lib/core_ext.rb +1 -0
  8. data/lib/custom_template.rb +4 -0
  9. data/lib/loader_helper.rb +62 -0
  10. data/lib/mysql.rb +1214 -0
  11. data/lib/progressbar.rb +236 -0
  12. data/lib/role.rb +12 -0
  13. data/lib/talia_cl/command_line.rb +39 -0
  14. data/lib/talia_cl/commands/standalone/cl_options.rb +9 -0
  15. data/lib/talia_cl/commands/standalone/standalone_generate.rb +75 -0
  16. data/lib/talia_cl/commands/standalone.rb +25 -0
  17. data/lib/talia_cl/commands/talia_console/cl_options.rb +55 -0
  18. data/lib/talia_cl/commands/talia_console/console_commands.rb +37 -0
  19. data/lib/talia_cl/commands/talia_console/talia_commands.rb +131 -0
  20. data/lib/talia_cl/commands/talia_console.rb +47 -0
  21. data/lib/talia_cl/core_commands.rb +11 -0
  22. data/lib/talia_cl.rb +47 -0
  23. data/lib/talia_core/active_source.rb +372 -0
  24. data/lib/talia_core/active_source_parts/class_methods.rb +378 -0
  25. data/lib/talia_core/active_source_parts/predicate_handler.rb +89 -0
  26. data/lib/talia_core/active_source_parts/rdf.rb +131 -0
  27. data/lib/talia_core/active_source_parts/sql_helper.rb +36 -0
  28. data/lib/talia_core/active_source_parts/xml/base_builder.rb +47 -0
  29. data/lib/talia_core/active_source_parts/xml/generic_reader.rb +363 -0
  30. data/lib/talia_core/active_source_parts/xml/rdf_builder.rb +88 -0
  31. data/lib/talia_core/active_source_parts/xml/source_builder.rb +73 -0
  32. data/lib/talia_core/active_source_parts/xml/source_reader.rb +20 -0
  33. data/lib/talia_core/agent.rb +14 -0
  34. data/lib/talia_core/background_jobs/job.rb +82 -0
  35. data/lib/talia_core/background_jobs/progress_job.rb +68 -0
  36. data/lib/talia_core/collection.rb +13 -0
  37. data/lib/talia_core/data_types/data_loader.rb +92 -0
  38. data/lib/talia_core/data_types/data_record.rb +105 -0
  39. data/lib/talia_core/data_types/delayed_copier.rb +76 -0
  40. data/lib/talia_core/data_types/file_record.rb +59 -0
  41. data/lib/talia_core/data_types/file_store.rb +306 -0
  42. data/lib/talia_core/data_types/iip_data.rb +153 -0
  43. data/lib/talia_core/data_types/iip_loader.rb +127 -0
  44. data/lib/talia_core/data_types/image_data.rb +32 -0
  45. data/lib/talia_core/data_types/media_link.rb +19 -0
  46. data/lib/talia_core/data_types/mime_mapping.rb +45 -0
  47. data/lib/talia_core/data_types/path_helpers.rb +77 -0
  48. data/lib/talia_core/data_types/pdf_data.rb +42 -0
  49. data/lib/talia_core/data_types/simple_text.rb +36 -0
  50. data/lib/talia_core/data_types/temp_file_handling.rb +85 -0
  51. data/lib/talia_core/data_types/xml_data.rb +169 -0
  52. data/lib/talia_core/dc_resource.rb +20 -0
  53. data/lib/talia_core/dummy_handler.rb +34 -0
  54. data/lib/talia_core/dummy_source.rb +20 -0
  55. data/lib/talia_core/errors.rb +25 -0
  56. data/lib/talia_core/initializer.rb +427 -0
  57. data/lib/talia_core/ordered_source.rb +228 -0
  58. data/lib/talia_core/rails_ext/actionpack/action_controller/record_identifier.rb +13 -0
  59. data/lib/talia_core/rails_ext/actionpack/action_controller.rb +1 -0
  60. data/lib/talia_core/rails_ext/actionpack.rb +1 -0
  61. data/lib/talia_core/rails_ext.rb +1 -0
  62. data/lib/talia_core/rdf_import.rb +90 -0
  63. data/lib/talia_core/rdf_resource.rb +159 -0
  64. data/lib/talia_core/semantic_collection_item.rb +93 -0
  65. data/lib/talia_core/semantic_collection_wrapper.rb +324 -0
  66. data/lib/talia_core/semantic_property.rb +7 -0
  67. data/lib/talia_core/semantic_relation.rb +67 -0
  68. data/lib/talia_core/source.rb +323 -0
  69. data/lib/talia_core/source_transfer_object.rb +38 -0
  70. data/lib/talia_core/workflow/base.rb +15 -0
  71. data/lib/talia_core/workflow/publication_workflow.rb +62 -0
  72. data/lib/talia_core/workflow.rb +300 -0
  73. data/lib/talia_core.rb +9 -0
  74. data/lib/talia_dependencies.rb +12 -0
  75. data/lib/talia_util/bar_progressor.rb +15 -0
  76. data/lib/talia_util/configuration/config_file.rb +48 -0
  77. data/lib/talia_util/configuration/database_config.rb +40 -0
  78. data/lib/talia_util/configuration/mysql_database_setup.rb +104 -0
  79. data/lib/talia_util/data_import.rb +91 -0
  80. data/lib/talia_util/image_conversions.rb +82 -0
  81. data/lib/talia_util/import_job_helper.rb +132 -0
  82. data/lib/talia_util/io_helper.rb +54 -0
  83. data/lib/talia_util/progressable.rb +38 -0
  84. data/lib/talia_util/progressbar.rb +236 -0
  85. data/lib/talia_util/rdf_update.rb +80 -0
  86. data/lib/talia_util/some_sigla.xml +1960 -0
  87. data/lib/talia_util/test_helpers.rb +151 -0
  88. data/lib/talia_util/util.rb +226 -0
  89. data/lib/talia_util/yaml_import.rb +80 -0
  90. data/lib/talia_util.rb +13 -0
  91. data/lib/user.rb +116 -0
  92. data/lib/version.rb +15 -0
  93. data/test/core_ext/string_test.rb +11 -0
  94. data/test/custom_template_test.rb +8 -0
  95. data/test/talia_core/active_source_predicate_test.rb +54 -0
  96. data/test/talia_core/active_source_rdf_test.rb +89 -0
  97. data/test/talia_core/active_source_test.rb +631 -0
  98. data/test/talia_core/data_types/data_loader_test.rb +123 -0
  99. data/test/talia_core/data_types/data_record_test.rb +40 -0
  100. data/test/talia_core/data_types/file_record_test.rb +171 -0
  101. data/test/talia_core/data_types/iip_data_test.rb +130 -0
  102. data/test/talia_core/data_types/image_data_test.rb +88 -0
  103. data/test/talia_core/data_types/pdf_data_test.rb +68 -0
  104. data/test/talia_core/data_types/xml_data_test.rb +134 -0
  105. data/test/talia_core/generic_xml_test.rb +83 -0
  106. data/test/talia_core/initializer_test.rb +36 -0
  107. data/test/talia_core/ordered_source_test.rb +398 -0
  108. data/test/talia_core/rdf_resource_test.rb +115 -0
  109. data/test/talia_core/semantic_collection_item_test.rb +129 -0
  110. data/test/talia_core/source_reader_test.rb +33 -0
  111. data/test/talia_core/source_test.rb +484 -0
  112. data/test/talia_core/source_transfer_object_test.rb +24 -0
  113. data/test/talia_core/workflow/publication_workflow_test.rb +242 -0
  114. data/test/talia_core/workflow/user_class_for_workflow.rb +35 -0
  115. data/test/talia_core/workflow/workflow_base_test.rb +21 -0
  116. data/test/talia_core/workflow_test.rb +19 -0
  117. data/test/talia_util/import_job_helper_test.rb +46 -0
  118. data/test/test_helper.rb +68 -0
  119. metadata +262 -0
@@ -0,0 +1,484 @@
1
+ require 'test/unit'
2
+
3
+ # Load the helper class
4
+ require File.join(File.dirname(__FILE__), '..', 'test_helper')
5
+
6
+ module TaliaCore
7
+
8
+ # class Source
9
+ # def instantiate_source_or_rdf_object # Need since class may be loaded later
10
+ # end
11
+ #
12
+ # public :instantiate_source_or_rdf_object
13
+ # end
14
+
15
+ # Test the SourceType class
16
+ class SourceTest < Test::Unit::TestCase
17
+
18
+ N::Namespace.shortcut(:meetest, "http://www.meetest.org/me/")
19
+ N::URI.shortcut(:test_uri, "http://www.testuri.com/bar")
20
+ N::Predicate.shortcut(:test_predicate, "http://www.meetest.org/my_predicate")
21
+ N::Namespace.shortcut(:foafx, "http://www.foafx.org/")
22
+ N::Namespace.shortcut(:foo, "http://foo.com/") unless(N::URI.shortcut_exists?(:foo))
23
+
24
+ def setup
25
+ @predicates_attributes = [
26
+ {"name"=>"type", "uri"=>"http://www.w3.org/2000/01/rdf-schema#Resource", "namespace"=>"rdf", "titleized"=>"Resource", "should_destroy" => ""},
27
+ {"name"=>"type", "uri"=>"http://xmlns.com/foaf/0.1/Group", "should_destroy"=>"", "namespace"=>"rdf", "id"=>"Group", "titleized"=>"Group", "should_destroy" => ""}]
28
+
29
+ @params = {"uri"=>"#{N::LOCAL}Guinigi_family", "predicates_attributes"=>@predicates_attributes }
30
+
31
+ setup_once(:flush) do
32
+ TaliaUtil::Util.flush_rdf
33
+ TaliaUtil::Util.flush_db
34
+ true
35
+ end
36
+
37
+ setup_once(:test_source) do
38
+ Source.new("http://www.test.org/test/")
39
+ end
40
+
41
+ setup_once(:valid_source) do
42
+ valid_source = Source.new("http://www.test.org/valid")
43
+ valid_source.primary_source = false
44
+ valid_source.save!
45
+ valid_source
46
+ end
47
+ assert(Source::exists?(@valid_source.uri))
48
+
49
+ setup_once(:local_source) do
50
+ local_source = Source.new(N::LOCAL + "home_source")
51
+ local_source.primary_source = false
52
+ local_source.save!
53
+ local_source
54
+ end
55
+
56
+ setup_once(:dummy_sources) do
57
+ (1..3).each do |n|
58
+ src = Source.new("http://www.typedthing.com/element#{n}")
59
+ src.primary_source = false
60
+ type = ActiveSource.new("http://www.interestingrelations.org/book")
61
+ type.save!
62
+ src.types << type
63
+ src.save!
64
+ end
65
+ end
66
+
67
+ setup_once(:test_type) do
68
+ type = ActiveSource.new('http://www.type.test/the_type')
69
+ type.save!
70
+ type
71
+ end
72
+ end
73
+
74
+
75
+ # Check that no .uri method got added to the String class
76
+ def test_string_sanity
77
+ assert(!'foo'.respond_to?(:uri), "Someone added an 'uri' method to the String class. This will cause problems.")
78
+ end
79
+
80
+ def test_created_helper
81
+ assert(Source.exists?("http://www.typedthing.com/element1"))
82
+ end
83
+
84
+ # Test if a source object can be created correctly with no type information
85
+ def test_create_typeless
86
+ # rec = SourceRecord.new
87
+ source = Source.new("http://www.newstuff.org/my_nuff")
88
+ assert_not_nil(source)
89
+ assert_equal(0, source.types.size)
90
+ end
91
+
92
+ # Test if a source object can be created correctly
93
+ def test_types
94
+ # rec = SourceRecord.new
95
+ source = make_dummy_source("http://www.newstuff.org/createtypes", N::FOAFX.Person, N::FOAFX.Foe)
96
+ assert_not_nil(source)
97
+ assert_equal(2, source.types.size)
98
+ assert_not_nil(source.types.each { |type| type.to_s == N::FOAFX.Person.to_s} )
99
+ end
100
+
101
+ # test grouping by types
102
+ def test_grouping
103
+ make_dummy_source("http://groupme/source1", N::FOAFX.Goat, N::FOAFX.Bee)
104
+ make_dummy_source("http://groupme/source2", N::FOAFX.Goat)
105
+ make_dummy_source("http://groupme/source3", N::FOAFX.Bee)
106
+ results = Source.groups_by_property(:type, [ N::FOAFX.Goat, N::FOAFX.Bee ])
107
+ assert_equal(2, results.size)
108
+ assert_equal(2, results[N::FOAFX.Goat].size)
109
+ assert_equal(2, results[N::FOAFX.Bee].size)
110
+ end
111
+
112
+ # Tests if the ActiveRecord validation works
113
+ def test_ar_validation
114
+ source = Source.new("http://www.newstuff.org/my_first")
115
+ assert(!Source.exists?(source.uri))
116
+ source.primary_source = false
117
+ errors = ""
118
+ assert(source.valid?, source.errors.each_full() { |msg| errors += ":" + msg })
119
+
120
+ # Now check if the uri validation works
121
+ source.uri = "foobar"
122
+ assert(!source.valid?)
123
+ source.uri = "foo:bar"
124
+ assert(source.valid?)
125
+ end
126
+
127
+ # Test load/save for active record
128
+ def test_save_with_workflow
129
+ @valid_source.workflow = Workflow::PublicationWorkflow.new
130
+ @valid_source.save!
131
+ assert(Source.exists?(@valid_source.uri))
132
+ assert_kind_of(Workflow::PublicationWorkflow, Source.new(@valid_source.uri).workflow)
133
+ end
134
+
135
+ # Check loading of Elements
136
+ def test_load
137
+ @valid_source.save
138
+ source_loaded = Source.find(@valid_source.uri)
139
+ assert_kind_of(Source, source_loaded)
140
+ assert_equal(@valid_source.primary_source, source_loaded.primary_source)
141
+ assert_equal(@valid_source.uri, source_loaded.uri)
142
+ end
143
+
144
+ # Load change, and save
145
+ def test_load_save
146
+ @valid_source.save
147
+ source_loaded = Source.find(@valid_source.uri)
148
+ source_loaded['http://loadsavetest/name'] << '4'
149
+ source_loaded.save
150
+
151
+ source_reloaded = Source.find(@valid_source.uri)
152
+ assert_equal('4', source_reloaded['http://loadsavetest/name'][0])
153
+ end
154
+
155
+ # Check if load failure is raised correctly
156
+ def test_load_failure
157
+ # Check for load failure
158
+ assert_raises(ActiveRecord::RecordNotFound) { Source.find("xxxx") }
159
+ end
160
+
161
+ # Direct RDF property
162
+ def test_rdf_direct_property
163
+ @valid_source.default::test_predicate << "moofoo"
164
+ assert_equal(@valid_source.default::test_predicate[0], "moofoo")
165
+ assert_equal(1, @valid_source.default::test_predicate.size)
166
+ end
167
+
168
+ # Namespaced RDF property
169
+ def test_rdf_namespace_property
170
+ @valid_source.meetest::something << "somefoo"
171
+ assert_equal(@valid_source.meetest::something[0], "somefoo")
172
+ end
173
+
174
+ # Check disallowed cases for RDF
175
+ def test_rdf_fail
176
+ assert_raise(ArgumentError) { @valid_source.test_predicate("foo") }
177
+ end
178
+
179
+ # Relation properties
180
+ def test_relations
181
+ @valid_source.default::rel_it << Source.new("http://foobar.com/")
182
+ assert_kind_of(SemanticCollectionWrapper, @valid_source.default::rel_it)
183
+ assert_kind_of(Source, @valid_source.default::rel_it[0])
184
+ assert_equal("http://foobar.com/", @valid_source.default::rel_it[0].uri.to_s)
185
+ end
186
+
187
+ # RDF load and save
188
+ def test_rdf_save_load
189
+ @valid_source.default::hero << "napoleon"
190
+ @valid_source.save
191
+ loaded = Source.find(@valid_source.uri)
192
+ assert_equal("napoleon", loaded.default::hero[0])
193
+ end
194
+
195
+ # Test limit
196
+ def test_find_limit
197
+ result = Source.find(:all, :limit => 2)
198
+ assert_equal(2, result.size)
199
+ end
200
+
201
+ def test_find_or_instantiate_by_uri
202
+ unexistent = Source.find_or_instantiate_by_uri('unexistent', 'Foo Bar')
203
+ assert unexistent.new_record?
204
+ assert_equal N::LOCAL.to_s + 'Foo_Bar', unexistent.uri.to_s
205
+ assert !Source.find_or_instantiate_by_uri(@valid_source.uri.to_s, nil).new_record?
206
+ end
207
+
208
+ def test_should_return_a_list_of_sources_for_given_uri_token
209
+ assert_not_empty Source.find_by_uri_token('1') # source1 fixture
210
+ assert_empty Source.find_by_uri_token('org')
211
+ end
212
+
213
+ def test_new_record
214
+ assert Source.new('nu').new_record?
215
+ assert_not Source.find(:first).new_record?
216
+ end
217
+
218
+ def test_find_with_local_name
219
+ assert_nothing_raised ActiveRecord::RecordNotFound do
220
+ assert Source.find('home_source')
221
+ end
222
+ end
223
+
224
+ # Test the xml create
225
+ def test_create_xml
226
+ # TODO: Make a real test when it's worth it
227
+ source = Source.new("http://www.newstuff.org/my_first")
228
+ source.types << @test_type
229
+ source.primary_source = false
230
+ source.save!
231
+ source.default::author << "napoleon"
232
+ source.save!
233
+ print source.to_xml
234
+ print source.to_rdf # also check rdf
235
+ end
236
+
237
+ # Test for direct predicates
238
+ def test_direct_predicates
239
+ my_source = make_dummy_source("http://direct_predicate_haver/")
240
+ my_source.default::author << "napoleon"
241
+ my_source.save!
242
+
243
+ # Expected size of direct predicates: One for the predicate set above
244
+ # and one for the default type
245
+ assert_equal(2, my_source.direct_predicates.size)
246
+ assert(my_source.direct_predicates.include?(N::DEFAULT::author))
247
+ end
248
+
249
+ # Test for inverse predicates
250
+ def test_inverse_predicates
251
+ source = make_dummy_source("http://predicate_source/")
252
+ target = make_dummy_source("http://predicate_target/")
253
+ target.save!
254
+ source.foo::invtest << target
255
+ source.save!
256
+ assert(target.inverse_predicates.size > 0, "No inverse predicates")
257
+ assert(target.inverse_predicates.include?(N::FOO::invtest), "Inverse predicate not found.")
258
+ end
259
+
260
+ # Test the Array accessor
261
+ def test_array_accessor
262
+ @valid_source[N::MEETEST::array_test] << "foo"
263
+ assert_equal(@valid_source[N::MEETEST::array_test], @valid_source.meetest::array_test)
264
+ assert_equal("foo", @valid_source[N::MEETEST::array_test][0])
265
+ end
266
+
267
+ def test_grouped_direct_predicates_should_collect_rdf_objects
268
+ source = make_dummy_source("http://direct_predicate_for_napoleon/")
269
+ source.default::historical_character << Source.new("#{N::LOCAL}napoleon")
270
+ source.default::historical_character << "Giuseppe Garibaldi"
271
+
272
+ source.save!
273
+
274
+ assert_equal(2, source.grouped_direct_predicates.size)
275
+ predicates = source.grouped_direct_predicates['default']
276
+ predicates.each do |group, source_list|
277
+ source_list.flatten.each do |source|
278
+ assert_kind_of(SourceTransferObject, source)
279
+ end
280
+ end
281
+ assert_included predicates.keys, 'historical_character'
282
+ end
283
+
284
+ def test_predicate_objects
285
+ source = make_dummy_source("http://star-wars.org/")
286
+ source.default::jedi_knight << Source.new("http://star-wars.org/luke-skywalker")
287
+ source.default::jedi_knight << "Obi-Wan Kenobi"
288
+
289
+ assert_included source.predicate_objects('default', 'jedi_knight'), "http://star-wars.org/luke-skywalker"
290
+ assert_included source.predicate_objects('default', 'jedi_knight'), "Obi-Wan Kenobi"
291
+ end
292
+
293
+ def test_associated
294
+ source = make_dummy_source("http://star-wars.org/")
295
+ associated_source = Source.new("http://star-wars.org/luke-skywalker")
296
+ source.default::jedi_knight << associated_source
297
+ assert(source.associated?('default', 'jedi_knight', associated_source.to_s))
298
+ end
299
+
300
+ def test_predicates_attributes_setter
301
+ source = make_dummy_source("http://lucca.org/")
302
+ source.predicates_attributes = @predicates_attributes
303
+
304
+ assert_equal("http://www.w3.org/2000/01/rdf-schema#Resource", source.predicates_attributes.first['uri'])
305
+ assert_equal('rdf', source.predicates_attributes.first['namespace'])
306
+ assert_equal('Resource', source.predicates_attributes.first['titleized'])
307
+ assert_kind_of(Source, source.predicates_attributes.first['object'])
308
+ end
309
+
310
+ # def test_save_predicates_attributes
311
+ # source = create_source('http://star-warz.org/')
312
+ # @predicates_attributes[1] = @predicates_attributes[1].merge({'should_destroy' => '1'})
313
+ # @predicates_attributes << {"name"=>"in_epoch", "uri"=> N::LOCAL.to_s, "should_destroy"=>"", "namespace"=>"talia", "id"=>"", "titleized"=>"Paolo Guinigi"}
314
+ # source.predicates_attributes = @predicates_attributes
315
+ # source.save_predicates_attributes
316
+ #
317
+ # assert_source_exists "#{N::LOCAL}Paolo_Guinigi"
318
+ # source = create_source('http://star-warz.org/') # force the source reload
319
+ # # Expected size is equal to 5, because @predicates_attributes
320
+ # # contains 6 sources, but 1 is marked for destroy.
321
+ # assert_equal(2, source.direct_predicates_objects.size)
322
+ # end
323
+
324
+ def test_normalize_uri
325
+ assert_equal("#{N::LOCAL}LocalSource", Source.normalize_uri(N::LOCAL.to_s, 'LocalSource'))
326
+ assert_equal("#{N::LOCAL}Local_Source", Source.normalize_uri(N::LOCAL.to_s, 'Local Source'))
327
+ assert_equal("http://star-wars.org/obi-wan-kenobi", Source.normalize_uri('http://star-wars.org/obi-wan-kenobi').to_s)
328
+ end
329
+
330
+ def test_extract_attributes
331
+ source = make_dummy_source("http://star-wars.org/")
332
+ attributes, rdf_attributes = source.send(:extract_attributes!, @params)
333
+
334
+ assert_equal(%w( uri ), attributes.keys)
335
+ rdf_attributes['predicates_attributes'].each do |attributes_hash|
336
+ assert_kind_of Hash, attributes_hash
337
+ end
338
+ end
339
+
340
+ def test_instantiate_source_or_rdf_object
341
+ source = make_dummy_source("http://springfield.org/")
342
+
343
+ attributes = { 'uri' => N::LOCAL.to_s, 'titleized' => 'Homer Simpson', 'source' => 'true' }
344
+ result = source.send :instantiate_source_or_rdf_object, attributes
345
+ assert_kind_of(Source, result)
346
+ assert_equal("#{N::LOCAL}Homer_Simpson", result.to_s)
347
+
348
+ attributes.merge!('titleized' => %("Homer Simpson"))
349
+ result = source.send :instantiate_source_or_rdf_object, attributes
350
+ assert_equal(%(Homer Simpson), result)
351
+
352
+ attributes.merge!('titleized' => "http://springfield.org/Homer_Simpson")
353
+ result = source.send :instantiate_source_or_rdf_object, attributes
354
+ assert_kind_of(Source, result)
355
+ assert_equal("http://springfield.org/Homer_Simpson", result.to_s)
356
+
357
+ attributes.merge!('titleized' => "Homer Simpson", 'uri' => nil, 'source' => nil)
358
+ result = source.send :instantiate_source_or_rdf_object, attributes
359
+ assert_equal(%(Homer Simpson), result)
360
+ end
361
+
362
+ def test_each_predicate
363
+ source = make_dummy_source("http://star-wars.org/")
364
+ source.predicates_attributes = @predicates_attributes
365
+
366
+ source.send(:each_predicate) do |namespace, predicate, objects|
367
+ assert_kind_of(String, namespace)
368
+ assert_kind_of(String, predicate)
369
+ assert_not_empty objects
370
+ objects.each { |object| assert_kind_of(TaliaCore::SourceTransferObject, object) }
371
+ end
372
+ end
373
+
374
+ # Read an db attribute by symbol
375
+ def test_read_access_db_symbol
376
+ source = Source.new('http://localnode.org/something')
377
+ attribute_value = source[:uri]
378
+ assert_equal('http://localnode.org/something', attribute_value)
379
+ end
380
+
381
+ # Write an db attribute by symbol
382
+ def test_write_access_db_symbol
383
+ source = Source.new('http://localnode.org/something')
384
+ source[:uri] = "http://somethingelse.com/"
385
+ assert_equal(source.uri.to_s, "http://somethingelse.com/")
386
+ end
387
+
388
+ # Read the uri
389
+ def test_access_db_string
390
+ source = Source.new('http://localnode.org/something')
391
+ attribute_value = source.uri
392
+ assert_not_nil(attribute_value)
393
+ assert_kind_of(N::URI, attribute_value)
394
+ assert_equal('http://localnode.org/something', attribute_value.to_s)
395
+ end
396
+
397
+ # Write an db attribute by string
398
+ def test_write_access_db_symbol
399
+ source = Source.new('http://localnode.org/something')
400
+ source['uri'] = "http://somethingelse.com/"
401
+ assert_equal(source.uri.to_s, "http://somethingelse.com/")
402
+ end
403
+
404
+ # Test the predicate accessor
405
+ def test_predicate_accessor
406
+ assert(@valid_source.predicate_set(:meetest, "array_test_acc", "bla"))
407
+ assert_equal(@valid_source.predicate(:meetest, "array_test_acc"), @valid_source.meetest::array_test_acc)
408
+ assert_equal("bla", @valid_source.predicate(:meetest, "array_test_acc")[0])
409
+ end
410
+
411
+ # Test for non-existing predicates
412
+ def test_nonexistent_predicate
413
+ assert_raises(ArgumentError) { @valid_source.predicate(:idontexist, "something") }
414
+ end
415
+
416
+ def test_titleized
417
+ assert_equal("Home Source", @local_source.titleized)
418
+ end
419
+
420
+ # Test find :first
421
+ def test_find_first
422
+ source = Source.find(:first)
423
+ assert_kind_of(Source, source)
424
+ end
425
+
426
+ # Test the inverse accessor
427
+ def test_inverse
428
+ origin = make_dummy_source("http://inversetest.com/originating")
429
+ origin2 = make_dummy_source("http://inversetest.com/originating2")
430
+ target = make_dummy_source("http://inversetest.com/target")
431
+
432
+
433
+ origin.foo::my_friend << target
434
+ origin.foo::coworker << target
435
+ origin2.foo::my_friend << target
436
+
437
+ origin.save!
438
+ origin2.save!
439
+ target.save!
440
+
441
+
442
+ inverted = target.inverse[N::FOO::coworker]
443
+ assert_equal(1, inverted.size)
444
+ assert_equal(origin.uri, inverted[0].uri)
445
+
446
+ # Crosscheck
447
+ assert_equal(2, target.inverse[N::FOO::my_friend].size)
448
+ end
449
+
450
+ # Test if the save method/db dupes wipes any rdf data
451
+ def test_rdf_safe
452
+ safe = make_dummy_source("http://safehaven.com")
453
+ safe.foo::some_property << "I should be safe!"
454
+ safe.save!
455
+ assert_equal("I should be safe!", safe.foo::some_property[0])
456
+ end
457
+
458
+ # Test foreign Source
459
+ def test_foreign
460
+ foreign = Source.new("http://www.hypernietzsche.org/ontology/Dossier")
461
+ assert_kind_of(Source, foreign)
462
+ assert(!foreign.local)
463
+ end
464
+
465
+ # Test equality
466
+ def test_equals
467
+ new_src = Source.new(@test_source.uri)
468
+ assert_equal(new_src, @test_source)
469
+ assert_not_same(new_src, @test_source)
470
+ end
471
+
472
+ def test_assign_object
473
+ assert(!ActiveSource.exists?(uri = 'http://assignobject_source'))
474
+ src = Source.new(uri)
475
+ src.rdfs::something << Source.new(uri + '_target')
476
+ src.save!
477
+ assert(ActiveSource.exists?(uri))
478
+ assert(ActiveSource.exists?(uri + '_target'))
479
+ end
480
+
481
+
482
+ end
483
+ end
484
+
@@ -0,0 +1,24 @@
1
+ require 'test/unit'
2
+ require File.join(File.dirname(__FILE__), '..', 'test_helper')
3
+
4
+ module TaliaCore
5
+ class SourceTransferObjectTest < Test::Unit::TestCase
6
+ def test_with_uri
7
+ s = SourceTransferObject.new("#{N::LOCAL}Homer_Simpson")
8
+ assert_equal('Homer Simpson', s.titleized)
9
+ assert_equal('Homer_Simpson', s.id)
10
+ assert_equal("#{N::LOCAL}Homer_Simpson", s.to_s)
11
+ assert_equal("#{N::LOCAL}Homer_Simpson", s.uri.to_s)
12
+ assert s.source?
13
+ end
14
+
15
+ def test_with_string
16
+ s = SourceTransferObject.new('Homer Simpson')
17
+ assert_equal('Homer Simpson', s.titleized)
18
+ assert_equal('Homer Simpson', s.to_s)
19
+ assert_equal('Homer Simpson', s.id)
20
+ assert_nil(s.uri)
21
+ assert_not s.source?
22
+ end
23
+ end
24
+ end