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
Original file line number Diff line number Diff line change
Expand Up @@ -2,86 +2,8 @@ config:
inherit-env: true

tests:
# fga mapping validate
001 - validate accepts a valid mapping:
command: fga mapping validate ./tests/fixtures/basic-mapping.yaml
exit-code: 0
stdout:
contains:
- "valid"

002 - validate json format reports rule count:
command: fga mapping validate --format json ./tests/fixtures/basic-mapping.yaml
exit-code: 0
stdout:
json:
valid: "true"
rule_count: "1"

003 - validate rejects an invalid mapping:
command: fga mapping validate ./tests/fixtures/invalid-mapping.yaml
exit-code: 2
stderr:
contains:
- "unclosed"

004 - validate json format reports errors on invalid mapping:
command: fga mapping validate --format json ./tests/fixtures/invalid-mapping.yaml
exit-code: 2
stdout:
json:
valid: "false"

005 - validate rejects unknown format:
command: fga mapping validate --format xml ./tests/fixtures/basic-mapping.yaml
exit-code: 2

# fga mapping test
006 - test runs passing tests:
command: fga mapping test --format json ./tests/fixtures/basic-mapping.yaml
exit-code: 0
stdout:
json:
summary.total: "2"
summary.passed: "2"
summary.failed: "0"

007 - test compile error exits with code 2:
command: fga mapping test ./tests/fixtures/invalid-mapping.yaml
exit-code: 2

008 - test --run filters by substring:
command: fga mapping test --format json --run anne ./tests/fixtures/basic-mapping.yaml
exit-code: 0
stdout:
json:
summary.total: "2"
summary.passed: "1"

009 - test --run matching nothing exits non-zero:
command: fga mapping test --run NOMATCH ./tests/fixtures/basic-mapping.yaml
exit-code: 1
stderr:
contains:
- "matched no tests"

# fga mapping init
010 - init creates a mapping file:
command: fga mapping init /tmp/fga-mapping-test-$$.yaml
exit-code: 0
stdout:
contains:
- "Created"

011 - init --minimal creates file without tests block:
command: bash -c 'fga mapping init --minimal /tmp/fga-mapping-minimal-test-$$.yaml && cat /tmp/fga-mapping-minimal-test-$$.yaml'
exit-code: 0
stdout:
not-contains:
- "tests:"

# fga mapping evaluate (run is a deprecated alias)
012 - evaluate emits JSONL tuple from stdin:
# run is a deprecated alias for evaluate
001 - evaluate emits JSONL tuple from stdin:
command: bash -c 'echo '"'"'{"id":"anne","org":"acme"}'"'"' | fga mapping evaluate ./tests/fixtures/basic-mapping.yaml'
exit-code: 0
stdout:
Expand All @@ -91,7 +13,7 @@ tests:
relation: "member"
object: "org:acme"

013 - evaluate --writes-only emits ClientTupleKey shape without op or action field:
002 - evaluate --writes-only emits ClientTupleKey shape without op or action field:
command: bash -c 'echo '"'"'{"id":"anne","org":"acme"}'"'"' | fga mapping evaluate --writes-only ./tests/fixtures/basic-mapping.yaml'
exit-code: 0
stdout:
Expand All @@ -103,40 +25,40 @@ tests:
- '"op"'
- '"action"'

014 - evaluate --input reads from file:
003 - evaluate --input reads from file:
command: fga mapping evaluate --input ./tests/fixtures/mapping-event.json ./tests/fixtures/basic-mapping.yaml
exit-code: 0
stdout:
json:
op: "write"
user: "user:anne"

015 - evaluate --format json --writes-only returns a flat array of tuples:
004 - evaluate --format json --writes-only returns a flat array of tuples:
command: bash -c 'echo '"'"'{"id":"anne","org":"acme"}'"'"' | fga mapping evaluate --format json --writes-only ./tests/fixtures/basic-mapping.yaml'
exit-code: 0
stdout:
json:
0.user: "user:anne"

016 - evaluate --format json returns a batch object with writes:
005 - evaluate --format json returns a batch object with writes:
command: bash -c 'echo '"'"'{"id":"anne","org":"acme"}'"'"' | fga mapping evaluate --format json ./tests/fixtures/basic-mapping.yaml'
exit-code: 0
stdout:
json:
writes.0.user: "user:anne"

017 - evaluate rejects unknown format:
006 - evaluate rejects unknown format:
command: bash -c 'echo '"'"'{}'"'"' | fga mapping evaluate --format xml ./tests/fixtures/basic-mapping.yaml'
exit-code: 2

018 - evaluate rejects invalid mapping:
007 - evaluate rejects invalid mapping:
command: bash -c 'echo '"'"'{}'"'"' | fga mapping evaluate ./tests/fixtures/invalid-mapping.yaml'
exit-code: 2
stderr:
contains:
- "unclosed"

019 - evaluate streams one op per record for multi-record input:
008 - evaluate streams one op per record for multi-record input:
command: bash -c 'printf '"'"'{"id":"anne","org":"acme"}\n{"id":"bob","org":"acme"}\n'"'"' | fga mapping evaluate ./tests/fixtures/basic-mapping.yaml'
exit-code: 0
stdout:
Expand All @@ -145,20 +67,20 @@ tests:
- "user:anne"
- "user:bob"

020 - evaluate --aggregate dedups an identical tuple across records:
009 - evaluate --aggregate dedups an identical tuple across records:
command: bash -c 'printf '"'"'{"id":"anne","org":"acme"}\n{"id":"anne","org":"acme"}\n'"'"' | fga mapping evaluate --aggregate ./tests/fixtures/basic-mapping.yaml'
exit-code: 0
stdout:
line-count: 1

021 - evaluate --aggregate reports a cross-record write/delete conflict:
010 - evaluate --aggregate reports a cross-record write/delete conflict:
command: bash -c 'printf '"'"'{"id":"anne","org":"acme","op":"add"}\n{"id":"anne","org":"acme","op":"remove"}\n'"'"' | fga mapping evaluate --aggregate ./tests/fixtures/conflicting-mapping.yaml'
exit-code: 1
stderr:
contains:
- "conflict"

022 - evaluate --continue-on-error skips a malformed record and exits non-zero:
011 - evaluate --continue-on-error skips a malformed record and exits non-zero:
command: bash -c 'printf '"'"'{"id":"anne","org":"acme"}\nnot json\n{"id":"bob","org":"acme"}\n'"'"' | fga mapping evaluate --continue-on-error ./tests/fixtures/basic-mapping.yaml'
exit-code: 1
stdout:
Expand All @@ -170,20 +92,20 @@ tests:
contains:
- "skipping record on line 2"

023 - evaluate --continue-on-error with all valid records exits zero:
012 - evaluate --continue-on-error with all valid records exits zero:
command: bash -c 'printf '"'"'{"id":"anne","org":"acme"}\n{"id":"bob","org":"acme"}\n'"'"' | fga mapping evaluate --continue-on-error ./tests/fixtures/basic-mapping.yaml'
exit-code: 0
stdout:
line-count: 2

024 - evaluate --aggregate dedups identical unresolved filters across records:
013 - evaluate --aggregate dedups identical unresolved filters across records:
command: bash -c 'printf '"'"'{"id":"anne","org":"acme"}\n{"id":"anne","org":"acme"}\n'"'"' | fga mapping evaluate --aggregate --format json ./tests/fixtures/filter-mapping.yaml'
exit-code: 0
stdout:
json:
tuple_filter_operations.#: "1"

025 - run alias prints deprecation warning and still produces output:
014 - run alias prints deprecation warning and still produces output:
command: bash -c 'echo '"'"'{"id":"anne","org":"acme"}'"'"' | fga mapping run ./tests/fixtures/basic-mapping.yaml'
exit-code: 0
stdout:
Expand Down
17 changes: 17 additions & 0 deletions tests/mapping-init-test-cases.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
config:
inherit-env: true

tests:
001 - init creates a mapping file:
command: fga mapping init /tmp/fga-mapping-test-$$.yaml
exit-code: 0
stdout:
contains:
- "Created"

002 - init --minimal creates file without tests block:
command: bash -c 'fga mapping init --minimal /tmp/fga-mapping-minimal-test-$$.yaml && cat /tmp/fga-mapping-minimal-test-$$.yaml'
exit-code: 0
stdout:
not-contains:
- "tests:"
31 changes: 31 additions & 0 deletions tests/mapping-test-test-cases.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
config:
inherit-env: true

tests:
001 - test runs passing tests:
command: fga mapping test --format json ./tests/fixtures/basic-mapping.yaml
exit-code: 0
stdout:
json:
summary.total: "2"
summary.passed: "2"
summary.failed: "0"

002 - test compile error exits with code 2:
command: fga mapping test ./tests/fixtures/invalid-mapping.yaml
exit-code: 2

003 - test --run filters by substring:
command: fga mapping test --format json --run anne ./tests/fixtures/basic-mapping.yaml
exit-code: 0
stdout:
json:
summary.total: "2"
summary.passed: "1"

004 - test --run matching nothing exits non-zero:
command: fga mapping test --run NOMATCH ./tests/fixtures/basic-mapping.yaml
exit-code: 1
stderr:
contains:
- "matched no tests"
36 changes: 36 additions & 0 deletions tests/mapping-validate-test-cases.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
config:
inherit-env: true

tests:
001 - validate accepts a valid mapping:
command: fga mapping validate ./tests/fixtures/basic-mapping.yaml
exit-code: 0
stdout:
contains:
- "valid"

002 - validate json format reports rule count:
command: fga mapping validate --format json ./tests/fixtures/basic-mapping.yaml
exit-code: 0
stdout:
json:
valid: "true"
rule_count: "1"

003 - validate rejects an invalid mapping:
command: fga mapping validate ./tests/fixtures/invalid-mapping.yaml
exit-code: 2
stderr:
contains:
- "unclosed"

004 - validate json format reports errors on invalid mapping:
command: fga mapping validate --format json ./tests/fixtures/invalid-mapping.yaml
exit-code: 2
stdout:
json:
valid: "false"

005 - validate rejects unknown format:
command: fga mapping validate --format xml ./tests/fixtures/basic-mapping.yaml
exit-code: 2
Loading