Skip to content

AZ106: A test or an invariant written wrongly ​

The test section holds checks on the data there: user 3 can view file 11, user 3 cannot edit file 11. A named test, test "name", brings its own data first, given ann = {INSERT ... RETURNING id}, then checks: user $ann can view folder $top, as user $ann refused {UPDATE ...}, as user $ann sees 2 {SELECT ...}. A test needs at least one line, and a test file holds only named tests.

Invariants are never type: expression, under invariants.

Reported when the tests are compiled: rowfence test, the editor, rowfence dev.

The mistake ​

authz
app role app_user
type user = app.users
type folder = app.folders
  owner : user = owner_id
  can view = owner
test "owners see their folders"
  user 1 may view folder 1
line 7: a test's lines are: given name = {INSERT ... RETURNING id}, user $name can view file $f, or as user $name allowed|refused|sees N {SQL} [AZ106]

Fixed ​

authz
app role app_user
type user = app.users
type folder = app.folders
  owner : user = owner_id
  can view = owner
test "owners see their folders"
  given ann = {INSERT INTO app.users (name) VALUES ('Ann') RETURNING id}
  given top = {INSERT INTO app.folders (owner_id, name) VALUES ($ann, 'Top') RETURNING id}
  user $ann can view folder $top