root/GearsORM/trunk/tests/test_relations.html

Revision 407, 5.2 kB (checked in by uriel, 7 months ago)

*added test for level 2+ relations
*fixed bug where rowid wasn`t fetched for related models

Line 
1 <html>
2         <head>
3                 <script src="../gears_init.js"></script>
4                 <script src="../GearsORM.js"></script>
5                 <script src="../GearsORM.Events.js"></script>
6                 <script src="../GearsORM.ResultIterator.js"></script>
7                 <script src="../GearsORM.Sql.js"></script>
8                 <script src="../GearsORM.Fields.js"></script>
9                 <script src="../GearsORM.Model.js"></script>
10                 <script src="../GearsORM.Introspection.js"></script>
11                 <script src="../GearsORM.Transaction.js"></script>
12                 <script>
13                         GearsORM.dbName = "test.relations";
14                         var Corporation = new GearsORM.Model({
15                                 name:"Corporation",
16                                 fields:
17                                 {
18                                         name:new GearsORM.Fields.String({maxLength:25}),
19                                         companies:new GearsORM.Fields.ManyToOne({related:"Company"})
20                                 }       
21                         });
22                        
23                         var Company = new GearsORM.Model({
24                                 name:"Company",
25                                 fields:
26                                 {
27                                         name:new GearsORM.Fields.String({maxLength:25}),
28                                         pepole:new GearsORM.Fields.ManyToOne({related:"Person"}),
29                                         corporation:new GearsORM.Fields.OneToMany({related:"Corporation"})
30                                 }
31                         });
32                        
33                         var Person = new GearsORM.Model({
34                                 name:"Person",
35                                 fields:
36                                 {
37                                         firstName:new GearsORM.Fields.String({maxLength:25}),
38                                         lastName:new GearsORM.Fields.String({maxLength:25}),
39                                         company:new GearsORM.Fields.OneToMany({related:"Company",onDeleteCascade:true})
40                                 }
41                         });
42                        
43                         var Tests =
44                         {
45                                 up:function()
46                                 {
47                                         Company.dropTable();
48                                         Person.dropTable();
49                                         Corporation.dropTable();
50                                         Corporation.createTable();
51                                         Company.createTable();
52                                         Person.createTable();
53                                         var corp = (new Corporation({name:"Corporation1"})).save();
54                                         (new Company({name:"Company1",corporation:corp})).save();
55                                         (new Company({name:"Company2",corporation:corp})).save();
56                                 },
57                                 "test if create works with relation":function()
58                                 {
59                                         var someone = new Person();
60                                         someone.firstName = "Jhon";
61                                         someone.lastName = "Doe";
62                                         someone.company = Company.select("Company.name = ?",["Company1"]).getOne();
63                                         someone.save();
64                                         UnitTest.assertDefined(someone.rowid);
65                                         var someone2 = new Person();
66                                         someone2.firstName = "Jhon";
67                                         someone2.lastName = "Doe";
68                                         someone2.company = Company.select("Company.name = ?",["Company2"]).getOne();
69                                         someone2.save();
70                                         UnitTest.assertDefined(someone2.rowid);
71                                 },
72                                 "test select from backward relation":function()
73                                 {
74                                         var company1 = Company.select("Company.name = ?",["Company1"]).getOne();
75                                         UnitTest.assertTrue(
76                                                 company1.pepole.select().toArray().length == 1,
77                                                 "there should be only one person in company1"
78                                         );     
79                                 },
80                                 "test remove from backward relation":function()
81                                 {
82                                         var company2 = Company.select("Company.name = ?",["Company2"]).getOne();
83                                         var someone2 = new Person(2);
84                                         someone2.remove();
85                                         UnitTest.assertTrue(
86                                                 company2.pepole.select().getOne() == false,
87                                                 "someone from company2 wasn`t deleted"
88                                         );
89                                 },
90                                 "test cascade on delete":function()
91                                 {
92                                         var aCompany = new Company();
93                                         aCompany.name = "aCompany";
94                                         aCompany.corporation = Corporation.select().getOne();
95                                         aCompany.save();
96                                         var aPerson = new Person();
97                                         aPerson.firstName = "John";
98                                         aPerson.lastName = "Doe";
99                                         aPerson.company = aCompany;
100                                         aPerson.save();
101                                         aCompany.remove();
102                                         UnitTest.assertTrue(
103                                                 aCompany.pepole.select().getOne() == false,
104                                                 "person wasn`t deleted"
105                                         );
106                                         aCompany.remove();
107                                 },
108                                 "test for 2+ level depth of relations":function()
109                                 {
110                                         var corp = new Corporation();
111                                         corp.name = "Test Corporation 1";
112                                         corp.save();
113                                         var comp = new Company();
114                                         comp.name = "Test Company 1";
115                                         comp.corporation = corp;
116                                         comp.save();
117                                         var person = new Person();
118                                         person.firstName = "John";
119                                         person.lastName = "Doe";
120                                         person.company = comp;
121                                         person.save();
122                                        
123                                         var personFromDb = new Person(person.rowid);
124                                         UnitTest.assertTrue(
125                                                 !!personFromDb.company &&
126                                                 !!personFromDb.company.corporation &&
127                                                 personFromDb.company.rowid == comp.rowid &&
128                                                 personFromDb.company.corporation.rowid == corp.rowid,
129                                                 "related models weren`t selected"
130                                         );
131                                 },
132                                 "test if forigen key is enforced in a insert":function()
133                                 {
134                                         var someone = new Person();
135                                         someone.firstName = "John";
136                                         someone.lastName = "Doe";
137                                         someone.company = 100;//a invalid company value
138                                         try
139                                         {
140                                                 someone.save();
141                                         }
142                                         catch(e)
143                                         {
144                                                 return;
145                                         }
146                                         throw new Error("a exception didn`t happen even that the insert vaiolate the forigen key");
147                                 },
148                                 "test if forigen key is enforced in a update":function()
149                                 {
150                                         var someone = new Person();
151                                         someone.firstName = "John";
152                                         someone.lastName = "Doe";
153                                         someone.company = 1;
154                                         someone.save();
155                                         try
156                                         {
157                                                 someone.company = 100;//a invalid company value
158                                                 someone.save();
159                                         }
160                                         catch(e)
161                                         {
162                                                 return;
163                                         }
164                                         throw new Error("a exception didn`t happen even that the insert vaiolate the forigen key");
165                                 },
166                                 down:function()
167                                 {
168                                         Person.dropTable();
169                                         Company.dropTable();
170                                 }
171                         };
172                 </script>
173                 <script src="unit_test.js"></script>
174         </head>
175         <body>
176                
177         </body>
178 </html>
Note: See TracBrowser for help on using the browser.