• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2007 Mockito contributors
3  * This program is made available under the terms of the MIT License.
4  */
5 
6 package org.mockitousage;
7 
8 import org.junit.Before;
9 import org.junit.Test;
10 import org.mockito.Mockito;
11 import org.mockito.invocation.InvocationOnMock;
12 import org.mockito.stubbing.Answer;
13 import org.mockitoutil.TestBase;
14 
15 import java.util.Date;
16 import java.util.GregorianCalendar;
17 
18 import static junit.framework.TestCase.assertEquals;
19 import static org.mockito.BDDMockito.given;
20 import static org.mockito.BDDMockito.willAnswer;
21 import static org.mockito.Matchers.any;
22 import static org.mockito.Mockito.verify;
23 
24 public class PlaygroundWithDemoOfUnclonedParametersProblemTest extends TestBase {
25 
26     ImportManager importManager;
27     ImportLogDao importLogDao;
28     IImportHandler importHandler;
29 
30     @Before
setUp()31     public void setUp() throws Exception {
32         importLogDao = Mockito.mock(ImportLogDao.class);
33         importHandler = Mockito.mock(IImportHandler.class);
34         importManager = new ImportManager(importLogDao);
35     }
36 
37     @Test
shouldIncludeInitialLog()38     public void shouldIncludeInitialLog() {
39         //given
40         int importType = 0;
41         Date currentDate = new GregorianCalendar(2009, 10, 12).getTime();
42 
43         ImportLogBean initialLog = new ImportLogBean(currentDate, importType);
44         initialLog.setStatus(1);
45 
46         given(importLogDao.anyImportRunningOrRunnedToday(importType, currentDate)).willReturn(false);
47         willAnswer(byCheckingLogEquals(initialLog)).given(importLogDao).include(any(ImportLogBean.class));
48 
49         //when
50         importManager.startImportProcess(importType, currentDate);
51 
52         //then
53         verify(importLogDao).include(any(ImportLogBean.class));
54     }
55 
56     @Test
shouldAlterFinalLog()57     public void shouldAlterFinalLog() {
58         //given
59         int importType = 0;
60         Date currentDate = new GregorianCalendar(2009, 10, 12).getTime();
61 
62         ImportLogBean finalLog = new ImportLogBean(currentDate, importType);
63         finalLog.setStatus(9);
64 
65         given(importLogDao.anyImportRunningOrRunnedToday(importType, currentDate)).willReturn(false);
66         willAnswer(byCheckingLogEquals(finalLog)).given(importLogDao).alter(any(ImportLogBean.class));
67 
68         //when
69         importManager.startImportProcess(importType, currentDate);
70 
71         //then
72         verify(importLogDao).alter(any(ImportLogBean.class));
73     }
74 
byCheckingLogEquals(final ImportLogBean status)75     private Answer<Object> byCheckingLogEquals(final ImportLogBean status) {
76         return new Answer<Object>() {
77             public Object answer(InvocationOnMock invocation) throws Throwable {
78                 ImportLogBean bean =  invocation.getArgument(0);
79                 assertEquals(status, bean);
80                 return null;
81             }
82         };
83     }
84 
85     public class ImportManager {
86 
87         public ImportManager(ImportLogDao pImportLogDao) {
88             super();
89             importLogDao = pImportLogDao;
90         }
91 
92         private ImportLogDao importLogDao = null;
93 
94         public void startImportProcess(int importType, Date date) {
95             ImportLogBean importLogBean = null;
96 
97             try {
98                 importLogBean = createResume(importType, date);
99                 if (isOkToImport(importType, date)) {
100                     // get the right handler
101                     //importLogBean = ImportHandlerFactory.singleton().getImportHandler(importType).processImport(importLogBean);
102                     // 2 = ok
103                     importLogBean.setStatus(2);
104                 } else {
105                     // 5 = failed - is there a running process
106                     importLogBean.setStatus(9);
107                 }
108             } catch (Exception e) {
109                 // 9 = failed - exception
110                 if (importLogBean != null)
111                     importLogBean.setStatus(9);
112             } finally {
113                 if (importLogBean != null)
114                     finalizeResume(importLogBean);
115             }
116         }
117 
118         private boolean isOkToImport(int importType, Date date) {
119             return importLogDao.anyImportRunningOrRunnedToday(importType, date);
120         }
121 
122         private ImportLogBean createResume(int importType, Date date) {
123             ImportLogBean importLogBean = new ImportLogBean(date,
124                     importType);
125             // 1 = running
126             importLogBean.setStatus(1);
127             importLogDao.include(importLogBean);
128             return importLogBean;
129         }
130 
131         private void finalizeResume(ImportLogBean importLogBean) {
132             importLogDao.alter(importLogBean);
133         }
134     }
135 
136     private interface ImportLogDao {
137         boolean anyImportRunningOrRunnedToday(int importType, Date currentDate);
138 
139         void include(ImportLogBean importLogBean);
140 
141         void alter(ImportLogBean importLogBean);
142     }
143 
144     private class IImportHandler {
145     }
146 
147     private class ImportLogBean {
148         private Date currentDate;
149         private int importType;
150         private int status;
151 
152         public ImportLogBean(Date currentDate, int importType) {
153             this.currentDate = currentDate;
154             this.importType = importType;
155         }
156 
157         public void setStatus(int status) {
158             this.status = status;
159         }
160 
161         @Override
162         public boolean equals(Object o) {
163             if (this == o) return true;
164             if (!(o instanceof ImportLogBean)) return false;
165 
166             ImportLogBean that = (ImportLogBean) o;
167 
168             if (importType != that.importType) return false;
169             if (status != that.status) return false;
170             if (currentDate != null ? !currentDate.equals(that.currentDate) : that.currentDate != null) return false;
171 
172             return true;
173         }
174 
175         @Override
176         public int hashCode() {
177             int result = currentDate != null ? currentDate.hashCode() : 0;
178             result = 31 * result + importType;
179             result = 31 * result + status;
180             return result;
181         }
182     }
183 }
184