source: trunk/test/integration/TaskSearchServiceTests.groovy @ 514

Last change on this file since 514 was 514, checked in by gav, 10 years ago

Added integration test for TaskSearchService.getPersonsTasks().
Extended TaskService.delete() to handle assignedPersons and assignedGroups.
Use safe collection navigation in AssignedGroupService and AssignedPersonService?.

File size: 8.1 KB
Line 
1import grails.test.*
2
3/**
4* Integration tests for TaskSearchService.
5*/
6class 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
15    def assignedGroupService
16    def assignedPersonService
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        super.tearDown()
58
59        taskService.delete(taskA)
60        taskService.delete(taskB)
61
62        // Ensure that we leave environment clean.
63        assert Task.count() == 0
64        assert TaskModification.count() == 0
65        assert Entry.count() == 0
66    }
67
68
69    /**
70    * Test GetTasks.
71    */
72    void testGetTasks() {
73        // Todays tasks should be returned.
74        def tasks = taskSearchService.getTasks([:])
75        assert tasks.totalCount == taskCount
76
77        // Tasks in the trash should not be returned.
78        taskA.trash = true
79        taskA.save(flush:true)
80        assert taskSearchService.getTasks([:]).totalCount == taskCount - 1
81        taskB.trash = true
82        taskB.save(flush:true)
83        assert taskSearchService.getTasks([:]).totalCount == taskCount - 2
84
85        // Restored tasks should be returned.
86        taskA.trash = false
87        taskA.save(flush:true)
88        assert taskSearchService.getTasks([:]).totalCount == taskCount - 1
89        taskB.trash = false
90        taskB.save(flush:true)
91        assert taskSearchService.getTasks([:]).totalCount == taskCount
92
93        // Tomorrows tasks should not be returned.
94        taskA.targetStartDate = dateUtilService.tomorrow
95        taskA.targetCompletionDate = dateUtilService.tomorrow
96        taskA.save(flush:true)
97        assert taskSearchService.getTasks([:]).totalCount == taskCount - 1
98
99        // Tomorrows tasks should be returned, if we ask for them.
100        assert taskSearchService.getTasks([:], dateUtilService.today, dateUtilService.tomorrow+1).totalCount == taskCount
101
102        // Yesterdays tasks should not be returned.
103        taskA.targetStartDate = dateUtilService.yesterday
104        taskA.targetCompletionDate = dateUtilService.yesterday
105        taskA.save(flush:true)
106        assert taskSearchService.getTasks([:]).totalCount == taskCount - 1
107
108        // Yesterdays tasks should be returned, if we ask for them.
109        assert taskSearchService.getTasks([:], dateUtilService.yesterday, dateUtilService.tomorrow).totalCount == taskCount
110
111        // Tasks that span today should be returned.
112        taskA.targetStartDate = dateUtilService.yesterday
113        taskA.targetCompletionDate = dateUtilService.tomorrow
114        taskA.save(flush:true)
115        assert taskSearchService.getTasks([:]).totalCount == taskCount
116    } // testGetTasks()
117
118    /**
119    * Test GetPersonsTasks.
120    */
121    void testGetPersonsTasks() {
122
123        def result
124        def p = [:]
125
126        // Todays tasks should be returned, since Person #1 is lead and created the tasks.
127        def tasks = taskSearchService.getPersonsTasks([:])
128        assert tasks.totalCount == taskCount
129
130        // Tasks in the trash should not be returned.
131        taskA.trash = true
132        taskA.save(flush:true)
133        assert taskSearchService.getPersonsTasks([:]).totalCount == taskCount - 1
134        taskB.trash = true
135        taskB.save(flush:true)
136        assert taskSearchService.getPersonsTasks([:]).totalCount == taskCount - 2
137
138        // Restored tasks should be returned.
139        taskA.trash = false
140        taskA.save(flush:true)
141        assert taskSearchService.getPersonsTasks([:]).totalCount == taskCount - 1
142        taskB.trash = false
143        taskB.save(flush:true)
144        assert taskSearchService.getPersonsTasks([:]).totalCount == taskCount
145
146        // Tomorrows tasks should not be returned.
147        taskA.targetStartDate = dateUtilService.tomorrow
148        taskA.targetCompletionDate = dateUtilService.tomorrow
149        taskA.save(flush:true)
150        assert taskSearchService.getPersonsTasks([:]).totalCount == taskCount - 1
151
152        // Tomorrows tasks should be returned, if we ask for them.
153        assert taskSearchService.getPersonsTasks([:], null, dateUtilService.today, dateUtilService.tomorrow+1).totalCount == taskCount
154
155        // Yesterdays tasks should not be returned.
156        taskA.targetStartDate = dateUtilService.yesterday
157        taskA.targetCompletionDate = dateUtilService.yesterday
158        taskA.save(flush:true)
159        assert taskSearchService.getPersonsTasks([:]).totalCount == taskCount - 1
160
161        // Yesterdays tasks should be returned, if we ask for them.
162        assert taskSearchService.getPersonsTasks([:], null, dateUtilService.yesterday, dateUtilService.tomorrow).totalCount == taskCount
163
164        // Tasks that span today should be returned.
165        taskA.targetStartDate = dateUtilService.yesterday
166        taskA.targetCompletionDate = dateUtilService.tomorrow
167        taskA.save(flush:true)
168        assert taskSearchService.getPersonsTasks([:]).totalCount == taskCount
169
170        // Tasks for a different person should not be returned.
171        taskA.leadPerson = Person.get(2)
172        taskA.save(flush:true)
173        assert taskSearchService.getPersonsTasks([:]).totalCount == taskCount - 1
174
175        // Tasks for a specified leadPerson should be returned.
176        // But only if approved since this person did not create the tasks.
177        taskA.leadPerson = Person.get(2)
178        taskA.save(flush:true)
179        assert taskSearchService.getPersonsTasks([:], Person.get(2)).totalCount == 0
180        taskA.approved = true
181        taskA.save(flush:true)
182        assert taskSearchService.getPersonsTasks([:], Person.get(2)).totalCount == 1
183        // Moving the task to the trash, stops it being returned.
184        taskA.trash = true
185        taskA.save(flush:true)
186        assert taskSearchService.getPersonsTasks([:], Person.get(2)).totalCount == 0
187
188        // Tasks assigned to a person should be returned.
189        // But only if approved.
190        p = [person: Person.get(2),
191                task: taskB,
192                estimatedHour: 1,
193                estimatedMinute: 20]
194        assert assignedPersonService.save(p).error == null
195        assert taskSearchService.getPersonsTasks([:], Person.get(2)).totalCount == 0
196        taskB.approved = true
197        taskB.save(flush:true)
198        assert taskSearchService.getPersonsTasks([:], Person.get(2)).totalCount == 1
199
200        // Tasks assigned to a person via a group should be returned.
201        // But only if approved.
202        Person.get(2).addToPersonGroups(PersonGroup.read(1)).save(flush:true)
203        taskA.trash = false
204        taskA.approved = false
205        taskA.save(flush:true)
206        p = [personGroup: PersonGroup.read(1),
207                task: taskA,
208                estimatedHour: 2,
209                estimatedMinute: 30]
210        assert assignedGroupService.save(p).error == null
211        assert taskSearchService.getPersonsTasks([:], Person.get(2)).totalCount == 1 // Only taskB from above.
212        taskA.approved = true
213        taskA.save(flush:true)
214        assert taskSearchService.getPersonsTasks([:], Person.get(2)).totalCount == 2 // taskA and taskB.
215
216    } // testGetTasks()
217
218} // end class
Note: See TracBrowser for help on using the repository browser.