private async Task <PNResult <PNDeleteFileResult> > ProcessDeleteFileRequest(Dictionary <string, object> externalQueryParam)
        {
            PNResult <PNDeleteFileResult> ret = new PNResult <PNDeleteFileResult>();

            if (string.IsNullOrEmpty(this.channelName))
            {
                PNStatus errStatus = new PNStatus {
                    Error = true, ErrorData = new PNErrorData("Invalid Channel name", new ArgumentException("Invalid Channel name"))
                };
                ret.Status = errStatus;
                return(ret);
            }
            if (string.IsNullOrEmpty(this.currentFileId))
            {
                PNStatus errStatus = new PNStatus {
                    Error = true, ErrorData = new PNErrorData("Missing File Id", new ArgumentException("Missing File Id"))
                };
                ret.Status = errStatus;
                return(ret);
            }

            if (string.IsNullOrEmpty(this.currentFileName))
            {
                PNStatus errStatus = new PNStatus {
                    Error = true, ErrorData = new PNErrorData("Invalid file name", new ArgumentException("Invalid file name"))
                };
                ret.Status = errStatus;
                return(ret);
            }

            IUrlRequestBuilder urlBuilder = new UrlRequestBuilder(config, jsonLibrary, unit, pubnubLog, pubnubTelemetryMgr, (PubnubInstance != null) ? PubnubInstance.InstanceId : "");

            Uri request = urlBuilder.BuildGetFileUrlOrDeleteReqest("DELETE", "", this.channelName, this.currentFileId, this.currentFileName, externalQueryParam, PNOperationType.PNFileUrlOperation);

            RequestState <PNDeleteFileResult> requestState = new RequestState <PNDeleteFileResult>();

            requestState.ResponseType      = PNOperationType.PNDeleteFileOperation;
            requestState.Reconnect         = false;
            requestState.EndPointOperation = this;

            requestState.UsePostMethod = false;
            Tuple <string, PNStatus> JsonAndStatusTuple = await UrlProcessRequest(request, requestState, false).ConfigureAwait(false);

            ret.Status = JsonAndStatusTuple.Item2;
            string json = JsonAndStatusTuple.Item1;

            if (!string.IsNullOrEmpty(json))
            {
                List <object>      resultList      = ProcessJsonResponse(requestState, json);
                ResponseBuilder    responseBuilder = new ResponseBuilder(config, jsonLibrary, pubnubLog);
                PNDeleteFileResult responseResult  = responseBuilder.JsonToObject <PNDeleteFileResult>(resultList, true);
                if (responseResult != null)
                {
                    ret.Result = responseResult;
                }
            }

            return(ret);
        }
        public static async Task ThenWithAsyncDeleteFileShouldReturnSuccess()
#endif
        {
            server.ClearRequests();

            receivedMessage = false;

            PNConfiguration config = new PNConfiguration
            {
                PublishKey   = PubnubCommon.PublishKey,
                SubscribeKey = PubnubCommon.SubscribeKey,
                CipherKey    = "enigma",
                Uuid         = "mytestuuid",
                Secure       = false
            };

            if (PubnubCommon.PAMServerSideRun)
            {
                config.SecretKey = PubnubCommon.SecretKey;
            }
            else if (!string.IsNullOrEmpty(authKey) && !PubnubCommon.SuppressAuthKey)
            {
                config.AuthKey = authKey;
            }
            pubnub = createPubNubInstance(config);

            string expected = "";

            receivedMessage = false;
#if NET40
            PNResult <PNListFilesResult> listFilesResponse = Task.Factory.StartNew(async() => await pubnub.ListFiles().Channel(channelName).ExecuteAsync()).Result.Result;
#else
            PNResult <PNListFilesResult> listFilesResponse = await pubnub.ListFiles().Channel(channelName).ExecuteAsync();
#endif
            if (listFilesResponse.Result != null && listFilesResponse.Result.FilesList != null && listFilesResponse.Result.FilesList.Count > 0 && !listFilesResponse.Status.Error)
            {
                List <PNFileResult> filesList = listFilesResponse.Result.FilesList;
                foreach (var file in filesList)
                {
#if NET40
                    PNResult <PNDeleteFileResult> deleteFileResponse = Task.Factory.StartNew(async() => await pubnub.DeleteFile().Channel(channelName).FileId(file.Id).FileName(file.Name).ExecuteAsync()).Result.Result;
#else
                    PNResult <PNDeleteFileResult> deleteFileResponse = await pubnub.DeleteFile().Channel(channelName).FileId(file.Id).FileName(file.Name).ExecuteAsync();
#endif
                    PNDeleteFileResult deleteFileResult = deleteFileResponse.Result;
                    if (deleteFileResult != null)
                    {
                        System.Diagnostics.Debug.WriteLine(string.Format("File Id={0}, Name={1} => deleted successfully", file.Id, file.Name));
                    }
                }
                receivedMessage = true;
            }
            else
            {
#if NET40
                PNResult <PNDeleteFileResult> deleteFileResponse = Task.Factory.StartNew(async() => await pubnub.DeleteFile().Channel(channelName).FileId("test_file_id").FileName("test_file_name.test").ExecuteAsync()).Result.Result;
#else
                PNResult <PNDeleteFileResult> deleteFileResponse = await pubnub.DeleteFile().Channel(channelName).FileId("test_file_id").FileName("test_file_name.test").ExecuteAsync();
#endif
                PNDeleteFileResult deleteFileResult = deleteFileResponse.Result;
                if (deleteFileResult != null)
                {
                    System.Diagnostics.Debug.WriteLine("File Id=test_file_id, Name=test_file_name.test => deleted successfully");
                    receivedMessage = true;
                }
            }

            pubnub.Destroy();
            pubnub.PubnubUnitTest = null;
            pubnub = null;
            Assert.IsTrue(receivedMessage, "WhenFileIsRequested -> ThenWithAsyncDeleteFileShouldReturnSuccess failed.");
        }
        public static void ThenDeleteFileShouldReturnSuccess()
        {
            server.ClearRequests();

            receivedMessage = false;

            PNConfiguration config = new PNConfiguration
            {
                PublishKey   = PubnubCommon.PublishKey,
                SubscribeKey = PubnubCommon.SubscribeKey,
                CipherKey    = "enigma",
                Uuid         = "mytestuuid",
                Secure       = false
            };

            if (PubnubCommon.PAMServerSideRun)
            {
                config.SecretKey = PubnubCommon.SecretKey;
            }
            else if (!string.IsNullOrEmpty(authKey) && !PubnubCommon.SuppressAuthKey)
            {
                config.AuthKey = authKey;
            }
            pubnub = createPubNubInstance(config);

            string expected = "";

            receivedMessage = false;
            PNResult <PNListFilesResult> listFilesResponse = pubnub.ListFiles().Channel(channelName).ExecuteAsync().Result;

            if (listFilesResponse.Result != null && listFilesResponse.Result.FilesList != null && listFilesResponse.Result.FilesList.Count > 0 && !listFilesResponse.Status.Error)
            {
                List <PNFileResult> filesList = listFilesResponse.Result.FilesList;
                foreach (var file in filesList)
                {
                    PNResult <PNDeleteFileResult> deleteFileResponse = pubnub.DeleteFile().Channel(channelName).FileId(file.Id).FileName(file.Name).ExecuteAsync().Result;
                    PNDeleteFileResult            deleteFileResult   = deleteFileResponse.Result;
                    if (deleteFileResult != null)
                    {
                        System.Diagnostics.Debug.WriteLine(string.Format("File Id={0}, Name={1} => deleted successfully", file.Id, file.Name));
                    }
                }
                receivedMessage = true;
            }
            else
            {
                PNResult <PNDeleteFileResult> deleteFileResponse = pubnub.DeleteFile().Channel(channelName).FileId("test_file_id").FileName("test_file_name.test").ExecuteAsync().Result;
                PNDeleteFileResult            deleteFileResult   = deleteFileResponse.Result;
                if (deleteFileResult != null)
                {
                    System.Diagnostics.Debug.WriteLine("File Id=test_file_id, Name=test_file_name.test => deleted successfully");
                    receivedMessage = true;
                }
            }


            mre             = new ManualResetEvent(false);
            receivedMessage = false;
            pubnub.DeleteFile().Channel(channelName).FileId("8f83d951-7850-40fb-9688-d2d825b14722").FileName("word_test.txt")
            .Execute(new PNDeleteFileResultExt((result, status) =>
            {
                if (result != null)
                {
                    System.Diagnostics.Debug.WriteLine("result = " + pubnub.JsonPluggableLibrary.SerializeToJsonString(result));
                    receivedMessage = true;
                }
                mre.Set();
            }));
            Thread.Sleep(1000);
            mre.WaitOne();

            pubnub.Destroy();
            pubnub.PubnubUnitTest = null;
            pubnub = null;
            Assert.IsTrue(receivedMessage, "WhenFileIsRequested -> ThenListFilesShouldReturnSuccess failed.");
        }