(t *testing.T)
| 185 | } |
| 186 | |
| 187 | func TestCmdUpdateTaskStatusRollback(t *testing.T) { |
| 188 | setupFlowRoot(t) |
| 189 | seedTask(t, "ut-rollback") |
| 190 | stubITerm(t) |
| 191 | |
| 192 | // Bootstrap via cmdDo so the task acquires a session_id and is |
| 193 | // in-progress. flow done now requires a session_id under the |
| 194 | // session-id invariant. |
| 195 | if rc := cmdDo([]string{"ut-rollback"}); rc != 0 { |
| 196 | t.Fatalf("do rc=%d", rc) |
| 197 | } |
| 198 | if rc := cmdDone([]string{"ut-rollback"}); rc != 0 { |
| 199 | t.Fatalf("done rc=%d", rc) |
| 200 | } |
| 201 | db := openFlowDB(t) |
| 202 | task, _ := flowdb.GetTask(db, "ut-rollback") |
| 203 | if task.Status != "done" { |
| 204 | t.Fatalf("precondition: status = %q, want done", task.Status) |
| 205 | } |
| 206 | |
| 207 | // Now roll it back to in-progress via update. session_id is still |
| 208 | // set (preserved across done) so the invariant holds. |
| 209 | if rc := cmdUpdate([]string{"task", "ut-rollback", "--status", "in-progress"}); rc != 0 { |
| 210 | t.Fatalf("rc=%d", rc) |
| 211 | } |
| 212 | task, _ = flowdb.GetTask(db, "ut-rollback") |
| 213 | if task.Status != "in-progress" { |
| 214 | t.Errorf("status = %q, want in-progress", task.Status) |
| 215 | } |
| 216 | if !task.StatusChangedAt.Valid { |
| 217 | t.Error("status_changed_at should be set after a real status change") |
| 218 | } |
| 219 | } |
| 220 | |
| 221 | // TestCmdUpdateTaskStatusRequiresSessionForNonBacklog pins the |
| 222 | // session-id invariant at the friendly-error layer: setting status |
nothing calls this directly
no test coverage detected