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.
- data/LICENSE +674 -0
- data/README +257 -0
- data/Rakefile +10 -0
- data/app/controllers/application.rb +40 -0
- data/app/controllers/container_controller.rb +83 -0
- data/app/controllers/content_controller.rb +61 -0
- data/app/controllers/furnitures_controller.rb +87 -0
- data/app/controllers/networks_controller.rb +269 -0
- data/app/controllers/objects_in_world_controller.rb +27 -0
- data/app/controllers/panels_controller.rb +186 -0
- data/app/helpers/application_helper.rb +31 -0
- data/app/helpers/container_helper.rb +2 -0
- data/app/helpers/content_helper.rb +2 -0
- data/app/helpers/furnitures_helper.rb +2 -0
- data/app/helpers/network_helper.rb +2 -0
- data/app/helpers/networks_helper.rb +2 -0
- data/app/helpers/objects_in_world_helper.rb +2 -0
- data/app/helpers/panels_helper.rb +2 -0
- data/app/models/container.rb +51 -0
- data/app/models/furniture.rb +60 -0
- data/app/models/mailer.rb +22 -0
- data/app/models/network.rb +38 -0
- data/app/models/object_in_world.rb +60 -0
- data/app/models/object_off_world.rb +77 -0
- data/app/models/panel.rb +136 -0
- data/app/models/panel_revision.rb +108 -0
- data/app/views/container/list.rhtml +27 -0
- data/app/views/container/show.rhtml +8 -0
- data/app/views/content/_form.rhtml +12 -0
- data/app/views/content/edit.rhtml +8 -0
- data/app/views/content/list.rhtml +26 -0
- data/app/views/content/new.rhtml +8 -0
- data/app/views/furnitures/list.rhtml +51 -0
- data/app/views/furnitures/show.rhtml +7 -0
- data/app/views/layouts/default.rhtml +30 -0
- data/app/views/mailer/avtouch.rhtml +1 -0
- data/app/views/networks/_form.rhtml +11 -0
- data/app/views/networks/_parameters_form.rhtml +8 -0
- data/app/views/networks/edit.rhtml +9 -0
- data/app/views/networks/list.rhtml +25 -0
- data/app/views/networks/new.rhtml +8 -0
- data/app/views/networks/show.rhtml +72 -0
- data/app/views/networks/show_parameters_form.rjs +5 -0
- data/app/views/objects_in_world/list.rhtml +30 -0
- data/app/views/objects_in_world/show.rhtml +8 -0
- data/app/views/panels/list.rhtml +48 -0
- data/app/views/panels/show.rhtml +8 -0
- data/bin/advertnet-install +144 -0
- data/config/boot.rb +45 -0
- data/config/database.yml.default +43 -0
- data/config/environment.rb +67 -0
- data/config/environments/development.rb +21 -0
- data/config/environments/production.rb +21 -0
- data/config/environments/test.rb +19 -0
- data/config/routes.rb +23 -0
- data/db/migrate/001_create_networks.rb +14 -0
- data/db/migrate/002_create_furnitures.rb +17 -0
- data/db/migrate/003_create_containers.rb +16 -0
- data/db/migrate/004_create_objects_in_world.rb +16 -0
- data/db/migrate/005_create_objects_off_world.rb +16 -0
- data/db/migrate/006_create_panels.rb +17 -0
- data/db/migrate/007_join_objects_in_world_panels.rb +17 -0
- data/db/migrate/008_join_objects_off_world_panels.rb +17 -0
- data/db/migrate/009_add_sessions.rb +19 -0
- data/db/migrate/010_add_or_rename_fields.rb +25 -0
- data/db/migrate/011_move_texture_to_object_in_world.rb +25 -0
- data/db/migrate/012_add_permanent_furniture_id.rb +18 -0
- data/db/migrate/013_create_panel_revisions.rb +42 -0
- data/db/schema.rb +102 -0
- data/doc/README_FOR_APP +108 -0
- data/lib/advertnet.rb +13 -0
- data/lib/second_life_validators.rb +89 -0
- data/lib/tasks/documentation.rake +16 -0
- data/lib/tasks/extract_fixtures.rake +23 -0
- data/lib/tasks/load_exported_fixtures.rake +14 -0
- data/public/404.html +30 -0
- data/public/500.html +30 -0
- data/public/dispatch.cgi +10 -0
- data/public/dispatch.fcgi +24 -0
- data/public/dispatch.rb +10 -0
- data/public/favicon.ico +0 -0
- data/public/images/rails.png +0 -0
- data/public/javascripts/application.js +2 -0
- data/public/javascripts/controls.js +833 -0
- data/public/javascripts/dragdrop.js +942 -0
- data/public/javascripts/effects.js +1088 -0
- data/public/javascripts/prototype.js +2515 -0
- data/public/robots.txt +1 -0
- data/public/stylesheets/application.css +25 -0
- data/public/stylesheets/scaffold.css +74 -0
- data/script/about +3 -0
- data/script/breakpointer +3 -0
- data/script/console +3 -0
- data/script/destroy +3 -0
- data/script/generate +3 -0
- data/script/performance/benchmarker +3 -0
- data/script/performance/profiler +3 -0
- data/script/plugin +3 -0
- data/script/process/inspector +3 -0
- data/script/process/reaper +3 -0
- data/script/process/spawner +3 -0
- data/script/runner +3 -0
- data/script/server +3 -0
- data/test/fixtures/containers.yml +44 -0
- data/test/fixtures/furnitures.yml +47 -0
- data/test/fixtures/mailer/avtouch +1 -0
- data/test/fixtures/networks.yml +31 -0
- data/test/fixtures/objects_in_world.yml +71 -0
- data/test/fixtures/objects_in_world_panels.yml +43 -0
- data/test/fixtures/objects_off_world.yml +55 -0
- data/test/fixtures/objects_off_world_panels.yml +20 -0
- data/test/fixtures/panel_revisions.yml +28 -0
- data/test/fixtures/panels.yml +79 -0
- data/test/functional/container_controller_test.rb +167 -0
- data/test/functional/content_controller_test.rb +91 -0
- data/test/functional/furnitures_controller_test.rb +134 -0
- data/test/functional/networks_controller_test.rb +248 -0
- data/test/functional/objects_in_world_controller_test.rb +42 -0
- data/test/functional/panels_controller_test.rb +173 -0
- data/test/test_helper.rb +53 -0
- data/test/unit/container_test.rb +53 -0
- data/test/unit/furniture_test.rb +68 -0
- data/test/unit/mailer_test.rb +40 -0
- data/test/unit/network_test.rb +42 -0
- data/test/unit/object_in_world_test.rb +33 -0
- data/test/unit/object_off_world_test.rb +26 -0
- data/test/unit/panel_revision_test.rb +148 -0
- data/test/unit/panel_test.rb +63 -0
- data/vendor/plugins/annotate_models/ChangeLog +46 -0
- data/vendor/plugins/annotate_models/README +31 -0
- data/vendor/plugins/annotate_models/lib/annotate_models.rb +132 -0
- data/vendor/plugins/annotate_models/tasks/annotate_models_tasks.rake +7 -0
- data/vendor/plugins/foreign_key_migrations/CHANGELOG +99 -0
- data/vendor/plugins/foreign_key_migrations/MIT-LICENSE +20 -0
- data/vendor/plugins/foreign_key_migrations/README +87 -0
- data/vendor/plugins/foreign_key_migrations/about.yml +5 -0
- data/vendor/plugins/foreign_key_migrations/init.rb +3 -0
- data/vendor/plugins/foreign_key_migrations/install.rb +1 -0
- data/vendor/plugins/foreign_key_migrations/lib/red_hill_consulting/foreign_key_migrations/active_record/base.rb +22 -0
- data/vendor/plugins/foreign_key_migrations/lib/red_hill_consulting/foreign_key_migrations/active_record/connection_adapters/abstract_adapter.rb +22 -0
- data/vendor/plugins/foreign_key_migrations/lib/red_hill_consulting/foreign_key_migrations/active_record/connection_adapters/table_definition.rb +28 -0
- data/vendor/plugins/redhillonrails_core/CHANGELOG +154 -0
- data/vendor/plugins/redhillonrails_core/MIT-LICENSE +20 -0
- data/vendor/plugins/redhillonrails_core/README +139 -0
- data/vendor/plugins/redhillonrails_core/init.rb +19 -0
- data/vendor/plugins/redhillonrails_core/lib/red_hill_consulting/core/active_record/base.rb +54 -0
- data/vendor/plugins/redhillonrails_core/lib/red_hill_consulting/core/active_record/connection_adapters/abstract_adapter.rb +31 -0
- data/vendor/plugins/redhillonrails_core/lib/red_hill_consulting/core/active_record/connection_adapters/column.rb +21 -0
- data/vendor/plugins/redhillonrails_core/lib/red_hill_consulting/core/active_record/connection_adapters/foreign_key_definition.rb +26 -0
- data/vendor/plugins/redhillonrails_core/lib/red_hill_consulting/core/active_record/connection_adapters/index_definition.rb +11 -0
- data/vendor/plugins/redhillonrails_core/lib/red_hill_consulting/core/active_record/connection_adapters/mysql_adapter.rb +82 -0
- data/vendor/plugins/redhillonrails_core/lib/red_hill_consulting/core/active_record/connection_adapters/mysql_column.rb +8 -0
- data/vendor/plugins/redhillonrails_core/lib/red_hill_consulting/core/active_record/connection_adapters/postgresql_adapter.rb +107 -0
- data/vendor/plugins/redhillonrails_core/lib/red_hill_consulting/core/active_record/connection_adapters/schema_statements.rb +23 -0
- data/vendor/plugins/redhillonrails_core/lib/red_hill_consulting/core/active_record/connection_adapters/sqlite3_adapter.rb +9 -0
- data/vendor/plugins/redhillonrails_core/lib/red_hill_consulting/core/active_record/connection_adapters/table_definition.rb +27 -0
- data/vendor/plugins/redhillonrails_core/lib/red_hill_consulting/core/active_record/schema.rb +27 -0
- data/vendor/plugins/redhillonrails_core/lib/red_hill_consulting/core/active_record/schema_dumper.rb +47 -0
- metadata +290 -0
data/test/test_helper.rb
ADDED
|
@@ -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
|