require File.dirname(__FILE__) + '/../test_helper' require 'container_controller' # Re-raise errors caught by the controller. class ContainerController; def rescue_action(e) raise e end; end class ContainerControllerTest < Test::Unit::TestCase fixtures :containers, :objects_in_world def setup @controller = ContainerController.new @request = ActionController::TestRequest.new @response = ActionController::TestResponse.new @first_id = containers(:container_1).id @empty_id = containers(:container_empty).id @content_texture = [ "Texture 1", "02cfbe85-b6ab-6a1f-24e1-42addb619498", "Texture 2", "9557ee31-8939-1dfb-36db-706443241b6e", "Texture 3", "0140bc84-2946-95a7-a5b6-c4ad09f20a50" ] @content_misc = [ "Landmark 1", "95090411-33d9-563a-b404-e07403ccacb3", "landmark", "Notecard 1", "b1582b34-2f74-eb7d-f468-1986ba2da8a4" "notecard" ] end # Construit une chaîne d'objet dans laquelle "nom" et "clé" sont séparés # par des "|", et les enregistrements ainsi formés sont séparés par des "," def object_array_to_string(ary, column_count) ary.in_groups_of(column_count).collect { |r| r.join("|")}.join(",") end def test_register_new_container assert_nil Container.find_by_container_key("d906e900-708f-fd93-8245-79000494711e") container_count = Container.count content_string = object_array_to_string(@content_texture, 2) @request.env["HTTP_X_SECONDLIFE_OBJECT_KEY"] = "d906e900-708f-fd93-8245-79000494711e" @request.env["HTTP_X_SECONDLIFE_REGION"] = "Myeon (263936, 235008)" @request.env["HTTP_X_SECONDLIFE_LOCAL_POSITION"] = "(33.413044, 2.188796, 136.624924)" @request.env["HTTP_X_SECONDLIFE_OBJECT_NAME"] = "Container Test" post :register, :content => content_string assert_response :success assert_template nil assert_equal container_count + 1, Container.count assert_nothing_raised { @container = Container.find_by_container_key("d906e900-708f-fd93-8245-79000494711e") } assert_equal 3, @container.objects_in_world.count objects = @container.objects_in_world objects.each { |o| assert @content_texture.include?(o.object_key) assert @content_texture.include?(o.name) } end def test_register_and_update_container container_count = Container.count content_string = object_array_to_string(@content_texture, 2) # Première fois assert_nil Container.find_by_container_key("d906e900-708f-fd93-8245-79000494711e") @request.env["HTTP_X_SECONDLIFE_OBJECT_KEY"] = "d906e900-708f-fd93-8245-79000494711e" @request.env["HTTP_X_SECONDLIFE_REGION"] = "Myeon (263936, 235008)" @request.env["HTTP_X_SECONDLIFE_LOCAL_POSITION"] = "(33.413044, 2.188796, 136.624924)" @request.env["HTTP_X_SECONDLIFE_OBJECT_NAME"] = "Container Test" post :register, :content => content_string assert_response :success assert_template nil assert_equal container_count + 1, Container.count assert_nothing_raised { @container = Container.find_by_container_key("d906e900-708f-fd93-8245-79000494711e") } assert_equal "Myeon", @container.sim assert_equal "33,2,136", @container.position assert_equal "Container Test", @container.name assert_equal 3, @container.objects_in_world.count objects = @container.objects_in_world objects.each { |o| assert @content_texture.include?(o.object_key) assert @content_texture.include?(o.name) } # Deuxième fois, on change légèrement certains attributs # et on enlève un objet content_smaller = @content_texture[0..-3] content_string = object_array_to_string(content_smaller, 2) @request.env["HTTP_X_SECONDLIFE_OBJECT_KEY"] = "d906e900-708f-fd93-8245-79000494711e" @request.env["HTTP_X_SECONDLIFE_REGION"] = "Myeon (263936, 235008)" @request.env["HTTP_X_SECONDLIFE_LOCAL_POSITION"] = "(66.413044, 200.188796, 236.624924)" @request.env["HTTP_X_SECONDLIFE_OBJECT_NAME"] = "Container Test 2" post :register, :content => content_string assert_response :success assert_template nil assert_equal container_count + 1, Container.count assert_nothing_raised { @container = Container.find_by_container_key("d906e900-708f-fd93-8245-79000494711e") } assert_equal "Myeon", @container.sim assert_equal "66,200,236", @container.position assert_equal "Container Test 2", @container.name assert_equal 2, @container.objects_in_world.count objects = @container.objects_in_world objects.each { |o| assert content_smaller.include?(o.object_key) assert content_smaller.include?(o.name) } end def test_index get :index assert_response :success assert_template 'list' end def test_list get :list assert_response :success assert_template 'list' assert_not_nil assigns(:containers) end def test_show get :show, :id => @first_id assert_response :success assert_template 'show' assert_not_nil assigns(:container) assert assigns(:container).valid? end def test_destroy_empty_container assert_nothing_raised { @container_empty = Container.find(@empty_id) } assert @container_empty.objects_in_world.empty? post :destroy, :id => @empty_id assert_response :redirect assert_redirected_to :action => 'list' assert_raise(ActiveRecord::RecordNotFound) { Container.find(@empty_id) } end def test_destroy_full_container assert_nothing_raised { @container_full = Container.find(@first_id) } assert !@container_full.objects_in_world.empty? post :destroy, :id => @first_id assert_response 409 assert_template nil assert_equal "Cannot delete a non-empty container.", @response.body assert_nothing_raised { Container.find(@first_id) } end end