File: index_test.go

package info (click to toggle)
golang-github-facebook-ent 0.5.4-3
  • links: PTS, VCS
  • area: main
  • in suites:
  • size: 14,284 kB
  • sloc: javascript: 349; makefile: 8
file content (73 lines) | stat: -rw-r--r-- 2,649 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
// Copyright 2019-present Facebook Inc. All rights reserved.
// This source code is licensed under the Apache 2.0 license found
// in the LICENSE file in the root directory of this source tree.

package integration

import (
	"context"
	"testing"

	"github.com/facebook/ent/entc/integration/ent"

	"github.com/stretchr/testify/require"
)

func Indexes(t *testing.T, client *ent.Client) {
	ctx := context.Background()
	require := require.New(t)
	t.Log("prevent inserting 2 files with the same (name, user)")
	f1, err := client.File.Create().SetName("foo").SetSize(10).SetUser("bar").Save(ctx)
	require.NoError(err)
	require.Equal("foo", f1.Name)
	require.Equal("bar", *f1.User)
	f2, err := client.File.Create().SetName("foo").SetSize(10).SetUser("bar").Save(ctx)
	require.Nil(f2)
	require.Error(err)
	require.True(ent.IsConstraintError(err))

	t.Log("deletion should allow recreation")
	client.File.DeleteOne(f1).ExecX(ctx)
	f3, err := client.File.Create().SetName("foo").SetSize(10).SetUser("bar").Save(ctx)
	require.NoError(err)
	require.Equal("foo", f3.Name)
	require.Equal("bar", *f3.User)

	t.Log("allow inserting 2 files the same name, type and NULL user (optional field)")
	png := client.FileType.Create().SetName("png").SaveX(ctx)
	f4 := client.File.Create().SetName("foo").SetSize(10).SetType(png).SaveX(ctx)
	f5 := client.File.Create().SetName("foo").SetSize(10).SetType(png).SaveX(ctx)

	t.Log("index on edge sub-graph")
	a8m := client.User.Create().SetName("a8m").SetAge(18).SaveX(ctx)
	err = a8m.Update().AddFiles(f4).Exec(ctx)
	require.NoError(err)
	err = a8m.Update().AddFiles(f5).Exec(ctx)
	require.Error(err)
	require.True(ent.IsConstraintError(err), "cannot have 2 files with the same (name, type, owner)")
	png.Update().RemoveFiles(f5).ExecX(ctx)
	err = a8m.Update().AddFiles(f5).Exec(ctx)
	require.NoError(err)
	err = png.Update().AddFiles(f5).Exec(ctx)
	require.Error(err)
	require.True(ent.IsConstraintError(err))
	a8m.Update().RemoveFiles(f4, f5).ExecX(ctx)
	png.Update().AddFiles(f5).ExecX(ctx)

	t.Log("prevent inserting duplicates files in the same insert")
	err = a8m.Update().AddFiles(f4, f5).Exec(ctx)
	require.Error(err)
	require.True(ent.IsConstraintError(err))
	require.Zero(a8m.QueryFiles().CountX(ctx))

	t.Log("edge indexes should applied on the edge sub-graph")
	nati := client.User.Create().SetName("nati").SetAge(18).AddFiles(f5).SaveX(ctx)
	err = nati.Update().AddFiles(f4).Exec(ctx)
	require.Error(err)
	require.True(ent.IsConstraintError(err))
	err = a8m.Update().AddFiles(f4).Exec(ctx)
	require.NoError(err)

	require.Equal(1, a8m.QueryFiles().CountX(ctx))
	require.Equal(1, nati.QueryFiles().CountX(ctx))
}