ref: master
test/api/blocks_test.rb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 |
require_relative 'test_helper' class BlocksTest < ActiveSupport::TestCase def setup create_and_activate_user login_api @environment = Environment.default @profile = fast_create(Profile) end attr_accessor :environment, :profile should 'get an environment block' do box = fast_create(Box, :owner_id => environment.id, :owner_type => Environment.name) block = fast_create(Block, box_id: box.id) get "/api/v1/blocks/#{block.id}?#{params.to_query}" json = JSON.parse(last_response.body) assert_equal block.id, json["id"] end should 'get a profile block' do box = fast_create(Box, :owner_id => profile.id, :owner_type => Profile.name) block = fast_create(Block, box_id: box.id) get "/api/v1/blocks/#{block.id}?#{params.to_query}" json = JSON.parse(last_response.body) assert_equal block.id, json["id"] end should 'get a profile block for a not logged in user' do logout_api box = fast_create(Box, :owner_id => profile.id, :owner_type => Profile.name) block = fast_create(Block, box_id: box.id) get "/api/v1/blocks/#{block.id}?#{params.to_query}" json = JSON.parse(last_response.body) assert_equal block.id, json["id"] end should 'not get a profile block for a not logged in user' do logout_api profile = fast_create(Profile, public_profile: false) box = fast_create(Box, :owner_id => profile.id, :owner_type => Profile.name) block = fast_create(Block, box_id: box.id) get "/api/v1/blocks/#{block.id}?#{params.to_query}" assert_equal 403, last_response.status end should 'not get a profile block for an user without permission' do profile = fast_create(Profile, public_profile: false) box = fast_create(Box, :owner_id => profile.id, :owner_type => Profile.name) block = fast_create(Block, box_id: box.id) get "/api/v1/blocks/#{block.id}?#{params.to_query}" assert_equal 403, last_response.status end should 'get an invisible profile block for an user with permission' do profile = fast_create(Profile, public_profile: false) profile.add_admin(person) box = fast_create(Box, :owner_id => profile.id, :owner_type => Profile.name) block = fast_create(Block, box_id: box.id) get "/api/v1/blocks/#{block.id}?#{params.to_query}" json = JSON.parse(last_response.body) assert_equal block.id, json["id"] end should 'get a block for an user with permission in a private profile' do profile = fast_create(Profile, public_profile: false) profile.add_admin(person) box = fast_create(Box, :owner_id => profile.id, :owner_type => Profile.name) block = fast_create(Block, box_id: box.id) get "/api/v1/blocks/#{block.id}?#{params.to_query}" json = JSON.parse(last_response.body) assert_equal block.id, json["id"] end should 'display api content by default' do box = fast_create(Box, :owner_id => environment.id, :owner_type => Environment.name) block = fast_create(Block, box_id: box.id) get "/api/v1/blocks/#{block.id}?#{params.to_query}" json = JSON.parse(last_response.body) assert json.key?('api_content') end should 'display api content of a specific block' do class SomeBlock < Block def api_content(params = {}) {some_content: { name: 'test'} } end end box = fast_create(Box, :owner_id => environment.id, :owner_type => Environment.name) block = fast_create(SomeBlock, box_id: box.id) get "/api/v1/blocks/#{block.id}?#{params.to_query}" json = JSON.parse(last_response.body) assert_equal "test", json["api_content"]["some_content"]["name"] end should 'display api content of raw html block' do box = fast_create(Box, :owner_id => environment.id, :owner_type => Environment.name) block = fast_create(RawHTMLBlock, box_id: box.id) block.html = '<div>test</div>' block.save! get "/api/v1/blocks/#{block.id}?#{params.to_query}" json = JSON.parse(last_response.body) assert_equal "<div>test</div>", json["api_content"]["html"] end should 'not allow block edition when user has not the permission for profile' do box = fast_create(Box, :owner_id => profile.id, :owner_type => Profile.name) block = fast_create(Block, box_id: box.id) post "/api/v1/blocks/#{block.id}?#{params.to_query}" assert_equal 403, last_response.status end should 'allow block edition when user has permission to edit profile design' do box = fast_create(Box, :owner_id => profile.id, :owner_type => Profile.name) block = fast_create(Block, box_id: box.id) give_permission(person, 'edit_profile_design', profile) params[:block] = {title: 'block title'} post "/api/v1/blocks/#{block.id}?#{params.to_query}" json = JSON.parse(last_response.body) assert_equal 201, last_response.status assert_equal 'block title', json['title'] end should 'save custom block parameters' do box = fast_create(Box, :owner_id => profile.id, :owner_type => Profile.name) block = fast_create(RawHTMLBlock, box_id: box.id) Environment.default.add_admin(person) params[:block] = {title: 'block title', html: "block content"} post "/api/v1/blocks/#{block.id}?#{params.to_query}" json = JSON.parse(last_response.body) assert_equal 201, last_response.status assert_equal 'block content', json['api_content']['html'] end should 'list block permissions when get a block' do box = fast_create(Box, :owner_id => profile.id, :owner_type => Profile.name) block = fast_create(Block, box_id: box.id) give_permission(person, 'edit_profile_design', profile) get "/api/v1/blocks/#{block.id}?#{params.to_query}" json = JSON.parse(last_response.body) assert_includes json["permissions"], 'allow_edit' end should 'get a block with params passed to api content' do class MyTestBlock < Block def api_content(params = {}) params end end box = fast_create(Box, :owner_id => environment.id, :owner_type => Environment.name) block = fast_create(MyTestBlock, box_id: box.id) params["custom_param"] = "custom_value" get "/api/v1/blocks/#{block.id}?#{params.to_query}" json = JSON.parse(last_response.body) assert_equal "custom_value", json["api_content"]["custom_param"] end should 'be able to upload images when updating a block' do box = fast_create(Box, :owner_id => profile.id, :owner_type => Profile.name) block = fast_create(RawHTMLBlock, box_id: box.id) Environment.default.add_admin(person) base64_image = create_base64_image params[:block] = {images_builder: [base64_image]} post "/api/v1/blocks/#{block.id}?#{params.to_query}" json = JSON.parse(last_response.body) assert_equal 201, last_response.status assert_equal base64_image[:filename], json['images'].first['filename'] assert_equal 1, block.images.size end should 'be able to remove images when updating a block' do box = fast_create(Box, :owner_id => profile.id, :owner_type => Profile.name) Environment.default.add_admin(person) block = create(Block, box: box, images_builder: [{ uploaded_data: fixture_file_upload('/files/rails.png', 'image/png') }]) base64_image = create_base64_image params[:block] = {images_builder: [{remove_image: 'true', id: block.images.first.id}]} post "/api/v1/blocks/#{block.id}?#{params.to_query}" json = JSON.parse(last_response.body) assert_equal 0, block.images.size end end |