(self)
| 200 | self.assertEqual(self.huey.execute(task, t20), 6) |
| 201 | |
| 202 | def test_revoke_task(self): |
| 203 | state = {} |
| 204 | @self.huey.task() |
| 205 | def task_a(n): |
| 206 | state[n] = n # Modify some state for extra visibility. |
| 207 | return n + 1 |
| 208 | |
| 209 | self.assertFalse(task_a.is_revoked()) |
| 210 | task_a.revoke() |
| 211 | self.assertTrue(task_a.is_revoked()) |
| 212 | |
| 213 | r1, r2, r3 = task_a(1), task_a(2), task_a(3) |
| 214 | self.assertEqual(len(self.huey), 3) |
| 215 | |
| 216 | # The result-wrapper will indicate the tasks are revoked. |
| 217 | for r in (r1, r2, r3): |
| 218 | self.assertTrue(r.is_revoked()) |
| 219 | self.assertTrue(self.huey.is_revoked(r)) |
| 220 | # We don't have the task class when using an ID so this doesn't |
| 221 | # work. |
| 222 | self.assertFalse(self.huey.is_revoked(r.task.id)) |
| 223 | |
| 224 | # Task is discarded and not executed, due to being revoked. |
| 225 | t1 = self.huey.dequeue() |
| 226 | self.assertTrue(self.huey.execute(t1) is None) |
| 227 | self.assertTrue(r1.get() is None) |
| 228 | self.assertEqual(state, {}) |
| 229 | |
| 230 | # Next task is also discarded. |
| 231 | self.assertTrue(r2.is_revoked()) |
| 232 | self.assertTrue(self.execute_next() is None) |
| 233 | self.assertTrue(r2.get() is None) |
| 234 | self.assertEqual(state, {}) |
| 235 | |
| 236 | # Restore task, we will see side-effects and results of execution. |
| 237 | self.assertTrue(task_a.is_revoked()) # Still revoked. |
| 238 | self.assertTrue(r3.is_revoked()) |
| 239 | self.assertTrue(task_a.restore()) |
| 240 | self.assertFalse(task_a.is_revoked()) |
| 241 | self.assertFalse(r3.is_revoked()) |
| 242 | |
| 243 | t3 = self.huey.dequeue() |
| 244 | self.assertEqual(self.huey.execute(t3), 4) |
| 245 | self.assertEqual(r3.get(), 4) |
| 246 | self.assertEqual(state, {3: 3}) |
| 247 | |
| 248 | def test_revoke_task_instance(self): |
| 249 | state = {} |
nothing calls this directly
no test coverage detected