(t *testing.T)
| 1069 | } |
| 1070 | |
| 1071 | func 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{}) |
nothing calls this directly
no test coverage detected
searching dependent graphs…