| [511] | 1 | import grails.test.* | 
|---|
 | 2 |  | 
|---|
 | 3 | /** | 
|---|
 | 4 | * Integration tests for TaskSearchService. | 
|---|
 | 5 | */ | 
|---|
 | 6 | class TaskSearchServiceTests extends GroovyTestCase { | 
|---|
 | 7 |  | 
|---|
 | 8 |     // Data will be saved, not rolled back. | 
|---|
 | 9 |     // Be sure to clean up in tearDown(). | 
|---|
 | 10 |     boolean transactional = false | 
|---|
 | 11 |  | 
|---|
 | 12 |     def taskService | 
|---|
 | 13 |     def dateUtilService | 
|---|
 | 14 |     def taskSearchService | 
|---|
| [514] | 15 |     def assignedGroupService | 
|---|
 | 16 |     def assignedPersonService | 
|---|
| [511] | 17 |  | 
|---|
 | 18 |     def taskA | 
|---|
 | 19 |     def taskB | 
|---|
 | 20 |     def taskCount = 0 | 
|---|
 | 21 |  | 
|---|
 | 22 |     // Setup is called before each test. | 
|---|
 | 23 |     protected void setUp() { | 
|---|
 | 24 |         super.setUp() | 
|---|
 | 25 |  | 
|---|
 | 26 |         // Check environment state. | 
|---|
 | 27 |         assert Task.count() == 0 | 
|---|
 | 28 |         assert Entry.count() == 0 | 
|---|
 | 29 |         assert TaskModification.count() == 0 | 
|---|
 | 30 |  | 
|---|
 | 31 |         def p = [:] | 
|---|
 | 32 |         def result | 
|---|
 | 33 |  | 
|---|
 | 34 |         p = [taskGroup:TaskGroup.findByName("Engineering Activites"), | 
|---|
 | 35 |                 taskPriority:TaskPriority.get(2), | 
|---|
 | 36 |                 taskType:TaskType.get(1), | 
|---|
 | 37 |                 leadPerson:Person.get(1), | 
|---|
 | 38 |                 description:"TestA", | 
|---|
 | 39 |                 comment:"Service test task.", | 
|---|
 | 40 |                 targetStartDate: dateUtilService.today, | 
|---|
 | 41 |                 targetCompletionDate: dateUtilService.today] | 
|---|
 | 42 |  | 
|---|
 | 43 |         result = taskService.save(p) | 
|---|
 | 44 |         assert result.error == null | 
|---|
 | 45 |         taskCount++ | 
|---|
 | 46 |         taskA = result.taskInstance.refresh() | 
|---|
 | 47 |  | 
|---|
 | 48 |         p.description = "TestB" | 
|---|
 | 49 |         result = taskService.save(p) | 
|---|
 | 50 |         assert result.error == null | 
|---|
 | 51 |         taskCount++ | 
|---|
 | 52 |         taskB = result.taskInstance.refresh() | 
|---|
 | 53 |     } | 
|---|
 | 54 |  | 
|---|
 | 55 |     // Tear down is called after each test. | 
|---|
 | 56 |     protected void tearDown() { | 
|---|
 | 57 |  | 
|---|
 | 58 |         taskService.delete(taskA) | 
|---|
 | 59 |         taskService.delete(taskB) | 
|---|
 | 60 |  | 
|---|
 | 61 |         // Ensure that we leave environment clean. | 
|---|
 | 62 |         assert Task.count() == 0 | 
|---|
 | 63 |         assert TaskModification.count() == 0 | 
|---|
 | 64 |         assert Entry.count() == 0 | 
|---|
| [640] | 65 |  | 
|---|
 | 66 |         super.tearDown() | 
|---|
| [511] | 67 |     } | 
|---|
 | 68 |  | 
|---|
| [514] | 69 |  | 
|---|
 | 70 |     /** | 
|---|
 | 71 |     * Test GetTasks. | 
|---|
 | 72 |     */ | 
|---|
| [511] | 73 |     void testGetTasks() { | 
|---|
| [514] | 74 |         // Todays tasks should be returned. | 
|---|
| [511] | 75 |         def tasks = taskSearchService.getTasks([:]) | 
|---|
 | 76 |         assert tasks.totalCount == taskCount | 
|---|
 | 77 |  | 
|---|
 | 78 |         // Tasks in the trash should not be returned. | 
|---|
| [512] | 79 |         taskA.trash = true | 
|---|
 | 80 |         taskA.save(flush:true) | 
|---|
| [511] | 81 |         assert taskSearchService.getTasks([:]).totalCount == taskCount - 1 | 
|---|
| [512] | 82 |         taskB.trash = true | 
|---|
 | 83 |         taskB.save(flush:true) | 
|---|
| [511] | 84 |         assert taskSearchService.getTasks([:]).totalCount == taskCount - 2 | 
|---|
 | 85 |  | 
|---|
 | 86 |         // Restored tasks should be returned. | 
|---|
| [512] | 87 |         taskA.trash = false | 
|---|
 | 88 |         taskA.save(flush:true) | 
|---|
| [511] | 89 |         assert taskSearchService.getTasks([:]).totalCount == taskCount - 1 | 
|---|
| [512] | 90 |         taskB.trash = false | 
|---|
 | 91 |         taskB.save(flush:true) | 
|---|
| [511] | 92 |         assert taskSearchService.getTasks([:]).totalCount == taskCount | 
|---|
 | 93 |  | 
|---|
 | 94 |         // Tomorrows tasks should not be returned. | 
|---|
| [512] | 95 |         taskA.targetStartDate = dateUtilService.tomorrow | 
|---|
 | 96 |         taskA.targetCompletionDate = dateUtilService.tomorrow | 
|---|
 | 97 |         taskA.save(flush:true) | 
|---|
| [511] | 98 |         assert taskSearchService.getTasks([:]).totalCount == taskCount - 1 | 
|---|
 | 99 |  | 
|---|
| [512] | 100 |         // Tomorrows tasks should be returned, if we ask for them. | 
|---|
 | 101 |         assert taskSearchService.getTasks([:], dateUtilService.today, dateUtilService.tomorrow+1).totalCount == taskCount | 
|---|
 | 102 |  | 
|---|
| [511] | 103 |         // Yesterdays tasks should not be returned. | 
|---|
| [512] | 104 |         taskA.targetStartDate = dateUtilService.yesterday | 
|---|
 | 105 |         taskA.targetCompletionDate = dateUtilService.yesterday | 
|---|
 | 106 |         taskA.save(flush:true) | 
|---|
| [511] | 107 |         assert taskSearchService.getTasks([:]).totalCount == taskCount - 1 | 
|---|
 | 108 |  | 
|---|
| [512] | 109 |         // Yesterdays tasks should be returned, if we ask for them. | 
|---|
 | 110 |         assert taskSearchService.getTasks([:], dateUtilService.yesterday, dateUtilService.tomorrow).totalCount == taskCount | 
|---|
 | 111 |  | 
|---|
| [511] | 112 |         // Tasks that span today should be returned. | 
|---|
| [512] | 113 |         taskA.targetStartDate = dateUtilService.yesterday | 
|---|
 | 114 |         taskA.targetCompletionDate = dateUtilService.tomorrow | 
|---|
 | 115 |         taskA.save(flush:true) | 
|---|
| [511] | 116 |         assert taskSearchService.getTasks([:]).totalCount == taskCount | 
|---|
 | 117 |     } // testGetTasks() | 
|---|
 | 118 |  | 
|---|
| [514] | 119 |     /** | 
|---|
 | 120 |     * Test GetPersonsTasks. | 
|---|
 | 121 |     */ | 
|---|
 | 122 |     void testGetPersonsTasks() { | 
|---|
 | 123 |  | 
|---|
 | 124 |         def p = [:] | 
|---|
| [529] | 125 |         def params = [:] | 
|---|
| [514] | 126 |  | 
|---|
 | 127 |         // Todays tasks should be returned, since Person #1 is lead and created the tasks. | 
|---|
| [529] | 128 |         def tasks = taskSearchService.getPersonsTasks(params) | 
|---|
| [514] | 129 |         assert tasks.totalCount == taskCount | 
|---|
 | 130 |  | 
|---|
 | 131 |         // Tasks in the trash should not be returned. | 
|---|
 | 132 |         taskA.trash = true | 
|---|
 | 133 |         taskA.save(flush:true) | 
|---|
| [529] | 134 |         assert taskSearchService.getPersonsTasks(params).totalCount == taskCount - 1 | 
|---|
| [514] | 135 |         taskB.trash = true | 
|---|
 | 136 |         taskB.save(flush:true) | 
|---|
| [529] | 137 |         assert taskSearchService.getPersonsTasks(params).totalCount == taskCount - 2 | 
|---|
| [514] | 138 |  | 
|---|
 | 139 |         // Restored tasks should be returned. | 
|---|
 | 140 |         taskA.trash = false | 
|---|
 | 141 |         taskA.save(flush:true) | 
|---|
| [529] | 142 |         assert taskSearchService.getPersonsTasks(params).totalCount == taskCount - 1 | 
|---|
| [514] | 143 |         taskB.trash = false | 
|---|
 | 144 |         taskB.save(flush:true) | 
|---|
| [529] | 145 |         assert taskSearchService.getPersonsTasks(params).totalCount == taskCount | 
|---|
| [514] | 146 |  | 
|---|
 | 147 |         // Tomorrows tasks should not be returned. | 
|---|
 | 148 |         taskA.targetStartDate = dateUtilService.tomorrow | 
|---|
 | 149 |         taskA.targetCompletionDate = dateUtilService.tomorrow | 
|---|
 | 150 |         taskA.save(flush:true) | 
|---|
| [529] | 151 |         assert taskSearchService.getPersonsTasks(params).totalCount == taskCount - 1 | 
|---|
| [514] | 152 |  | 
|---|
 | 153 |         // Tomorrows tasks should be returned, if we ask for them. | 
|---|
| [529] | 154 |         assert taskSearchService.getPersonsTasks(params, null, dateUtilService.today, dateUtilService.tomorrow+1).totalCount == taskCount | 
|---|
| [514] | 155 |  | 
|---|
 | 156 |         // Yesterdays tasks should not be returned. | 
|---|
 | 157 |         taskA.targetStartDate = dateUtilService.yesterday | 
|---|
 | 158 |         taskA.targetCompletionDate = dateUtilService.yesterday | 
|---|
 | 159 |         taskA.save(flush:true) | 
|---|
| [529] | 160 |         assert taskSearchService.getPersonsTasks(params).totalCount == taskCount - 1 | 
|---|
| [514] | 161 |  | 
|---|
 | 162 |         // Yesterdays tasks should be returned, if we ask for them. | 
|---|
| [529] | 163 |         assert taskSearchService.getPersonsTasks(params, null, dateUtilService.yesterday, dateUtilService.tomorrow).totalCount == taskCount | 
|---|
| [514] | 164 |  | 
|---|
 | 165 |         // Tasks that span today should be returned. | 
|---|
 | 166 |         taskA.targetStartDate = dateUtilService.yesterday | 
|---|
 | 167 |         taskA.targetCompletionDate = dateUtilService.tomorrow | 
|---|
 | 168 |         taskA.save(flush:true) | 
|---|
| [529] | 169 |         assert taskSearchService.getPersonsTasks(params).totalCount == taskCount | 
|---|
| [514] | 170 |  | 
|---|
 | 171 |         // Tasks for a different person should not be returned. | 
|---|
 | 172 |         taskA.leadPerson = Person.get(2) | 
|---|
 | 173 |         taskA.save(flush:true) | 
|---|
| [529] | 174 |         assert taskSearchService.getPersonsTasks(params).totalCount == taskCount - 1 | 
|---|
| [514] | 175 |  | 
|---|
 | 176 |         // Tasks for a specified leadPerson should be returned. | 
|---|
 | 177 |         // But only if approved since this person did not create the tasks. | 
|---|
 | 178 |         taskA.leadPerson = Person.get(2) | 
|---|
 | 179 |         taskA.save(flush:true) | 
|---|
| [529] | 180 |         assert taskSearchService.getPersonsTasks(params, Person.get(2)).totalCount == 0 | 
|---|
| [514] | 181 |         taskA.approved = true | 
|---|
 | 182 |         taskA.save(flush:true) | 
|---|
| [529] | 183 |         assert taskSearchService.getPersonsTasks(params, Person.get(2)).totalCount == 1 | 
|---|
| [514] | 184 |         // Moving the task to the trash, stops it being returned. | 
|---|
 | 185 |         taskA.trash = true | 
|---|
 | 186 |         taskA.save(flush:true) | 
|---|
| [529] | 187 |         assert taskSearchService.getPersonsTasks(params, Person.get(2)).totalCount == 0 | 
|---|
| [514] | 188 |  | 
|---|
 | 189 |         // Tasks assigned to a person should be returned. | 
|---|
 | 190 |         // But only if approved. | 
|---|
 | 191 |         p = [person: Person.get(2), | 
|---|
 | 192 |                 task: taskB, | 
|---|
 | 193 |                 estimatedHour: 1, | 
|---|
 | 194 |                 estimatedMinute: 20] | 
|---|
 | 195 |         assert assignedPersonService.save(p).error == null | 
|---|
| [529] | 196 |         assert taskSearchService.getPersonsTasks(params, Person.get(2)).totalCount == 0 | 
|---|
| [514] | 197 |         taskB.approved = true | 
|---|
 | 198 |         taskB.save(flush:true) | 
|---|
| [529] | 199 |         assert taskSearchService.getPersonsTasks(params, Person.get(2)).totalCount == 1 | 
|---|
| [514] | 200 |  | 
|---|
 | 201 |         // Tasks assigned to a person via a group should be returned. | 
|---|
 | 202 |         // But only if approved. | 
|---|
 | 203 |         Person.get(2).addToPersonGroups(PersonGroup.read(1)).save(flush:true) | 
|---|
 | 204 |         taskA.trash = false | 
|---|
 | 205 |         taskA.approved = false | 
|---|
 | 206 |         taskA.save(flush:true) | 
|---|
 | 207 |         p = [personGroup: PersonGroup.read(1), | 
|---|
 | 208 |                 task: taskA, | 
|---|
 | 209 |                 estimatedHour: 2, | 
|---|
 | 210 |                 estimatedMinute: 30] | 
|---|
 | 211 |         assert assignedGroupService.save(p).error == null | 
|---|
| [529] | 212 |         assert taskSearchService.getPersonsTasks(params, Person.get(2)).totalCount == 1 // Only taskB from above. | 
|---|
| [514] | 213 |         taskA.approved = true | 
|---|
 | 214 |         taskA.save(flush:true) | 
|---|
| [529] | 215 |         assert taskSearchService.getPersonsTasks(params, Person.get(2)).totalCount == 2 // taskA and taskB. | 
|---|
| [514] | 216 |  | 
|---|
 | 217 |     } // testGetTasks() | 
|---|
 | 218 |  | 
|---|
| [529] | 219 |     void testGetBudgetTasks() { | 
|---|
 | 220 |  | 
|---|
 | 221 |         def tasks | 
|---|
 | 222 |         def params = [:] | 
|---|
 | 223 |         def today = dateUtilService.today | 
|---|
 | 224 |         def yesterday = dateUtilService.yesterday | 
|---|
 | 225 |         def tomorrow = dateUtilService.tomorrow | 
|---|
 | 226 |         def unplanned = TaskBudgetStatus.read(1) | 
|---|
 | 227 |         def planned = TaskBudgetStatus.read(2) | 
|---|
 | 228 |  | 
|---|
 | 229 |         assert planned != null | 
|---|
 | 230 |         assert unplanned != null | 
|---|
 | 231 |  | 
|---|
 | 232 |         // Default is to return planned. | 
|---|
 | 233 |         // TaskA and taskB should be unplanned and therefore not returned. | 
|---|
 | 234 |         tasks = taskSearchService.getBudgetTasks(params) | 
|---|
 | 235 |         assert tasks.totalCount == 0 | 
|---|
 | 236 |         tasks = taskSearchService.getBudgetTasks(params, planned) | 
|---|
 | 237 |         assert tasks.totalCount == 0 | 
|---|
 | 238 |  | 
|---|
 | 239 |         tasks = taskSearchService.getBudgetTasks(params, unplanned) | 
|---|
 | 240 |         assert tasks.totalCount == taskCount | 
|---|
 | 241 |         assert tasks.contains(taskA) | 
|---|
 | 242 |         assert tasks.contains(taskB) | 
|---|
 | 243 |  | 
|---|
 | 244 |         // Planned tasks are returned. | 
|---|
 | 245 |         taskA.taskBudgetStatus = planned | 
|---|
 | 246 |         taskA.save(flush:true) | 
|---|
 | 247 |         tasks = taskSearchService.getBudgetTasks(params, planned) | 
|---|
 | 248 |         assert tasks.totalCount == 1 | 
|---|
 | 249 |         assert tasks.contains(taskA) | 
|---|
 | 250 |  | 
|---|
 | 251 |         // Tasks are returned when dates and budget status are specified. | 
|---|
 | 252 |         tasks = taskSearchService.getBudgetTasks(params, planned, today, tomorrow) | 
|---|
 | 253 |         assert tasks.totalCount == 1 | 
|---|
 | 254 |         assert tasks.contains(taskA) | 
|---|
 | 255 |         tasks = taskSearchService.getBudgetTasks(params, unplanned, today, tomorrow) | 
|---|
 | 256 |         assert tasks.totalCount == 1 | 
|---|
 | 257 |         assert tasks.contains(taskB) | 
|---|
 | 258 |  | 
|---|
 | 259 |         // No tasks for yesterday | 
|---|
 | 260 |         tasks = taskSearchService.getBudgetTasks(params, null, yesterday, today) | 
|---|
 | 261 |         assert tasks.totalCount == 0 | 
|---|
 | 262 |  | 
|---|
 | 263 |         // Tasks that span today are returned. | 
|---|
 | 264 |         taskA.targetStartDate = yesterday | 
|---|
 | 265 |         taskA.targetCompletionDate = tomorrow+2 | 
|---|
 | 266 |         taskA.save(flush:true) | 
|---|
 | 267 |         tasks = taskSearchService.getBudgetTasks(params, planned, today, tomorrow) | 
|---|
 | 268 |         assert tasks.totalCount == 1 | 
|---|
 | 269 |         assert tasks.contains(taskA) | 
|---|
 | 270 |  | 
|---|
 | 271 |     } // testGetBudgetTasks() | 
|---|
 | 272 |  | 
|---|
| [511] | 273 | } // end class | 
|---|