feat: reassign on-call days and weeks to another person
Release / test (push) Failing after 4s
Release / build (amd64, darwin) (push) Has been skipped
Release / build (amd64, linux) (push) Has been skipped
Release / build (arm64, darwin) (push) Has been skipped
Release / build (arm64, linux) (push) Has been skipped
Release / release (push) Has been skipped
Release / test (push) Failing after 4s
Release / build (amd64, darwin) (push) Has been skipped
Release / build (amd64, linux) (push) Has been skipped
Release / build (arm64, darwin) (push) Has been skipped
Release / build (arm64, linux) (push) Has been skipped
Release / release (push) Has been skipped
Assigning over a day somebody else held did nothing but flash a 409 for three seconds. The server holds one person per date and refused any that was taken, all-or-nothing, so pressing W on a week where a single day was already assigned placed none of the other six either. The only way through was d on each day first — seven delete-and-confirm cycles to move one week. The clash is already on screen, so it is found before the request rather than read back out of an error: the picker hands off to a confirmation naming who loses the days and how many there are, and accepting sends the whole selection with replace, which terdut-server v0.8.0 added. One question to move a week, and nobody's shift moves without somebody being asked. A day nobody holds still assigns with no prompt at all. Reassigning somebody to a day they already hold raises no prompt, since it takes nothing from anyone, but it does send replace: the server rejects any date that exists, so without it a harmless no-op would fail.
This commit is contained in:
@@ -166,6 +166,28 @@ func TestClient_RequestBodies(t *testing.T) {
|
||||
}
|
||||
})
|
||||
|
||||
// replace is what takes a day off its current holder, so it has to reach the
|
||||
// wire when asked for — and stay off it when not.
|
||||
t.Run("assign schedule", func(t *testing.T) {
|
||||
c, got := stub(t, http.StatusCreated, `[]`)
|
||||
if _, err := c.AssignSchedule(3, []string{"2026-07-27"}, false); err != nil {
|
||||
t.Fatalf("assign: %v", err)
|
||||
}
|
||||
if got.body != `{"user_id":3,"dates":["2026-07-27"]}` {
|
||||
t.Errorf("unexpected body %q", got.body)
|
||||
}
|
||||
})
|
||||
|
||||
t.Run("assign schedule with replace", func(t *testing.T) {
|
||||
c, got := stub(t, http.StatusCreated, `[]`)
|
||||
if _, err := c.AssignSchedule(3, []string{"2026-07-27"}, true); err != nil {
|
||||
t.Fatalf("assign: %v", err)
|
||||
}
|
||||
if got.body != `{"user_id":3,"dates":["2026-07-27"],"replace":true}` {
|
||||
t.Errorf("unexpected body %q", got.body)
|
||||
}
|
||||
})
|
||||
|
||||
t.Run("set notify target", func(t *testing.T) {
|
||||
c, got := stub(t, http.StatusOK, `{}`)
|
||||
if _, err := c.SetUserNotifyTarget(3, "terdut-niklas"); err != nil {
|
||||
|
||||
Reference in New Issue
Block a user