Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
49 changes: 48 additions & 1 deletion src/lib/scoring.test.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import test from 'node:test'
import assert from 'node:assert/strict'
import { computeDeathIndex } from './scoring'
import { computeDeathIndex, generateLastWords } from './scoring'
import type { RepoData } from './types'

function buildRepo(overrides: Partial<RepoData> = {}): RepoData {
Expand Down Expand Up @@ -34,3 +34,50 @@ test('inactive repo with many issues gets high death index', () => {
const score = computeDeathIndex(repo)
assert.ok(score >= 5)
})

// ── generateLastWords ──────────────────────────────────────────────

test('"initial commit" returns beginning quote', () => {
const repo = buildRepo({ lastCommitMessage: 'initial commit', lastCommitDate: new Date().toISOString() })
assert.equal(generateLastWords(repo), 'it was only ever the beginning')
})

test('"revert" returns nevermind', () => {
const repo = buildRepo({ lastCommitMessage: 'revert: undo migration', lastCommitDate: new Date().toISOString() })
assert.equal(generateLastWords(repo), 'nevermind')
})

test('"hotfix" returns this is fine', () => {
const repo = buildRepo({ lastCommitMessage: 'hotfix: patch auth flow', lastCommitDate: new Date().toISOString() })
assert.equal(generateLastWords(repo), 'this is fine')
})

test('"cleanup" returns tidying quote', () => {
const repo = buildRepo({ lastCommitMessage: 'cleanup unused imports', lastCommitDate: new Date().toISOString() })
assert.equal(generateLastWords(repo), 'just tidying up before i go')
})

test('"bump version" returns release quote', () => {
const repo = buildRepo({ lastCommitMessage: 'bump version to 3.0.0', lastCommitDate: new Date().toISOString() })
assert.equal(generateLastWords(repo), 'one last release into the void')
})

test('"remove" returns burning the evidence', () => {
const repo = buildRepo({ lastCommitMessage: 'remove deprecated API', lastCommitDate: new Date().toISOString() })
assert.equal(generateLastWords(repo), 'burning the evidence')
})

test('"refactor" returns architecture quote', () => {
const repo = buildRepo({ lastCommitMessage: 'refactor auth module', lastCommitDate: new Date().toISOString() })
assert.equal(generateLastWords(repo), 'i swear this time the architecture is right')
})

test('"todo" returns someone else quote', () => {
const repo = buildRepo({ lastCommitMessage: 'add todo for error handling', lastCommitDate: new Date().toISOString() })
assert.equal(generateLastWords(repo), 'someone else will handle it')
})

test('"dependencies" returns dependency hell', () => {
const repo = buildRepo({ lastCommitMessage: 'update dependencies', lastCommitDate: new Date().toISOString() })
assert.equal(generateLastWords(repo), 'trapped in dependency hell')
})
9 changes: 9 additions & 0 deletions src/lib/scoring.ts
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,15 @@ export function generateLastWords(repo: RepoData): string {
if (msgLower.includes('update readme')) return 'at least the docs are good'
if (msgLower.includes('wip') || msgLower.includes('work in progress')) return "i'll finish this later"
if (msgLower.includes('merge')) return 'dying in a merge conflict'
if (msgLower.includes('initial commit')) return 'it was only ever the beginning'
if (msgLower.includes('revert')) return 'nevermind'
if (msgLower.includes('hotfix')) return 'this is fine'
if (msgLower.includes('cleanup') || msgLower.includes('clean up')) return 'just tidying up before i go'
if (msgLower.includes('bump version') || msgLower.includes('bump to')) return 'one last release into the void'
if (msgLower.includes('remove') || msgLower.includes('delete')) return 'burning the evidence'
if (msgLower.includes('refactor')) return 'i swear this time the architecture is right'
if (msgLower.includes('todo') || msgLower.includes('fixme')) return 'someone else will handle it'
if (msgLower.includes('dependency') || msgLower.includes('dependencies')) return 'trapped in dependency hell'
if (daysSince > 730 && repo.stargazersCount === 0) return "i'll finish this later"
if (repo.stargazersCount > 200 && daysSince > 365) return 'i thought people liked me'

Expand Down