1
2
3
4 package org.melati.admin.test;
5
6 import java.util.ArrayList;
7
8 import junit.framework.AssertionFailedError;
9
10 import net.sourceforge.jwebunit.html.Cell;
11 import net.sourceforge.jwebunit.html.Row;
12 import net.sourceforge.jwebunit.html.Table;
13
14 import org.melati.JettyWebTestCase;
15 import org.melati.util.HTMLUtils;
16
17
18
19
20
21
22 public class AdminJettyWebTest extends JettyWebTestCase {
23 private String dbName = "melatijunit";
24
25
26
27
28 public AdminJettyWebTest() {
29 super();
30 }
31
32
33
34 public AdminJettyWebTest(String name) {
35 super(name);
36 }
37
38
39
40
41
42 public static void main(String[] args) throws Exception {
43 startServer(8080);
44 }
45
46
47
48
49
50 public void testBadUrl() {
51 setScriptingEnabled(false);
52 beginAt("/Admin/" + dbName + "/Unknown");
53 assertTextPresent("Melati Error Template");
54 }
55
56
57
58 public void testAdminMain() {
59 setScriptingEnabled(false);
60 beginAt("/Admin/" + dbName + "/Main");
61 assertTextPresent("You need a frames enabled browser to use the Admin Suite");
62 }
63
64
65
66 public void testAdminTop() {
67 setScriptingEnabled(false);
68 beginAt("/Admin/" + dbName + "/Top");
69 assertTextPresent("Melati Database Admin Suite - Options for Melatijunit database");
70 }
71
72
73
74 public void testAdminTopWithTable() {
75 setScriptingEnabled(false);
76 beginAt("/Admin/" + dbName + "/user/Top");
77 assertTextPresent("Melati Database Admin Suite - Options for Melatijunit database");
78 }
79
80
81
82 public void testAdminTopWithTableAndTroid() {
83 setScriptingEnabled(false);
84 beginAt("/Admin/" + dbName + "/user/0/Top");
85 assertTextPresent("Melati Database Admin Suite - Options for Melatijunit database");
86 }
87
88
89
90
91 public void testUpload() {
92 setScriptingEnabled(false);
93 beginAt("/Admin/" + dbName + "/user/Upload?field=tim");
94 assertTextPresent("File to upload:");
95 }
96
97
98
99
100 public void testAdminSpecialised() {
101 setScriptingEnabled(false);
102 loginAsAdministrator();
103 gotoPage("/Admin/admintest/uploadedfile/Main");
104 gotoRootWindow();
105 gotoFrame("admin_top");
106 setWorkingForm("goto");
107 selectOption("goto","Uploaded File");
108 assertFormPresent("goto");
109 submit();
110 setScriptingEnabled(true);
111 gotoRootWindow();
112 gotoFrame("admin_bottom");
113 gotoFrame("admin_left");
114 gotoFrame("admin_navigation");
115 clickLink("add");
116 gotoRootWindow();
117 gotoFrame("admin_bottom");
118 gotoFrame("admin_record");
119
120 setTextField("field_filename","test.txt");
121 clickLinkWithText("Upload a new file");
122 gotoWindow("filename");
123 setTextField("file","/dist/melati/melati/src/main/java/org/melati/admin/static/file.gif");
124
125 submit();
126 gotoFrame("admin_bottom");
127 gotoFrame("admin_record");
128 submit();
129 gotoPage("/Admin/admintest/uploadedfile/0/Edit");
130 assertTextPresent("Hi");
131 }
132
133
134
135
136 public void testAdminSpecialisedHandler() {
137 setScriptingEnabled(false);
138 beginAt("/Admin/admintest/specialised/Main");
139 gotoAddRecord("Specialised");
140 setTextField("field_name", "test");
141 submit();
142 assertTextPresent("Done");
143 beginAt("/Admin/admintest/specialised/0/NotAnAdminMethod");
144 assertTextPresent("Hi, I'm Special.");
145
146 beginAt("/Admin/admintest/specialised/0/Edit");
147 assertTextPresent("Hi, I'm Special.");
148 }
149
150
151
152
153
154 public void testNoPrimarySelect() {
155 setScriptingEnabled(false);
156 beginAt("/Admin/admintest/user/PrimarySelect");
157 assertTablePresent("primarySelectTable");
158 beginAt("/Admin/admintest/uploadedfile/PrimarySelect");
159 assertTableNotPresent("primarySelectTable");
160 beginAt("/Admin/admintest/user/PrimarySelect?field_name=");
161 assertTablePresent("primarySelectTable");
162
163
164 beginAt("/Admin/admintest/specialised/0/PrimarySelect");
165 assertTableNotPresent("primarySelectTable");
166
167 }
168
169
170
171
172
173 public void testDescendingOrder() {
174 setScriptingEnabled(false);
175 beginAt("/Admin/admintest/user/Selection?target=admin_record&returnTarget=admin_record&field_id=0&field_order-1=1&field_order-1-toggle=true");
176 beginAt("/Admin/admintest/user/Selection?target=admin_record&returnTarget=admin_record&field_id=0&field_order-1=1&field_order-1-toggle=true");
177 beginAt("/Admin/admintest/uploadedfile/Selection?target=admin_record&returnTarget=admin_record&field_order-1=70&field_order-1-toggle=true");
178 beginAt("/Admin/admintest/uploadedfile/Selection?target=admin_record&returnTarget=admin_record&field_order-1=70&field_order-1-toggle=true");
179 }
180
181
182
183 public void testAdminBottom() {
184 setScriptingEnabled(false);
185 beginAt("/Admin/" + dbName + "/user/Bottom");
186
187 }
188
189
190
191 public void testAdminRight() {
192 setScriptingEnabled(false);
193 beginAt("/Admin/" + dbName + "/user/0/Right");
194
195 }
196
197
198
199 public void testAdminPrimarySelect() {
200 setScriptingEnabled(false);
201 beginAt("/Admin/" + dbName + "/user/PrimarySelect");
202 assertTextPresent("Full name");
203 }
204
205
206
207 public void testAdminSelection() {
208 setScriptingEnabled(false);
209 beginAt("/Admin/" + dbName + "/user/Selection?target=&returnTarget=");
210 assertTextPresent("Full name");
211 assertTextPresent("Melati guest user");
212 clickLinkWithText("Full name");
213 Table s = getTable("selectionTable");
214 ArrayList rows = s.getRows();
215 for (int i = 0; i< rows.size(); i++) {
216 ArrayList cells = ((Row)rows.get(i)).getCells();
217 for (int j = 0; j< cells.size(); j++) {
218 String value = ((Cell)cells.get(j)).getValue();
219 if(i == 2 && j == 2)
220 assertEquals("_guest_", value);
221 if(i == 3 && j == 2)
222 assertEquals("_administrator_", value);
223 }
224 }
225 clickLinkWithText("Full name");
226 s = getTable("selectionTable");
227 rows = s.getRows();
228 for (int i = 0; i< rows.size(); i++) {
229 ArrayList cells = ((Row)rows.get(i)).getCells();
230 for (int j = 0; j< cells.size(); j++) {
231 String value = ((Cell)cells.get(j)).getValue();
232 if(i == 2 && j == 2)
233 assertEquals("_administrator_", value);
234 if(i == 3 && j == 2)
235 assertEquals("_guest_", value);
236 }
237 }
238 clickLinkWithText("Full name");
239 s = getTable("selectionTable");
240 rows = s.getRows();
241 for (int i = 0; i< rows.size(); i++) {
242 ArrayList cells = ((Row)rows.get(i)).getCells();
243 for (int j = 0; j< cells.size(); j++) {
244 String value = ((Cell)cells.get(j)).getValue();
245 if(i == 2 && j == 2)
246 assertEquals("_guest_", value);
247 if(i == 3 && j == 2)
248 assertEquals("_administrator_", value);
249 }
250 }
251 clickLinkWithText("Full name");
252 s = getTable("selectionTable");
253 rows = s.getRows();
254 for (int i = 0; i< rows.size(); i++) {
255 ArrayList cells = ((Row)rows.get(i)).getCells();
256 for (int j = 0; j< cells.size(); j++) {
257 String value = ((Cell)cells.get(j)).getValue();
258 if(i == 2 && j == 2)
259 assertEquals("_administrator_", value);
260 if(i == 3 && j == 2)
261 assertEquals("_guest_", value);
262 }
263 }
264 }
265
266
267
268 public void testSelectionPaging() {
269 setScriptingEnabled(false);
270 beginAt("/Admin/" + dbName + "/columninfo/Selection?target=&returnTarget=");
271 clickLinkWithText(">");
272 clickLinkWithText(">");
273 clickLinkWithText(">");
274 assertTextPresent("Records 61 to 69 of 69");
275 clickLinkWithText("<");
276 clickLinkWithText("<");
277 clickLinkWithText("<");
278 assertTextPresent("Records 1 to 20 of 69");
279 }
280
281
282
283 public void testAdminEditHeader() {
284 setScriptingEnabled(false);
285 beginAt("/Admin/" + dbName + "/user/0/EditHeader");
286 assertTextPresent("User");
287 assertTextPresent("_guest_");
288 }
289
290
291
292 public void testAdminEdit() {
293 setScriptingEnabled(false);
294 beginAt("/Admin/" + dbName + "/user/0/Edit");
295 assertTextPresent("Full name");
296 assertTextPresent("_guest_");
297 }
298
299
300
301
302 public void testAdminEditField() {
303 setScriptingEnabled(false);
304 beginAt("/Admin/admintest/markup/Main");
305 gotoAddRecord("Markup");
306 assertEquals("Á",HTMLUtils.entityFor("\u00C1".charAt(0),false, null, false));
307
308
309
310
311
312
313
314 setTextField("field_text", "\u00C1");
315 submit();
316 assertTextPresent("Done");
317 beginAt("/Admin/admintest/markup/0/Edit");
318 assertEquals("\u00C1",getFormFieldValue("field_text"));
319 assertTextPresent("\u00C1");
320 }
321
322
323
324
325 public String getFormFieldValue(String fieldName) {
326 try {
327 return getTester().getElementAttributByXPath(
328 "//input[@name='" + fieldName + "']", "value");
329 } catch (AssertionFailedError e) {
330 System.out.println("Form element not present:" + fieldName);
331 System.out.println(getTester().getPageSource());
332 throw e;
333 }
334
335 }
336
337
338
339
340 public String getFormTextareaValue(String fieldName) {
341 return getTester().getElementTextByXPath(
342 "//textarea[@name='" + fieldName + "']");
343
344 }
345
346
347
348
349 public void testAdminEditAdministrator() {
350 setScriptingEnabled(false);
351 beginAt("/Admin/" + dbName + "/user/1/Edit");
352 assertTextPresent("You need to log in.");
353 setTextField("field_login", "_administrator55_");
354 setTextField("field_password", "FIXME");
355 checkCheckbox("rememberme");
356 submit("action");
357 setTextField("field_login", "_administrator_");
358 setTextField("field_password", "FIXME_not");
359 checkCheckbox("rememberme");
360 submit("action");
361 setTextField("field_login", "_administrator_");
362 setTextField("field_password", "FIXME");
363 checkCheckbox("rememberme");
364 submit("action");
365 assertTextPresent("Full name");
366 assertTextPresent("_administrator_");
367
368
369 gotoPage("/Logout/" + dbName + "");
370 gotoPage("/Admin/" + dbName + "/user/1/Edit");
371 setTextField("field_login", "_administrator_");
372 setTextField("field_password", "FIXME");
373 submit("action");
374 assertTextPresent("Updated a User Record");
375 assertTextPresent("Done");
376 }
377
378
379
380 public void testEverythingIsProtected() {
381 setScriptingEnabled(false);
382 beginAt("/Admin/everything/Main");
383 assertTextPresent("You need to log in");
384
385 }
386
387
388
389 public void testAdminTree() {
390 setScriptingEnabled(true);
391 beginAt("/Admin/" + dbName + "/user/0/Record");
392 gotoFrame("admin_edit_header");
393 assertTextPresent("_guest_");
394 assertTextPresent("[ Group membership ]");
395 clickLink("recordTree");
396 gotoRootWindow();
397 gotoFrame("admin_edit_user_0");
398 assertTextPresent("Melati guest user tree");
399 clickLinkWithText("Melati guest user");
400 }
401
402
403
404 public void testAdminTreeNoScript() {
405 setScriptingEnabled(false);
406 beginAt("/Admin/" + dbName + "/user/0/Tree");
407 assertTextPresent("Melati guest user tree");
408 }
409
410
411
412 public void testAdminTableTree() {
413 setScriptingEnabled(true);
414 beginAt("/Admin/" + dbName + "/user/Table");
415 gotoFrame("admin_navigation");
416 clickLink("tableTree");
417 gotoRootWindow();
418 gotoFrame("admin_selection");
419 assertTextPresent("User table tree");
420 assertLinkPresentWithText("Melati guest user");
421 assertLinkPresentWithText("Melati database administrator");
422 }
423
424
425
426 public void testAdminSelectionWindow() {
427 setScriptingEnabled(false);
428 beginAt("/Admin/" + dbName + "/user/SelectionWindow?returnfield=field_user");
429 assertTextPresent("Select a User");
430 }
431
432
433
434 public void testAdminSelectionWindowPrimarySelect() {
435 setScriptingEnabled(false);
436 beginAt("/Admin/" + dbName + "/user/SelectionWindowPrimarySelect?returnfield=field_user");
437 assertTextPresent("Full name");
438 }
439
440
441
442 public void testAdminSelectionWindowSelection() {
443 setScriptingEnabled(false);
444 beginAt("/Admin/" + dbName + "/user/SelectionWindowSelection?returnfield=field_user");
445 assertTextPresent("Records 1 to 2 of 2");
446 }
447
448
449
450 public void testAdminPopup() {
451 setScriptingEnabled(false);
452 beginAt("/Admin/" + dbName + "/user/PopUp");
453 assertTextPresent("Search User Table");
454 }
455
456
457
458 public void testAdminDSD() {
459 setScriptingEnabled(false);
460 beginAt("/Admin/" + dbName + "/DSD");
461 assertTextPresent("Generated for _guest_");
462 assertTextPresent("package org.melati.poem;");
463 }
464
465
466
467 public void testLoginWithContinuation() {
468 setScriptingEnabled(false);
469 beginAt("/Login/" + dbName + "?continuationURL=" + contextUrl("/index.html"));
470 setTextField("field_login", "_administrator_");
471 setTextField("field_password", "FIXME");
472 checkCheckbox("rememberme");
473 submit("action");
474 assertTextPresent("Hello World!");
475 }
476
477
478
479
480 public void testSetupStory() {
481 setScriptingEnabled(false);
482 loginAsAdministrator();
483 gotoFrame("admin_top");
484 clickLinkWithText("Setup");
485 gotoRootWindow();
486 gotoFrame("admin_bottom");
487 assertTextPresent("Done");
488
489
490
491
492
493
494
495
496 }
497
498
499
500
501
502 public void testSearchAndGoto() {
503 setScriptingEnabled(false);
504 beginAt("/Admin/" + dbName + "/Main");
505 gotoRootWindow();
506 gotoFrame("admin_top");
507 setWorkingForm("goto");
508 selectOption("goto","Column");
509 assertFormPresent("goto");
510 submit();
511 gotoRootWindow();
512 gotoFrame("admin_bottom");
513 gotoFrame("admin_left");
514 gotoFrame("admin_navigation");
515 clickLink("search");
516 gotoWindow("admin_search");
517 setTextField("field_displayname", "Id");
518 selectOption("field_order-1","Id");
519 selectOption("field_order-2","Owning table");
520 submit();
521 gotoRootWindow();
522 gotoFrame("admin_bottom");
523 gotoFrame("admin_left");
524 gotoFrame("admin_selection");
525 assertTextPresent("Records 1 to 9 of 9");
526
527
528 }
529
530
531
532 public void testCreateTableStory() {
533 setScriptingEnabled(false);
534 loginAsAdministrator();
535 gotoAddRecord("Table");
536 setTextField("field_name", "test");
537 setTextField("field_displayname", "Test");
538 setTextField("field_description", "A Test table");
539 setTextField("field_displayorder", "0");
540 selectOption("field_category","Normal");
541 submit();
542 assertTextPresent("Done");
543 String tableTroid = getElementAttributByXPath(
544 "//input[@name='" + "troid" + "']", "value");
545 gotoPage("/Admin/" + dbName + "/tableinfo/" + tableTroid + "/Main");
546 gotoFrame("admin_bottom");
547 gotoFrame("admin_record");
548 gotoFrame("admin_edit_header");
549 clickLinkWithText("Column");
550 gotoRootWindow();
551 gotoFrame("admin_bottom");
552 gotoFrame("admin_record");
553 gotoFrame("admin_edit_tableinfo_" + tableTroid);
554 clickLink("create_columninfo");
555 setTextField("field_name", "test");
556 setTextField("field_description", "A Test column");
557 setTextField("field_displayorder", "0");
558 checkCheckbox("field_usercreateable");
559 checkCheckbox("field_indexed");
560
561
562 setTextField("field_displayname", "Test");
563 checkCheckbox("field_nullable");
564 setTextField("field_size", "20");
565 setTextField("field_width", "20");
566 setTextField("field_height", "1");
567 setTextField("field_precision", "1");
568 setTextField("field_scale", "1");
569 submit();
570 assertTextPresent("Done");
571 String columnTroid = getElementAttributByXPath(
572 "//input[@name='" + "troid" + "']", "value");
573
574
575 gotoAddRecord("Test");
576 setTextField("field_test", "test");
577 submit();
578 assertTextPresent("Done");
579 String recordTroid = getElementAttributByXPath(
580 "//input[@name='" + "troid" + "']", "value");
581
582 clickLink("continue");
583 gotoPage("/Admin/" + dbName + "/test/" + recordTroid + "/Main");
584 gotoFrame("admin_bottom");
585 gotoFrame("admin_record");
586 gotoFrame("admin_edit_test_" + recordTroid);
587 submit("action","Duplicate");
588 assertTextPresent("Done");
589
590
591
592 clickLink("continue");
593
594
595 deleteRecord("test", "test", new Integer(recordTroid).intValue());
596 deleteRecord("test", "test", new Integer(recordTroid).intValue() + 1);
597
598 gotoPage("/Admin/" + dbName + "/columninfo/" + columnTroid + "/Main");
599 gotoFrame("admin_bottom");
600 gotoFrame("admin_record");
601 gotoFrame("admin_edit_columninfo_" + columnTroid);
602 submit("action","Delete");
603 assertTextPresent("Done");
604
605 gotoPage("/Admin/" + dbName + "/tableinfo/" + tableTroid + "/Main");
606 gotoFrame("admin_bottom");
607 gotoFrame("admin_record");
608 gotoFrame("admin_edit_tableinfo_" + tableTroid);
609 submit("action","Delete");
610 clickLink("edit_columninfo_" + (new Integer(columnTroid).intValue() -1));
611 submit("action","Delete");
612 assertTextPresent("Done");
613 clickLink("continue");
614 assertTextPresent("Done");
615 clickLink("continue");
616 assertTextPresent("Melati Database Admin Suite - Melatijunit database");
617 }
618 private void gotoAddRecord(String table) {
619 gotoRootWindow();
620 gotoFrame("admin_top");
621 selectOption("goto",table);
622 assertFormPresent("goto");
623 setWorkingForm("goto");
624 submit();
625 gotoRootWindow();
626 gotoFrame("admin_bottom");
627 gotoFrame("admin_left");
628 gotoFrame("admin_navigation");
629 clickLink("add");
630 gotoRootWindow();
631 gotoFrame("admin_bottom");
632 gotoFrame("admin_record");
633 }
634
635
636
637
638
639 private void deleteRecord(String tableName, String uniqueKeyValue, int troid) {
640 gotoPage("/Admin/" + dbName + "/" + tableName + "/Main");
641 gotoFrame("admin_bottom");
642 gotoFrame("admin_left");
643 gotoFrame("admin_selection");
644 clickLinkWithText(uniqueKeyValue);
645 gotoRootWindow();
646 gotoFrame("admin_bottom");
647 gotoFrame("admin_record");
648 gotoFrame("admin_edit_" + tableName + "_" + troid);
649 clickButton("delete");
650 gotoPage("/Admin/" + dbName + "/Main");
651 }
652
653
654
655 private void loginAsAdministrator() {
656 beginAt("/Admin/" + dbName + "/Main");
657 gotoFrame("admin_top");
658 clickButton("login");
659 setTextField("field_login", "_administrator_");
660 setTextField("field_password", "FIXME");
661 checkCheckbox("rememberme");
662 submit("action");
663 }
664 }