summaryrefslogtreecommitdiff
path: root/test/test.rb
blob: 8da6c885c60c34c653d73e51b586e2da9c4fb580 (plain)
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
require 'application'
require 'test/unit'
require 'rack/test'
require 'ruby-prof'

set :environment, :test
@@redis.flush_db

class DatasetsTest < Test::Unit::TestCase
  include Rack::Test::Methods
	#include RubyProf::Test

  def app
    Sinatra::Application
  end

	def test_index
		get '/datasets'
		assert last_response.ok?
	end

	def test_create_dataset
		post '/datasets', :name => "Test dataset"
		assert last_response.ok?
		uri = last_response.body
		assert_equal "http://example.org/dataset/Test%20dataset", uri
		get uri
		assert last_response.ok?
		get uri + '/name'
		puts last_response.body
		assert last_response.ok?
		assert_equal "Test dataset", last_response.body
		delete uri
		assert last_response.ok?
		get uri
		assert !last_response.ok?
	end

	def test_create_dataset_from_csv
		smiles = 'CC(=O)Nc1scc(n1)c1ccc(o1)[N+](=O)[O-]'
		compound = OpenTox::Compound.new(:smiles => smiles)
		post '/datasets', :name => "Hamster Carcinogenicity"
		uri = last_response.body
		assert last_response.ok?
		post uri + '/import', :file => Rack::Test::UploadedFile.new(File.join(File.dirname(__FILE__), "hamster_carcinogenicity.csv"), "text/csv"), :compound_format => "smiles"
		get uri
		assert last_response.ok?
		get uri + '/compounds'
		assert last_response.ok?
		assert last_response.body.include?(compound.inchi)
		get File.join(uri , 'compound', compound.inchi)
		assert last_response.ok?
    assert last_response.body.include?("Hamster%20Carcinogenicity/classification/true")
		get File.join(uri , 'features')
    puts last_response.body.to_yaml
		delete uri
		assert last_response.ok?
		get uri
		assert !last_response.ok?
	end

=begin
	def test_create_large_dataset_from_csv
		post '/datasets', :name => "Salmonella Mutagenicity"
		uri = last_response.body
		post uri + '/import', :file => Rack::Test::UploadedFile.new(File.join(File.dirname(__FILE__), "kazius.csv"), "text/csv"), :compound_format => "smiles"
		uri = last_response.body
		get uri
		assert last_response.ok?
	end
=end

	def test_tanimoto_similarity
		#@feature_set = OpenTox::Algorithms::Fminer.new :dataset_uri => @dataset
		name = "Similarity test dataset"
		data = {
			'c1ccccc1' =>
			#'[O-][N+](=O)C/C=C\C(=O)Cc1cc(C#N)ccc1' =>
			{
				'A' => 1.0,
				'B' => 0.9,
				'C' => 0.8,
				'D' => 0.7,
				'E' => 0.5
			},
				'CCCNN' =>
			#'F[B-](F)(F)F.[Na+]' => 
			{
				'F' => 0.9,
				'B' => 0.9,
				'C' => 0.8,
				'D' => 0.7,
				'E' => 0.5
			},
				'C1CO1' =>
			#'N#[N+]C1=CC=CC=C1.F[B-](F)(F)F' => 
			{
				'A' => 1.0,
				'B' => 0.9,
				'F' => 0.9,
			}
		}
		post '/datasets', :name => name
		assert last_response.ok?
		uri = last_response.body
		get uri
		assert last_response.ok?
		name = URI.encode(name)
		feature_data = {}

		data.each do |smiles,features|
			compound = OpenTox::Compound.new(:smiles => smiles).uri
			feature_data[compound] = []
			features.each do |k,v|
				feature= OpenTox::Feature.new(:name => k, :values => {:p_value => v}).uri
				feature_data[compound] << feature
			end
		end

		post uri , :features => feature_data.to_yaml
		assert last_response.ok?

		data.each do |smiles,features|
			compound= OpenTox::Compound.new(:smiles => smiles).inchi
			data.each do |s,f|
				unless s == smiles
					neighbor= OpenTox::Compound.new(:smiles => s).inchi
					get "/dataset/#{name}/compounds"
					assert last_response.ok?
					get "/dataset/#{name}/compound/#{compound}"
					assert last_response.ok?
					get "/algorithm/tanimoto/dataset/#{name}/compound/#{compound}/dataset/#{name}/compound/#{neighbor}"
					puts last_response.body
					assert last_response.ok?
					sim = last_response.body
					features_a = data[smiles].keys
					features_b = data[s].keys
					union = features_a | features_b
					intersect  = features_a & features_b
					mysim = intersect.size.to_f/union.size.to_f
					assert_equal sim, mysim.to_s
					puts "tanimoto::#{smiles}::#{s}::#{last_response.body}"
					get "/algorithm/weighted_tanimoto/dataset/#{name}/compound/#{compound}/dataset/#{name}/compound/#{neighbor}"
					assert last_response.ok?
					puts "weighted_tanimoto::#{smiles}::#{s}::#{last_response.body}"
				end
			end
		end

	end

end