Source identity
| Field | Recorded value |
|---|---|
| Source type | GitHub source |
| Original record | Janady13/missionmatch / internal/modules/matching/service_test.go |
| Date | Not specified in source |
| Repository | Janady13/missionmatch |
| Revision | 41000ad30fff4129fdaf5ec84e15ba14c27d4890 |
| Branch | m5-price-to-win |
| Path or archive member | internal/modules/matching/service_test.go |
| Original SHA-256 | 1da68bb8408ac9c591d8d657517120e87b2bcc3ca8dd459db2c2287dd4d8b319 |
| Git blob SHA | cb8f284a81d479925bbc9675fc7262484031cf6c |
| Reading-copy SHA-256 | 1da68bb8408ac9c591d8d657517120e87b2bcc3ca8dd459db2c2287dd4d8b319 |
Every recorded occurrence
These 13 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/matching/service_test.go | m5-price-to-win | 41000ad30fff4129fdaf5ec84e15ba14c27d4890 | Open original |
| Janady13/missionmatch / internal/modules/matching/service_test.go | ws7-federal-signal | 6a9f6ce9cfb13345ffb47770d4960e7c2d9c17c2 | Open original |
| Janady13/missionmatch / internal/modules/matching/service_test.go | ws6-retrieval | 6c56e29231ec05735927fa265c97d517499dfeaf | Open original |
| Janady13/missionmatch / internal/modules/matching/service_test.go | graphrag-foundation | b0ddeb9f633fd138d09309d1a17b7d13bc3a67f7 | Open original |
| Janady13/missionmatch / internal/modules/matching/service_test.go | ws8-teaching-loop | c823f0fb6bb2aba0f39001eb6de96f4000d9321f | Open original |
| Janady13/missionmatch / internal/modules/matching/service_test.go | phase2-eval-fairness | d361af254701975fe239927656ababb56374655e | Open original |
| Janady13/missionmatch / internal/modules/matching/service_test.go | ws9-bench-ingestion | f585a9ef32fa554663ce1fba9a414a54b6e49cf0 | Open original |
| Janady13/missionmatch / internal/modules/matching/service_test.go | ws6-retrieval | 6c56e29231ec05735927fa265c97d517499dfeaf | Open original |
| Janady13/missionmatch / internal/modules/matching/service_test.go | m5-price-to-win | 41000ad30fff4129fdaf5ec84e15ba14c27d4890 | Open original |
| Janady13/missionmatch / internal/modules/matching/service_test.go | ws8-teaching-loop | c823f0fb6bb2aba0f39001eb6de96f4000d9321f | Open original |
| Janady13/missionmatch / internal/modules/matching/service_test.go | phase2-eval-fairness | d361af254701975fe239927656ababb56374655e | Open original |
| Janady13/missionmatch / internal/modules/matching/service_test.go | graphrag-foundation | b0ddeb9f633fd138d09309d1a17b7d13bc3a67f7 | Open original |
| Janady13/missionmatch / internal/modules/matching/service_test.go | ws7-federal-signal | 6a9f6ce9cfb13345ffb47770d4960e7c2d9c17c2 | Open original |
Recovered source transcript
Download complete source text ↓110 lines · 4.4 KB
package matching
import (
"context"
"testing"
"time"
"github.com/google/uuid"
"github.com/shopspring/decimal"
"github.com/missionworkforce/missionmatch/internal/platform/database/dbgen"
)
// fakeQ implements just the Querier methods generateSlate touches; the rest panic via the nil embed.
type fakeQ struct {
dbgen.Querier
req dbgen.Requirement
cands []dbgen.Candidate
slateID uuid.UUID
added []dbgen.AddSlateMemberParams
}
func (f *fakeQ) GetRequirement(context.Context, uuid.UUID) (dbgen.Requirement, error) {
return f.req, nil
}
func (f *fakeQ) ListRequiredSkills(context.Context, uuid.UUID) ([]dbgen.ListRequiredSkillsRow, error) {
return nil, nil
}
func (f *fakeQ) ListRequiredCertifications(context.Context, uuid.UUID) ([]string, error) {
return nil, nil
}
func (f *fakeQ) ListCandidates(context.Context, dbgen.ListCandidatesParams) ([]dbgen.Candidate, error) {
return f.cands, nil
}
func (f *fakeQ) ListCandidateSkills(context.Context, uuid.UUID) ([]dbgen.ListCandidateSkillsRow, error) {
return nil, nil
}
func (f *fakeQ) ListCandidateCertifications(context.Context, uuid.UUID) ([]string, error) {
return nil, nil
}
func (f *fakeQ) ListCandidateCustomerExperience(context.Context, uuid.UUID) ([]string, error) {
return nil, nil
}
func (f *fakeQ) CreateSlate(_ context.Context, arg dbgen.CreateSlateParams) (dbgen.Slate, error) {
return dbgen.Slate{ID: f.slateID, OrganizationID: arg.OrganizationID, RequirementID: arg.RequirementID, Name: arg.Name, Status: arg.Status}, nil
}
func (f *fakeQ) AddSlateMember(_ context.Context, arg dbgen.AddSlateMemberParams) (dbgen.SlateMember, error) {
f.added = append(f.added, arg)
return dbgen.SlateMember{}, nil
}
func TestGenerateSlateRanksBandsAndPersists(t *testing.T) {
orgID, reqID := uuid.New(), uuid.New()
// Requirement needs Secret; everything else open.
req := dbgen.Requirement{ID: reqID, RequiredLevel: "secret", RequiredPoly: "none", RequiredYears: 0}
// cA: meets Secret, available -> 100.00 (green)
// cB: only Confidential (clearance 0), available -> 75.00 (red, v1.4.0 clearance gap cap)
// cC: Confidential + NOT available (clearance 0, location 50) -> 70.00 (red)
// v1.4.0: cB held Confidential but Secret was required, so clearance scores 0 and the clearance
// gap cap lowers Yellow to Red. The total (75.00) is unchanged; only the band changes.
cA := dbgen.Candidate{ID: uuid.New(), OrganizationID: orgID, ClearanceLevel: "secret", ClearancePoly: "none", ClearanceStatus: "active", Available: true}
cB := dbgen.Candidate{ID: uuid.New(), OrganizationID: orgID, ClearanceLevel: "confidential", ClearancePoly: "none", ClearanceStatus: "active", Available: true}
cC := dbgen.Candidate{ID: uuid.New(), OrganizationID: orgID, ClearanceLevel: "confidential", ClearancePoly: "none", ClearanceStatus: "active", Available: false}
f := &fakeQ{req: req, cands: []dbgen.Candidate{cC, cA, cB}, slateID: uuid.New()} // intentionally unsorted
in := GenerateSlateInput{RequirementID: reqID, Name: "Engineer Slate", MaxCandidates: 10}
res, err := generateSlate(context.Background(), f, orgID, in, nil, time.Now())
if err != nil {
t.Fatalf("generateSlate: %v", err)
}
if res.SlateID != f.slateID || len(res.Members) != 3 {
t.Fatalf("unexpected result: %+v", res)
}
want := []struct {
id uuid.UUID
total string
band string
rank int
}{
{cA.ID, "100.00", "green", 1},
// cB total is still 75.00 but band is red due to v1.4.0 clearance gap cap.
{cB.ID, "75.00", "red", 2},
{cC.ID, "70.00", "red", 3},
}
for i, w := range want {
m := res.Members[i]
if m.CandidateID != w.id.String() || m.Total != w.total || m.Band != w.band || m.Rank != w.rank {
t.Fatalf("member %d = %+v, want id=%s total=%s band=%s rank=%d", i, m, w.id, w.total, w.band, w.rank)
}
}
// Persisted in rank order, with DB band codes and the perfect 100 fitting numeric(7,4).
if len(f.added) != 3 {
t.Fatalf("want 3 persisted members, got %d", len(f.added))
}
// v1.4.0: cB is now red (clearance gap cap), so all three are ranked but two are red.
if f.added[0].Band != "green" || f.added[1].Band != "red" || f.added[2].Band != "red" {
t.Fatalf("persisted bands wrong: %q %q %q", f.added[0].Band, f.added[1].Band, f.added[2].Band)
}
if !f.added[0].TotalScore.Equal(decimal.NewFromInt(100)) {
t.Fatalf("rank-1 total should be exactly 100, got %s", f.added[0].TotalScore)
}
if *f.added[0].Rank != 1 || *f.added[2].Rank != 3 {
t.Fatalf("persisted ranks wrong")
}
}