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,248 @@
1
+ require File.dirname(__FILE__) + '/../test_helper'
2
+ require 'networks_controller'
3
+
4
+ # Re-raise errors caught by the controller.
5
+ class NetworksController; def rescue_action(e) raise e end; end
6
+
7
+ class NetworksControllerTest < Test::Unit::TestCase
8
+ fixtures :networks, :panels, :furnitures
9
+ fixtures :objects_in_world, :objects_off_world
10
+ fixtures :objects_in_world_panels, :objects_off_world_panels
11
+
12
+ def setup
13
+ @controller = NetworksController.new
14
+ @request = ActionController::TestRequest.new
15
+ @response = ActionController::TestResponse.new
16
+
17
+ @first_id = networks(:network_1).id
18
+ end
19
+
20
+ def test_index
21
+ get :index
22
+ assert_response :success
23
+ assert_template 'list'
24
+ end
25
+
26
+ def test_list
27
+ get :list
28
+
29
+ assert_response :success
30
+ assert_template 'list'
31
+
32
+ assert_not_nil assigns(:networks)
33
+ end
34
+
35
+ def test_show
36
+ get :show, :id => @first_id
37
+
38
+ assert_response :success
39
+ assert_template 'show'
40
+
41
+ assert_not_nil assigns(:network)
42
+ assert assigns(:network).valid?
43
+
44
+ assert_not_nil assigns(:network_parameters)
45
+ end
46
+
47
+ def test_show_parameters_form
48
+ get :show_parameters_form, :id => @first_id
49
+
50
+ assert_response :success
51
+ assert_template 'show_parameters_form'
52
+
53
+ assert_not_nil assigns(:network)
54
+ assert assigns(:network).valid?
55
+
56
+ assert_not_nil assigns(:network_parameters)
57
+ assert_not_nil assigns(:textures)
58
+ assert_not_nil assigns(:landmarks)
59
+ assert_not_nil assigns(:notecards)
60
+ assert_not_nil assigns(:urls)
61
+ assert_not_nil assigns(:mediaurls)
62
+
63
+ network_parameters = assigns(:network_parameters)
64
+ assert_equal 1, network_parameters.texture_id
65
+ assert_equal 3, network_parameters.notecard_id
66
+ assert_equal 5, network_parameters.landmark_id
67
+ assert_equal 3, network_parameters.url_id
68
+ assert_equal 5, network_parameters.mediaurl_id
69
+ end
70
+
71
+ def test_new
72
+ get :new
73
+
74
+ assert_response :success
75
+ assert_template 'new'
76
+
77
+ assert_not_nil assigns(:network)
78
+ end
79
+
80
+ def test_create
81
+ num_networks = Network.count
82
+
83
+ post :create, :network => { :name => "glop" }
84
+
85
+ assert_response :redirect
86
+ assert_redirected_to :action => 'show'
87
+
88
+ assert_equal num_networks + 1, Network.count
89
+ end
90
+
91
+ def test_edit
92
+ get :edit, :id => @first_id
93
+
94
+ assert_response :success
95
+ assert_template 'edit'
96
+
97
+ assert_not_nil assigns(:network)
98
+ assert assigns(:network).valid?
99
+ end
100
+
101
+ def test_update
102
+ post :update, :id => @first_id
103
+ assert_response :redirect
104
+ assert_redirected_to :action => 'show', :id => @first_id
105
+ end
106
+
107
+ def test_destroy
108
+ assert_nothing_raised {
109
+ @network = Network.find(@first_id)
110
+ }
111
+
112
+ post :destroy, :id => @first_id
113
+ assert_response :redirect
114
+ assert_redirected_to :action => 'list'
115
+ assert_equal "Network '#{@network.name}' deleted.", flash[:notice]
116
+ assert_raise(ActiveRecord::RecordNotFound) {
117
+ Network.find(@first_id)
118
+ }
119
+ end
120
+
121
+ def test_set_parameters
122
+ post :set_parameters, :id => 1, :network_parameters => {
123
+ :texture_id => "2",
124
+ :notecard_id => "",
125
+ :landmark_id => "7",
126
+ :url_id => "4",
127
+ :mediaurl_id => ""
128
+ }
129
+ assert_response :redirect
130
+ assert_redirected_to :action => 'show'
131
+ assert_not_nil flash[:notice]
132
+
133
+ panel1 = panels(:panel1_furniture1)
134
+ assert_equal 2, panel1.objects_in_world.find_by_otype("texture").id
135
+ assert_nil panel1.objects_in_world.find_by_otype("notecard")
136
+ assert_equal 7, panel1.objects_in_world.find_by_otype("landmark").id
137
+ assert_equal 4, panel1.objects_off_world.find_by_otype("url").id
138
+ assert_nil panel1.objects_off_world.find_by_otype("mediaurl")
139
+ end
140
+
141
+ def test_remove_panel
142
+ network = networks(:network_1)
143
+ panel_id = panels(:panel1_furniture2)
144
+ assert_equal 3, network.panels.count
145
+ assert_nothing_raised { network.panels.find(panel_id) }
146
+
147
+ post :remove_panel, :id => network.id, :panel_id => panel_id
148
+ assert_response :redirect
149
+ assert_redirected_to :action => 'show', :id => network.id
150
+ assert_equal "Panel 'B1 : CC - 4x3 Casino' removed from network.", flash[:notice]
151
+ assert_equal 2, network.panels.count
152
+ assert_raise(ActiveRecord::RecordNotFound) { network.panels.find(panel_id) }
153
+ end
154
+
155
+ def test_remove_panel_invalid_panel_id
156
+ network = networks(:network_1)
157
+ panel_id = 42
158
+ assert_equal 3, network.panels.count
159
+ assert_raise(ActiveRecord::RecordNotFound) { network.panels.find(panel_id) }
160
+
161
+ post :remove_panel, :id => network.id, :panel_id => panel_id
162
+ assert_response :redirect
163
+ assert_redirected_to :action => 'list'
164
+ assert_equal "Remove panel: Invalid network id ('#{network.id}') or panel id ('42').", flash[:notice]
165
+ assert_equal 3, network.panels.count
166
+ end
167
+
168
+ def test_remove_panel_invalid_network_id
169
+ network_id = 42
170
+ panel = panels(:panel1_furniture2)
171
+ assert_raise(ActiveRecord::RecordNotFound) { Network.find(network_id) }
172
+
173
+ post :remove_panel, :id => network_id, :panel_id => panel.id
174
+ assert_response :redirect
175
+ assert_redirected_to :action => 'list'
176
+ assert_equal "Remove panel: Invalid network id ('#{network_id}') or panel id ('#{panel.id}').", flash[:notice]
177
+ end
178
+
179
+ def test_add_panel
180
+ network = networks(:network_1)
181
+ # Récupère un panneau existant du réseau
182
+ first_panel = network.panels.first
183
+ # Panneau à ajouter au réseau
184
+ new_panel = panels(:panel2_furniture3)
185
+ assert_equal 3, network.panels.count
186
+ assert_nil new_panel.network
187
+ assert_raise(ActiveRecord::RecordNotFound) { network.panels.find(new_panel.id) }
188
+
189
+ post :add_panel, :id => network.id, :panel_id => new_panel.id
190
+ assert_response :redirect
191
+ assert_redirected_to :action => 'show', :id => network.id
192
+ assert_equal "Panel 'B2 : CC - 4x3 Palace' added to network.", flash[:notice]
193
+
194
+ new_panel.reload
195
+ assert_equal 4, network.panels.count
196
+ assert_nothing_raised { network.panels.find(new_panel.id) }
197
+ assert_equal network, new_panel.network
198
+
199
+ # Le panneau ajouté a-t-il bien pris les caractéristiques du réseau ?
200
+ assert_equal first_panel.texture, new_panel.texture
201
+ assert_equal first_panel.landmark, new_panel.landmark
202
+ assert_equal first_panel.notecard, new_panel.notecard
203
+ assert_equal first_panel.url, new_panel.url
204
+ assert_equal first_panel.mediaurl, new_panel.mediaurl
205
+ end
206
+
207
+ def test_add_panel_invalid_panel_id
208
+ network = networks(:network_1)
209
+ panel_id = 42
210
+ assert_equal 3, network.panels.count
211
+ assert_raise(ActiveRecord::RecordNotFound) { Panel.find(panel_id) }
212
+
213
+ post :add_panel, :id => network.id, :panel_id => panel_id
214
+ assert_response :redirect
215
+ assert_redirected_to :action => 'list'
216
+ assert_equal "Add panel: Invalid network id ('#{network.id}') or panel id ('#{panel_id}').", flash[:notice]
217
+ assert_equal 3, network.panels.count
218
+ end
219
+
220
+ def test_add_panel_invalid_network_id
221
+ network_id = 42
222
+ panel = panels(:panel1_furniture2)
223
+ assert_raise(ActiveRecord::RecordNotFound) { Network.find(network_id) }
224
+
225
+ post :add_panel, :id => network_id, :panel_id => panel.id
226
+ assert_response :redirect
227
+ assert_redirected_to :action => 'list'
228
+ assert_equal "Add panel: Invalid network id ('#{network_id}') or panel id ('#{panel.id}').", flash[:notice]
229
+ end
230
+
231
+ def test_add_panel_already_used_elsewhere
232
+ network1 = networks(:network_1)
233
+ panel = panels(:panel2_furniture1)
234
+ assert_equal 3, network1.panels.count
235
+ assert_not_nil panel.network
236
+ network2 = panel.network
237
+ assert_raise(ActiveRecord::RecordNotFound) { network1.panels.find(panel.id) }
238
+
239
+ post :add_panel, :id => network1.id, :panel_id => panel.id
240
+ assert_response :redirect
241
+ assert_redirected_to :action => 'show', :id => network1.id
242
+ assert_equal "Panel 'B2 : Furniture 1' already belongs to a network ('#{network2.name}').", flash[:notice]
243
+ assert_equal 3, network1.panels.count
244
+ assert_raise(ActiveRecord::RecordNotFound) { network1.panels.find(panel.id) }
245
+ panel.reload
246
+ assert_equal network2, panel.network
247
+ end
248
+ end
@@ -0,0 +1,42 @@
1
+ require File.dirname(__FILE__) + '/../test_helper'
2
+ require 'objects_in_world_controller'
3
+
4
+ # Re-raise errors caught by the controller.
5
+ class ObjectsInWorldController; def rescue_action(e) raise e end; end
6
+
7
+ class ObjectsInWorldControllerTest < Test::Unit::TestCase
8
+ fixtures :objects_in_world
9
+
10
+ def setup
11
+ @controller = ObjectsInWorldController.new
12
+ @request = ActionController::TestRequest.new
13
+ @response = ActionController::TestResponse.new
14
+
15
+ @first_id = objects_in_world(:logo_pu).id
16
+ end
17
+
18
+ def test_index
19
+ get :index
20
+ assert_response :success
21
+ assert_template 'list'
22
+ end
23
+
24
+ def test_list
25
+ get :list
26
+
27
+ assert_response :success
28
+ assert_template 'list'
29
+
30
+ assert_not_nil assigns(:objects_in_world)
31
+ end
32
+
33
+ def test_show
34
+ get :show, :id => @first_id
35
+
36
+ assert_response :success
37
+ assert_template 'show'
38
+
39
+ assert_not_nil assigns(:object_in_world)
40
+ assert assigns(:object_in_world).valid?
41
+ end
42
+ end
@@ -0,0 +1,173 @@
1
+ require File.dirname(__FILE__) + '/../test_helper'
2
+ require 'panels_controller'
3
+
4
+ # Re-raise errors caught by the controller.
5
+ class PanelsController; def rescue_action(e) raise e end; end
6
+
7
+ class PanelsControllerTest < Test::Unit::TestCase
8
+ fixtures :panels, :furnitures, :containers
9
+ fixtures :objects_in_world, :objects_off_world
10
+ fixtures :objects_in_world_panels, :objects_off_world_panels
11
+
12
+ def setup
13
+ @controller = PanelsController.new
14
+ @request = ActionController::TestRequest.new
15
+ @response = ActionController::TestResponse.new
16
+
17
+ @first_id = panels(:panel1_furniture1).id
18
+
19
+ # Configuration mail
20
+ @emails = ActionMailer::Base.deliveries
21
+ @emails.clear
22
+ end
23
+
24
+ # Met en variables d'environnement les paramètres SL de l'objet appelant
25
+ # quand on teste une URL appelée par SL.
26
+ def setup_sl_env
27
+ @request.env["HTTP_X_SECONDLIFE_OBJECT_KEY"] = "d906e900-708f-fd93-8245-79000494711e"
28
+ @request.env["HTTP_X_SECONDLIFE_REGION"] = "Myeon (263936, 235008)"
29
+ @request.env["HTTP_X_SECONDLIFE_LOCAL_POSITION"] = "(33.413044, 2.188796, 136.624924)"
30
+ @request.env["HTTP_X_SECONDLIFE_OBJECT_NAME"] = "Panel Test"
31
+ end
32
+
33
+ def test_index
34
+ get :index
35
+ assert_response :success
36
+ assert_template 'list'
37
+ end
38
+
39
+ def test_list
40
+ get :list
41
+
42
+ assert_response :success
43
+ assert_template 'list'
44
+
45
+ assert_not_nil assigns(:panels)
46
+ end
47
+
48
+ def test_show
49
+ get :show, :id => @first_id
50
+
51
+ assert_response :success
52
+ assert_template 'show'
53
+
54
+ assert_not_nil assigns(:panel)
55
+ assert assigns(:panel).valid?
56
+ end
57
+
58
+ def test_register
59
+ furniture = furnitures(:furniture_1)
60
+ panel_count = Panel.count
61
+ setup_sl_env
62
+ post :register, :furniture_key => furniture.furniture_key
63
+
64
+ assert_response :success
65
+ assert_template nil
66
+ assert_equal "delay=%30%", @response.body
67
+ assert_equal panel_count+1, Panel.count
68
+ assert_nothing_raised {
69
+ @panel = Panel.find_by_panel_key("d906e900-708f-fd93-8245-79000494711e")
70
+ }
71
+ assert_equal "Panel Test", @panel.name
72
+ assert_equal furniture.furniture_key, @panel.furniture.furniture_key
73
+ assert_equal ObjectInWorld.default_texture, @panel.objects_in_world.find_by_otype("texture")
74
+ end
75
+
76
+ def test_register_no_furniture
77
+ panel_count = Panel.count
78
+ setup_sl_env
79
+ post :register
80
+
81
+ assert_response 409
82
+ assert_template nil
83
+ assert_equal "The furniture id '' does not exist.", @response.body
84
+ assert_equal panel_count, Panel.count
85
+ assert_nil Panel.find_by_panel_key("d906e900-708f-fd93-8245-79000494711e")
86
+ end
87
+
88
+ def test_register_bad_furniture
89
+ panel_count = Panel.count
90
+ setup_sl_env
91
+ post :register, :furniture_key => "88888888-4444-4444-4444-111111111111"
92
+
93
+ assert_response 409
94
+ assert_template nil
95
+ assert_equal "The furniture id '88888888-4444-4444-4444-111111111111' does not exist.", @response.body
96
+ assert_equal panel_count, Panel.count
97
+ assert_nil Panel.find_by_panel_key("d906e900-708f-fd93-8245-79000494711e")
98
+ end
99
+
100
+ def test_update_with_urls
101
+ panel = panels(:panel1_furniture1)
102
+ # On ajoute une URL et une MediaURL au panel que l'on teste
103
+ oow_lacoste = objects_off_world(:lacoste)
104
+ oow_glop_furniture = objects_off_world(:glop_media)
105
+ panel.objects_off_world.replace([oow_lacoste, oow_glop_furniture])
106
+
107
+ @request.env["HTTP_X_SECONDLIFE_OBJECT_KEY"] = panel.panel_key
108
+ @request.env["HTTP_X_SECONDLIFE_REGION"] = "Ici"
109
+ @request.env["HTTP_X_SECONDLIFE_LOCAL_POSITION"] = "1,2,3"
110
+ @request.env["HTTP_X_SECONDLIFE_OBJECT_NAME"] = panel.name
111
+ post :update
112
+
113
+ assert_response :success
114
+ assert_template nil
115
+ response_lines = @response.body.split(/\n/)
116
+ assert_equal 4, response_lines.size
117
+ assert_equal 'delay=' + panel.furniture.delay.to_s, response_lines[0]
118
+ assert_equal 'texture=caaf0b85-b869-d344-8573-d260a50f635d', response_lines[1]
119
+ assert_equal "url=#{oow_lacoste.content}", response_lines[2]
120
+ assert_equal "mediaurl=#{oow_glop_furniture.content}", response_lines[3]
121
+ end
122
+
123
+ def test_update_without_urls
124
+ panel = panels(:panel1_furniture1)
125
+ # On s'assure qu'on n'a aucun object off world associé
126
+ panel.objects_off_world.clear
127
+
128
+ @request.env["HTTP_X_SECONDLIFE_OBJECT_NAME"] = panel.name
129
+ @request.env["HTTP_X_SECONDLIFE_OBJECT_KEY"] = panel.panel_key
130
+ @request.env["HTTP_X_SECONDLIFE_REGION"] = "Ici"
131
+ @request.env["HTTP_X_SECONDLIFE_LOCAL_POSITION"] = "1,2,3"
132
+ post :update
133
+
134
+ assert_response :success
135
+ assert_template nil
136
+ response_lines = @response.body.split(/\n/)
137
+ assert_equal 4, response_lines.size
138
+ assert_equal 'delay=' + panel.furniture.delay.to_s, response_lines[0]
139
+ assert_equal 'texture=caaf0b85-b869-d344-8573-d260a50f635d', response_lines[1]
140
+ assert_equal 'url=nourl', response_lines[2]
141
+ assert_equal 'mediaurl=nomedia', response_lines[3]
142
+ end
143
+
144
+ def test_avtouch
145
+ panel = panels(:panel1_furniture1)
146
+ # On ajoute une notecard et une landmark au panel
147
+ landmark = objects_in_world(:cc_pan)
148
+ notecard = objects_in_world(:getting_money)
149
+ panel.objects_in_world.replace([notecard, landmark])
150
+ # Avatar fictif
151
+ avatar_key = "147d465d-b625-7f9a-ce06-18fcbd1d9d44"
152
+
153
+ @request.env["HTTP_X_SECONDLIFE_OBJECT_NAME"] = panel.name
154
+ @request.env["HTTP_X_SECONDLIFE_OBJECT_KEY"] = panel.panel_key
155
+ @request.env["HTTP_X_SECONDLIFE_REGION"] = "Ici"
156
+ @request.env["HTTP_X_SECONDLIFE_LOCAL_POSITION"] = "1,2,3"
157
+ post :avtouch, :avatar_key => avatar_key
158
+
159
+ assert_response :success
160
+ assert_template nil
161
+ assert_equal 2, @emails.size
162
+ # Mail pour le landmark
163
+ email = @emails.first
164
+ assert_equal "give inventory", email.subject
165
+ assert_equal landmark.container.container_key + "@lsl.secondlife.com", email.to[0]
166
+ assert_equal "'#{avatar_key}',face,#{landmark.name}\n", email.body
167
+ # Mail pour le notecard
168
+ email = @emails.last
169
+ assert_equal "give inventory", email.subject
170
+ assert_equal notecard.container.container_key + "@lsl.secondlife.com", email.to[0]
171
+ assert_equal "'#{avatar_key}',face,#{notecard.name}\n", email.body
172
+ end
173
+ end