Skip to content

Commit 692aace

Browse files
committed
opa: add mask e2e tests
Signed-off-by: Stephan Renatus <[email protected]>
1 parent 1cb2393 commit 692aace

File tree

1 file changed

+84
-7
lines changed

1 file changed

+84
-7
lines changed

packages/opa/tests/compile.test.ts

Lines changed: 84 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,18 +14,36 @@ describe("compile-api", async () => {
1414
# scope: document
1515
# custom:
1616
# unknowns: [input.fruits]
17+
# mask_rule: data.filters.mask
1718
include if input.fruits.colour in input.fav_colours
1819
include if {
1920
not input.fav_colours
2021
endswith(input.fruits.name, "apple")
2122
}
23+
24+
mask.fruits.owner.replace.value := "***"
2225
`,
2326
filters_sans_metadata: `package filters_no_md
2427
include if input.fruits.colour in input.fav_colours
2528
include if {
2629
not input.fav_colours
2730
endswith(input.fruits.name, "apple")
2831
}
32+
`,
33+
filters_extra_masks: `package filters_extra_masks
34+
# METADATA
35+
# scope: document
36+
# custom:
37+
# unknowns: [input.fruits]
38+
# mask_rule: data.filters_extra_masks.mask
39+
include if input.fruits.colour in input.fav_colours
40+
include if {
41+
not input.fav_colours
42+
endswith(input.fruits.name, "apple")
43+
}
44+
45+
mask.fruits.price.replace.value := 0
46+
mask.owner.phone.replace.value := "000-000"
2947
`,
3048
};
3149

@@ -45,7 +63,7 @@ include if {
4563

4664
before(async () => {
4765
const opa = await prepareOPA(
48-
"ghcr.io/styrainc/enterprise-opa:1.37.0",
66+
"ghcr.io/styrainc/enterprise-opa:edge",
4967
policies,
5068
);
5169
container = opa.container;
@@ -63,7 +81,9 @@ include if {
6381
},
6482
);
6583
const { query, masks } = res as Filters;
66-
assert.equal(masks, undefined);
84+
assert.deepStrictEqual(masks, {
85+
fruits: { owner: { replace: { value: "***" } } },
86+
});
6787
assert.equal(query, "WHERE fruits.colour IN (E'red', E'green')");
6888
});
6989

@@ -76,7 +96,9 @@ include if {
7696
},
7797
);
7898
const { query, masks } = res as Filters;
79-
assert.equal(masks, undefined);
99+
assert.deepStrictEqual(masks, {
100+
fruits: { owner: { replace: { value: "***" } } },
101+
});
80102
assert.equal(query, "WHERE fruits.name LIKE E'%apple'");
81103
});
82104

@@ -106,7 +128,9 @@ include if {
106128
},
107129
);
108130
const { query, masks } = res as Filters;
109-
assert.equal(masks, undefined);
131+
assert.deepStrictEqual(masks, {
132+
fruits: { owner: { replace: { value: "***" } } },
133+
});
110134
assert.equal(query, "WHERE F.C IN (E'red', E'green')");
111135
});
112136

@@ -122,8 +146,10 @@ include if {
122146
},
123147
);
124148
const { query, masks, mask } = res as Filters & PrismaMask;
125-
assert.equal(masks, undefined);
126149
assert.notEqual(mask, undefined);
150+
assert.deepStrictEqual(masks, {
151+
fruits: { owner: { replace: { value: "***" } } },
152+
});
127153
assert.deepEqual(query, {
128154
colour: {
129155
in: ["red", "green"],
@@ -146,7 +172,9 @@ include if {
146172
},
147173
);
148174
const { query, masks, mask } = res as Filters & PrismaMask;
149-
assert.equal(masks, undefined);
175+
assert.deepStrictEqual(masks, {
176+
fruits: { owner: { replace: { value: "***" } } },
177+
});
150178
assert.notEqual(mask, undefined);
151179
assert.deepEqual(query, {
152180
colour: {
@@ -162,14 +190,48 @@ include if {
162190
"fruits",
163191
);
164192
const { query, masks, mask } = res as Filters & PrismaMask;
165-
assert.equal(masks, undefined);
193+
assert.deepStrictEqual(masks, {
194+
fruits: { owner: { replace: { value: "***" } } },
195+
});
166196
assert.notEqual(mask, undefined);
167197
assert.deepEqual(query, {
168198
colour: {
169199
in: ["red", "green"],
170200
},
171201
});
172202
});
203+
204+
it("returns ucast-prisma and supports direct and related masks", async () => {
205+
const res = await new OPAClient(serverURL).getFilters(
206+
"filters_extra_masks/include",
207+
{ fav_colours: ["red", "green"] },
208+
"fruits",
209+
);
210+
const { masks, mask } = res as Filters & PrismaMask;
211+
assert.deepStrictEqual(masks, {
212+
fruits: { price: { replace: { value: 0 } } },
213+
owner: { phone: { replace: { value: "000-000" } } },
214+
});
215+
216+
const fruit = {
217+
id: 1,
218+
name: "Apple",
219+
colour: "red",
220+
price: 100,
221+
owner: {
222+
name: "Jane",
223+
phone: "123",
224+
},
225+
};
226+
assert.deepEqual(
227+
{
228+
...fruit,
229+
price: 0,
230+
owner: { ...fruit.owner, phone: "000-000" },
231+
},
232+
mask(fruit),
233+
);
234+
});
173235
});
174236

175237
describe("multi-target", () => {
@@ -184,6 +246,9 @@ include if {
184246
assert.deepStrictEqual(res, {
185247
postgresql: {
186248
query: "WHERE fruits.colour IN (E'red', E'green')",
249+
masks: {
250+
fruits: { owner: { replace: { value: "***" } } },
251+
},
187252
},
188253
ucast: {
189254
query: {
@@ -192,6 +257,9 @@ include if {
192257
type: "field",
193258
value: ["red", "green"],
194259
},
260+
masks: {
261+
fruits: { owner: { replace: { value: "***" } } },
262+
},
195263
},
196264
});
197265
});
@@ -215,9 +283,15 @@ include if {
215283
assert.deepStrictEqual(res, {
216284
postgresql: {
217285
query: "WHERE fruits_pg.colour_pg IN (E'red', E'green')",
286+
masks: {
287+
fruits: { owner: { replace: { value: "***" } } },
288+
},
218289
},
219290
mysql: {
220291
query: "WHERE fruits_mysql.colour_mysql IN ('red', 'green')",
292+
masks: {
293+
fruits: { owner: { replace: { value: "***" } } },
294+
},
221295
},
222296
});
223297
});
@@ -249,6 +323,9 @@ include if {
249323
const result = res?.value?.compileResultSQL?.result;
250324
assert.deepEqual(result, {
251325
query: "WHERE fruits.colour IN (E'red', E'green')",
326+
masks: {
327+
fruits: { owner: { replace: { value: "***" } } },
328+
},
252329
});
253330
});
254331
});

0 commit comments

Comments
 (0)