Some checks failed
Update Nix Packages with nix-update / nix-update (push) Failing after 3h23m59s
90 lines
2.8 KiB
Nix
90 lines
2.8 KiB
Nix
{
|
|
lib,
|
|
pkgs,
|
|
}: let
|
|
codingRulesLib = (import ../../lib {inherit lib;}).coding-rules;
|
|
|
|
# Test 1: instructions are generated correctly with custom rulesDir
|
|
testInstructions = let
|
|
rules = codingRulesLib.mkCodingRules {
|
|
agents = "/tmp/fake-agents";
|
|
languages = ["python"];
|
|
concerns = ["naming"];
|
|
rulesDir = ".coding-rules";
|
|
};
|
|
in
|
|
assert rules.instructions
|
|
== [
|
|
".coding-rules/concerns/naming.md"
|
|
".coding-rules/languages/python.md"
|
|
]; "pass: instructions";
|
|
|
|
# Test 2: default rulesDir is .opencode-rules
|
|
testDefaultRulesDir = let
|
|
rules = codingRulesLib.mkCodingRules {
|
|
agents = "/tmp/fake-agents";
|
|
};
|
|
hasCorrectPrefix = builtins.all (s: builtins.substring 0 15 s == ".opencode-rules") rules.instructions;
|
|
in
|
|
assert hasCorrectPrefix == true; "pass: default rulesDir";
|
|
|
|
# Test 3: shellHook contains both the symlink command and the config generation
|
|
testShellHook = let
|
|
rules = codingRulesLib.mkCodingRules {
|
|
agents = "/tmp/fake-agents";
|
|
};
|
|
hook = rules.shellHook;
|
|
hasSymlink = builtins.match ".*ln -sfn.*" hook != null;
|
|
hasConfigGen = builtins.match ".*coding-rules.json.*" hook != null;
|
|
in
|
|
assert hasSymlink;
|
|
assert hasConfigGen; "pass: shellHook";
|
|
|
|
# Test 4: forPi=false does not include AGENTS.md logic in shellHook
|
|
testForPiDisabled = let
|
|
rules = codingRulesLib.mkCodingRules {
|
|
agents = "/tmp/fake-agents";
|
|
forPi = false;
|
|
};
|
|
hook = rules.shellHook;
|
|
hasPiBlock = builtins.match ".*CODING-RULES:START.*" hook != null;
|
|
in
|
|
assert hasPiBlock == false; "pass: forPi disabled";
|
|
|
|
# Test 5: mkRulesMdSection produces empty string for empty concerns
|
|
testEmptyRulesMdSection = let
|
|
section = codingRulesLib.mkRulesMdSection {
|
|
agents = "/tmp/fake-agents";
|
|
concerns = [];
|
|
languages = [];
|
|
frameworks = [];
|
|
};
|
|
in
|
|
assert section == ""; "pass: empty mkRulesMdSection";
|
|
|
|
# Test 6: mkRulesMdSection wraps content with markers
|
|
testRulesMdSection = let
|
|
# Use a simple file path that won't be read (concatRulesMd returns empty
|
|
# when files don't exist, so we just verify the function is callable)
|
|
section = codingRulesLib.mkRulesMdSection {
|
|
agents = "/tmp/fake-agents";
|
|
concerns = [];
|
|
languages = [];
|
|
frameworks = [];
|
|
};
|
|
# After fix: mkRulesMdSection returns "" for empty rules, not a string with markers
|
|
in
|
|
assert section == ""; "pass: mkRulesMdSection empty case";
|
|
in
|
|
pkgs.runCommand "lib-coding-rules-tests" {} ''
|
|
echo "Running lib coding-rules tests..."
|
|
echo "1. ${testInstructions}"
|
|
echo "2. ${testDefaultRulesDir}"
|
|
echo "3. ${testShellHook}"
|
|
echo "4. ${testForPiDisabled}"
|
|
echo "5. ${testEmptyRulesMdSection}"
|
|
echo "6. ${testRulesMdSection}"
|
|
echo "All tests passed"
|
|
touch $out
|
|
''
|