intermine 0.98.01

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.
@@ -0,0 +1,29 @@
1
+ {"lists":[
2
+ {
3
+ "name":"test-list-1",
4
+ "title":"test1",
5
+ "description":"An example test list",
6
+ "type": "Employee",
7
+ "size": 42,
8
+ "dateCreated": "2011-05-07T19:52:03",
9
+ "authorized": true,
10
+ "tags": ["tag1", "tag2", "tag3"]
11
+ },
12
+ {
13
+ "name":"test-list-2",
14
+ "title":"test2",
15
+ "description":"Another example test list",
16
+ "type": "Manager",
17
+ "size": 7,
18
+ "dateCreated": "2011-05-07T10:11:12",
19
+ "authorized": false
20
+ },
21
+ {
22
+ "name":"test-list-3",
23
+ "title":"test3",
24
+ "description":"Yet Another example test list",
25
+ "type": "CEO",
26
+ "size": 8,
27
+ "dateCreated": "2011-05-07T10:11:12"
28
+ }
29
+ ],"wasSuccessful":true,"error":null,"statusCode":200}
@@ -0,0 +1,3 @@
1
+ {"model":{
2
+ "name":"testmodel","classes":{"Broke":{"name":"Broke","extends":[],"isInterface":true,"attributes":{"debt":{"name":"debt","type":"int"},"id":{"name":"id","type":"java.lang.Integer"}},"references":{"bank":{"name":"bank","referencedType":"Bank","reverseReference":"debtors"}},"collections":{}},"Thing":{"name":"Thing","extends":[],"isInterface":true,"attributes":{"id":{"name":"id","type":"java.lang.Integer"}},"references":{},"collections":{}},"Employable":{"name":"Employable","extends":["Thing"],"isInterface":true,"attributes":{"name":{"name":"name","type":"java.lang.String"},"id":{"name":"id","type":"java.lang.Integer"}},"references":{},"collections":{}},"HasAddress":{"name":"HasAddress","extends":[],"isInterface":true,"attributes":{"id":{"name":"id","type":"java.lang.Integer"}},"references":{"address":{"name":"address","referencedType":"Address"}},"collections":{}},"HasSecretarys":{"name":"HasSecretarys","extends":[],"isInterface":true,"attributes":{"id":{"name":"id","type":"java.lang.Integer"}},"references":{},"collections":{"secretarys":{"name":"secretarys","referencedType":"Secretary"}}},"Contractor":{"name":"Contractor","extends":["Employable","ImportantPerson"],"isInterface":false,"attributes":{"name":{"name":"name","type":"java.lang.String"},"id":{"name":"id","type":"java.lang.Integer"},"seniority":{"name":"seniority","type":"java.lang.Integer"}},"references":{"personalAddress":{"name":"personalAddress","referencedType":"Address"},"businessAddress":{"name":"businessAddress","referencedType":"Address"}},"collections":{"companys":{"name":"companys","referencedType":"Company","reverseReference":"contractors"},"oldComs":{"name":"oldComs","referencedType":"Company","reverseReference":"oldContracts"}}},"Manager":{"name":"Manager","extends":["Employee","ImportantPerson"],"isInterface":false,"attributes":{"title":{"name":"title","type":"java.lang.String"},"fullTime":{"name":"fullTime","type":"boolean"},"age":{"name":"age","type":"int"},"end":{"name":"end","type":"java.lang.String"},"name":{"name":"name","type":"java.lang.String"},"id":{"name":"id","type":"java.lang.Integer"},"seniority":{"name":"seniority","type":"java.lang.Integer"}},"references":{"department":{"name":"department","referencedType":"Department","reverseReference":"employees"},"departmentThatRejectedMe":{"name":"departmentThatRejectedMe","referencedType":"Department","reverseReference":"rejectedEmployee"},"address":{"name":"address","referencedType":"Address"}},"collections":{"simpleObjects":{"name":"simpleObjects","referencedType":"SimpleObject","reverseReference":"employee"}}},"Employee":{"name":"Employee","extends":["Employable","HasAddress"],"isInterface":false,"attributes":{"fullTime":{"name":"fullTime","type":"boolean"},"age":{"name":"age","type":"int"},"end":{"name":"end","type":"java.lang.String"},"name":{"name":"name","type":"java.lang.String"},"id":{"name":"id","type":"java.lang.Integer"}},"references":{"department":{"name":"department","referencedType":"Department","reverseReference":"employees"},"departmentThatRejectedMe":{"name":"departmentThatRejectedMe","referencedType":"Department","reverseReference":"rejectedEmployee"},"address":{"name":"address","referencedType":"Address"}},"collections":{"simpleObjects":{"name":"simpleObjects","referencedType":"SimpleObject","reverseReference":"employee"}}},"Department":{"name":"Department","extends":["RandomInterface"],"isInterface":false,"attributes":{"name":{"name":"name","type":"java.lang.String"},"id":{"name":"id","type":"java.lang.Integer"}},"references":{"company":{"name":"company","referencedType":"Company","reverseReference":"departments"},"manager":{"name":"manager","referencedType":"Manager"}},"collections":{"employees":{"name":"employees","referencedType":"Employee","reverseReference":"department"},"rejectedEmployee":{"name":"rejectedEmployee","referencedType":"Employee","reverseReference":"departmentThatRejectedMe"}}},"Company":{"name":"Company","extends":["RandomInterface","HasAddress","HasSecretarys"],"isInterface":true,"attributes":{"name":{"name":"name","type":"java.lang.String"},"vatNumber":{"name":"vatNumber","type":"int"},"id":{"name":"id","type":"java.lang.Integer"}},"references":{"CEO":{"name":"CEO","referencedType":"CEO","reverseReference":"company"},"address":{"name":"address","referencedType":"Address"}},"collections":{"departments":{"name":"departments","referencedType":"Department","reverseReference":"company"},"contractors":{"name":"contractors","referencedType":"Contractor","reverseReference":"companys"},"oldContracts":{"name":"oldContracts","referencedType":"Contractor","reverseReference":"oldComs"},"secretarys":{"name":"secretarys","referencedType":"Secretary"}}},"Address":{"name":"Address","extends":["Thing"],"isInterface":false,"attributes":{"address":{"name":"address","type":"java.lang.String"},"id":{"name":"id","type":"java.lang.Integer"}},"references":{},"collections":{}},"RandomInterface":{"name":"RandomInterface","extends":[],"isInterface":true,"attributes":{"id":{"name":"id","type":"java.lang.Integer"}},"references":{},"collections":{}},"CEO":{"name":"CEO","extends":["Manager","HasSecretarys"],"isInterface":false,"attributes":{"salary":{"name":"salary","type":"int"},"title":{"name":"title","type":"java.lang.String"},"fullTime":{"name":"fullTime","type":"boolean"},"age":{"name":"age","type":"int"},"end":{"name":"end","type":"java.lang.String"},"name":{"name":"name","type":"java.lang.String"},"id":{"name":"id","type":"java.lang.Integer"},"seniority":{"name":"seniority","type":"java.lang.Integer"}},"references":{"company":{"name":"company","referencedType":"Company","reverseReference":"CEO"},"department":{"name":"department","referencedType":"Department","reverseReference":"employees"},"departmentThatRejectedMe":{"name":"departmentThatRejectedMe","referencedType":"Department","reverseReference":"rejectedEmployee"},"address":{"name":"address","referencedType":"Address"}},"collections":{"simpleObjects":{"name":"simpleObjects","referencedType":"SimpleObject","reverseReference":"employee"},"secretarys":{"name":"secretarys","referencedType":"Secretary"}}},"ImportantPerson":{"name":"ImportantPerson","extends":[],"isInterface":true,"attributes":{"seniority":{"name":"seniority","type":"java.lang.Integer"},"id":{"name":"id","type":"java.lang.Integer"}},"references":{},"collections":{}},"Secretary":{"name":"Secretary","extends":[],"isInterface":false,"attributes":{"name":{"name":"name","type":"java.lang.String"},"id":{"name":"id","type":"java.lang.Integer"}},"references":{},"collections":{}},"Types":{"name":"Types","extends":[],"isInterface":false,"attributes":{"name":{"name":"name","type":"java.lang.String"},"booleanType":{"name":"booleanType","type":"boolean"},"floatType":{"name":"floatType","type":"float"},"doubleType":{"name":"doubleType","type":"double"},"shortType":{"name":"shortType","type":"short"},"intType":{"name":"intType","type":"int"},"longType":{"name":"longType","type":"long"},"booleanObjType":{"name":"booleanObjType","type":"java.lang.Boolean"},"floatObjType":{"name":"floatObjType","type":"java.lang.Float"},"doubleObjType":{"name":"doubleObjType","type":"java.lang.Double"},"shortObjType":{"name":"shortObjType","type":"java.lang.Short"},"intObjType":{"name":"intObjType","type":"java.lang.Integer"},"longObjType":{"name":"longObjType","type":"java.lang.Long"},"bigDecimalObjType":{"name":"bigDecimalObjType","type":"java.math.BigDecimal"},"dateObjType":{"name":"dateObjType","type":"java.util.Date"},"stringObjType":{"name":"stringObjType","type":"java.lang.String"},"clobObjType":{"name":"clobObjType","type":"org.intermine.objectstore.query.ClobAccess"},"id":{"name":"id","type":"java.lang.Integer"}},"references":{},"collections":{}},"Bank":{"name":"Bank","extends":[],"isInterface":false,"attributes":{"name":{"name":"name","type":"java.lang.String"},"id":{"name":"id","type":"java.lang.Integer"}},"references":{},"collections":{"debtors":{"name":"debtors","referencedType":"Broke","reverseReference":"bank"}}},"SimpleObject":{"name":"SimpleObject","extends":["java.lang.Object"],"isInterface":false,"attributes":{"name":{"name":"name","type":"java.lang.String"}},"references":{"employee":{"name":"employee","referencedType":"Employee","reverseReference":"simpleObjects"}},"collections":{}},"Range":{"name":"Range","extends":[],"isInterface":false,"attributes":{"rangeStart":{"name":"rangeStart","type":"int"},"rangeEnd":{"name":"rangeEnd","type":"int"},"name":{"name":"name","type":"java.lang.String"},"id":{"name":"id","type":"java.lang.Integer"}},"references":{"parent":{"name":"parent","referencedType":"Company"}},"collections":{}}}
3
+ },"wasSuccessful":true,"error":null,"statusCode":200}
@@ -0,0 +1,3 @@
1
+ {"rootClass":"Pathway","modelName":"genomic","start":0,"views":["Pathway.identifier","Pathway.name","Pathway.genes.secondaryIdentifier","Pathway.genes.symbol"],"results":[
2
+ {"objectId":388000112,"genes":[{"symbol":"CG12398","objectId":355194908,"class":"Gene","secondaryIdentifier":"CG12398"},{"symbol":"Zw","objectId":355077327,"class":"Gene","secondaryIdentifier":"CG12529"},{"symbol":"CG12539","objectId":355713082,"class":"Gene","secondaryIdentifier":"CG12539"},{"symbol":"CG13369","objectId":355219881,"class":"Gene","secondaryIdentifier":"CG13369"},{"symbol":"CG15093","objectId":355220032,"class":"Gene","secondaryIdentifier":"CG15093"},{"symbol":"CG17010","objectId":355512718,"class":"Gene","secondaryIdentifier":"CG17010"},{"symbol":"CG17333","objectId":355223984,"class":"Gene","secondaryIdentifier":"CG17333"},{"symbol":"Tal","objectId":355205655,"class":"Gene","secondaryIdentifier":"CG2827"},{"symbol":"CG30410","objectId":355505527,"class":"Gene","secondaryIdentifier":"CG30410"},{"symbol":"CG30499","objectId":355006231,"class":"Gene","secondaryIdentifier":"CG30499"},{"symbol":"fbp","objectId":355206294,"class":"Gene","secondaryIdentifier":"CG31692"},{"symbol":"Pgd","objectId":355110188,"class":"Gene","secondaryIdentifier":"CG3724"},{"symbol":"Pfk","objectId":355129877,"class":"Gene","secondaryIdentifier":"CG4001"},{"symbol":"CG5103","objectId":355532927,"class":"Gene","secondaryIdentifier":"CG5103"},{"symbol":"Pgm","objectId":355115908,"class":"Gene","secondaryIdentifier":"CG5165"},{"symbol":"CG5432","objectId":355442677,"class":"Gene","secondaryIdentifier":"CG5432"},{"symbol":"Ald","objectId":355087230,"class":"Gene","secondaryIdentifier":"CG6058"},{"symbol":"CG6767","objectId":355117375,"class":"Gene","secondaryIdentifier":"CG6767"},{"symbol":"CG7140","objectId":355023087,"class":"Gene","secondaryIdentifier":"CG7140"},{"symbol":"CG8036","objectId":355032410,"class":"Gene","secondaryIdentifier":"CG8036"},{"symbol":"Pgi","objectId":355130643,"class":"Gene","secondaryIdentifier":"CG8251"},{"symbol":"CG8525","objectId":355214438,"class":"Gene","secondaryIdentifier":"CG8525"}],"name":"Pentose phosphate pathway","class":"Pathway","identifier":"00030"}
3
+ ],"executionTime":"2011.07.13 10:03::13","wasSuccessful":true,"error":null,"statusCode":200}
@@ -0,0 +1 @@
1
+ [{"id":320000014,"value":"DepartmentA1","class":"Department","url":"/report.do?id=320000014"},{"id":320000015,"value":"EmployeeA1","class":"Manager","url":"/report.do?id=320000015"}]
@@ -0,0 +1,3 @@
1
+ {"rootClass":"Company","modelName":"testmodel","start":0,"views":["Company.departments.name","Company.departments.manager.name"],"results":[
2
+ [{"id":320000014,"value":"DepartmentA1","class":"Department","url":"/report.do?id=320000014"},{"id":320000015,"value":"EmployeeA1","class":"Manager","url":"/report.do?id=320000015"}]
3
+ ],"executionTime":"2011.07.09 11:52::30","wasSuccessful":true,"error":null,"statusCode":200}
@@ -0,0 +1,94 @@
1
+ <model name="testmodel" package="org.intermine.model.testmodel">
2
+ <class name="Broke" is-interface="true">
3
+ <attribute name="debt" type="int"/>
4
+ <reference name="bank" referenced-type="Bank" reverse-reference="debtors"/>
5
+ </class>
6
+ <class name="Thing" is-interface="true"></class>
7
+ <class name="Employable" extends="Thing" is-interface="true">
8
+ <attribute name="name" type="java.lang.String"/>
9
+ </class>
10
+ <class name="HasAddress" is-interface="true">
11
+ <reference name="address" referenced-type="Address"/>
12
+ </class>
13
+ <class name="HasSecretarys" is-interface="true">
14
+ <collection name="secretarys" referenced-type="Secretary"/>
15
+ </class>
16
+ <class name="Contractor" extends="Employable ImportantPerson" is-interface="false">
17
+ <reference name="personalAddress" referenced-type="Address"/>
18
+ <reference name="businessAddress" referenced-type="Address"/>
19
+ <collection name="companys" referenced-type="Company" reverse-reference="contractors"/>
20
+ <collection name="oldComs" referenced-type="Company" reverse-reference="oldContracts"/>
21
+ </class>
22
+ <class name="Manager" extends="Employee ImportantPerson" is-interface="false">
23
+ <attribute name="title" type="java.lang.String"/>
24
+ </class>
25
+ <class name="Employee" extends="Employable HasAddress" is-interface="false">
26
+ <attribute name="fullTime" type="boolean"/>
27
+ <attribute name="age" type="int"/>
28
+ <attribute name="end" type="java.lang.String"/>
29
+ <reference name="department" referenced-type="Department" reverse-reference="employees"/>
30
+ <reference name="departmentThatRejectedMe" referenced-type="Department" reverse-reference="rejectedEmployee"/>
31
+ <collection name="simpleObjects" referenced-type="SimpleObject" reverse-reference="employee"/>
32
+ </class>
33
+ <class name="Department" extends="RandomInterface" is-interface="false">
34
+ <attribute name="name" type="java.lang.String"/>
35
+ <reference name="company" referenced-type="Company" reverse-reference="departments"/>
36
+ <reference name="manager" referenced-type="Manager"/>
37
+ <collection name="employees" referenced-type="Employee" reverse-reference="department"/>
38
+ <collection name="rejectedEmployees" referenced-type="Employee" reverse-reference="departmentThatRejectedMe"/>
39
+ </class>
40
+ <class name="Company" extends="RandomInterface HasAddress HasSecretarys" is-interface="true">
41
+ <attribute name="name" type="java.lang.String"/>
42
+ <attribute name="vatNumber" type="int"/>
43
+ <reference name="CEO" referenced-type="CEO" reverse-reference="company"/>
44
+ <collection name="departments" referenced-type="Department" reverse-reference="company"/>
45
+ <collection name="contractors" referenced-type="Contractor" reverse-reference="companys"/>
46
+ <collection name="oldContracts" referenced-type="Contractor" reverse-reference="oldComs"/>
47
+ </class>
48
+ <class name="Address" extends="Thing" is-interface="false">
49
+ <attribute name="address" type="java.lang.String"/>
50
+ </class>
51
+ <class name="RandomInterface" is-interface="true"></class>
52
+ <class name="CEO" extends="Manager HasSecretarys" is-interface="false">
53
+ <attribute name="salary" type="int"/>
54
+ <reference name="company" referenced-type="Company" reverse-reference="CEO"/>
55
+ </class>
56
+ <class name="ImportantPerson" is-interface="true">
57
+ <attribute name="seniority" type="java.lang.Integer"/>
58
+ </class>
59
+ <class name="Secretary" is-interface="false">
60
+ <attribute name="name" type="java.lang.String"/>
61
+ </class>
62
+ <class name="Types" is-interface="false">
63
+ <attribute name="name" type="java.lang.String"/>
64
+ <attribute name="booleanType" type="boolean"/>
65
+ <attribute name="floatType" type="float"/>
66
+ <attribute name="doubleType" type="double"/>
67
+ <attribute name="shortType" type="short"/>
68
+ <attribute name="intType" type="int"/>
69
+ <attribute name="longType" type="long"/>
70
+ <attribute name="booleanObjType" type="java.lang.Boolean"/>
71
+ <attribute name="floatObjType" type="java.lang.Float"/>
72
+ <attribute name="doubleObjType" type="java.lang.Double"/>
73
+ <attribute name="shortObjType" type="java.lang.Short"/>
74
+ <attribute name="intObjType" type="java.lang.Integer"/>
75
+ <attribute name="longObjType" type="java.lang.Long"/>
76
+ <attribute name="bigDecimalObjType" type="java.math.BigDecimal"/>
77
+ <attribute name="dateObjType" type="java.util.Date"/>
78
+ <attribute name="stringObjType" type="java.lang.String"/>
79
+ </class>
80
+ <class name="Bank" is-interface="false">
81
+ <attribute name="name" type="java.lang.String"/>
82
+ <collection name="debtors" referenced-type="Broke" reverse-reference="bank"/>
83
+ </class>
84
+ <class name="SimpleObject" is-interface="false" extends="java.lang.Object">
85
+ <attribute name="name" type="java.lang.String"/>
86
+ <reference name="employee" referenced-type="Employee" reverse-reference="simpleObjects"/>
87
+ </class>
88
+ <class name="Range" is-interface="false">
89
+ <attribute name="rangeStart" type="int"/>
90
+ <attribute name="rangeEnd" type="int"/>
91
+ <attribute name="name" type="java.lang.String"/>
92
+ <reference name="parent" referenced-type="Company"/>
93
+ </class>
94
+ </model>
@@ -0,0 +1,35 @@
1
+ require File.dirname(__FILE__) + "/test_helper.rb"
2
+
3
+ require "test/unit"
4
+ require "intermine/service"
5
+
6
+ class LiveTest < Test::Unit::TestCase
7
+
8
+ def setup
9
+ @service = Service.new("www.flymine.org/query")
10
+ end
11
+
12
+ # Tests a number of integrated features:
13
+ # * Getting a template
14
+ # * Passing template parameters
15
+ # * getting counts
16
+ # * getting rows
17
+ # * getting records
18
+ #
19
+ def testBigResultSet
20
+ template = @service.template("Chromosome_Gene")
21
+ args = {"A" => {"!=" => '2L'}}
22
+ size = template.count(args)
23
+ i = 0
24
+ template.each_row(args) do |r|
25
+ i += 1
26
+ end
27
+ assert_equal(size, i)
28
+ i = 0
29
+ template.each_result(args) do |r|
30
+ i += 1
31
+ end
32
+ assert_equal(size, i)
33
+ end
34
+ end
35
+
@@ -0,0 +1,84 @@
1
+ require "query"
2
+ require "model"
3
+
4
+ query = PathQuery::Query.new("Employee")
5
+ query.name = "Ruby Query"
6
+ query.model = "testmodel"
7
+ query.title = "A query made in ruby"
8
+ query.sort_order = "Employee asc"
9
+ query.add_views("Employee.name", "Employee.age")
10
+ query.add_views("fullTime", "department.name")
11
+
12
+ bin_params = {:path => "Employee.name", :op => "=", :value => "Foo"}
13
+ bin2_params = {:path => "age", :op => ">", :value => "26"}
14
+ unary_params = {:path => "Employee.name", :op => "IS NULL"}
15
+ sub_params = {:path => "Employee", :sub_class => "Manager"}
16
+ lookup_params = {:path => "Employee", :op => "LOOKUP", :extra_value => "Foo", :value => "bar" }
17
+ lookup_params2 = {:path => "Employee", :op => "LOOKUP", :value => "bar" }
18
+ multi_params = {:path => "Employee.name", :op => "ONE OF", :values => ["one", "two", "three"]}
19
+ loop_params = {:path => "Employee.name", :op => "IS", :loopPath => "Manager"}
20
+ list_params = {:path => "Employee.name", :op => "IN", :value => "a list"}
21
+
22
+ query.add_constraint(bin_params)
23
+ query.add_constraint(bin2_params)
24
+ query.add_constraint(sub_params)
25
+ query.add_constraint(lookup_params)
26
+ query.add_constraint(lookup_params2)
27
+ query.add_constraint(multi_params)
28
+ query.add_constraint(unary_params)
29
+ query.add_constraint(loop_params)
30
+ query.add_constraint(list_params)
31
+
32
+ query.add_join("Employee.department", "OUTER")
33
+ query.add_join("Employee.department.company")
34
+ query.add_join("Employee.department.company", "INNER")
35
+
36
+ puts query.to_xml
37
+
38
+ file = File.new("model.json", "r")
39
+
40
+ data = file.read
41
+ model = Model.new(data)
42
+
43
+ p model.get_class("Employee").get_field("department").referencedType
44
+ p model.get_class("Employee").get_field("department").reverseReference
45
+ p model.get_class("Employee").get_field("department").referencedType.get_field("company").referencedType
46
+ p model.get_class("Employee").get_field("department").referencedType.get_field("company").referencedType.name
47
+
48
+ path = Path.new("Employee.name", model)
49
+ puts path, path.length
50
+
51
+ path = Path.new("Employee.department.company.departments", model)
52
+ puts path, path.length
53
+
54
+ path = Path.new("Employee.department.company.departments.employees.address.address", model)
55
+ puts path, path.length
56
+
57
+ path = Path.new("Department.employees.seniority", model, {"Department.employees" => "Manager"})
58
+ puts path, path.length
59
+
60
+ begin
61
+ path = Path.new("Department.employees.foo", model, {"Department.employees" => "Manager"})
62
+ rescue Exception => e
63
+ p e
64
+ end
65
+
66
+ begin
67
+ path = Path.new("Department.employees.seniority", model, {"Department.employees" => "Foo"})
68
+ rescue Exception => e
69
+ p e
70
+ end
71
+
72
+ begin
73
+ path = Path.new("Employee.department.name.departments", model)
74
+ rescue Exception => e
75
+ p e
76
+ end
77
+
78
+ begin
79
+ path = Path.new("Foo.bar", model)
80
+ rescue Exception => e
81
+ p e
82
+ end
83
+
84
+
@@ -0,0 +1,67 @@
1
+ $LOAD_PATH << File.expand_path( File.dirname(__FILE__) + '/../lib' )
2
+ require "rexml/document"
3
+ require "test/unit"
4
+
5
+ include Test::Unit::Assertions
6
+
7
+ def compare_xml(a, b)
8
+ require "rexml/document"
9
+ docA = REXML::Document.new(a.to_s)
10
+ docB = REXML::Document.new(b.to_s)
11
+
12
+ a_elems = docA.elements.to_a
13
+ b_elems = docB.elements.to_a
14
+
15
+ (0 ... a_elems.size).each do |idx|
16
+ compare_elements(a_elems[idx], b_elems[idx])
17
+ end
18
+ end
19
+
20
+ private
21
+
22
+ def fail_xml_compare(elemA, elemB, problem, e)
23
+ formatter = REXML::Formatters::Pretty.new
24
+ elemA_str = String.new
25
+ elemB_str = String.new
26
+ formatter.write(elemA, elemA_str)
27
+ formatter.write(elemB, elemB_str)
28
+ first_part = "#{elemA_str}\nis not equal to\n#{elemB_str}\n"
29
+
30
+ raise Test::Unit::AssertionFailedError, "#{first_part}because #{problem} - #{e.message}"
31
+ end
32
+
33
+ def compare_elements(elemA, elemB)
34
+
35
+ begin
36
+ assert_equal(elemA.name, elemB.name)
37
+ rescue Test::Unit::AssertionFailedError => e
38
+ fail_xml_compare(elemA, elemB, "names of element differ", e)
39
+ end
40
+
41
+ begin
42
+ assert_equal(elemA.attributes, elemB.attributes)
43
+ rescue Test::Unit::AssertionFailedError => e
44
+ fail_xml_compare(elemA, elemB, "attributes of element differ", e)
45
+ end
46
+
47
+ begin
48
+ assert_equal(elemA.text, elemB.text)
49
+ rescue Test::Unit::AssertionFailedError => e
50
+ fail_xml_compare(elemA, elemB, "text contents of element differ", e)
51
+ end
52
+
53
+ begin
54
+ assert_equal(elemA.elements.size, elemB.elements.size)
55
+ rescue Test::Unit::AssertionFailedError => e
56
+ fail_xml_compare(elemA, elemB, "number of children of element differ", e)
57
+ end
58
+
59
+ a_elems = elemA.elements.to_a
60
+ b_elems = elemB.elements.to_a
61
+
62
+ (0 ... a_elems.size).each do |idx|
63
+ compare_elements(a_elems[idx], b_elems[idx])
64
+ end
65
+ end
66
+
67
+
@@ -0,0 +1,68 @@
1
+ require File.dirname(__FILE__) + "/test_helper.rb"
2
+
3
+ require "test/unit"
4
+ require "intermine/lists"
5
+ require "intermine/model"
6
+ require "intermine/query"
7
+
8
+ include Lists
9
+
10
+ class FakeService
11
+
12
+ attr_reader :get_list_data, :root
13
+
14
+ def initialize(data, model)
15
+ @get_list_data = data
16
+ @model = model
17
+ @root = "FAKE_ROOT"
18
+ end
19
+
20
+ def query(rootClass=nil?)
21
+ return PathQuery::Query.new(@model, rootClass, self)
22
+ end
23
+
24
+ end
25
+
26
+ class TestList < Test::Unit::TestCase
27
+
28
+ def initialize(name)
29
+ super
30
+ d = File.dirname(__FILE__) + "/data"
31
+ lf = File.new(d + "/lists.json", "r")
32
+ mf = File.new(d + "/model.json", "r")
33
+ model = Model.new(mf.read)
34
+ @service = FakeService.new(lf.read, model)
35
+ end
36
+
37
+ def setup
38
+ @manager = ListManager.new(@service)
39
+ end
40
+
41
+ def testParse
42
+ assert_equal(@manager.lists.size, 3)
43
+
44
+ list_a = @manager.lists.first
45
+ assert_equal(list_a.name, "test-list-1")
46
+ assert_equal(list_a.title, "test1")
47
+ assert_equal(list_a.description, "An example test list")
48
+ assert_equal(list_a.size, 42)
49
+ assert_equal(list_a.dateCreated, "2011-05-07T19:52:03")
50
+ assert_equal(list_a.tags, %w{tag1 tag2 tag3})
51
+ assert_equal(list_a.is_authorized?, true)
52
+
53
+ list_b = @manager.lists[1]
54
+ assert_equal(list_b.tags, [])
55
+ assert_equal(list_b.is_authorized?, false)
56
+
57
+ list_c = @manager.lists.last
58
+ assert_equal(list_c.is_authorized?, true)
59
+ end
60
+
61
+ def testListToQuery
62
+ list_a = @manager.lists.first
63
+ q = list_a.query
64
+ expected = %q!<query model='testmodel' view='Employee.name Employee.end Employee.id Employee.fullTime Employee.age' sortOrder='Employee.name ASC'><constraint op='IN' code='A' value='test-list-1' path='Employee'/></query>!
65
+ assert_equal(q.to_xml.to_s, expected)
66
+ end
67
+ end
68
+
@@ -0,0 +1,417 @@
1
+ require File.dirname(__FILE__) + "/test_helper.rb"
2
+ require "intermine/model"
3
+
4
+ require "test/unit"
5
+
6
+ class TestModel < Test::Unit::TestCase
7
+
8
+ def initialize(name)
9
+ super
10
+ file = File.new(
11
+ File.dirname(__FILE__) + "/data/model.json", "r")
12
+ data = file.read
13
+ file.close
14
+ @model = InterMine::Metadata::Model.new(data)
15
+ end
16
+
17
+ def test_parse
18
+ assert_equal(@model.classes.size, 19)
19
+
20
+ dept = @model.get_cd("Department")
21
+ assert_equal("Department", dept.name)
22
+ assert_equal(false, dept.isInterface)
23
+ assert_equal(6, dept.fields.size)
24
+ assert_equal(dept.fields.keys.sort, ["company", "employees", "id", "manager", "name", "rejectedEmployee"])
25
+
26
+ assert_equal(dept.get_field("company").referencedType, @model.get_cd("Company"))
27
+
28
+ manager = @model.get_cd("Manager")
29
+ assert(manager.subclass_of?(@model.get_cd("Employee")))
30
+ assert(manager.subclass_of?("Employee"))
31
+ assert(manager.subclass_of?("HasAddress"))
32
+ assert(!manager.subclass_of?("Company"))
33
+ assert(manager.subclass_of?("Company.departments.employees"))
34
+ assert(!manager.subclass_of?("Company.name"))
35
+ assert_raise(InterMine::Metadata::PathException) {manager.subclass_of?("Foo")}
36
+ end
37
+
38
+ def test_attributes
39
+ dept = @model.get_cd("Department")
40
+ assert_equal(2, dept.attributes.size)
41
+
42
+ manager = @model.get_cd("Manager")
43
+ assert_equal(7, manager.attributes.size)
44
+ end
45
+
46
+ def test_sugar
47
+ dept = @model.get_cd("Department")
48
+
49
+ table = @model.table("Department")
50
+
51
+ assert_equal(dept, table)
52
+ end
53
+
54
+
55
+ def test_good_paths
56
+
57
+ path = InterMine::Metadata::Path.new("Employee.name", @model)
58
+ assert_equal(2, path.length)
59
+ assert_equal("java.lang.String", path.end_type)
60
+
61
+ path = InterMine::Metadata::Path.new("Employee.department.company.departments", @model)
62
+ assert_equal(4, path.length)
63
+ assert_equal("Department", path.end_type)
64
+
65
+ path = InterMine::Metadata::Path.new("Employee.department.company.departments.employees.address.address", @model)
66
+ assert_equal(7, path.length)
67
+ assert_equal("java.lang.String", path.end_type)
68
+
69
+ path = InterMine::Metadata::Path.new("Department.employees.seniority", @model, {"Department.employees" => "Manager"})
70
+ assert_equal(3, path.length)
71
+ assert_equal("java.lang.Integer", path.end_type)
72
+
73
+ path = InterMine::Metadata::Path.new("Department.employees.id", @model)
74
+ assert_equal(3, path.length)
75
+ assert_equal("java.lang.Integer", path.end_type)
76
+
77
+ end
78
+
79
+ def test_bad_paths
80
+
81
+ assert_raise(InterMine::Metadata::PathException) do
82
+ InterMine::Metadata::Path.new("Foo.bar", @model)
83
+ end
84
+
85
+ assert_raise(InterMine::Metadata::PathException) do
86
+ InterMine::Metadata::Path.new("Department.employees.foo", @model, {"Department.employees" => "Manager"})
87
+ end
88
+
89
+ assert_raise(InterMine::Metadata::PathException) do
90
+ InterMine::Metadata::Path.new("Department.employees.seniority", @model, {"Department.employees" => "Foo"})
91
+ end
92
+
93
+ assert_raise(InterMine::Metadata::PathException) do
94
+ InterMine::Metadata::Path.new("Employee.department.name.departments", @model)
95
+ end
96
+
97
+ end
98
+
99
+ def test_item_creation_bean_style
100
+ cd = @model.get_cd("Employee")
101
+ emp_kls = cd.to_class
102
+
103
+ emp = emp_kls.new
104
+ emp.name = "John Doe"
105
+ emp.age = 42
106
+ emp.fullTime = false
107
+
108
+ dep = @model.make_new("Department")
109
+ dep.name = "Sales"
110
+
111
+ emp.department = dep
112
+
113
+ assert_equal(emp.name, "John Doe")
114
+ assert_equal(emp.age, 42)
115
+ assert_equal(emp.fullTime, false)
116
+ assert_equal(emp.department.name, "Sales")
117
+ end
118
+
119
+ def test_item_creation_with_arguments
120
+ emp_kls = @model.get_cd("Employee").to_class
121
+ emp = emp_kls.new({
122
+ "name" => "John Doe",
123
+ "age" => 25,
124
+ "fullTime" => true
125
+ })
126
+ assert_equal(emp.name, "John Doe")
127
+ assert_equal(emp.age, 25)
128
+ assert_equal(emp.fullTime, true)
129
+
130
+ dep_kls = @model.get_cd("Department").to_class
131
+ dep = dep_kls.new({
132
+ "name" => "Sales"
133
+ })
134
+
135
+ emp.department = dep
136
+
137
+ assert_equal(emp.department.name, "Sales")
138
+
139
+ dep.addEmployees(emp)
140
+
141
+ assert_equal(dep.employees.first, emp)
142
+
143
+ emp2 = emp_kls.new({
144
+ "name" => "Jane Doe",
145
+ "age" => 26,
146
+ "fullTime" => false
147
+ })
148
+
149
+ dep.employees = [emp, emp2]
150
+ assert_equal(dep.employees.map { |x| x.name }, ["John Doe", "Jane Doe"])
151
+
152
+ emp3 = emp_kls.new({
153
+ "name" => "Jill Doe",
154
+ "age" => 26,
155
+ "fullTime" => false
156
+ })
157
+ emp4 = emp_kls.new({
158
+ "name" => "Jonas Doe",
159
+ "age" => 26,
160
+ "fullTime" => false
161
+ })
162
+
163
+ dep.addEmployees(emp3, emp4)
164
+ assert_equal(dep.employees.map { |x| x.name }, ["John Doe", "Jane Doe", "Jill Doe", "Jonas Doe"])
165
+ end
166
+
167
+ def test_item_creation_with_nested_coercion
168
+
169
+ emp_kls = @model.get_cd("Employee").to_class
170
+
171
+ emp5 = emp_kls.new({
172
+ "name" => "Jonas Doe",
173
+ "age" => 26,
174
+ "fullTime" => false,
175
+ "department" => { "name" => "Marketing" , "company" => { "name" => "Aperture Science", "vatNumber" => 12345}}
176
+ })
177
+
178
+ assert_equal(emp5.department.name, "Marketing")
179
+ assert_equal(emp5.department.company.name, "Aperture Science")
180
+ assert_equal(emp5.department.company.vatNumber, 12345)
181
+
182
+ dep = @model.get_cd("Department").to_class.new({ "name" => "Sales" })
183
+ dep.addEmployees({ "name" => "Jeremiah Doe", "age" => 42}, { "name" => "Jodie Doe" })
184
+ assert_equal(dep.employees.map { |x| x.name }, ["Jeremiah Doe", "Jodie Doe"])
185
+
186
+ assert_equal(dep.employees.first.age, 42)
187
+ assert_equal(dep.employees.last.age, nil)
188
+ end
189
+
190
+ def test_item_creation_from_model
191
+
192
+ manager = @model.make_new("Manager", {
193
+ "name" => "David Brent",
194
+ "seniority" => 42,
195
+ "age" => 39,
196
+ "fullTime" => true,
197
+ "department" => { "name" => "Sales" }
198
+ })
199
+
200
+ assert_equal(manager.name, "David Brent")
201
+ assert_equal(manager.seniority, 42)
202
+ assert_equal(manager.age, 39)
203
+ assert_equal(manager.fullTime, true)
204
+ assert_equal(manager.department.name, "Sales")
205
+
206
+ dep = @model.make_new("Department", {
207
+ "name" => "Janitorial",
208
+ "employees" => [
209
+ { "name" => "A" },
210
+ { "name" => "B" }
211
+ ]
212
+ })
213
+
214
+ assert_equal(dep.name, "Janitorial")
215
+ assert_equal(dep.employees[0].name, "A")
216
+ assert_equal(dep.employees[1].name, "B")
217
+
218
+ dep.addEmployees({ "name" => "C" })
219
+ assert_equal(dep.employees[2].name, "C")
220
+
221
+ end
222
+
223
+ def test_inheritance
224
+
225
+ manager = @model.make_new("Manager", { "name" => "David Brent" })
226
+ employee = @model.make_new("Employee", { "name" => "Tim Canterbury" })
227
+
228
+ dep = @model.make_new("Department", { "name" => "Sales" })
229
+
230
+ dep.addEmployees(manager, employee)
231
+
232
+ assert_equal(dep.employees[0].name, "David Brent")
233
+ assert_equal(dep.employees[1].name, "Tim Canterbury")
234
+
235
+ mod = @model.get_cd("Employee").to_module
236
+ dep.employees.each do |emp|
237
+ assert_kind_of(mod, emp)
238
+ end
239
+
240
+ assert_kind_of(@model.get_cd("HasAddress").to_module, manager)
241
+
242
+ comp = @model.make_new("Company")
243
+ assert_raise ArgumentError do
244
+ dep.addEmployees(comp)
245
+ end
246
+ end
247
+
248
+ def test_creation_from_hash_alone
249
+
250
+ emp = @model.make_new({
251
+ "class" => "Employee",
252
+ "name" => "John Doe",
253
+ "age" => 25
254
+ })
255
+
256
+ assert_kind_of(@model.get_cd("Employee").to_module, emp)
257
+ assert_equal(emp.name, "John Doe")
258
+ assert_equal(emp.age, 25)
259
+ end
260
+
261
+ def test_prefer_hash_class
262
+
263
+ emp = @model.make_new("Employee", {
264
+ "class" => "Manager",
265
+ "name" => "John Doe",
266
+ "age" => 25
267
+ })
268
+
269
+ assert_kind_of(@model.get_cd("Employee").to_module, emp)
270
+ assert_kind_of(@model.get_cd("Manager").to_module, emp)
271
+ assert_equal(emp.name, "John Doe")
272
+ assert_equal(emp.age, 25)
273
+ end
274
+
275
+ def test_subclass_coercion
276
+
277
+ dep = @model.make_new("Department")
278
+
279
+ dep.addEmployees(
280
+ { "name" => "A" },
281
+ { "class" => "Manager", "name" => "B" },
282
+ { "class" => "CEO", "name" => "C" }
283
+ )
284
+
285
+ assert_equal(dep.employees[0].name, "A")
286
+ assert_equal(dep.employees[1].name, "B")
287
+ assert_equal(dep.employees[2].name, "C")
288
+
289
+ dep.employees.each do |emp|
290
+ assert_kind_of(@model.get_cd("Employee").to_module, emp)
291
+ end
292
+
293
+ dep.employees.slice(1, 2).each do |manager|
294
+ assert_kind_of(@model.get_cd("Manager").to_module, manager)
295
+ end
296
+
297
+ assert_kind_of(@model.get_cd("Manager").to_module, dep.employees.last)
298
+ end
299
+
300
+ def test_overridden_isa
301
+
302
+ manager = @model.make_new("Manager")
303
+
304
+ assert(manager.is_a?(@model.get_cd("Employee")))
305
+ end
306
+
307
+ def test_refuse_to_make_objects_with_conflicting_class_names
308
+
309
+ assert_raise ArgumentError do
310
+ @model.make_new("Employee", { "class" => "Company", "name" => "Aperture Science" })
311
+ end
312
+ end
313
+
314
+ def test_item_ids
315
+
316
+ dep = @model.make_new("Department", {
317
+ "name" => "Sales",
318
+ "objectId" => 12345
319
+ })
320
+
321
+ assert_equal(dep.objectId, 12345)
322
+ end
323
+
324
+ def test_item_creation_problems
325
+
326
+ emp_kls = @model.get_cd("Employee").to_class
327
+
328
+ assert_raise ArgumentError do
329
+ emp_kls.new({
330
+ "name" => "John Doe",
331
+ "age" => "foo",
332
+ })
333
+ end
334
+
335
+ assert_raise ArgumentError do
336
+ emp_kls.new({
337
+ "name" => "John Doe",
338
+ "age" => 14.75
339
+ })
340
+ end
341
+
342
+ assert_raise ArgumentError do
343
+ emp = emp_kls.new
344
+ emp.age = 13.5
345
+ end
346
+
347
+ assert_raise ArgumentError do
348
+ emp_kls.new({
349
+ "name" => "John Doe",
350
+ "fullTime" => "foo",
351
+ })
352
+ end
353
+
354
+ assert_raise NoMethodError do
355
+ emp_kls.new({
356
+ "name" => "Not for this world",
357
+ "foo" => "bar"
358
+ })
359
+ end
360
+
361
+ end
362
+
363
+ def test_path_resolution
364
+
365
+ dep = @model.make_new("Department", {
366
+ "name" => "Sales",
367
+ "company" => {
368
+ "name" => "Werhnam-Hogg",
369
+ "CEO" => {
370
+ "name" => "Jennifer",
371
+ "address" => {
372
+ "address" => "42 Some st"
373
+ }
374
+ }
375
+ },
376
+ "employees" => [
377
+ { "name" => "A" },
378
+ { "name" => "B" }
379
+ ]
380
+ })
381
+
382
+ # Test chained path resolution
383
+ pathstr = "Department.company.CEO.address.address"
384
+ obj = @model.resolve_path(dep, pathstr)
385
+ assert_equal(obj, "42 Some st")
386
+ assert_equal(dep._resolve(pathstr), "42 Some st")
387
+
388
+ # Test resolving using Path objects
389
+ path = InterMine::Metadata::Path.new(pathstr, @model)
390
+ obj = @model.resolve_path(dep, path)
391
+ assert_equal(obj, "42 Some st")
392
+ assert_equal(dep._resolve(path), "42 Some st")
393
+
394
+ # Test resolving items in collections
395
+ pathstr_with_index = "Department.employees[1].name"
396
+ obj = @model.resolve_path(dep, pathstr_with_index)
397
+ assert_equal(obj, "B")
398
+ assert_equal(dep._resolve(pathstr_with_index), "B")
399
+
400
+ # Check bad paths
401
+ assert_raise ArgumentError do
402
+ @model.resolve_path(dep, "Department.company.foo")
403
+ end
404
+
405
+ # Check legal but irrelevant paths
406
+ assert_raise ArgumentError do
407
+ @model.resolve_path(dep, "Employee.department.name")
408
+ end
409
+
410
+ # Check non-indexed collection lookup
411
+ assert_raise ArgumentError do
412
+ @model.resolve_path(dep, "Department.employees.name")
413
+ end
414
+
415
+ end
416
+
417
+ end