github.com/authzed/spicedb@v1.32.1-0.20240520085336-ebda56537386/pkg/tuple/onr_test.go (about)

     1  package tuple
     2  
     3  import (
     4  	"testing"
     5  
     6  	core "github.com/authzed/spicedb/pkg/proto/core/v1"
     7  
     8  	"github.com/stretchr/testify/require"
     9  )
    10  
    11  var onrTestCases = []struct {
    12  	serialized   string
    13  	objectFormat *core.ObjectAndRelation
    14  }{
    15  	{
    16  		serialized:   "tenant/testns:testobj#testrel",
    17  		objectFormat: ObjectAndRelation("tenant/testns", "testobj", "testrel"),
    18  	},
    19  	{
    20  		serialized:   "tenant/testns:veryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryverylong#testrel",
    21  		objectFormat: ObjectAndRelation("tenant/testns", "veryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryverylong", "testrel"),
    22  	},
    23  	{
    24  		serialized:   "tenant/testns:-base64YWZzZGZh-ZHNmZHPwn5iK8J+YivC/fmIrwn5iK==#testrel",
    25  		objectFormat: ObjectAndRelation("tenant/testns", "-base64YWZzZGZh-ZHNmZHPwn5iK8J+YivC/fmIrwn5iK==", "testrel"),
    26  	},
    27  	{
    28  		serialized:   "tenant/testns:*#testrel",
    29  		objectFormat: nil,
    30  	},
    31  	{
    32  		serialized:   "tenant/testns:testobj#...",
    33  		objectFormat: nil,
    34  	},
    35  	{
    36  		serialized:   "tenant/testns:testobj",
    37  		objectFormat: nil,
    38  	},
    39  	{
    40  		serialized:   "",
    41  		objectFormat: nil,
    42  	},
    43  }
    44  
    45  func TestSerializeONR(t *testing.T) {
    46  	for _, tc := range onrTestCases {
    47  		tc := tc
    48  		if tc.objectFormat == nil {
    49  			continue
    50  		}
    51  
    52  		t.Run(tc.serialized, func(t *testing.T) {
    53  			require := require.New(t)
    54  			serialized := StringONR(tc.objectFormat)
    55  			require.Equal(tc.serialized, serialized)
    56  		})
    57  	}
    58  }
    59  
    60  func TestParseONR(t *testing.T) {
    61  	for _, tc := range onrTestCases {
    62  		tc := tc
    63  		t.Run(tc.serialized, func(t *testing.T) {
    64  			require := require.New(t)
    65  
    66  			parsed := ParseONR(tc.serialized)
    67  			require.Equal(tc.objectFormat, parsed)
    68  		})
    69  	}
    70  }
    71  
    72  var subjectOnrTestCases = []struct {
    73  	serialized   string
    74  	objectFormat *core.ObjectAndRelation
    75  }{
    76  	{
    77  		serialized:   "tenant/testns:testobj#testrel",
    78  		objectFormat: ObjectAndRelation("tenant/testns", "testobj", "testrel"),
    79  	},
    80  	{
    81  		serialized:   "tenant/testns:testobj#...",
    82  		objectFormat: ObjectAndRelation("tenant/testns", "testobj", "..."),
    83  	},
    84  	{
    85  		serialized:   "tenant/testns:*#...",
    86  		objectFormat: ObjectAndRelation("tenant/testns", "*", "..."),
    87  	},
    88  	{
    89  		serialized:   "tenant/testns:testobj",
    90  		objectFormat: ObjectAndRelation("tenant/testns", "testobj", "..."),
    91  	},
    92  	{
    93  		serialized:   "tenant/testns:veryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryverylong",
    94  		objectFormat: ObjectAndRelation("tenant/testns", "veryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryverylong", "..."),
    95  	},
    96  	{
    97  		serialized:   "tenant/testns:-base64YWZzZGZh-ZHNmZHPwn5iK8J+YivC/fmIrwn5iK==",
    98  		objectFormat: ObjectAndRelation("tenant/testns", "-base64YWZzZGZh-ZHNmZHPwn5iK8J+YivC/fmIrwn5iK==", "..."),
    99  	},
   100  	{
   101  		serialized:   "tenant/testns:testobj#",
   102  		objectFormat: nil,
   103  	},
   104  	{
   105  		serialized:   "tenant/testns:testobj:",
   106  		objectFormat: nil,
   107  	},
   108  	{
   109  		serialized:   "",
   110  		objectFormat: nil,
   111  	},
   112  }
   113  
   114  func TestParseSubjectONR(t *testing.T) {
   115  	for _, tc := range subjectOnrTestCases {
   116  		tc := tc
   117  		t.Run(tc.serialized, func(t *testing.T) {
   118  			require := require.New(t)
   119  
   120  			parsed := ParseSubjectONR(tc.serialized)
   121  			require.Equal(tc.objectFormat, parsed)
   122  		})
   123  	}
   124  }