advertnet 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
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