(t *testing.T)
| 2498 | } |
| 2499 | |
| 2500 | func TestMultipleMutationMerge(t *testing.T) { |
| 2501 | require.NoError(t, dropAll()) |
| 2502 | require.NoError(t, alterSchema(` |
| 2503 | name: string @index(term) . |
| 2504 | email: [string] @index(exact) @upsert .`)) |
| 2505 | |
| 2506 | m1 := ` |
| 2507 | { |
| 2508 | set { |
| 2509 | _:user1 <name> "user1" . |
| 2510 | _:user1 <email> "user_email1@company1.io" . |
| 2511 | _:user2 <name> "user2" . |
| 2512 | _:user2 <email> "user_email2@company1.io" . |
| 2513 | } |
| 2514 | }` |
| 2515 | mr, err := mutationWithTs(mutationInp{body: m1, typ: "application/rdf", commitNow: true}) |
| 2516 | require.NoError(t, err) |
| 2517 | require.True(t, len(mr.keys) == 0) |
| 2518 | require.Equal(t, []string{"email", "name"}, splitPreds(mr.preds)) |
| 2519 | |
| 2520 | q1 := ` |
| 2521 | { |
| 2522 | q(func: has(name)) { |
| 2523 | uid |
| 2524 | } |
| 2525 | }` |
| 2526 | res, _, err := queryWithTs(queryInp{body: q1, typ: "application/dql"}) |
| 2527 | require.NoError(t, err) |
| 2528 | var result struct { |
| 2529 | Data struct { |
| 2530 | Q []struct { |
| 2531 | UID string `json:"uid"` |
| 2532 | } `json:"q"` |
| 2533 | } `json:"data"` |
| 2534 | } |
| 2535 | require.NoError(t, json.Unmarshal([]byte(res), &result)) |
| 2536 | require.Equal(t, 2, len(result.Data.Q)) |
| 2537 | |
| 2538 | m2 := ` |
| 2539 | upsert { |
| 2540 | query { |
| 2541 | # filter is needed to ensure that we do not get same UIDs in u1 and u2 |
| 2542 | q1(func: eq(email, "user_email1@company1.io")) @filter(not(eq(email, "user_email2@company1.io"))) { |
| 2543 | u1 as uid |
| 2544 | } |
| 2545 | |
| 2546 | q2(func: eq(email, "user_email2@company1.io")) @filter(not(eq(email, "user_email1@company1.io"))) { |
| 2547 | u2 as uid |
| 2548 | } |
| 2549 | |
| 2550 | q3(func: eq(email, "user_email1@company1.io")) @filter(eq(email, "user_email2@company1.io")) { |
| 2551 | u3 as uid |
| 2552 | } |
| 2553 | } |
| 2554 | |
| 2555 | # case when both emails do not exist |
| 2556 | mutation @if(eq(len(u1), 0) AND eq(len(u2), 0) AND eq(len(u3), 0)) { |
| 2557 | set { |
nothing calls this directly
no test coverage detected