mirror of
				https://github.com/scinote-eln/scinote-web.git
				synced 2025-11-01 00:56:05 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			255 lines
		
	
	
	
		
			6.8 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			255 lines
		
	
	
	
		
			6.8 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| require 'test_helper'
 | |
| 
 | |
| class CanvasUpdateTest < ActionDispatch::IntegrationTest
 | |
|   def setup
 | |
|     # Preload user
 | |
|     @user = users(:steve)
 | |
|     @password = "hidden_password"
 | |
| 
 | |
|     # Preload project
 | |
|     @experiment = experiments(:philadelphia)
 | |
| 
 | |
|     # Initialize empty params
 | |
|     @connections = (
 | |
|       @experiment.my_modules
 | |
|       .select { |m| m.active? }
 | |
|       .collect { |m| m.outputs.collect { |c| "#{c.from.id},#{c.to.id}" } }
 | |
|     ).flatten.join(",")
 | |
|     @positions = (
 | |
|       @experiment.my_modules
 | |
|       .select { |m| m.active? }
 | |
|       .collect { |m| "#{m.id},#{m.x},#{m.y}" }
 | |
|     ).join(";")
 | |
|     @add = ""
 | |
|     @add_names = ""
 | |
|     @rename = "{}"
 | |
|     @cloned = ""
 | |
|     @remove = ""
 | |
|     @module_groups = "{}"
 | |
| 
 | |
|     # Sign in as user first
 | |
|     sign_in @user, @password
 | |
|   end
 | |
| 
 | |
|   test "should pass without arguments" do
 | |
|     skip('pending............ must implement new routes first')
 | |
|     error = false
 | |
|     begin
 | |
|       post_via_redirect canvas_project_url(@project)
 | |
|     rescue Exception
 | |
|       error = true
 | |
|     end
 | |
|     assert_not error
 | |
|   end
 | |
| 
 | |
|   test "should pass with valid arguments" do
 | |
|     skip('pending............ must implement new routes first')
 | |
|     post canvas_project_url(@project),
 | |
|     connections: @connections,
 | |
|     positions: @positions,
 | |
|     add: @add,
 | |
|     "add-names" => @add_names,
 | |
|     rename: @rename,
 | |
|     cloned: @cloned,
 | |
|     remove: @remove,
 | |
|     "module-groups" => @module_groups
 | |
| 
 | |
|     assert_redirected_to canvas_project_url(@project)
 | |
|   end
 | |
| 
 | |
|   test "should not pass with invalid project id" do
 | |
|     skip('pending............ must implement new routes first')
 | |
|     post_via_redirect canvas_project_url(-5)
 | |
|     assert_redirected_to_404
 | |
|   end
 | |
| 
 | |
|   test "should not pass with invalid connections" do
 | |
|     skip('pending............ must implement new routes first')
 | |
|     m1 = my_modules(:qpcr).id
 | |
|     m2 = my_modules(:no_group).id
 | |
| 
 | |
|     invalid_connections = [
 | |
|       "1,2,3", # Not dividable by 2
 | |
|       "kkj44gk", # Invalid string
 | |
|       2015, # Number, not dividable by 2
 | |
|       "#{m1},#{m2},#{m2},#{m1}" # Cycle
 | |
|     ]
 | |
| 
 | |
|     invalid_connections.each do |conn|
 | |
|       post_via_redirect canvas_project_url(@project),
 | |
|       connections: conn,
 | |
|       positions: @positions,
 | |
|       add: @add,
 | |
|       "add-names" => @add_names,
 | |
|       rename: @rename,
 | |
|       cloned: @cloned,
 | |
|       remove: @remove,
 | |
|       "module-groups" => @module_groups
 | |
| 
 | |
|       assert_redirected_to_403
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   test "should not pass with invalid positions" do
 | |
|     skip('pending............ must implement new routes first')
 | |
|     invalid_positions = [
 | |
|       "fkgdfgfd",
 | |
|       "dsfldkfsd;ldfkdsl;asdsa", # Subtsrings not divided by commas
 | |
|       "a,b,c,d;1,2,3,4", # Substrings have lenghts of 4
 | |
|       "m1,2,a;m2,b,3", # Position is not an integer
 | |
|       "m1,1,2;m2,1,2;m3,2,2" # Multiple modules cannot have same position
 | |
|     ]
 | |
| 
 | |
|     invalid_positions.each do |pos|
 | |
|       post_via_redirect canvas_project_url(@project),
 | |
|       connections: @connections,
 | |
|       positions: pos,
 | |
|       add: @add,
 | |
|       "add-names" => @add_names,
 | |
|       rename: @rename,
 | |
|       cloned: @cloned,
 | |
|       remove: @remove,
 | |
|       "module-groups" => @module_groups
 | |
| 
 | |
|       assert_redirected_to_403
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   test "should not pass with invalid add strings" do
 | |
|     skip('pending............ must implement new routes first')
 | |
|     invalid_positions = [
 | |
|       "", # No positions provided
 | |
|       "m1,0,1;m2,4,5", # Invalid module names (too short)
 | |
|       "m1,0,1;m2,4,5" # Names.length != Ids.length
 | |
|     ]
 | |
|     invalid_adds = [
 | |
|       "m1,m2", # No positions provided
 | |
|       "m1,m2", # Invalid module names (too short)
 | |
|       "m1,m2" # Names.length != Ids.length
 | |
|     ]
 | |
|     invalid_names = [
 | |
|       "module1,module2", # No positions provided
 | |
|       "a,b", # Invalid module names (too short)
 | |
|       "module1,module2,module3" # Names.length != Ids.length
 | |
|     ]
 | |
| 
 | |
|     invalid_adds.zip(invalid_names).each_with_index do |val, i|
 | |
|       pos = @positions + ";" + invalid_positions[i]
 | |
|       post_via_redirect canvas_project_url(@project),
 | |
|       connections: @connections,
 | |
|       positions: pos,
 | |
|       add: val[0],
 | |
|       "add-names" => val[1],
 | |
|       rename: @rename,
 | |
|       cloned: @cloned,
 | |
|       remove: @remove,
 | |
|       "module-groups" => @module_groups
 | |
| 
 | |
|       assert_redirected_to_403
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   test "should not pass with invalid rename strings" do
 | |
|     skip('pending............ must implement new routes first')
 | |
|     invalid_renames = [
 | |
|       "asdkjkasd asd",
 | |
|       "'m1':'abule'",
 | |
|       "{15:'aa', 'ac': 23}",
 | |
|       "[]",
 | |
|     ]
 | |
| 
 | |
|     invalid_renames.each do |val|
 | |
|       post_via_redirect canvas_project_url(@project),
 | |
|         connections: @connections,
 | |
|         positions: @positions,
 | |
|         add: @adds,
 | |
|         "add-names" => @add_names,
 | |
|         rename: val,
 | |
|         cloned: @cloned,
 | |
|         remove: @remove,
 | |
|         "module-groups" => @module_groups
 | |
| 
 | |
|       assert_redirected_to_403
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   test "should not pass with invalid clone strings" do
 | |
|     skip('pending............ must implement new routes first')
 | |
|     positions = "m1,0,1;m2,4,5"
 | |
|     adds = "m1,m2"
 | |
|     names = "module1|module2"
 | |
| 
 | |
|     invalid_clones = [
 | |
|       "kgjfdklg;123;aa2", # Invalid strings
 | |
|       "5k6,m1;zulu,m2", # Invalid source module
 | |
|       "133,m3;233,m4" # Cloned IDs not present in add string
 | |
|     ]
 | |
| 
 | |
|     invalid_clones.each do |val|
 | |
|       post_via_redirect canvas_project_url(@project),
 | |
|         connections: @connections,
 | |
|         positions: positions,
 | |
|         add: adds,
 | |
|         "add-names" => names,
 | |
|         rename: @rename,
 | |
|         cloned: val,
 | |
|         remove: @remove,
 | |
|         "module-groups" => @module_groups
 | |
| 
 | |
|       assert_redirected_to_403
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   test "should not pass with invalid remove strings" do
 | |
|     skip('pending............ must implement new routes first')
 | |
|     invalid_removes = [
 | |
|       "a,b,c" # Non-integers
 | |
|     ]
 | |
| 
 | |
|     invalid_removes.each do |remove|
 | |
|       post_via_redirect canvas_project_url(@project),
 | |
|       connections: @connections,
 | |
|       positions: @positions,
 | |
|       add: @add,
 | |
|       "add-names" => @add_names,
 | |
|       rename: @rename,
 | |
|       cloned: @cloned,
 | |
|       remove: remove,
 | |
|       "module-groups" => @module_groups
 | |
| 
 | |
|       assert_redirected_to_403
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   test "should not pass with invalid module group strings" do
 | |
|     skip('pending............ must implement new routes first')
 | |
|     invalid_module_groups = [
 | |
|       "asdkjkasd asd",
 | |
|       "'m1':'abule'",
 | |
|       "{15:'aa', 'ac': 23}",
 | |
|       "[]",
 | |
|     ]
 | |
| 
 | |
|     invalid_module_groups.each do |val|
 | |
|       post_via_redirect canvas_project_url(@project),
 | |
|         connections: @connections,
 | |
|         positions: @positions,
 | |
|         add: @adds,
 | |
|         "add-names" => @add_names,
 | |
|         rename: @rename,
 | |
|         cloned: @cloned,
 | |
|         remove: @remove,
 | |
|         "module-groups" => val
 | |
| 
 | |
|       assert_redirected_to_403
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   private
 | |
| 
 | |
|   # Alas, Devise test helpers don't work in integration tests,
 | |
|   # so this is a "manual" login
 | |
|   def sign_in(user, password)
 | |
|     post_via_redirect user_session_url, "user[email]" => user.email, "user[password]" => password
 | |
|   end
 | |
| end
 |