public void WatchHiddenFilesTester3()
        {
            string path   = $"{Guid.NewGuid()}.xml";
            var    stream = File.Create(path);

            try
            {
                new FileInfo(stream.Name).Attributes |= FileAttributes.Hidden;

                var folderConfig = new FolderConfig
                {
                    FolderPath = stream.Name.GetDirectoryPath(),
                    //WatchLogFiles = true,
                    WatchHiddenFiles = false
                };

                var op = new CreateOperationEvent
                {
                    FilePath   = stream.Name,
                    RaisedTime = new DateTime(2017, 11, 27)
                };

                Assert.AreEqual(false, folderConfig.IsValid(op));
            }
            finally
            {
                stream.Close();
                File.Delete(path);
            }
        }
        public void TextLogFileNameTester2()
        {
            string path   = $"SomeDateTime - {Constants.TextLogFileName}";
            var    stream = File.Create(path);

            try
            {
                var folderConfig = new FolderConfig
                {
                    FolderPath       = stream.Name.GetDirectoryPath(),
                    WatchHiddenFiles = false
                };

                var op = new CreateOperationEvent
                {
                    FilePath   = stream.Name,
                    RaisedTime = new DateTime(2017, 11, 27)
                };

                Assert.AreEqual(true, folderConfig.IsValid(op));
            }
            finally
            {
                stream.Close();
                File.Delete(path);
            }
        }
        public void FilteredFilesTester2()
        {
            string path   = $"SomeTempFile.txt";
            var    stream = File.Create(path);

            try
            {
                var folderConfig = new FolderConfig
                {
                    FolderPath       = stream.Name.GetDirectoryPath(),
                    WatchHiddenFiles = false,
                    FilteredFiles    = new List <string>()
                    {
                        $"{stream.Name.GetDirectoryPath()}SomeTempFile2.txt"
                    }
                };

                var op = new CreateOperationEvent
                {
                    FilePath   = stream.Name,
                    RaisedTime = new DateTime(2017, 11, 27)
                };

                Assert.AreEqual(true, folderConfig.IsValid(op));
            }
            finally
            {
                stream.Close();
                File.Delete(path);
            }
        }
        public void JsonLogFileNameTester2()
        {
            string path   = $"SomeDateTime - {Constants.JsonLogFileName}";
            var    stream = File.Create(path);

            try
            {
                var folderConfig = new FolderConfig
                {
                    FolderPath       = stream.Name.GetDirectoryPath(),
                    WatchHiddenFiles = false
                };

                var op = new CreateOperationEvent
                {
                    FilePath   = stream.Name,
                    RaisedTime = new DateTime(2017, 11, 27)
                };

                Assert.AreEqual(
                    !FolderConfig.IsLogFile(op.FilePath,
                                            Path.GetFullPath($"{folderConfig.FolderPath}/{Constants.JsonLogFileName}")),
                    folderConfig.IsValid(op, jsonLogFileName: Constants.JsonLogFileName));
            }
            finally
            {
                stream.Close();
                File.Delete(path);
            }
        }
        public void LogOperation <Operation>(Operation operation) where Operation : OperationEvent
        {
            if (!folderConfig.IsValid(operation))
            {
                return;
            }

            //This is not responsibility of this operation. It needs abstraction
            var content = new ToastContent()
            {
                Launch = "app-defined-string",
                Visual = new ToastVisual()
                {
                    BindingGeneric = new ToastBindingGeneric()
                    {
                        Children =
                        {
                            new AdaptiveText()
                            {
                                Text = $"Action:  {operation.EventType.ToString()}"
                            },
                            new AdaptiveText()
                            {
                                Text = $"Action: {operation.EventType.ToString()}{Environment.NewLine}FileName: {operation.FileName}"
                            },
                            new AdaptiveImage()
                            {
                                Source = @"C:\Windows\WinSxS\amd64_microsoft-windows-t..nbackgrounds-client_31bf3856ad364e35_10.0.17134.1_none_c2974feb629c22da\img100.jpg"
                            }
                        },
                        AppLogoOverride = new ToastGenericAppLogo()
                        {
                            Source   = @"C:\Windows\WinSxS\amd64_microsoft-windows-shell-wallpaper-theme2_31bf3856ad364e35_10.0.17134.1_none_bc5a789c0e1871e3\img8.jpg",
                            HintCrop = ToastGenericAppLogoCrop.Circle
                        }
                    }
                },
                DisplayTimestamp = operation.RaisedTime
            };

            // Display toast
            var doc = new XmlDocument();

            doc.LoadXml(content.GetContent());

            ToastNotificationManager.CreateToastNotifier(applicationID).Show(new ToastNotification(doc));
        }