MCPcopy
hub / github.com/openfga/openfga / TestReadFilterWithConditions

Function TestReadFilterWithConditions

pkg/storage/postgres/postgres_test.go:1071–1168  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

1069}
1070
1071func TestReadFilterWithConditions(t *testing.T) {
1072 ctx := context.Background()
1073 testDatastore := storagefixtures.RunDatastoreTestContainer(t, "postgres")
1074
1075 uri := testDatastore.GetConnectionURI(true)
1076 cfg := sqlcommon.NewConfig()
1077 ds, err := New(uri, cfg)
1078 require.NoError(t, err)
1079 defer ds.Close()
1080
1081 var writeItems [][]interface{}
1082 writeItems = append(writeItems, []interface{}{
1083 "store",
1084 "folder",
1085 "2021-budget",
1086 "owner",
1087 "user:anne",
1088 "user",
1089 "cond1",
1090 "",
1091 ulid.Make().String(),
1092 sq.Expr("NOW()"),
1093 })
1094
1095 writeItems = append(writeItems, []interface{}{
1096 "store",
1097 "folder",
1098 "2022-budget",
1099 "owner",
1100 "user:anne",
1101 "user",
1102 "",
1103 "",
1104 ulid.Make().String(),
1105 sq.Expr("NOW()"),
1106 })
1107
1108 err = executeWriteTuples(ctx, ds.primaryDB, writeItems)
1109 require.NoError(t, err)
1110
1111 // Read: if the tuple has condition and the filter has the same condition the tuple should be returned
1112 tk := tupleUtils.NewTupleKeyWithCondition("folder:2021-budget", "owner", "user:anne", "cond1", nil)
1113 filter := storage.ReadFilter{Object: "folder:2021-budget", Relation: "owner", User: "user:anne", Conditions: []string{"cond1"}}
1114 iter, err := ds.Read(ctx, "store", filter, storage.ReadOptions{})
1115 require.NoError(t, err)
1116 defer iter.Stop()
1117 curTuple, err := iter.Next(ctx)
1118 require.NoError(t, err)
1119 require.Equal(t, tk.GetUser(), curTuple.GetKey().GetUser())
1120 require.Equal(t, tk.GetObject(), curTuple.GetKey().GetObject())
1121 require.Equal(t, tk.GetRelation(), curTuple.GetKey().GetRelation())
1122 require.Equal(t, tk.GetCondition().String(), curTuple.GetKey().GetCondition().String())
1123 _, err = iter.Next(ctx)
1124 require.Error(t, err)
1125
1126 // Read: if filter has no condition the tuple cannot be returned
1127 filter = storage.ReadFilter{Object: "folder:2021-budget", Relation: "owner", User: "user:anne", Conditions: []string{""}}
1128 iter, err = ds.Read(ctx, "store", filter, storage.ReadOptions{})

Callers

nothing calls this directly

Calls 15

NewConfigFunction · 0.92
executeWriteTuplesFunction · 0.85
EqualMethod · 0.80
NewFunction · 0.70
GetConnectionURIMethod · 0.65
CloseMethod · 0.65
StringMethod · 0.65
ReadMethod · 0.65
StopMethod · 0.65
NextMethod · 0.65
GetUserMethod · 0.65
GetObjectMethod · 0.65

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…