View Javadoc
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.exception.TestingEngineResponseException;
11  import net.sourceforge.jwebunit.html.Cell;
12  import net.sourceforge.jwebunit.html.Row;
13  import net.sourceforge.jwebunit.html.Table;
14  
15  import org.melati.JettyWebTestCase;
16  import org.melati.util.HTMLUtils;
17  
18  /**
19   *  
20   * @author timp
21   * @since 2008/01/01
22   */
23  public class AdminJettyWebTest extends JettyWebTestCase {
24     private String dbName = "admintest";
25    
26    public AdminJettyWebTest() {
27      super();
28    }
29    public AdminJettyWebTest(String name) {
30      super(name);
31    }
32    /**
33     * If you don't know by now.
34     * @param args
35     * @throws Exception
36     */
37    public static void main(String[] args) throws Exception {
38      startServer(8080);
39    }
40  
41    /**
42     * There appears to be a problem with gargoyle javascript such that 
43     * we cannot begin at the Main page as this throws NullPointerException, 
44     * The work around is to begin at the server top and then go to the Main page.
45     * 
46     * {@inheritDoc}
47     * @see org.melati.JettyWebTestCase#setUp()
48     */
49    protected void setUp() throws Exception {
50      super.setUp();
51      setScriptingEnabled(true);
52      beginAt("/");
53      
54    }
55  
56    // Test Page calls
57    /**
58     * 
59     */
60    public void testBadUrl() {
61      try { 
62        gotoPage("/Admin/" + dbName + "/Unknown");
63      } catch (TestingEngineResponseException e) { 
64        assertEquals(400, e.getHttpStatusCode());
65      }
66      assertTextPresent("Melati Error Template");
67    }
68    /**
69     * 
70     */
71    public void testAdminMain() {
72      gotoPage("/Admin/" + dbName + "/Main");
73      assertTextPresent("Melati Database Admin Suite - Admintest database");
74    }
75    /**
76     * 
77     */
78    public void testAdminTop() {
79      gotoPage("/Admin/" + dbName + "/Top");
80      assertTextPresent("Melati Database Admin Suite - Options for Admintest database");
81    }
82    /**
83     * 
84     */
85    public void testAdminTopWithTable() {
86      gotoPage("/Admin/" + dbName +  "/user/Top");
87      assertTextPresent("Melati Database Admin Suite - Options for Admintest database");
88    }
89    /**
90     * 
91     */
92    public void testAdminTopWithTableAndTroid() {
93      gotoPage("/Admin/" + dbName +  "/user/0/Top");
94      assertTextPresent("Melati Database Admin Suite - Options for Admintest database");
95    }
96    
97    /**
98     * 
99     */
100   public void testUpload() {
101     gotoPage("/Admin/" + dbName + "/user/Upload?field=tim");
102     assertTextPresent("File to upload:");
103   }
104   
105   public void testProxyNotAllowed() { 
106     try { 
107       gotoPage("/Admin/" + dbName + "/Proxy?http://google.com/");
108       fail("Should have bombed");
109     } catch (TestingEngineResponseException e) { 
110       e = null;
111     }
112   }
113   public void testProxy() { 
114     beginAt("/Display/" + dbName + "?template=org.melati.admin.test.ProxyCaller");
115     clickLinkWithText("CV");
116   }
117   public void testHttpXmlRequestProxy() { 
118     beginAt("/Display/" + dbName + "?template=org.melati.admin.test.ProxyCaller");
119     clickLinkWithText("check");
120   }
121   /**
122    * Test that an AdminSpecialised object has its special templet included in edit.
123    */
124   public void testAdminSpecialised() { 
125     loginAsAdministrator();
126     gotoPage("/Admin/admintest/uploadedfile/Main");
127     gotoRootWindow();
128     gotoFrame("admin_top");
129     setWorkingForm("gotoform");
130     selectOption("table","Uploaded File");
131     assertFormPresent("gotoform");
132     submit();
133     gotoRootWindow();
134     gotoFrame("admin_bottom");
135     gotoFrame("admin_left");
136     gotoFrame("admin_navigation");
137     clickLink("add");
138     gotoRootWindow();
139     gotoFrame("admin_bottom");
140     gotoFrame("admin_record");
141     
142     setTextField("field_filename","test.txt");
143     clickLinkWithText("Upload a new file");
144     gotoWindow("filename");
145     setTextField("file","/dist/melati/melati/src/main/java/org/melati/admin/static/file.gif");
146     
147     submit();
148     gotoRootWindow();
149     gotoFrame("admin_bottom");
150     gotoFrame("admin_record");
151     setScriptingEnabled(false);
152     submit();
153     gotoPage("/Admin/admintest/uploadedfile/0/Edit");
154     assertTextPresent("Hi");    
155   }
156   
157   /**
158    * Test that an AdminSpecialised object invokes its own handler.
159    */
160   public void testAdminSpecialisedHandler() { 
161     setScriptingEnabled(false);
162     gotoPage("/Admin/admintest/specialised/Main");
163     gotoAddRecord("Specialised");
164     setTextField("field_name", "test");
165     submit();
166     assertTextPresent("Done");
167     gotoPage("/Admin/admintest/specialised/0/NotAnAdminMethod");
168     assertTextPresent("Hi, I'm Special."); 
169     // Hmm, is this intended behaviour?
170     gotoPage("/Admin/admintest/specialised/0/Edit");
171     assertTextPresent("Hi, I'm Special.");        
172   }
173   
174   /**
175    * Test that if there is no primary select column on the table 
176    * no primary criteria are displayed. 
177    */
178   public void testNoPrimarySelect() { 
179     setScriptingEnabled(false);
180     gotoPage("/Admin/admintest/specialised/Main");
181     gotoAddRecord("Specialised");
182     setTextField("field_name", "test");
183     submit();
184     gotoPage("/Admin/admintest/specialised/0/NotAnAdminMethod");
185     assertTextPresent("Hi, I'm Special."); 
186     // Hmm, is this intended behaviour?
187     gotoPage("/Admin/admintest/specialised/0/Edit");
188     assertTextPresent("Hi, I'm Special.");        
189 
190     gotoPage("/Admin/admintest/user/PrimarySelect");
191     assertTablePresent("primarySelectTable");
192     gotoPage("/Admin/admintest/uploadedfile/PrimarySelect");
193     assertTableNotPresent("primarySelectTable");
194     gotoPage("/Admin/admintest/user/PrimarySelect?field_name=");
195     assertTablePresent("primarySelectTable");
196 
197     gotoPage("/Admin/admintest/specialised/0/PrimarySelect");
198     assertTableNotPresent("primarySelectTable");
199     
200   }
201   
202 
203   /**
204    *  Getting the coverage is proof enough.
205    */
206   public void testDescendingOrder() { 
207     gotoPage("/Admin/admintest/user/Selection?target=admin_record&returnTarget=admin_record&field_id=0&field_order-1=1&field_order-1-toggle=true");
208     gotoPage("/Admin/admintest/user/Selection?target=admin_record&returnTarget=admin_record&field_id=0&field_order-1=1&field_order-1-toggle=true");
209     gotoPage("/Admin/admintest/uploadedfile/Selection?target=admin_record&returnTarget=admin_record&field_order-1=70&field_order-1-toggle=true");
210     gotoPage("/Admin/admintest/uploadedfile/Selection?target=admin_record&returnTarget=admin_record&field_order-1=70&field_order-1-toggle=true");
211   }
212   
213   public void  testSelectionJSON() throws Exception { 
214  //   assertPageEqual("/Admin/admintest/user/SelectionJSON", "/Admin/admintest/user/SelectionJSON");
215  //   assertPageEqual("/Admin/admintest/user/SelectionJSON?field_include-0=name", "/Admin/admintest/user/SelectionJSON_include_name");
216     try { 
217       gotoPage("/Admin/admintest/user/SelectionJSON?field_include-0=11");
218     } catch (TestingEngineResponseException e) { 
219       e = null; 
220     }
221   }
222   /**
223    * 
224    */
225   public void testAdminBottom() {
226     gotoPage("/Admin/" + dbName + "/user/Bottom");
227     // Hmmm Should assert something, coverage is the thing
228   }
229   /**
230    * 
231    */
232   public void testAdminRecord() {
233     gotoPage("/Admin/" + dbName + "/user/0/Record");
234     // Hmmm Should assert something, coverage is the thing
235   }
236   /**
237    * 
238    */
239   public void testAdminPrimarySelect() {
240     gotoPage("/Admin/" + dbName + "/user/PrimarySelect");
241     assertTextPresent("Full name");
242   }
243   /**
244    * 
245    */
246   public void testAdminSelection() {
247     gotoPage("/Admin/" + dbName + "/user/Selection?target=&returnTarget=");
248     assertTextPresent("Full name");
249     assertTextPresent("Melati guest user");
250     clickLinkWithText("Full name");
251     Table s = getTable("selectionTable");
252     ArrayList<?> rows = s.getRows();
253     for (int i = 0; i< rows.size(); i++) { 
254       ArrayList<?> cells = ((Row)rows.get(i)).getCells();
255       for (int j = 0; j< cells.size(); j++) { 
256         String value = ((Cell)cells.get(j)).getValue();
257         if(i == 2 && j == 2)
258           assertEquals("_guest_", value.trim());
259         if(i == 3 && j == 2)
260           assertEquals("_administrator_", value.trim());
261       }
262     }
263     clickLinkWithText("Full name");
264     s = getTable("selectionTable");
265     rows = s.getRows();
266     for (int i = 0; i< rows.size(); i++) { 
267       ArrayList<?> cells = ((Row)rows.get(i)).getCells();
268       for (int j = 0; j< cells.size(); j++) { 
269         String value = ((Cell)cells.get(j)).getValue();
270         if(i == 2 && j == 2)
271           assertEquals("_administrator_", value.trim());
272         if(i == 3 && j == 2)
273           assertEquals("_guest_", value.trim());
274       }
275     }
276     clickLinkWithText("Full name");
277     s = getTable("selectionTable");
278     rows = s.getRows();
279     for (int i = 0; i< rows.size(); i++) { 
280       ArrayList<?> cells = ((Row)rows.get(i)).getCells();
281       for (int j = 0; j< cells.size(); j++) { 
282         String value = ((Cell)cells.get(j)).getValue();
283         if(i == 2 && j == 2)
284           assertEquals("_guest_", value.trim());
285         if(i == 3 && j == 2)
286           assertEquals("_administrator_", value.trim());
287       }
288     }
289     clickLinkWithText("Full name");
290     s = getTable("selectionTable");
291     rows = s.getRows();
292     for (int i = 0; i< rows.size(); i++) { 
293       ArrayList<?> cells = ((Row)rows.get(i)).getCells();
294       for (int j = 0; j< cells.size(); j++) { 
295         String value = ((Cell)cells.get(j)).getValue();
296         if(i == 2 && j == 2)
297           assertEquals("_administrator_", value.trim());
298         if(i == 3 && j == 2)
299           assertEquals("_guest_", value.trim());
300       }
301     }
302   }
303   /**
304    * Can we get to page three and back.
305    */
306   public void testSelectionPaging() { 
307     gotoPage("/Admin/" + dbName + "/columnInfo/Selection?target=&returnTarget=");
308     clickLinkWithText(">");
309     clickLinkWithText(">");
310     clickLinkWithText(">");
311     assertTextPresent("Records 61 to 80 of 90");
312     clickLinkWithText("<");
313     clickLinkWithText("<");
314     clickLinkWithText("<");
315     assertTextPresent("Records 1 to 20 of 90");
316   }
317   /**
318    * 
319    */
320   public void testAdminEditHeader() {
321     gotoPage("/Admin/" + dbName + "/parent/0/EditHeader");
322     clickLink("admin_edit_Parent_0");
323     gotoWindow("admin_edit_Parent_0");
324     assertElementPresent("selection");
325     
326   }
327   /**
328    * 
329    */
330   public void testAdminEdit() {
331     gotoPage("/Admin/" + dbName + "/user/0/Edit");
332     assertTextPresent("Full name");
333     assertTextPresent("_guest_");
334     clickLinkWithText("More ...");
335     assertLinkNotPresentWithText("More ...");
336   }
337   
338   /**
339    * 
340    */
341   public void testAdminEditFieldNoJS() { 
342     gotoPage("/Admin/admintest/markup/Main");
343     gotoAddRecord("Markup");
344     assertEquals("&Aacute;",HTMLUtils.entityFor("\u00C1".charAt(0),false, null, false));
345     //char it = 193;
346     //System.err.println("\u00C1".charAt(0));
347     //System.err.println(new Integer("\u00C1".charAt(0)));
348     //System.err.println(new Integer("?".charAt(0)));
349     //System.err.println("Acirc=" +new Integer("Â".charAt(0)));
350     //System.err.println("");
351 
352     setTextField("field_text", "\u00C1");
353     setScriptingEnabled(false);
354     submit("action", "Create");
355     assertTextPresent("Done");
356     gotoPage("/Admin/admintest/markup/0/Edit");
357     assertEquals("\u00C1",getFormFieldValue("field_text"));
358     assertTextPresent("\u00C1");
359   }
360   
361   // Seems to work in real life
362   public void brokenestAdminEditField() { 
363     gotoPage("/Admin/admintest/markup/Main");
364     gotoAddRecord("Markup");
365     assertEquals("&Aacute;",HTMLUtils.entityFor("\u00C1".charAt(0),false, null, false));
366     //char it = 193;
367     //System.err.println("\u00C1".charAt(0));
368     //System.err.println(new Integer("\u00C1".charAt(0)));
369     //System.err.println(new Integer("?".charAt(0)));
370     //System.err.println("Acirc=" +new Integer("Â".charAt(0)));
371     //System.err.println("");
372 
373     setTextField("field_text", "\u00C1");
374     submit();
375     //assertNotNull("Main body element should have id 'edit'", getElementById("edit"));
376     submit("action");
377     gotoPage("/Admin/admintest/markup/Selection");
378     assertEquals("\u00C1",getFormFieldValue("field_text"));
379     assertTextPresent("\u00C1");
380   }
381   /**
382    * @param fieldName
383    * @return value of named field
384    */
385   public String getFormFieldValue(String fieldName) { 
386     try { 
387       return getTester().getElementAttributeByXPath(
388             "//input[@name='" + fieldName + "']", "value");
389     } catch (AssertionFailedError e) { 
390       System.out.println("Form element not present:" + fieldName);
391       System.out.println(getTester().getPageSource());
392       throw e;             
393     }
394     
395   }
396   /**
397    * @param fieldName
398    * @return value of named field
399    */
400   public String getFormTextareaValue(String fieldName) { 
401     return getTester().getElementTextByXPath(
402             "//textarea[@name='" + fieldName + "']");
403     
404   }
405 
406   /**
407    * Test that login is required.
408    */
409   public void testAdminEditAdministrator() {
410     gotoPage("/Admin/" + dbName + "/user/1/Edit");
411     assertTextPresent("You need to log in.");
412     setTextField("field_login", "_administrator55_");
413     setTextField("field_password", "FIXME");
414     checkCheckbox("rememberme");
415     submit("action");
416     setTextField("field_login", "_administrator_");
417     setTextField("field_password", "FIXME_not");
418     checkCheckbox("rememberme");
419     submit("action");
420     setTextField("field_login", "_administrator_");
421     setTextField("field_password", "FIXME");
422     checkCheckbox("rememberme");
423     submit("action");
424     assertTextPresent("Full name");
425     assertTextPresent("_administrator_");
426 
427     // Note that logging out has no effect if rememberme was chosen
428     gotoPage("/Logout/" + dbName + "");
429     gotoPage("/Admin/" + dbName + "/user/1/Edit");
430     setTextField("field_login", "_administrator_");
431     setTextField("field_password", "FIXME");
432     assertTextFieldEquals("field_email", "");
433     setTextField("field_email", "test@test.com");
434     submit("action", "Update");
435     assertTextFieldEquals("field_email", "test@test.com");
436     submit("action", "Update");
437     assertNotNull("Main body element should have id 'edit'", getElementById("edit"));
438   }
439   /**
440    * Test that we are challenged to get into the everything db.
441    */
442   public void testEverythingIsProtected() {
443     gotoPage("/Admin/everything/Main");
444     assertTextPresent("You need to log in");
445     
446   }
447   /**
448    * 
449    */
450   public void testAdminTree() {
451     gotoPage("/Admin/" + dbName + "/user/0/Record");
452     gotoFrame("admin_edit_header");
453     assertTextPresent("_guest_");
454     assertTextPresent("[ Group membership ]");
455     clickLink("recordTree");
456     gotoRootWindow();
457     gotoFrame("admin_edit_User_0");
458     assertTextPresent("Melati guest user tree");
459     clickLinkWithText("Melati guest user");
460   }
461   /**
462    * 
463    */
464   public void testAdminTreeNoScript() {
465     gotoPage("/Admin/" + dbName + "/user/0/Tree");
466     assertTextPresent("Melati guest user tree");
467   }
468   /**
469    * 
470    */
471   public void testAdminTableTree() {
472     gotoPage("/Admin/" + dbName + "/user/Table");
473     gotoFrame("admin_navigation");
474     clickLink("tableTree");
475     gotoRootWindow();
476     gotoFrame("admin_selection");
477     assertTextPresent("User table tree");
478     assertLinkPresentWithText("Melati guest user");
479     assertLinkPresentWithText("Melati database administrator");
480   }
481   /**
482    * 
483    */
484   public void testAdminSelectionWindow() {
485     gotoPage("/Admin/" + dbName + "/user/SelectionWindow?returnfield=field_user");
486     assertTextPresent("Select a User");
487   }
488   /**
489    * 
490    */
491   public void testAdminSelectionWindowPrimarySelect() {
492     gotoPage("/Admin/" + dbName + "/user/SelectionWindowPrimarySelect?returnfield=field_user");
493     assertTextPresent("Full name");
494   }
495   /**
496    * 
497    */
498   public void testAdminSelectionWindowSelection() {
499     gotoPage("/Admin/" + dbName + "/user/SelectionWindowSelection?returnfield=field_user");
500     assertTextPresent("Records 1 to 2 of 2");
501   }
502   /**
503    * 
504    */
505   public void testAdminSelectionCSV() {
506     gotoPage("/Admin/" + dbName + "/columnInfo/Selection");
507     assertTextPresent("Records 1 to 20 of 90");
508     clickLink("csv");
509     gotoWindow("_columnInfocsv");
510     assertTextPresent("\"0\",\"0\",\"id\",\"10\",\"false\",");
511   }
512   /**
513    * 
514    */
515   public void testAdminPopup() {
516     gotoPage("/Admin/" + dbName + "/user/PopUp");
517     assertTextPresent("Search User Table");
518   }
519   /**
520    * 
521    */
522   public void testAdminDSD() {
523     gotoPage("/Admin/" + dbName + "/DSD");
524     assertTextPresent("Generated for _guest_");
525     assertTextPresent("package org.melati.admin.test;");
526   }
527   /**
528    * Move to login
529    */
530   public void testLoginWithContinuation() {
531     gotoPage("/Login/" + dbName + "?continuationURL=" + contextUrl("/index.html"));
532     setTextField("field_login", "_administrator_");
533     setTextField("field_password", "FIXME");
534     checkCheckbox("rememberme");
535     submit("action");
536     assertTextPresent("Hello World!");
537   }
538   
539   /**
540    * Test setting the defaults, with javascript enabled
541    */
542   public void testSetupStory() { 
543     loginAsAdministrator();
544     gotoFrame("admin_top");
545     clickLinkWithText("Setup");
546     gotoRootWindow();
547     gotoFrame("admin_bottom");
548     gotoFrame("admin_record");
549     gotoFrame("admin_edit_setting");
550     assertNotNull(getElementById("blank"));
551   }
552   /**
553    * Test setting the defaults, with javascript disabled
554    */
555   public void testSetupStoryNoJS() { 
556     loginAsAdministrator();
557     gotoFrame("admin_top");
558     setScriptingEnabled(false);
559     clickLinkWithText("Setup");
560     gotoRootWindow();
561     gotoFrame("admin_bottom");
562     assertTextPresent("Done");
563   }
564 
565   
566   /**
567    * Search for a set of records.
568    */
569   public void testSearchAndGoto() {
570     //setScriptingEnabled(false);
571     gotoPage("/Admin/" + dbName + "/Main");
572     gotoRootWindow();
573     gotoFrame("admin_top");
574     setWorkingForm("gotoform");
575     selectOption("table","Column");
576     assertFormPresent("gotoform");
577     submit();
578     gotoRootWindow();
579     gotoFrame("admin_bottom");
580     gotoFrame("admin_left");
581     gotoFrame("admin_navigation");
582     clickLink("search");
583     gotoWindow("admin_search");
584     setTextField("field_displayname", "Id");
585     selectOptionByValue("field_order-1","42"); //Id
586     selectOptionByValue("field_order-2","43"); //Owning table
587     submit();
588     gotoRootWindow();
589     gotoFrame("admin_bottom");
590     gotoFrame("admin_left");
591     gotoFrame("admin_selection");
592     assertTextPresent("Records 1 to 15 of 15");
593     //String page = getPageSource();
594     //System.err.println(page);
595   }
596   /**
597    * User story.
598    */
599   public void testCreateTableStory() { 
600     setScriptingEnabled(false);
601     loginAsAdministrator();
602     gotoAddRecord("Table");
603     setTextField("field_name", "test");
604     setTextField("field_displayname", "Test");
605     setTextField("field_description", "A Test table");
606     setTextField("field_displayorder", "0");
607     selectOptionByValue("field_category","3"); //Normal
608     submit();
609     assertTextPresent("Done");
610     String tableTroid = getElementAttributeByXPath(
611         "//input[@name='" + "troid" + "']", "value");
612     gotoPage("/Admin/" + dbName + "/tableinfo/" + tableTroid + "/Main"); 
613     System.err.println("Found created table troid " + tableTroid);
614     gotoFrame("admin_bottom");
615     gotoFrame("admin_record");
616     gotoFrame("admin_edit_header");
617     clickLinkWithText("Column");
618     gotoRootWindow();
619     gotoFrame("admin_bottom");
620     gotoFrame("admin_record");
621     gotoFrame("admin_edit_tableInfo_" + tableTroid);
622     clickLink("create_columnInfo");
623     setTextField("field_name", "test");
624     setTextField("field_description", "A Test column");
625     setTextField("field_displayorder", "0");
626     checkCheckbox("field_usercreateable");
627     checkCheckbox("field_indexed");
628     // We want to duplicate
629     //checkCheckbox("field_unique");
630     setTextField("field_displayname", "Test");
631     checkCheckbox("field_nullable");
632     setTextField("field_size", "20");
633     setTextField("field_width", "20");
634     setTextField("field_height", "1");
635     setTextField("field_precision", "1");
636     setTextField("field_scale", "1");
637     submit();
638     assertTextPresent("Done");
639     String columnTroid = getElementAttributeByXPath(
640         "//input[@name='" + "troid" + "']", "value");
641     System.err.println("Found created troid " + columnTroid);
642     gotoAddRecord("Test");
643     setTextField("field_test", "test");
644     submit();
645     assertTextPresent("Done");
646     String recordTroid = getElementAttributeByXPath(
647         "//input[@name='" + "troid" + "']", "value");
648     
649     clickLink("continue");
650     gotoPage("/Admin/" + dbName + "/test/" + recordTroid + "/Main"); 
651     gotoFrame("admin_bottom");    
652     gotoFrame("admin_record");
653     gotoFrame("admin_edit_test_" + recordTroid);
654     submit("action","Duplicate");
655     assertTextPresent("Done");
656     //String href = getElementAttributByXPath(
657     //    "//a[@id='" + "continue" + "']", "href");
658     //System.err.println("Continue:" + href);
659     clickLink("continue");
660     
661     // Records will be sorted by id
662     deleteRecord("test", "test", new Integer(recordTroid).intValue());
663     deleteRecord("test", "test", new Integer(recordTroid).intValue() + 1);
664     
665     gotoPage("/Admin/" + dbName + "/columnInfo/" + columnTroid + "/Main"); 
666     gotoFrame("admin_bottom");    
667     gotoFrame("admin_record");
668     gotoFrame("admin_edit_columnInfo_" + columnTroid);
669     submit("action","Delete");
670     assertTextPresent("Done");
671 
672     int c = new Integer(columnTroid).intValue() -1;
673     columnTroid = new Integer(c).toString(); 
674     gotoPage("/Admin/" + dbName + "/columninfo/" + columnTroid + "/Main"); 
675     gotoFrame("admin_bottom");    
676     gotoFrame("admin_record");
677     gotoFrame("admin_edit_columnInfo_" + columnTroid);
678     submit("action","Delete");
679     assertTextPresent("Done");
680 
681     gotoPage("/Admin/" + dbName + "/tableinfo/" + tableTroid + "/Main"); 
682     gotoFrame("admin_bottom");    
683     gotoFrame("admin_record");
684     gotoFrame("admin_edit_tableInfo_" + tableTroid);
685     submit("action","Delete");
686     
687     
688     setScriptingEnabled(true);
689     assertTextPresent("Done");
690     
691     clickLink("continue");
692 
693     assertTextPresent("Melati Database Admin Suite - Admintest database");
694   }
695   
696   private void gotoAddRecord(String table) {
697     gotoRootWindow();
698     gotoFrame("admin_top");
699     selectOption("table",table);
700     assertFormPresent("gotoform");
701     setWorkingForm("gotoform");
702     submit();
703     gotoRootWindow();
704     gotoFrame("admin_bottom");
705     //System.err.println(getTester().getDialog().getPageURL());
706     
707     gotoFrame("admin_left");
708     gotoFrame("admin_navigation");
709     clickLink("add");
710     gotoRootWindow();
711     gotoFrame("admin_bottom");
712     gotoFrame("admin_record");
713   }
714   /**
715    * Start and end at top window.
716    * @param tableName 
717    * @param uniqueKeyValue
718    */
719   private void deleteRecord(String tableName, String uniqueKeyValue, int troid) {
720     gotoPage("/Admin/" + dbName + "/" + tableName + "/Main");
721     gotoFrame("admin_bottom");
722     gotoFrame("admin_left");
723     gotoFrame("admin_selection");
724     clickLinkWithText(uniqueKeyValue);
725     gotoRootWindow();
726     gotoFrame("admin_bottom");
727     gotoFrame("admin_record");
728     gotoFrame("admin_edit_" + tableName + "_" + troid);
729     clickButton("delete");
730     gotoPage("/Admin/" + dbName + "/Main");
731   }
732   /**
733    * Returns us to top frame.
734    */
735   private void loginAsAdministrator() {
736     gotoPage("/Admin/" + dbName + "/Top");
737 //    gotoFrame("admin_top");
738     clickButton("login");
739     setTextField("field_login", "_administrator_");
740     setTextField("field_password", "FIXME");
741     checkCheckbox("rememberme");
742     submit("action");
743   }
744   
745   
746   public void testCopy() throws Exception { 
747     try { 
748       gotoPage("/Copy/everything");
749     } catch (TestingEngineResponseException e) { 
750       e = null; // cannot copy onto itself
751     }
752     try { 
753       gotoPage("/Copy/everything/everything");
754     } catch (TestingEngineResponseException e) { 
755       e = null; // cannot copy onto itself
756     }
757     
758     gotoPage("/Copy/everything/everything2");
759 
760   }
761 }