private static byte GetFlagsValue(SubdocLookupFlags flags)
        {
            if (flags.HasFlag(SubdocLookupFlags.AccessDeleted) && !flags.HasFlag(SubdocLookupFlags.XattrPath))
            {
                flags |= SubdocLookupFlags.XattrPath;
            }

            return((byte)flags);
        }
 /// <summary>
 /// Checks for the existence of a given N1QL path.
 /// </summary>
 /// <param name="path">The path.</param>
 /// <param name="flags">The Subdoc flags.</param>
 /// <returns>
 /// A <see cref="T:Couchbase.Core.ILookupInBuilder`1" /> implementation reference for chaining operations.
 /// </returns>
 public ILookupInBuilder <TDocument> Exists(string path, SubdocLookupFlags flags)
 {
     _commands.Enqueue(new OperationSpec
     {
         Path   = path,
         OpCode = OperationCode.SubExist,
         Flags  = GetFlagsValue(flags)
     });
     return(this);
 }
        public void Exists_For_Xattr_Sets_Correct_Flag(SubdocLookupFlags flags, byte expected)
        {
            var mockResult = new Mock <IDocumentFragment <dynamic> >();

            var mockedInvoker = new Mock <ISubdocInvoker>();

            mockedInvoker.Setup(x => x.Invoke(It.IsAny <LookupInBuilder <dynamic> >()))
            .Returns(mockResult.Object);

            var lookupBuilder = new LookupInBuilder <dynamic>(mockedInvoker.Object, () => new DefaultSerializer(), "mykey");

            var result = lookupBuilder.Exists("path", flags)
                         .Execute();

            Assert.AreSame(mockResult.Object, result);
            mockedInvoker.Verify(
                invoker => invoker.Invoke(It.Is <LookupInBuilder <dynamic> >(
                                              builder =>
                                              builder.FirstSpec().OpCode == OperationCode.SubExist &&
                                              builder.FirstSpec().Path == "path" &&
                                              builder.FirstSpec().Flags == expected)
                                          ), Times.Once
                );
        }