1   package org.paneris.jammyjoes.mvp;
2   
3   import java.util.ArrayList;
4   import java.util.List;
5   
6   import junit.framework.TestCase;
7   
8   import org.melati.poem.JdbcPersistent;
9   import org.melati.poem.Persistable;
10  import org.melati.poem.Persistent;
11  import org.melati.poem.Selectable;
12  
13  import com.mockobjects.dynamic.C;
14  import com.mockobjects.dynamic.Mock;
15  
16  public class CatalogueEntryTest extends TestCase {
17  
18    public void testPresenter() {
19  
20      Mock contextControl = new Mock(Context.class); 
21      contextControl.expect("put",C.args(C.eq("items"), C.isA(List.class)));
22      contextControl.matchAndReturn("get", C.args(C.isA(IntegerConverter.class), C.isA(String.class)), null);
23      Context context = (Context)contextControl.proxy();
24  
25      Presenter unit = new CatalogueEntryPresenter(null, context);
26  
27      assertEquals(ProductSelectionFromContext.class, unit.createSelection().getClass());
28      assertEquals(CollectOverTheTopCommand.class, unit.createCommand().getClass());
29      
30      contextControl.verify();
31    }
32    
33    public void testProductSelectionFromContext() {
34  
35      Persistent expected = new JdbcPersistent(); 
36       
37      Mock productTableController = new Mock(Selectable.class);
38      productTableController.expectAndReturn("getObject", new Integer(1), expected);
39       
40      Mock contextController = new Mock(Context.class);
41      contextController.matchAndReturn("get", C.args(C.isA(IntegerConverter.class), C.eq("0")), new Integer(1));
42      contextController.matchAndReturn("get", C.args(C.isA(IntegerConverter.class), C.isA(String.class)), null);
43      
44      Selection unit = new ProductSelectionFromContext((Selectable)productTableController.proxy(), (Context)contextController.proxy());
45  
46      Mock commandController = new Mock(Command.class);
47      commandController.expect("visit", expected);
48      
49      unit.visitEach((Command)commandController.proxy());
50      
51      productTableController.verify();
52      contextController.verify();
53      commandController.verify();
54    }
55    
56    public void testCollectOverTheTopCommand() {
57      int size = 10;
58  
59      Mock contextController = new Mock(Context.class);
60      contextController.matchAndReturn("get", C.args(C.isA(IntegerConverter.class), C.isA(String.class)), null);
61  
62      Integer expectedTroid = new Integer(1);
63      Mock productController = new Mock(Persistable.class);
64      productController.matchAndReturn("getTroid",expectedTroid);
65      Persistable expected = (Persistable)productController.proxy();
66      ArrayList list = new ArrayList();
67      Command unit = new CollectOverTheTopCommand(list, size, (Context)contextController.proxy());
68      unit.visit(expected);
69      unit.visit(expected);
70      assertEquals(list.size(), size);
71      assertEquals(((UncheckedProduct)list.get(0)).getId(), expectedTroid);
72      assertEquals(((UncheckedProduct)list.get(1)).getId(), expectedTroid);
73      assertEquals(((UncheckedProduct)list.get(9)).getId(), null);
74    }
75  }