Source identity
| Field | Recorded value |
|---|---|
| Source type | GitHub source |
| Original record | Janady13/missionmatch / internal/modules/recruiting/task_test.go |
| Date | Not specified in source |
| Repository | Janady13/missionmatch |
| Revision | 720d47fae476b0d38477ae4401697d372b1ea2bc |
| Branch | feature/opportunity-to-outcome |
| Path or archive member | internal/modules/recruiting/task_test.go |
| Original SHA-256 | 7e1d32e0d693018ed060ed34cde3ae390400879f223115a5d05599f8fa4deceb |
| Git blob SHA | d5d95ea493515c6bf729ccb8108c1b4f050576e5 |
| Reading-copy SHA-256 | 7e1d32e0d693018ed060ed34cde3ae390400879f223115a5d05599f8fa4deceb |
Every recorded occurrence
These 2 records contain identical original source bytes. Their paths and revisions remain part of the archive.
| Original record | Branch or archive | Revision / identifier | Original location |
|---|---|---|---|
| Janady13/missionmatch / internal/modules/recruiting/task_test.go | feature/opportunity-to-outcome | 720d47fae476b0d38477ae4401697d372b1ea2bc | Open original |
| Janady13/missionmatch / internal/modules/recruiting/task_test.go | feature/aioe-upgrade | 2178e7298d0e5d9af83afa12402fd587f0ba6ed8 | Open original |
Recovered source transcript
Download complete source text ↓87 lines · 3.1 KB
package recruiting
import "testing"
func ip(i int) *int { return &i }
// TestBucketBoundaries. Every boundary here is an off by one waiting to happen, and each one either
// hides overdue work or cries wolf about work that is not due yet.
func TestBucketBoundaries(t *testing.T) {
for _, c := range []struct {
name string
days *int
want string
}{
{"no due date is not overdue", nil, bucketNone},
{"yesterday is overdue", ip(-1), bucketOverdue},
{"long past is overdue", ip(-400), bucketOverdue},
{"today is today, not overdue", ip(0), bucketToday},
{"tomorrow is soon, not today", ip(1), bucketSoon},
{"the last day of the window is still soon", ip(soonWindowDays), bucketSoon},
{"the day after the window is later", ip(soonWindowDays + 1), bucketLater},
{"far future is later", ip(365), bucketLater},
} {
t.Run(c.name, func(t *testing.T) {
if got := bucketFor(c.days); got != c.want {
t.Errorf("bucketFor(%v) = %q, want %q", c.days, got, c.want)
}
})
}
}
// TestBucketsPartitionEveryInput. Every possible day offset lands in exactly one bucket, and the
// ordering of the buckets is monotone in the offset. A gap would make a task invisible in every view.
func TestBucketsPartitionEveryInput(t *testing.T) {
rank := map[string]int{bucketOverdue: 0, bucketToday: 1, bucketSoon: 2, bucketLater: 3}
prev := -1
for d := -500; d <= 500; d++ {
b := bucketFor(ip(d))
r, ok := rank[b]
if !ok {
t.Fatalf("day offset %d produced bucket %q, which is not a due bucket", d, b)
}
if r < prev {
t.Fatalf("bucket rank went backwards at day %d: %q", d, b)
}
prev = r
}
// And only a missing due date yields none, so "none" can never hide a dated task.
if bucketFor(nil) != bucketNone {
t.Error("a missing due date did not produce the none bucket")
}
}
// TestTaskVocabulariesMatchMigration pins the Go allowlists against the CHECK constraints in 0049.
func TestTaskVocabulariesMatchMigration(t *testing.T) {
for _, s := range []string{"open", "done", "cancelled"} {
if !taskStatuses[s] {
t.Errorf("status %q is in migration 0049 but missing here", s)
}
}
if len(taskStatuses) != 3 {
t.Errorf("%d statuses, migration 0049 permits 3", len(taskStatuses))
}
for _, p := range []string{"low", "normal", "high"} {
if !taskPriorities[p] {
t.Errorf("priority %q is in migration 0049 but missing here", p)
}
}
if len(taskPriorities) != 3 {
t.Errorf("%d priorities, migration 0049 permits 3", len(taskPriorities))
}
}
// TestUpdateTaskInputCannotSetCompletedAt is a structural guard. completed_at is maintained by the
// database from the status, and accepting it from a caller is how a reopened task ends up still
// carrying a completion time and reading as finished in every report.
func TestUpdateTaskInputCannotSetCompletedAt(t *testing.T) {
for _, forbidden := range []string{"completed_at", "created_by", "organization_id"} {
if hasJSONField(UpdateTaskInput{}, forbidden) {
t.Errorf("UpdateTaskInput exposes %q, which the database owns", forbidden)
}
if hasJSONField(CreateTaskInput{}, forbidden) {
t.Errorf("CreateTaskInput exposes %q, which the database owns", forbidden)
}
}
}