Merge branch 'chore/tests' into feat/autodiscovery

This commit is contained in:
technofab 2026-01-04 21:35:33 +01:00
commit 2aaf40e5f3
Signed by: technofab
SSH key fingerprint: SHA256:bV4h88OqS/AxjbPn66uUdvK9JsgIW4tv3vwJQ8tpMqQ
9 changed files with 293 additions and 1 deletions

View file

@ -3,8 +3,19 @@
in
cilib.mkCI {
pipelines."default" = {
stages = ["build" "deploy"];
stages = ["test" "build" "deploy"];
jobs = {
"test:lib" = {
stage = "test";
script = [
"nix run .#tests -- --junit=junit.xml"
];
allow_failure = true;
artifacts = {
when = "always";
reports.junit = "junit.xml";
};
};
"docs" = {
stage = "build";
script = [

19
cells/repo/flake.lock generated
View file

@ -69,12 +69,31 @@
"type": "gitlab"
}
},
"nixtest-lib": {
"locked": {
"dir": "lib",
"lastModified": 1765728058,
"narHash": "sha256-V3FXECl1oTxEtGteNz3o3GJs/X8asSn1TxRpZ2F+htU=",
"owner": "TECHNOFAB",
"repo": "nixtest",
"rev": "2477ad31ae3aa4134e1bb5eeddbebe0cb64ccb57",
"type": "gitlab"
},
"original": {
"dir": "lib",
"owner": "TECHNOFAB",
"ref": "v1.2.1",
"repo": "nixtest",
"type": "gitlab"
}
},
"root": {
"inputs": {
"devshell": "devshell",
"devtools-lib": "devtools-lib",
"nix-gitlab-ci-lib": "nix-gitlab-ci-lib",
"nixmkdocs": "nixmkdocs",
"nixtest-lib": "nixtest-lib",
"soonix-lib": "soonix-lib",
"treefmt-nix": "treefmt-nix"
}

View file

@ -5,6 +5,7 @@
soonix-lib.url = "gitlab:TECHNOFAB/soonix?dir=lib";
nix-gitlab-ci-lib.url = "gitlab:TECHNOFAB/nix-gitlab-ci/3.1.2?dir=lib";
devtools-lib.url = "gitlab:rensa-nix/devtools?dir=lib";
nixtest-lib.url = "gitlab:TECHNOFAB/nixtest/v1.2.1?dir=lib";
treefmt-nix = {
url = "github:numtide/treefmt-nix";
flake = false;
@ -18,6 +19,8 @@
doclib = i.nixmkdocs.lib {inherit (i.parent) pkgs;};
soonix = i.soonix-lib.lib {inherit (i.parent) pkgs;};
cilib = i.nix-gitlab-ci-lib.lib {inherit (i.parent) pkgs;};
ntlib = i.nixtest-lib.lib {inherit (i.parent) pkgs;};
rensa = import "${i.parent.self}/lib" {inherit (i.parent.pkgs) lib;};
treefmt = import i.treefmt-nix;
};
}

10
cells/repo/tests.nix Normal file
View file

@ -0,0 +1,10 @@
{inputs, ...}: let
inherit (inputs) pkgs ntlib rensa;
in {
tests = ntlib.mkNixtest {
modules = ntlib.autodiscover {dir = "${inputs.self}/tests";};
args = {
inherit pkgs ntlib rensa;
};
};
}

View file

@ -24,12 +24,14 @@
(simple "docs")
(simple "ci")
(simple "soonix")
(simple "tests")
];
} {
packages = rensa.select inputs.self [
["repo" "docs"]
["repo" "ci" "packages"]
["repo" "soonix" "packages"]
["repo" "tests"]
];
};
}

90
tests/builder_test.nix Normal file
View file

@ -0,0 +1,90 @@
{
pkgs,
ntlib,
rensa,
...
}: {
suites."Builder" = {
pos = __curPos;
tests = [
{
name = "has system outputs";
expected = true;
actual = let
testFlake = rensa.build {
inputs = {};
cellsFrom = ../cells;
cellBlocks = with rensa.blocks; [
(simple "test")
];
systems = ["x86_64-linux"];
};
in
builtins.hasAttr "x86_64-linux" testFlake;
}
{
name = "has ren metadata";
expected = true;
actual = let
testFlake = rensa.build {
inputs = {};
cellsFrom = ../cells;
cellBlocks = with rensa.blocks; [
(simple "test")
];
systems = ["x86_64-linux"];
};
in
builtins.hasAttr "__ren" testFlake;
}
{
name = "merges outputs";
expected = {
packages = {
test-package = "merged";
};
};
actual = let
testFlake =
rensa.buildWith {
inputs = {};
cellsFrom = ../cells;
cellBlocks = with rensa.blocks; [
(simple "test")
];
systems = ["x86_64-linux"];
} {
packages = {
test-package = "merged";
};
};
in {
packages = testFlake.packages;
};
}
{
name = "eval test";
type = "script";
script = ''
${ntlib.helpers.path [pkgs.gnugrep pkgs.coreutils pkgs.nix]}
${ntlib.helpers.scriptHelpers}
result=$(nix eval --impure --expr '
let
rensa = import ${../lib} {lib = import ${pkgs.path}/lib;};
testFlake = rensa.build {
inputs = { test = "value"; };
cellsFrom = ${../cells};
cellBlocks = [];
systems = [ "x86_64-linux" ];
};
in
testFlake.__ren.__schema
')
assert "$result == \"v0\"" "should contain version"
'';
}
];
};
}

51
tests/filter_test.nix Normal file
View file

@ -0,0 +1,51 @@
{rensa, ...}: {
suites."Filter" = {
pos = __curPos;
tests = [
{
name = "filter by cell";
expected = {
x86_64-linux = {};
};
actual = let
testFlake = {
__ren = {
cells = ["repo" "other"];
};
x86_64-linux = {
repo = {
docs = {value = "docs-value";};
ci = {value = "ci-value";};
};
other = {
packages = {value = "other-packages";};
};
};
};
in
rensa.filter (_: cell: cell == "repo") testFlake [["*" "*"]];
}
{
name = "filter by block";
expected = {
x86_64-linux = {};
};
actual = let
testFlake = {
__ren = {
cells = ["repo"];
};
x86_64-linux = {
repo = {
docs = {value = "docs-value";};
ci = {value = "ci-value";};
packages = {value = "packages-value";};
};
};
};
in
rensa.filter (block: _: block == "docs") testFlake [["repo" "*"]];
}
];
};
}

57
tests/loader_test.nix Normal file
View file

@ -0,0 +1,57 @@
{
pkgs,
ntlib,
rensa,
...
}: {
suites."Loader" = {
pos = __curPos;
tests = [
{
name = "cell sibling access";
expected = {
hello = "world";
};
actual = let
testFlake = rensa.build {
inputs = {};
cellsFrom = ../cells;
cellBlocks = with rensa.blocks; [
(simple "test")
];
systems = ["x86_64-linux"];
};
in
testFlake.x86_64-linux.test.test;
}
{
name = "load file";
type = "script";
script = ''
${ntlib.helpers.path [pkgs.gnugrep pkgs.coreutils pkgs.nix]}
${ntlib.helpers.scriptHelpers}
mkdir -p "cells/testcell"
echo '{ hello = "world"; }' > "cells/testcell/packages.nix"
cat > "flake.nix" << 'EOF'
{
outputs = inputs: let
rensa = import ${../lib} { lib = import "${pkgs.path}/lib"; };
in rensa.build {
inputs = {};
cellsFrom = ./cells;
cellBlocks = with rensa.blocks; [ (simple "packages") ];
systems = [ "x86_64-linux" ];
};
}
EOF
result=$(nix eval --impure .#x86_64-linux.testcell.packages.hello)
assert "$result == \"world\"" "should equal to world"
'';
}
];
};
}

49
tests/select_test.nix Normal file
View file

@ -0,0 +1,49 @@
{rensa, ...}: {
suites."Select" = {
pos = __curPos;
tests = [
{
name = "single block";
expected = {
x86_64-linux = {value = "test-value";};
};
actual = let
testFlake = {
__ren = {
cells = ["repo"];
};
x86_64-linux = {
repo = {
docs = {value = "test-value";};
ci = {packages = {value = "ci-packages";};};
};
};
};
in
rensa.select testFlake [["repo" "docs"]];
}
{
name = "multiple blocks";
expected = {
x86_64-linux = {value = "ci-packages";};
};
actual = let
testFlake = {
__ren = {
cells = ["repo"];
};
x86_64-linux = {
repo = {
ci = {packages = {value = "ci-packages";};};
other = {value = "ignored";};
};
};
};
in
rensa.select testFlake [
["repo" "ci" "packages"]
];
}
];
};
}