mirror of
https://github.com/rcourtman/Pulse.git
synced 2026-05-07 00:37:36 +00:00
55 lines
1.6 KiB
Go
55 lines
1.6 KiB
Go
package license
|
|
|
|
// Code standards tests: these act as linter rules that run in CI.
|
|
// They scan source files for hardcoded grace period values.
|
|
|
|
import (
|
|
"os"
|
|
"regexp"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
// TestNoHardcodedGracePeriod ensures no file in the license package hardcodes
|
|
// the 7-day grace period duration instead of using DefaultGracePeriod.
|
|
func TestNoHardcodedGracePeriod(t *testing.T) {
|
|
entries, err := os.ReadDir(".")
|
|
if err != nil {
|
|
t.Fatalf("failed to read license directory: %v", err)
|
|
}
|
|
|
|
// Match "7 * 24 * time.Hour" or "168 * time.Hour" (7*24=168)
|
|
hardcoded := regexp.MustCompile(`(?:7\s*\*\s*24\s*\*\s*time\.Hour|168\s*\*\s*time\.Hour)`)
|
|
|
|
for _, entry := range entries {
|
|
name := entry.Name()
|
|
if !strings.HasSuffix(name, ".go") || strings.HasSuffix(name, "_test.go") {
|
|
continue
|
|
}
|
|
|
|
data, err := os.ReadFile(name)
|
|
if err != nil {
|
|
t.Fatalf("failed to read %s: %v", name, err)
|
|
}
|
|
content := string(data)
|
|
|
|
matches := hardcoded.FindAllStringIndex(content, -1)
|
|
for _, m := range matches {
|
|
line := 1 + strings.Count(content[:m[0]], "\n")
|
|
// Get the full line containing the match
|
|
lineStart := strings.LastIndex(content[:m[0]], "\n") + 1
|
|
lineEnd := strings.Index(content[m[0]:], "\n")
|
|
var fullLine string
|
|
if lineEnd >= 0 {
|
|
fullLine = content[lineStart : m[0]+lineEnd]
|
|
} else {
|
|
fullLine = content[lineStart:]
|
|
}
|
|
// Allow the constant definition itself
|
|
if strings.Contains(fullLine, "DefaultGracePeriod") {
|
|
continue
|
|
}
|
|
t.Errorf("%s:%d: hardcoded grace period duration — use DefaultGracePeriod constant instead", name, line)
|
|
}
|
|
}
|
|
}
|