advertnet 1.0.0

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 (159) hide show
  1. data/LICENSE +674 -0
  2. data/README +257 -0
  3. data/Rakefile +10 -0
  4. data/app/controllers/application.rb +40 -0
  5. data/app/controllers/container_controller.rb +83 -0
  6. data/app/controllers/content_controller.rb +61 -0
  7. data/app/controllers/furnitures_controller.rb +87 -0
  8. data/app/controllers/networks_controller.rb +269 -0
  9. data/app/controllers/objects_in_world_controller.rb +27 -0
  10. data/app/controllers/panels_controller.rb +186 -0
  11. data/app/helpers/application_helper.rb +31 -0
  12. data/app/helpers/container_helper.rb +2 -0
  13. data/app/helpers/content_helper.rb +2 -0
  14. data/app/helpers/furnitures_helper.rb +2 -0
  15. data/app/helpers/network_helper.rb +2 -0
  16. data/app/helpers/networks_helper.rb +2 -0
  17. data/app/helpers/objects_in_world_helper.rb +2 -0
  18. data/app/helpers/panels_helper.rb +2 -0
  19. data/app/models/container.rb +51 -0
  20. data/app/models/furniture.rb +60 -0
  21. data/app/models/mailer.rb +22 -0
  22. data/app/models/network.rb +38 -0
  23. data/app/models/object_in_world.rb +60 -0
  24. data/app/models/object_off_world.rb +77 -0
  25. data/app/models/panel.rb +136 -0
  26. data/app/models/panel_revision.rb +108 -0
  27. data/app/views/container/list.rhtml +27 -0
  28. data/app/views/container/show.rhtml +8 -0
  29. data/app/views/content/_form.rhtml +12 -0
  30. data/app/views/content/edit.rhtml +8 -0
  31. data/app/views/content/list.rhtml +26 -0
  32. data/app/views/content/new.rhtml +8 -0
  33. data/app/views/furnitures/list.rhtml +51 -0
  34. data/app/views/furnitures/show.rhtml +7 -0
  35. data/app/views/layouts/default.rhtml +30 -0
  36. data/app/views/mailer/avtouch.rhtml +1 -0
  37. data/app/views/networks/_form.rhtml +11 -0
  38. data/app/views/networks/_parameters_form.rhtml +8 -0
  39. data/app/views/networks/edit.rhtml +9 -0
  40. data/app/views/networks/list.rhtml +25 -0
  41. data/app/views/networks/new.rhtml +8 -0
  42. data/app/views/networks/show.rhtml +72 -0
  43. data/app/views/networks/show_parameters_form.rjs +5 -0
  44. data/app/views/objects_in_world/list.rhtml +30 -0
  45. data/app/views/objects_in_world/show.rhtml +8 -0
  46. data/app/views/panels/list.rhtml +48 -0
  47. data/app/views/panels/show.rhtml +8 -0
  48. data/bin/advertnet-install +144 -0
  49. data/config/boot.rb +45 -0
  50. data/config/database.yml.default +43 -0
  51. data/config/environment.rb +67 -0
  52. data/config/environments/development.rb +21 -0
  53. data/config/environments/production.rb +21 -0
  54. data/config/environments/test.rb +19 -0
  55. data/config/routes.rb +23 -0
  56. data/db/migrate/001_create_networks.rb +14 -0
  57. data/db/migrate/002_create_furnitures.rb +17 -0
  58. data/db/migrate/003_create_containers.rb +16 -0
  59. data/db/migrate/004_create_objects_in_world.rb +16 -0
  60. data/db/migrate/005_create_objects_off_world.rb +16 -0
  61. data/db/migrate/006_create_panels.rb +17 -0
  62. data/db/migrate/007_join_objects_in_world_panels.rb +17 -0
  63. data/db/migrate/008_join_objects_off_world_panels.rb +17 -0
  64. data/db/migrate/009_add_sessions.rb +19 -0
  65. data/db/migrate/010_add_or_rename_fields.rb +25 -0
  66. data/db/migrate/011_move_texture_to_object_in_world.rb +25 -0
  67. data/db/migrate/012_add_permanent_furniture_id.rb +18 -0
  68. data/db/migrate/013_create_panel_revisions.rb +42 -0
  69. data/db/schema.rb +102 -0
  70. data/doc/README_FOR_APP +108 -0
  71. data/lib/advertnet.rb +13 -0
  72. data/lib/second_life_validators.rb +89 -0
  73. data/lib/tasks/documentation.rake +16 -0
  74. data/lib/tasks/extract_fixtures.rake +23 -0
  75. data/lib/tasks/load_exported_fixtures.rake +14 -0
  76. data/public/404.html +30 -0
  77. data/public/500.html +30 -0
  78. data/public/dispatch.cgi +10 -0
  79. data/public/dispatch.fcgi +24 -0
  80. data/public/dispatch.rb +10 -0
  81. data/public/favicon.ico +0 -0
  82. data/public/images/rails.png +0 -0
  83. data/public/javascripts/application.js +2 -0
  84. data/public/javascripts/controls.js +833 -0
  85. data/public/javascripts/dragdrop.js +942 -0
  86. data/public/javascripts/effects.js +1088 -0
  87. data/public/javascripts/prototype.js +2515 -0
  88. data/public/robots.txt +1 -0
  89. data/public/stylesheets/application.css +25 -0
  90. data/public/stylesheets/scaffold.css +74 -0
  91. data/script/about +3 -0
  92. data/script/breakpointer +3 -0
  93. data/script/console +3 -0
  94. data/script/destroy +3 -0
  95. data/script/generate +3 -0
  96. data/script/performance/benchmarker +3 -0
  97. data/script/performance/profiler +3 -0
  98. data/script/plugin +3 -0
  99. data/script/process/inspector +3 -0
  100. data/script/process/reaper +3 -0
  101. data/script/process/spawner +3 -0
  102. data/script/runner +3 -0
  103. data/script/server +3 -0
  104. data/test/fixtures/containers.yml +44 -0
  105. data/test/fixtures/furnitures.yml +47 -0
  106. data/test/fixtures/mailer/avtouch +1 -0
  107. data/test/fixtures/networks.yml +31 -0
  108. data/test/fixtures/objects_in_world.yml +71 -0
  109. data/test/fixtures/objects_in_world_panels.yml +43 -0
  110. data/test/fixtures/objects_off_world.yml +55 -0
  111. data/test/fixtures/objects_off_world_panels.yml +20 -0
  112. data/test/fixtures/panel_revisions.yml +28 -0
  113. data/test/fixtures/panels.yml +79 -0
  114. data/test/functional/container_controller_test.rb +167 -0
  115. data/test/functional/content_controller_test.rb +91 -0
  116. data/test/functional/furnitures_controller_test.rb +134 -0
  117. data/test/functional/networks_controller_test.rb +248 -0
  118. data/test/functional/objects_in_world_controller_test.rb +42 -0
  119. data/test/functional/panels_controller_test.rb +173 -0
  120. data/test/test_helper.rb +53 -0
  121. data/test/unit/container_test.rb +53 -0
  122. data/test/unit/furniture_test.rb +68 -0
  123. data/test/unit/mailer_test.rb +40 -0
  124. data/test/unit/network_test.rb +42 -0
  125. data/test/unit/object_in_world_test.rb +33 -0
  126. data/test/unit/object_off_world_test.rb +26 -0
  127. data/test/unit/panel_revision_test.rb +148 -0
  128. data/test/unit/panel_test.rb +63 -0
  129. data/vendor/plugins/annotate_models/ChangeLog +46 -0
  130. data/vendor/plugins/annotate_models/README +31 -0
  131. data/vendor/plugins/annotate_models/lib/annotate_models.rb +132 -0
  132. data/vendor/plugins/annotate_models/tasks/annotate_models_tasks.rake +7 -0
  133. data/vendor/plugins/foreign_key_migrations/CHANGELOG +99 -0
  134. data/vendor/plugins/foreign_key_migrations/MIT-LICENSE +20 -0
  135. data/vendor/plugins/foreign_key_migrations/README +87 -0
  136. data/vendor/plugins/foreign_key_migrations/about.yml +5 -0
  137. data/vendor/plugins/foreign_key_migrations/init.rb +3 -0
  138. data/vendor/plugins/foreign_key_migrations/install.rb +1 -0
  139. data/vendor/plugins/foreign_key_migrations/lib/red_hill_consulting/foreign_key_migrations/active_record/base.rb +22 -0
  140. data/vendor/plugins/foreign_key_migrations/lib/red_hill_consulting/foreign_key_migrations/active_record/connection_adapters/abstract_adapter.rb +22 -0
  141. data/vendor/plugins/foreign_key_migrations/lib/red_hill_consulting/foreign_key_migrations/active_record/connection_adapters/table_definition.rb +28 -0
  142. data/vendor/plugins/redhillonrails_core/CHANGELOG +154 -0
  143. data/vendor/plugins/redhillonrails_core/MIT-LICENSE +20 -0
  144. data/vendor/plugins/redhillonrails_core/README +139 -0
  145. data/vendor/plugins/redhillonrails_core/init.rb +19 -0
  146. data/vendor/plugins/redhillonrails_core/lib/red_hill_consulting/core/active_record/base.rb +54 -0
  147. data/vendor/plugins/redhillonrails_core/lib/red_hill_consulting/core/active_record/connection_adapters/abstract_adapter.rb +31 -0
  148. data/vendor/plugins/redhillonrails_core/lib/red_hill_consulting/core/active_record/connection_adapters/column.rb +21 -0
  149. data/vendor/plugins/redhillonrails_core/lib/red_hill_consulting/core/active_record/connection_adapters/foreign_key_definition.rb +26 -0
  150. data/vendor/plugins/redhillonrails_core/lib/red_hill_consulting/core/active_record/connection_adapters/index_definition.rb +11 -0
  151. data/vendor/plugins/redhillonrails_core/lib/red_hill_consulting/core/active_record/connection_adapters/mysql_adapter.rb +82 -0
  152. data/vendor/plugins/redhillonrails_core/lib/red_hill_consulting/core/active_record/connection_adapters/mysql_column.rb +8 -0
  153. data/vendor/plugins/redhillonrails_core/lib/red_hill_consulting/core/active_record/connection_adapters/postgresql_adapter.rb +107 -0
  154. data/vendor/plugins/redhillonrails_core/lib/red_hill_consulting/core/active_record/connection_adapters/schema_statements.rb +23 -0
  155. data/vendor/plugins/redhillonrails_core/lib/red_hill_consulting/core/active_record/connection_adapters/sqlite3_adapter.rb +9 -0
  156. data/vendor/plugins/redhillonrails_core/lib/red_hill_consulting/core/active_record/connection_adapters/table_definition.rb +27 -0
  157. data/vendor/plugins/redhillonrails_core/lib/red_hill_consulting/core/active_record/schema.rb +27 -0
  158. data/vendor/plugins/redhillonrails_core/lib/red_hill_consulting/core/active_record/schema_dumper.rb +47 -0
  159. metadata +290 -0
@@ -0,0 +1,53 @@
1
+ ENV["RAILS_ENV"] = "test"
2
+ require File.expand_path(File.dirname(__FILE__) + "/../config/environment")
3
+ require 'test_help'
4
+
5
+ class Test::Unit::TestCase
6
+ # Transactional fixtures accelerate your tests by wrapping each test method
7
+ # in a transaction that's rolled back on completion. This ensures that the
8
+ # test database remains unchanged so your fixtures don't have to be reloaded
9
+ # between every test method. Fewer database queries means faster tests.
10
+ #
11
+ # Read Mike Clark's excellent walkthrough at
12
+ # http://clarkware.com/cgi/blosxom/2005/10/24#Rails10FastTesting
13
+ #
14
+ # Every Active Record database supports transactions except MyISAM tables
15
+ # in MySQL. Turn off transactional fixtures in this case; however, if you
16
+ # don't care one way or the other, switching from MyISAM to InnoDB tables
17
+ # is recommended.
18
+ self.use_transactional_fixtures = true
19
+
20
+ # Instantiated fixtures are slow, but give you @david where otherwise you
21
+ # would need people(:david). If you don't want to migrate your existing
22
+ # test cases which use the @david style and don't mind the speed hit (each
23
+ # instantiated fixtures translates to a database query per test method),
24
+ # then set this back to true.
25
+ self.use_instantiated_fixtures = false
26
+
27
+ # Add more helper methods to be used by all tests here...
28
+ end
29
+
30
+ # Modification de la classe Fixtures pour que les clés étrangères ne
31
+ # gênent pas les tets. Ce code provient d'un commantaire de la page
32
+ # http://blog.caboo.se/articles/2006/05/01/are-foreign-keys-worth-your-time
33
+ # Patch modifié car sinon il semble provoquer un dépassement de pile lors
34
+ # de l'exécution de la totalité des tests.
35
+ class Fixtures
36
+ unless method_defined?(:original_delete_existing_fixtures)
37
+ alias :original_delete_existing_fixtures :delete_existing_fixtures
38
+ define_method(:delete_existing_fixtures) do
39
+ @connection.update "SET FOREIGN_KEY_CHECKS = 0", 'Fixtures deactivate foreign key checks.';
40
+ original_delete_existing_fixtures
41
+ @connection.update "SET FOREIGN_KEY_CHECKS = 1", 'Fixtures activate foreign key checks.';
42
+ end
43
+ end
44
+
45
+ unless method_defined?(:original_insert_fixtures)
46
+ alias :original_insert_fixtures :insert_fixtures
47
+ define_method(:insert_fixtures) do
48
+ @connection.update "SET FOREIGN_KEY_CHECKS = 0", 'Fixtures deactivate foreign key checks.';
49
+ original_insert_fixtures
50
+ @connection.update "SET FOREIGN_KEY_CHECKS = 1", 'Fixtures activate foreign key checks.';
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,53 @@
1
+ require File.dirname(__FILE__) + '/../test_helper'
2
+
3
+ class ContainerTest < Test::Unit::TestCase
4
+ fixtures :containers, :objects_in_world
5
+
6
+ def test_all_empty
7
+ container=Container.new
8
+ assert(!container.valid?, "Un container vide devrait être invalide")
9
+ end
10
+
11
+ def test_container_valid
12
+ container=Container.new
13
+ container.container_key="9104d928-e35e-2dd6-f888-7ab766e06351"
14
+ # container.container_key="a1af238c-9ff8-5f1b-8faf-e46b03r1ad2af7"
15
+ container.sim="La Plaine"
16
+ container.delay="30"
17
+ container.position="(1,2,3)"
18
+ container.name="ctest"
19
+ assert(container.valid?, "Ce container est invalide")
20
+ assert(container.save, "La sauvegarde a échoué")
21
+ end
22
+
23
+ def test_container_validation
24
+ assert_nothing_raised {
25
+ @container1 = Container.create(
26
+ :container_key => "d906e900-708f-fd93-8245-79000494711e",
27
+ :sim => "Myeon (263936, 235008)",
28
+ :position => "(33.413044, 2.188796, 136.624924)",
29
+ :name => "Container Test"
30
+ )
31
+ }
32
+ assert_nothing_raised {
33
+ @container2 = Container.find(@container1.id)
34
+ }
35
+ assert_equal "d906e900-708f-fd93-8245-79000494711e", @container2.container_key
36
+ assert_equal "Myeon", @container2.sim
37
+ assert_equal "33,2,136", @container2.position
38
+ assert_equal "Container Test", @container2.name
39
+ end
40
+
41
+ def test_can_delete_full_container
42
+ container = containers(:container_1)
43
+ assert_nothing_raised { container.destroy }
44
+ end
45
+
46
+ def test_can_delete_empty_container
47
+ container = containers(:container_1)
48
+ assert_not_equal 0, container.objects_in_world.count
49
+ container.objects_in_world.destroy_all
50
+ assert_equal 0, container.objects_in_world.count
51
+ assert_nothing_raised { container.destroy }
52
+ end
53
+ end
@@ -0,0 +1,68 @@
1
+ require File.dirname(__FILE__) + '/../test_helper'
2
+
3
+ class FurnitureTest < Test::Unit::TestCase
4
+ fixtures :furnitures, :panels
5
+
6
+ def test_empty
7
+ furniture = Furniture.new
8
+ assert !furniture.valid?
9
+ assert furniture.errors.invalid?(:name)
10
+ assert furniture.errors.invalid?(:sim)
11
+ assert furniture.errors.invalid?(:position)
12
+ assert furniture.errors.invalid?(:furniture_key)
13
+ end
14
+
15
+ def test_valid_no_permanent_id
16
+ f1 = Furniture.new(:name => "test furniture 1",
17
+ :furniture_key => "88888888-4444-4444-4444-111111111111",
18
+ :sim => "Myeon (263936, 235008)",
19
+ :position => "(33.413044, 2.188796, 136.624924)")
20
+ assert f1.valid?
21
+ assert_equal "Myeon", f1.sim
22
+ assert_equal "33,2,136", f1.position
23
+ assert_equal 30, f1.delay
24
+ assert f1.save
25
+ assert_equal f1.id, f1.permanent_id
26
+ end
27
+
28
+ def test_valid_with_permanent_id
29
+ f2 = Furniture.new :name => "test furniture 1", :furniture_key => "88888888-4444-4444-4444-111111111111", :sim => "Myeon (263936, 235008)", :position => "(33.413044, 2.188796, 136.624924)", :permanent_id => 42
30
+ assert f2.valid?
31
+ assert_equal "Myeon", f2.sim
32
+ assert_equal "33,2,136", f2.position
33
+ assert_equal 30, f2.delay
34
+ assert f2.save
35
+ assert_equal 42, f2.permanent_id
36
+ end
37
+
38
+ def test_invalid
39
+ f1 = Furniture.new(:name => "test furniture 1",
40
+ :furniture_key => "88888888-4444-4444-4444-XXXXXX",
41
+ :sim => "Myeon (263936, 235008)",
42
+ :position => "x",
43
+ :delay => 999)
44
+ assert !f1.valid?
45
+ assert_equal "is not a valid Second Life object key", f1.errors.on(:furniture_key)
46
+ assert_equal "is not a valid Sim coordinate. Must be 'X,Y,Z'", f1.errors.on(:position)
47
+ assert_equal "is not a valid delay", f1.errors.on(:delay)
48
+ end
49
+
50
+ def test_delete_non_empty_furniture
51
+ panel_list = [1, 2, 3, 4]
52
+ f = furnitures(:furniture_1)
53
+ assert_equal 4, f.panels.count
54
+ assert_equal panel_list, f.panels.collect { |p| p.id }
55
+ assert_raise(ActiveRecord::StatementInvalid) { f.destroy }
56
+ end
57
+
58
+ def test_delete_empty_furniture
59
+ f = furnitures(:furniture_palace)
60
+ panel_list = [7, 8]
61
+ assert_equal 2, f.panels.count
62
+ assert_equal panel_list, f.panels.collect { |p| p.id }
63
+
64
+ f.panels.destroy_all
65
+ assert_equal 0, f.panels.count
66
+ assert_nothing_raised { f.destroy }
67
+ end
68
+ end
@@ -0,0 +1,40 @@
1
+ require File.dirname(__FILE__) + '/../test_helper'
2
+
3
+ class MailerTest < Test::Unit::TestCase
4
+ FIXTURES_PATH = File.dirname(__FILE__) + '/../fixtures'
5
+ CHARSET = "utf-8"
6
+
7
+ include ActionMailer::Quoting
8
+
9
+ def setup
10
+ ActionMailer::Base.delivery_method = :test
11
+ ActionMailer::Base.perform_deliveries = true
12
+ ActionMailer::Base.deliveries = []
13
+
14
+ @expected = TMail::Mail.new
15
+ @expected.set_content_type "text", "plain", { "charset" => CHARSET }
16
+ @expected.mime_version = '1.0'
17
+ end
18
+
19
+ def test_avtouch
20
+ @expected.subject = 'give inventory'
21
+ @expected.body = read_fixture('avtouch')
22
+ @expected.date = Time.now
23
+ @expected.from = "webia@community-chest.net"
24
+ @expected.to = "88888888-4444-4444-4444-11111111@lsl.secondlife.com"
25
+
26
+ avtouch_mail = Mailer.create_avtouch("88888888-4444-4444-4444-11111111",
27
+ "147d465d-b625-7f9a-ce06-18fcbd1d9d44",
28
+ "cc pan")
29
+ assert_equal @expected.encoded, avtouch_mail.encoded
30
+ end
31
+
32
+ private
33
+ def read_fixture(action)
34
+ IO.readlines("#{FIXTURES_PATH}/mailer/#{action}")
35
+ end
36
+
37
+ def encode(subject)
38
+ quoted_printable(subject, CHARSET)
39
+ end
40
+ end
@@ -0,0 +1,42 @@
1
+ require File.dirname(__FILE__) + '/../test_helper'
2
+
3
+ class NetworkTest < Test::Unit::TestCase
4
+ fixtures :networks, :panels
5
+
6
+ def test_empty
7
+ network = Network.new
8
+ assert !network.valid?
9
+ assert network.errors.invalid?(:name)
10
+ end
11
+
12
+ def test_valid
13
+ n1 = Network.new(:name => "test network 1", :active => true)
14
+ assert n1.valid?
15
+ assert n1.save
16
+ n2 = Network.new(:name => "test network 2", :active => false)
17
+ assert n2.valid?
18
+ assert n2.save
19
+ end
20
+
21
+ def test_duplicate_name
22
+ n1 = Network.new(:name => "test network 1", :active => true)
23
+ assert n1.valid?
24
+ assert n1.save
25
+ n2 = Network.new(:name => "test network 1", :active => false)
26
+ assert !n2.valid?
27
+ end
28
+
29
+ def test_delete_non_empty_network
30
+ panel_list = [1, 3, 5]
31
+ n = networks(:network_1)
32
+ assert_equal 3, n.panels.count
33
+ assert_equal panel_list, n.panels.collect { |b| b.id }
34
+ assert_nothing_raised { n.destroy }
35
+ # On vérifie que les panel ne sont pas détruit et qu'ils n'ont plus de network associé
36
+ panel_list.each { |b_id|
37
+ b = Panel.find(b_id)
38
+ assert b
39
+ assert_nil b.network
40
+ }
41
+ end
42
+ end
@@ -0,0 +1,33 @@
1
+ require File.dirname(__FILE__) + '/../test_helper'
2
+
3
+ class ObjectInWorldTest < Test::Unit::TestCase
4
+ fixtures :objects_in_world, :containers
5
+
6
+ def test_empty
7
+ oiw = ObjectInWorld.new
8
+ assert !oiw.valid?
9
+ end
10
+
11
+ def test_valid
12
+ container = containers(:container_1)
13
+ i = 0
14
+ [ "texture", "landmark", "notecard" ].each do |type|
15
+ oiw = ObjectInWorld.new(:name => "test " + type , :otype => type,
16
+ :object_key => "88888888-4444-4444-4444-11111111111" + i.to_s,
17
+ :container => container)
18
+ assert oiw.valid?
19
+ i += 1
20
+ end
21
+ end
22
+
23
+ def test_invalid
24
+ oiw = ObjectInWorld.new(:name => "test oiw", :otype => "glop", :object_key => "x")
25
+ assert !oiw.valid?
26
+ assert_equal "is an invalid object type", oiw.errors.on(:otype)
27
+ assert_equal "is not a valid Second Life object key", oiw.errors.on(:object_key)
28
+ end
29
+
30
+ def test_default_texture
31
+ assert_equal "caaf0b85-b869-d344-8573-d260a50f635d", ObjectInWorld.default_texture.object_key
32
+ end
33
+ end
@@ -0,0 +1,26 @@
1
+ require File.dirname(__FILE__) + '/../test_helper'
2
+
3
+ class ObjectOffWorldTest < Test::Unit::TestCase
4
+ fixtures :objects_off_world
5
+
6
+ def test_empty
7
+ oow = ObjectOffWorld.new
8
+ assert !oow.valid?
9
+ assert oow.errors.invalid?(:object_key)
10
+ assert oow.errors.invalid?(:name)
11
+ assert oow.errors.invalid?(:otype)
12
+ assert oow.errors.invalid?(:content)
13
+ end
14
+
15
+ def test_valid
16
+ oow = ObjectOffWorld.new(:name => "test", :otype => ObjectOffWorld::TYPES[0][1], :content => "http://www.secondlife.com")
17
+ assert oow.valid?
18
+ assert_equal "d54360f1-d526-37dc-37ac-29157f27e575", oow.object_key
19
+ end
20
+
21
+ def test_invalid
22
+ oow = ObjectOffWorld.new(:name => "test", :otype => "glop", :content => "http://www.secondlife.com")
23
+ assert !oow.valid?
24
+ assert_equal "is an invalid object type", oow.errors.on(:otype)
25
+ end
26
+ end
@@ -0,0 +1,148 @@
1
+ require File.dirname(__FILE__) + '/../test_helper'
2
+
3
+ class PanelRevisionTest < Test::Unit::TestCase
4
+ fixtures :panel_revisions, :furnitures, :panels, :networks
5
+ fixtures :objects_in_world, :objects_off_world, :containers
6
+ fixtures :objects_in_world_panels, :objects_off_world_panels
7
+
8
+ def test_invalid
9
+ rev = PanelRevision.new
10
+ assert_equal false, rev.valid?
11
+ assert_equal 7, rev.errors.length
12
+ assert_equal 'must be given a value', rev.errors.on(:permanent_id)
13
+ assert_equal 'must be given a value', rev.errors.on(:panel_name)
14
+ assert_equal 'must be given a value', rev.errors.on(:panel_key)
15
+ assert_equal 'must be given a value', rev.errors.on(:furniture_name)
16
+ assert_equal 'must be given a value', rev.errors.on(:furniture_key)
17
+ assert_equal 'must be given a value', rev.errors.on(:sim)
18
+ assert_equal 'must be given a value', rev.errors.on(:position)
19
+ end
20
+
21
+ def test_valid
22
+ rev_count = PanelRevision.count
23
+ panel = panels(:panel1_furniture1)
24
+ assert_nothing_raised { @rev = PanelRevision.add(panel) }
25
+ assert @rev.valid?
26
+ assert_equal rev_count + 1, PanelRevision.count
27
+
28
+ # On vérifie le contenu maintenant
29
+ furniture = furnitures(:furniture_1)
30
+ network = networks(:network_1)
31
+ texture = objects_in_world(:default_texture)
32
+ notecard = objects_in_world(:getting_money)
33
+ landmark = objects_in_world(:cc_pan)
34
+ url = objects_off_world(:crao)
35
+ mediaurl = objects_off_world(:glop_media)
36
+ #
37
+ assert_equal furniture.permanent_id, @rev.permanent_id
38
+ assert_equal panel.name, @rev.panel_name
39
+ assert_equal panel.panel_key, @rev.panel_key
40
+ assert_equal furniture.name, @rev.furniture_name
41
+ assert_equal furniture.furniture_key, @rev.furniture_key
42
+ assert_equal network.name, @rev.network_name
43
+ assert_equal network.active, @rev.network_status
44
+ assert_equal texture.name, @rev.texture_name
45
+ assert_equal texture.object_key, @rev.texture_key
46
+ assert_equal landmark.name, @rev.landmark_name
47
+ assert_equal landmark.object_key, @rev.landmark_key
48
+ assert_equal notecard.name, @rev.notecard_name
49
+ assert_equal notecard.object_key, @rev.notecard_key
50
+ assert_equal url.name, @rev.url_name
51
+ assert_equal url.content, @rev.url_content
52
+ assert_equal mediaurl.name, @rev.mediaurl_name
53
+ assert_equal mediaurl.content, @rev.mediaurl_content
54
+ assert_equal furniture.sim, @rev.sim
55
+ assert_equal furniture.position, @rev.position
56
+ end
57
+
58
+ def test_panel_changed
59
+ rev_count = PanelRevision.count
60
+ panel = panels(:panel1_furniture1)
61
+
62
+ panel.name = 'Glop'
63
+ assert_nothing_raised { panel.save! }
64
+ assert_equal rev_count+1, PanelRevision.count
65
+ end
66
+
67
+ def test_network_changed
68
+ rev_count = PanelRevision.count
69
+ panel = panels(:panel1_furniture1)
70
+ network2 = networks(:network_2)
71
+
72
+ # Remplacement d'un réseau
73
+ panel.network = network2
74
+ assert_nothing_raised { panel.save! }
75
+ assert_equal rev_count+1, PanelRevision.count
76
+
77
+ # Modification d'un réseau utilisé
78
+ panel_count = network2.panels.count
79
+ network2.active = false
80
+ assert_nothing_raised { network2.save! }
81
+ assert_equal rev_count+1+panel_count, PanelRevision.count
82
+
83
+ # Modification d'un réseau non utilisé
84
+ network_empty = Network.create(:name => 'unused')
85
+ network_empty.active = false
86
+ assert_nothing_raised { network_empty.save! }
87
+ # Le compte ne doit pas changer
88
+ assert_equal rev_count+1+panel_count, PanelRevision.count
89
+ end
90
+
91
+ def test_furniture_changed
92
+ rev_count = PanelRevision.count
93
+ furniture = furnitures(:furniture_1)
94
+ panel_count = furniture.panels.count
95
+
96
+ # On doit enregistrer autant de révisions qu'il y a de panneaux dans le mobilier.
97
+ furniture.position = '65,76,123'
98
+ assert_nothing_raised { furniture.save! }
99
+ assert_equal rev_count+panel_count, PanelRevision.count
100
+ # On vérifie qu'on a les 4 révisions
101
+ furniture.panels.each do |panel|
102
+ rev = PanelRevision.find_by_furniture_key_and_panel_key_and_position(
103
+ furniture.furniture_key,
104
+ panel.panel_key,
105
+ '65,76,123')
106
+ assert_not_nil rev
107
+ end
108
+ end
109
+
110
+ def test_objects_changed
111
+ rev_count = PanelRevision.count
112
+ panel = panels(:panel1_furniture1)
113
+
114
+ panel.landmark = nil
115
+ assert_equal rev_count+1, PanelRevision.count
116
+ panel.landmark = objects_in_world(:paris)
117
+ assert_equal rev_count+2, PanelRevision.count
118
+
119
+ panel.mediaurl = nil
120
+ assert_equal rev_count+3, PanelRevision.count
121
+
122
+ media = ObjectOffWorld.create(:name => 'vidcast', :otype => 'mediaurl', :content => 'http://www.youtube.com/efK54jJE')
123
+ panel.mediaurl = media
124
+ assert_equal rev_count+4, PanelRevision.count
125
+ end
126
+
127
+ def test_objects_deleted
128
+ rev_count = PanelRevision.count
129
+ panel = panels(:panel1_furniture1)
130
+ notecard = panel.notecard
131
+ url = panel.url
132
+ assert_not_nil notecard
133
+ assert_not_nil url
134
+ assert_equal 'crao', url.name
135
+
136
+ # On supprime le container et tous ses objets. Dans la base de test (cf les fixtures) ces objets sont
137
+ # utilisés 8 fois sur divers panneaux, on s'attend donc à ce qu'il y ait 8 révisions de plus pour les
138
+ # panneaux.
139
+ assert_nothing_raised { notecard.container.destroy }
140
+ assert_raise(ActiveRecord::RecordNotFound) { ObjectInWorld.find(notecard.id) }
141
+ assert_equal rev_count+8, PanelRevision.count
142
+
143
+ # L'url crao est utilisée 3 fois (cf les fixtures)
144
+ url.destroy
145
+ assert_raise(ActiveRecord::RecordNotFound) { ObjectOffWorld.find(url.id) }
146
+ assert_equal rev_count+8+3, PanelRevision.count
147
+ end
148
+ end