コード例 #1
0
        public void TestParser()
        {
            string[] args = { "chat.txt", "chat.json", "-fu", "user", "-fk", "keyword", "-bw", "word", "-bn", "-o" };

            ConversationExporterConfiguration config = CommandLineArgumentParser.ParseCommandLineArguments(args);

            Assert.AreEqual("chat.txt", config.inputFilePath);
            Assert.AreEqual("chat.json", config.outputFilePath);
            Assert.AreEqual("user", config.userToFilter);
            Assert.AreEqual("keyword", config.keywordToFilter);
            Assert.AreEqual("word", config.wordToBlacklist);
            Assert.IsTrue(config.blacklistNumbers);
            Assert.IsTrue(config.obfuscate);

            string[] args2 = { "chat.txt", "chat.json", "-bw", "word", "-o" };
            config = CommandLineArgumentParser.ParseCommandLineArguments(args2);

            Assert.AreEqual("chat.txt", config.inputFilePath);
            Assert.AreEqual("chat.json", config.outputFilePath);
            Assert.IsNull(config.userToFilter);
            Assert.IsNull(config.keywordToFilter);
            Assert.AreEqual("word", config.wordToBlacklist);
            Assert.IsFalse(config.blacklistNumbers);
            Assert.IsTrue(config.obfuscate);
        }
コード例 #2
0
        public void ExportConversation(ConversationExporterConfiguration configuration)
        {
            Conversation = ConversationProcessor.ReadConversation(configuration.InputFilePath);

            if (configuration.FilterType == "IdFiltering")
            {
                Conversation = ConversationProcessor.FilterByID(Conversation);
            }
            else if (configuration.FilterType == "KeywordFiltering")
            {
                Conversation = ConversationProcessor.FilterByKeyword(Conversation);
            }

            Conversation = ConversationProcessor.CheckBlackListWithPath("blacklist.txt", Conversation);


            Conversation = ConversationProcessor.HidePhoneNumbers(Conversation);
            Conversation = ConversationProcessor.HideCreditCardNumbers(Conversation);


            ConversationWriter writer = ConversationProcessor.WriteConversation(Conversation, configuration.OutputFilePath);

            if (writer.Successful)
            {
                Console.WriteLine($"Conversation exported from {configuration.InputFilePath} to {configuration.OutputFilePath}");
            }
        }
コード例 #3
0
        public void TestExporterOptionsSelected()
        {
            ConversationExporter exporter = new ConversationExporter();

            ConversationExporterConfiguration config = new ConversationExporterConfiguration("chat.txt", "chat2.json");

            config.userToFilter    = "bob";
            config.keywordToFilter = "Pie";
            config.obfuscate       = true;

            exporter.ExportConversation(config);

            var serializedConversation = new StreamReader(new FileStream("chat2.json", FileMode.Open)).ReadToEnd();

            Conversation savedConversation = JsonConvert.DeserializeObject <Conversation>(serializedConversation);

            Assert.AreEqual("My Conversation-senderId:bob-keyword:Pie", savedConversation.name);

            var messages = savedConversation.messages.ToList();

            Assert.AreEqual(DateTimeOffset.FromUnixTimeSeconds(1448470906), messages[0].timestamp);
            Assert.AreEqual("0", messages[0].senderId);
            Assert.AreEqual("I'm good thanks, do you like pie?", messages[0].content);

            Assert.AreEqual(DateTimeOffset.FromUnixTimeSeconds(1448470914), messages[1].timestamp);
            Assert.AreEqual("0", messages[1].senderId);
            Assert.AreEqual("No, just want to know if there's anybody else in the pie society...", messages[1].content);
        }
        public void ConversationExporterConfigurationArgumentlist()
        {
            CommandLineArgumentParser clap = new CommandLineArgumentParser();

            string[] strings = new[] { "chat.txt", "chat.json", "user=robelli" };
            var      res     = new ConversationExporterConfiguration(strings);

            Console.WriteLine(res.userFilter);

            strings = new[] { "chat.txt", "chat.json", "keyword_include=pie" };
            res     = new ConversationExporterConfiguration(strings);
            Console.WriteLine(res.keywordInclude);

            strings = new[] { "chat.txt", "chat.json", "keyword_exclude=pie" };
            res     = new ConversationExporterConfiguration(strings);
            Console.WriteLine(res.keywordExclude);

            strings = new[] { "chat.txt", "chat.json", "blacklist=pie,angus" };
            res     = new ConversationExporterConfiguration(strings);
            Console.WriteLine(res.blacklistFilter);

            strings = new[] { "chat.txt", "chat.json", "hideCreditCard" };
            res     = new ConversationExporterConfiguration(strings);
            Console.WriteLine(res.hideCreditCard);

            strings = new[] { "chat.txt", "chat.json", "hidePhone" };
            res     = new ConversationExporterConfiguration(strings);
            Console.WriteLine(res.hidePhone);

            strings = new[] { "chat.txt", "chat.json", "obfuscateUser" };
            res     = new ConversationExporterConfiguration(strings);
            Console.WriteLine(res.obfuscateUser);
        }
コード例 #5
0
        /// <summary>
        /// Helper method to initialise the command line arguments and throw argument null errors.
        /// </summary>
        /// <param name="exporterConfiguration">
        /// The configuration for the conversation to be exported.
        /// </param>
        /// <exception cref="ArgumentNullException">
        /// Thrown when input path is null.
        /// </exception>
        public static void ManageArguments(ConversationExporterConfiguration exporterConfiguration)
        {
            var conversationExporter = new ConversationExporter();
            var exporterParameters   = new ConversationExporterParameters(exporterConfiguration);

            conversationExporter.ExportConversation(exporterParameters);
        }
コード例 #6
0
        public void Test_Modifier_ModifyByBlacklist()
        {
            var output = "chat3.json";

            var exporter      = new ConversationExporter();
            var configuration = new ConversationExporterConfiguration("chat.txt", output);

            configuration.blacklist = new List <string>();

            configuration.blacklist.Add("like");
            configuration.blacklist.Add("pie");

            configuration.writeUserActivity = false;

            exporter.ExportConversation(configuration);

            var serializedConversation = new StreamReader(new FileStream(output, FileMode.Open)).ReadToEnd();
            var savedConversation      = JsonConvert.DeserializeObject <Conversation>(serializedConversation);

            var messages = savedConversation.messages.ToList();

            Assert.Equal("Hello there!", messages[0].content);
            Assert.Equal("I'm good thanks, do you \\*redacted*\\ \\*redacted*\\?", messages[2].content);
            Assert.Equal("Hell yes! Are we buying some \\*redacted*\\?", messages[4].content);
            Assert.Equal("No, just want to know if there's anybody else in the \\*redacted*\\ society...", messages[5].content);
            Assert.Equal("YES! I'm the head \\*redacted*\\ eater there...", messages[6].content);
            Assert.Equal("I \\*redacted*\\ \\*redacted*\\", messages[8].content);
            Assert.Equal("I mean what;s not to \\*redacted*\\ about \\*redacted*\\", messages[9].content);
        }
コード例 #7
0
        public void Test_Exporter_CalculateActivity()
        {
            var output = "chat8.json";

            var exporter      = new ConversationExporter();
            var configuration = new ConversationExporterConfiguration("chat.txt", output);

            configuration.obfuscateUserIDs  = false;
            configuration.writeUserActivity = false;

            exporter.ExportConversation(configuration);

            var serializedConversation = new StreamReader(new FileStream(output, FileMode.Open)).ReadToEnd();
            var savedConversation      = JsonConvert.DeserializeObject <Conversation>(serializedConversation);

            var messages = savedConversation.messages.ToList();

            var userActivityList = exporter.CalculateActivity(savedConversation);

            Assert.Equal(5, userActivityList.First(x => x.userID == "matas").messageCount);
            Assert.Equal(1, userActivityList.First(x => x.userID == "chris").messageCount);
            Assert.Equal(1, userActivityList.First(x => x.userID == "thomas").messageCount);
            Assert.Equal(2, userActivityList.First(x => x.userID == "angus").messageCount);
            Assert.Equal(2, userActivityList.First(x => x.userID == "mike").messageCount);
            Assert.Equal(3, userActivityList.First(x => x.userID == "bob").messageCount);
        }
コード例 #8
0
        /// <summary>
        /// Exports the conversation at <paramref name="inputFilePath"/> as JSON to <paramref name="outputFilePath"/>.
        /// </summary>
        /// <param name="inputFilePath">
        /// The input file path.
        /// </param>
        /// <param name="outputFilePath">
        /// The output file path.
        /// </param>
        /// <exception cref="ArgumentException">
        /// Thrown when a path is invalid.
        /// </exception>
        /// <exception cref="Exception">
        /// Thrown when something bad happens.
        /// </exception>
        public void ExportConversation(ConversationExporterConfiguration config)
        {
            Conversation conversation = this.ReadConversation(config.inputFilePath);

            //Perform specified filterings and obfuscations.
            if (config.userToFilter != null)
            {
                conversation = conversation.FilterByUser(config.userToFilter);
            }
            if (config.keywordToFilter != null)
            {
                conversation = conversation.FilterByKeyword(config.keywordToFilter);
            }
            if (config.wordToBlacklist != null)
            {
                conversation = conversation.BlacklistWord(config.wordToBlacklist);
            }
            if (config.blacklistNumbers)
            {
                conversation = conversation.BlacklistPhoneAndCC();
            }
            if (config.obfuscate)
            {
                conversation = conversation.ObfuscateUserIds();
            }

            this.WriteConversation(conversation, config.outputFilePath);

            Console.WriteLine("Conversation exported from '{0}' to '{1}'", config.inputFilePath, config.outputFilePath);
        }
コード例 #9
0
        /// <summary>
        /// The application entry point.
        /// </summary>
        /// <param name="args">
        /// The command line arguments.
        /// </param>
        static void Main(string[] args)
        {
            var conversationExporter = new ConversationExporter();
            ConversationExporterConfiguration configuration = CommandLineArgumentParser.ParseCommandLineArguments(args);

            conversationExporter.ExportConversation(configuration);
        }
コード例 #10
0
        public void ExportingConversationWithNoInputFileThrowsArgumentNullError()
        {
            var exporterConfig = new ConversationExporterConfiguration();

            ArgumentNullException exception = Assert.Throws <ArgumentNullException>(() => ConversationExporter.ManageArguments(exporterConfig));

            Assert.AreEqual("Value cannot be null. (Parameter 'Input File Path')", exception.Message);
        }
コード例 #11
0
        /// <summary>
        /// Exports the conversation at <paramref name="inputFilePath"/> as JSON to <paramref name="outputFilePath"/>.
        /// </summary>
        /// <param name="inputFilePath">
        /// The input file path.
        /// </param>
        /// <param name="outputFilePath">
        /// The output file path.
        /// </param>
        /// <exception cref="ArgumentException">
        /// Thrown when a path is invalid.
        /// </exception>
        /// <exception cref="Exception">
        /// Thrown when something bad happens.
        /// </exception>
        ///
        //public void ExportConversation(string inputFilePath, string outputFilePath, string userFilter)
        public void ExportConversation(ConversationExporterConfiguration configuration)
        {
            Conversation conversation = this.ReadConversation(configuration);

            this.WriteConversation(conversation, configuration.outputFilePath);

            Console.WriteLine("Conversation exported from '{0}' to '{1}'", configuration.inputFilePath, configuration.outputFilePath);
        }
コード例 #12
0
        public void ExportControllerExportsFiles()
        {
            // INITIALISE an IReadController, IWriteController, IFilterController, IReportController as their respective
            // concrete implementations, ReadController, WriteController, FilterController and ReportController
            readController   = new ReadController();
            writeController  = new WriteController();
            filterController = new FilterController();
            reportController = new ReportController();

            // INITIALISE the IExportController
            exportController = new ExportController(readController, writeController, filterController, reportController);

            conversationConfig = new CommandLineArgumentParser().ParseCommandLineArguments(new string[] { "chat.txt", "chatE.json" }, filterController);

            exportController.ExportConversation(conversationConfig.inputFilePath, conversationConfig.outputFilePath);

            var serializedConversation = new StreamReader(new FileStream("chatE.json", FileMode.Open)).ReadToEnd();

            Conversation savedConversation = JsonConvert.DeserializeObject <Conversation>(serializedConversation);

            Assert.That(savedConversation.Name, Is.EqualTo("My Conversation"));

            var messages = savedConversation.Messages.ToList();

            Assert.That(savedConversation.Report.mostActiveUser, Is.EqualTo("angus"));

            Assert.That(savedConversation.Report.userActivityRanking[0], Is.EqualTo("Rank 1 is angus with 4 messages"));
            Assert.That(savedConversation.Report.userActivityRanking[1], Is.EqualTo("Rank 2 is bob with 3 messages"));
            Assert.That(savedConversation.Report.userActivityRanking[2], Is.EqualTo("Rank 3 is mike with 2 messages"));

            Assert.That(messages[0].Timestamp, Is.EqualTo(DateTimeOffset.FromUnixTimeSeconds(1448470901)));
            Assert.That(messages[0].SenderId, Is.EqualTo("bob"));
            Assert.That(messages[0].Content, Is.EqualTo("Hello there!"));

            Assert.That(messages[1].Timestamp, Is.EqualTo(DateTimeOffset.FromUnixTimeSeconds(1448470905)));
            Assert.That(messages[1].SenderId, Is.EqualTo("mike"));
            Assert.That(messages[1].Content, Is.EqualTo("how are you?"));

            Assert.That(messages[2].Timestamp, Is.EqualTo(DateTimeOffset.FromUnixTimeSeconds(1448470906)));
            Assert.That(messages[2].SenderId, Is.EqualTo("bob"));
            Assert.That(messages[2].Content, Is.EqualTo("I'm good thanks, do you like pie?"));

            Assert.That(messages[3].Timestamp, Is.EqualTo(DateTimeOffset.FromUnixTimeSeconds(1448470910)));
            Assert.That(messages[3].SenderId, Is.EqualTo("mike"));
            Assert.That(messages[3].Content, Is.EqualTo("no, let me ask Angus..."));

            Assert.That(messages[4].Timestamp, Is.EqualTo(DateTimeOffset.FromUnixTimeSeconds(1448470912)));
            Assert.That(messages[4].SenderId, Is.EqualTo("angus"));
            Assert.That(messages[4].Content, Is.EqualTo("Hell yes! Are we buying some pie?"));

            Assert.That(messages[5].Timestamp, Is.EqualTo(DateTimeOffset.FromUnixTimeSeconds(1448470914)));
            Assert.That(messages[5].SenderId, Is.EqualTo("bob"));
            Assert.That(messages[5].Content, Is.EqualTo("No, just want to know if there's anybody else in the pie society..."));

            Assert.That(messages[6].Timestamp, Is.EqualTo(DateTimeOffset.FromUnixTimeSeconds(1448470915)));
            Assert.That(messages[6].SenderId, Is.EqualTo("angus"));
            Assert.That(messages[6].Content, Is.EqualTo("YES! I'm the head pie eater there..."));
        }
コード例 #13
0
        public void CheckKeyword()
        {
            ConversationExporter exporter = new ConversationExporter();
            ConversationExporterConfiguration configuration = new ConversationExporterConfiguration("chat.txt", "chat.json");
            configuration.keyword = "pie";
            configuration.filtersActive = true;
            Conversation conversation = exporter.ReadConversation(configuration);
            var messages = conversation.messages.ToList();

            foreach (Message msg in messages)
            {
                Assert.IsTrue(msg.content.ToLower().Contains(configuration.keyword.ToLower()));
            }
        }
コード例 #14
0
        public void ConversationmostActiveUser()
        {
            ConversationExporter exporter = new ConversationExporter();
            ConversationExporterConfiguration configuration = new ConversationExporterConfiguration("chat.txt", "chat.json", null);

            exporter.ExportConversation(configuration);
            var          serializedConversation = new StreamReader(new FileStream("chat.json", FileMode.Open)).ReadToEnd();
            Conversation savedConversation      = JsonConvert.DeserializeObject <Conversation>(serializedConversation);

            var messages = savedConversation.messages.ToList();
            var con      = new Conversation("Test Conversation", messages, configuration);

            Console.WriteLine(con.mostActiveUser);
            Assert.AreEqual("User: bob made 3 Chats", con.mostActiveUser);
        }
コード例 #15
0
        public void Test_CheckConversationName()
        {
            var output = "chat5.json";

            var exporter      = new ConversationExporter();
            var configuration = new ConversationExporterConfiguration("chat.txt", output);

            configuration.writeUserActivity = false;

            exporter.ExportConversation(configuration);

            var serializedConversation = new StreamReader(new FileStream(output, FileMode.Open)).ReadToEnd();
            var savedConversation      = JsonConvert.DeserializeObject <Conversation>(serializedConversation);

            Assert.Equal("My Conversation", savedConversation.name);
        }
コード例 #16
0
        public void ExportingConversationExportsConversation()
        {
            var exporter = new ConversationExporter();

            ConversationExporterConfiguration exporterConfiguration = new ConversationExporterConfiguration();

            exporterConfiguration.InputFilePath  = "chat.txt";
            exporterConfiguration.OutputFilePath = "chat.json";

            exporter.ExportConversation(exporterConfiguration);

            var serializedConversation = new StreamReader(new FileStream("chat.json", FileMode.Open)).ReadToEnd();

            var savedConversation = JsonConvert.DeserializeObject <Conversation>(serializedConversation);

            Assert.That(savedConversation.name, Is.EqualTo("My Conversation"));

            var messages = savedConversation.messages.ToList();

            Assert.That(messages[0].timestamp, Is.EqualTo(DateTimeOffset.FromUnixTimeSeconds(1448470901)));
            Assert.That(messages[0].senderId, Is.EqualTo("bob"));
            Assert.That(messages[0].content, Is.EqualTo("Hello there!"));

            Assert.That(messages[1].timestamp, Is.EqualTo(DateTimeOffset.FromUnixTimeSeconds(1448470905)));
            Assert.That(messages[1].senderId, Is.EqualTo("mike"));
            Assert.That(messages[1].content, Is.EqualTo("how are you?"));

            Assert.That(messages[2].timestamp, Is.EqualTo(DateTimeOffset.FromUnixTimeSeconds(1448470906)));
            Assert.That(messages[2].senderId, Is.EqualTo("bob"));
            Assert.That(messages[2].content, Is.EqualTo("I'm good thanks, do you like pie?"));

            Assert.That(messages[3].timestamp, Is.EqualTo(DateTimeOffset.FromUnixTimeSeconds(1448470910)));
            Assert.That(messages[3].senderId, Is.EqualTo("mike"));
            Assert.That(messages[3].content, Is.EqualTo("no, let me ask Angus..."));

            Assert.That(messages[4].timestamp, Is.EqualTo(DateTimeOffset.FromUnixTimeSeconds(1448470912)));
            Assert.That(messages[4].senderId, Is.EqualTo("angus"));
            Assert.That(messages[4].content, Is.EqualTo("Hell yes! Are we buying some pie?"));

            Assert.That(messages[5].timestamp, Is.EqualTo(DateTimeOffset.FromUnixTimeSeconds(1448470914)));
            Assert.That(messages[5].senderId, Is.EqualTo("bob"));
            Assert.That(messages[5].content, Is.EqualTo("No, just want to know if there's anybody else in the pie society..."));

            Assert.That(messages[6].timestamp, Is.EqualTo(DateTimeOffset.FromUnixTimeSeconds(1448470915)));
            Assert.That(messages[6].senderId, Is.EqualTo("angus"));
            Assert.That(messages[6].content, Is.EqualTo("YES! I'm the head pie eater there..."));
        }
コード例 #17
0
        /// <summary>
        /// Helper method to read the conversation from <paramref name="inputFilePath"/>.
        /// </summary>
        /// <param name="inputFilePath">
        /// The input file path.
        /// </param>
        /// <returns>
        /// A <see cref="Conversation"/> model representing the conversation.
        /// </returns>
        /// <exception cref="FormatException">
        /// Misformed and empty Inputlines will cause a Console Log, not throwned
        /// </exception>
        /// <exception cref="ArgumentException">
        /// Thrown when the input file could not be found.
        /// </exception>
        /// <exception cref="Exception">
        /// Thrown when something else went wrong.
        /// </exception>
        public Conversation ReadConversation(ConversationExporterConfiguration configuration)
        {
            int    maxSplit         = 3;                            // max times to split the input=string
            string delimitterString = " ";                          // possible delimitter strings, add others without separator

            char[] delimitter = delimitterString.ToCharArray();     // char arr with delimitters
            string line       = null;                               // input line to be stript down

            string[] split = null;

            Console.WriteLine("Converter Log\n-------------");    // write Log Title

            try
            {
                var reader = new StreamReader(new FileStream(configuration.inputFilePath, FileMode.Open, FileAccess.Read),
                                              Encoding.ASCII);

                string conversationName = reader.ReadLine();
                var    messages         = new List <Message>();

                while ((line = reader.ReadLine()) != null)
                {
                    split = line.Split(delimitter, maxSplit);       // split inputline as maxSplit times, on delimitters

                    try
                    {
                        messages.Add(new Message(DateTimeOffset.FromUnixTimeSeconds(Convert.ToInt64(split[0])), split[1], split[2]));
                    }
                    catch (FormatException e)
                    {
                        // occurs at empty line feeds because of missformed date/time inputs
                        // write console log and ignore this line
                        Console.WriteLine(e.Message.ToString() + " Input: " + line.ToString());
                        continue;
                    }
                }
                return(new Conversation(conversationName, messages, configuration));
            }
            catch (FileNotFoundException)
            {
                throw new ArgumentException("The file was not found.");
            }
            catch (IOException)
            {
                throw new Exception("Something went wrong in the IO.");
            }
        }
コード例 #18
0
        public void Test_CheckMessages()
        {
            var output = "chat0.json";

            var exporter      = new ConversationExporter();
            var configuration = new ConversationExporterConfiguration("chat.txt", output);

            configuration.writeUserActivity = false;


            exporter.ExportConversation(configuration);

            var serializedConversation = new StreamReader(new FileStream(output, FileMode.Open)).ReadToEnd();
            var savedConversation      = JsonConvert.DeserializeObject <Conversation>(serializedConversation);

            var messages = savedConversation.messages.ToList();

            Assert.Equal(DateTimeOffset.FromUnixTimeSeconds(1448470901), messages[0].timestamp);
            Assert.Equal("bob", messages[0].senderId);
            Assert.Equal("Hello there!", messages[0].content);

            Assert.Equal(DateTimeOffset.FromUnixTimeSeconds(1448470905), messages[1].timestamp);
            Assert.Equal("mike", messages[1].senderId);
            Assert.Equal("how are you?", messages[1].content);

            Assert.Equal(DateTimeOffset.FromUnixTimeSeconds(1448470906), messages[2].timestamp);
            Assert.Equal("bob", messages[2].senderId);
            Assert.Equal("I'm good thanks, do you like pie?", messages[2].content);

            Assert.Equal(DateTimeOffset.FromUnixTimeSeconds(1448470910), messages[3].timestamp);
            Assert.Equal("mike", messages[3].senderId);
            Assert.Equal("no, let me ask Angus...", messages[3].content);

            Assert.Equal(DateTimeOffset.FromUnixTimeSeconds(1448470912), messages[4].timestamp);
            Assert.Equal("angus", messages[4].senderId);
            Assert.Equal("Hell yes! Are we buying some pie?", messages[4].content);

            Assert.Equal(DateTimeOffset.FromUnixTimeSeconds(1448470914), messages[5].timestamp);
            Assert.Equal("bob", messages[5].senderId);
            Assert.Equal("No, just want to know if there's anybody else in the pie society...", messages[5].content);

            Assert.Equal(DateTimeOffset.FromUnixTimeSeconds(1448470915), messages[6].timestamp);
            Assert.Equal("angus", messages[6].senderId);
            Assert.Equal("YES! I'm the head pie eater there...", messages[6].content);
        }
コード例 #19
0
        public void ExportControllerExportsFilesWithMultipleFilters2()
        {
            // INITIALISE an IReadController, IWriteController, IFilterController, IReportController as their respective
            // concrete implementations, ReadController, WriteController, FilterController and ReportController
            readController   = new ReadController();
            writeController  = new WriteController();
            filterController = new FilterController();
            reportController = new ReportController();

            // INITIALISE the IExportController
            exportController = new ExportController(readController, writeController, filterController, reportController);

            conversationConfig =
                new CommandLineArgumentParser().ParseCommandLineArguments(
                    new string[] { "chat.txt", "chatH.json", "-filter-user", "bob", "-filter-blacklist-word", "pie|society", "-filter-obfuscate" },
                    filterController);

            exportController.ExportConversation(conversationConfig.inputFilePath, conversationConfig.outputFilePath);

            var serializedConversation = new StreamReader(new FileStream("chatH.json", FileMode.Open)).ReadToEnd();

            Conversation savedConversation = JsonConvert.DeserializeObject <Conversation>(serializedConversation);

            Assert.That(savedConversation.Name, Is.EqualTo("My Conversation"));

            var messages = savedConversation.Messages.ToList();

            Assert.That(savedConversation.Report.mostActiveUser, Is.EqualTo("User3071"));

            Assert.That(savedConversation.Report.userActivityRanking[0], Is.EqualTo("Rank 1 is User3071 with 3 messages"));

            Assert.That(messages[0].Timestamp, Is.EqualTo(DateTimeOffset.FromUnixTimeSeconds(1448470901)));
            Assert.That(messages[0].SenderId, Is.EqualTo("User3071"));
            Assert.That(messages[0].Content, Is.EqualTo("Hello there!"));

            Assert.That(messages[1].Timestamp, Is.EqualTo(DateTimeOffset.FromUnixTimeSeconds(1448470906)));
            Assert.That(messages[1].SenderId, Is.EqualTo("User3071"));
            Assert.That(messages[1].Content, Is.EqualTo("I'm good thanks, do you like \\*redacted\\*?"));

            Assert.That(messages[2].Timestamp, Is.EqualTo(DateTimeOffset.FromUnixTimeSeconds(1448470914)));
            Assert.That(messages[2].SenderId, Is.EqualTo("User3071"));
            Assert.That(messages[2].Content, Is.EqualTo("No, just want to know if there's anybody else in the \\*redacted\\* \\*redacted\\*..."));
        }
コード例 #20
0
        //Main method in the program, which reads from the path and writes to the output path.

        public void ExportConversation(ConversationExporterConfiguration configuration)
        {
            conversation = ReadConversation(configuration.inputFilePath);

            var action_list = configuration.GetFilterList();
            var modifier    = new ConversationModifier(conversation);

            conversation = modifier.PerformActions(action_list, configuration);

            CalculateActivity(conversation);

            WriteConversation(configuration.outputFilePath);

            if (configuration.writeUserActivity)
            {
                var activityList = CalculateActivity(conversation);
                WriteUserActivity(configuration.outputFilePath, activityList);
            }
        }
コード例 #21
0
        public void CheckObfuscateUserIDS()
        {
            ConversationExporter exporter = new ConversationExporter();
            ConversationExporterConfiguration configuration = new ConversationExporterConfiguration("chat.txt", "chat.json");
            Conversation conversation = exporter.ReadConversation(configuration);
            var messages = conversation.messages.ToList();

            //messages with obfuscation
            ConversationExporter exporterObfuscate = new ConversationExporter();
            ConversationExporterConfiguration configurationObfuscate = new ConversationExporterConfiguration("chat.txt", "chat.json");
            configurationObfuscate.obfuscateUserIDsFlag = true;
            Conversation obfuscatedConversation = exporterObfuscate.ReadConversation(configurationObfuscate);
            var obfuscatedMsgs = obfuscatedConversation.messages.ToList();

            for(int i =0; i<obfuscatedMsgs.Count; i++)
            {
                Assert.IsTrue(obfuscatedMsgs[i].senderId == configurationObfuscate.usersMapper[messages[i].senderId]);
            }
            //exporterObfuscate.ExportConversation(configurationObfuscate);
        }
コード例 #22
0
        public void Test_Modifier_ModifyByName()
        {
            var output = "chat1.json";

            var exporter      = new ConversationExporter();
            var configuration = new ConversationExporterConfiguration("chat.txt", output);

            configuration.user = "******";
            configuration.writeUserActivity = false;

            exporter.ExportConversation(configuration);

            var serializedConversation = new StreamReader(new FileStream(output, FileMode.Open)).ReadToEnd();
            var savedConversation      = JsonConvert.DeserializeObject <Conversation>(serializedConversation);

            var messages = savedConversation.messages.ToList();

            Assert.Equal("Hello am I late?", messages[0].content);
            Assert.Equal("I like pie", messages[1].content);
        }
コード例 #23
0
        public void CheckAllFiltersTogether()
        {
            ConversationExporter exporter = new ConversationExporter();
            ConversationExporterConfiguration configuration = new ConversationExporterConfiguration("chat.txt", "chat.json");
            configuration.filtersActive = true;
            configuration.keyword = "society";
            configuration.usernameFilter = "bob";
            configuration.wordsBlacklist = new string[] { "pie" };
            configuration.obfuscateUserIDsFlag = true;

            Conversation conversation = exporter.ReadConversation(configuration);
            var messages = conversation.messages.ToList();
            //given conversation should return only 2 messages
            Assert.IsTrue(messages.Count == 1);
            foreach (Message msg in messages)
            {
                Assert.IsTrue(msg.senderId == "User1");
                Assert.IsTrue(msg.content.ToLower().Contains(configuration.keyword.ToLower()));
            }
            //exporter.ExportConversation(configuration);
        }
コード例 #24
0
        public void Test_Modifier_ModifyBySensitiveData()
        {
            var output = "chat6.json";

            var exporter      = new ConversationExporter();
            var configuration = new ConversationExporterConfiguration("chat.txt", output);

            configuration.hideSensitiveData = true;
            configuration.writeUserActivity = false;


            exporter.ExportConversation(configuration);

            var serializedConversation = new StreamReader(new FileStream(output, FileMode.Open)).ReadToEnd();
            var savedConversation      = JsonConvert.DeserializeObject <Conversation>(serializedConversation);

            var messages = savedConversation.messages.ToList();

            Assert.Equal("Hello there!", messages[0].content);
            Assert.Equal("hello my credit card number is \\*redacted*\\", messages[10].content);
            Assert.Equal("Hello my phone number is \\*redacted*\\", messages[11].content);
        }
コード例 #25
0
        public void Test_Modifier_ModifyByKeyword()
        {
            var output = "chat2.json";

            var exporter      = new ConversationExporter();
            var configuration = new ConversationExporterConfiguration("chat.txt", output);

            configuration.keyword           = "pie";
            configuration.writeUserActivity = false;

            exporter.ExportConversation(configuration);

            var serializedConversation = new StreamReader(new FileStream(output, FileMode.Open)).ReadToEnd();
            var savedConversation      = JsonConvert.DeserializeObject <Conversation>(serializedConversation);

            var messages = savedConversation.messages.ToList();

            Assert.Equal("I'm good thanks, do you like pie?", messages[0].content);
            Assert.Equal("Hell yes! Are we buying some pie?", messages[1].content);
            Assert.Equal("No, just want to know if there's anybody else in the pie society...", messages[2].content);
            Assert.Equal("YES! I'm the head pie eater there...", messages[3].content);
            Assert.Equal("I like pie", messages[4].content);
        }
コード例 #26
0
        /// <summary>
        /// Exports the conversation at <paramref name="inputFilePath"/> as JSON to <paramref name="outputFilePath"/>.
        /// </summary>
        /// <param name="inputFilePath">
        /// The input file path.
        /// </param>
        /// <param name="outputFilePath">
        /// The output file path.
        /// </param>
        /// <exception cref="ArgumentException">
        /// Thrown when a path is invalid.
        /// </exception>
        /// <exception cref="Exception">
        /// Thrown when something bad happens.
        /// </exception>

        public void ExportConversation(ConversationExporterConfiguration exporterConfiguration)
        {
            var          filters    = new List <BaseFilter>();
            var          blacklists = new List <IBlacklist>();
            Conversation conversation;

            if (exporterConfiguration.filterByUser != null)
            {
                var userFilter = new UserFilter(new string[] { exporterConfiguration.filterByUser });
                filters.Add(userFilter);
            }

            if (exporterConfiguration.filterByKeyword != null)
            {
                var keywordFilter = new KeywordFilter(new string[] { exporterConfiguration.filterByKeyword });
                filters.Add(keywordFilter);
            }

            if (exporterConfiguration.blacklist != null)
            {
                var blacklistWords = exporterConfiguration.blacklist.Split(',');
                blacklists.Add(new KeywordBlacklist(blacklistWords, "*redacted*"));
            }

            if (exporterConfiguration.generateReport)
            {
                conversation = this.ReadConversation(exporterConfiguration.InputFilePath, filters.ToArray(), blacklists.ToArray(), true);
            }
            else
            {
                conversation = this.ReadConversation(exporterConfiguration.InputFilePath, filters.ToArray(), blacklists.ToArray());
            }

            this.WriteConversation(conversation, exporterConfiguration.OutputFilePath);

            Console.WriteLine("Conversation exported from '{0}' to '{1}'", exporterConfiguration.InputFilePath, exporterConfiguration.OutputFilePath);
        }
コード例 #27
0
        /// <summary>
        /// The application entry point.
        /// </summary>
        /// <param name="args">
        /// The command line arguments.
        /// </param>
        static void Main(string[] args)
        {
            UnityContainer container = new UnityContainer();

            container.AddNewExtension <MyChatUnityContainer>();

            ICommandLineParser parser = container.Resolve <ICommandLineParser>();
            ConversationExporterConfiguration configuration = parser.ParseCommandLineArguments(args);

            IExporter export = container.Resolve <IExporter>();

            foreach (var argument in configuration.commandLineArguments)
            {
                if (argument.ArgumentType == CommandLineArgumentType.WordFilter)
                {
                    export.AddFilter(container.Resolve <IFilter>(argument.ArgumentType.ToString(), new ParameterOverride("replacement", "*redacted*")), argument.AdditionalParameters);
                }
                else
                {
                    export.AddFilter(container.Resolve <IFilter>(argument.ArgumentType.ToString()), argument.AdditionalParameters);
                }
            }
            export.ExportConversation(configuration.inputFilePath, configuration.outputFilePath);
        }
コード例 #28
0
        public void Test_Modifier_Obfisticate_IDS()
        {
            var output = "chat7.json";

            var exporter      = new ConversationExporter();
            var configuration = new ConversationExporterConfiguration("chat.txt", output);

            configuration.obfuscateUserIDs  = true;
            configuration.writeUserActivity = false;

            exporter.ExportConversation(configuration);

            var serializedConversation = new StreamReader(new FileStream(output, FileMode.Open)).ReadToEnd();
            var savedConversation      = JsonConvert.DeserializeObject <Conversation>(serializedConversation);

            var messages = savedConversation.messages.ToList();


            //bob mike angus matas
            Assert.Equal("user1", messages[0].senderId);
            Assert.Equal("user2", messages[1].senderId);
            Assert.Equal("user3", messages[4].senderId);
            Assert.Equal("user4", messages[7].senderId);
        }
コード例 #29
0
        public void ExportingConversationExportsConversation()
        {
            ConversationExporter exporter = new ConversationExporter();
            ConversationExporterConfiguration configuration = new ConversationExporterConfiguration("chat.txt", "chat.json");
            exporter.ExportConversation(configuration);

            var serializedConversation = new StreamReader(new FileStream("chat.json", FileMode.Open)).ReadToEnd();

            Conversation savedConversation = JsonConvert.DeserializeObject<Conversation>(serializedConversation);

            Assert.AreEqual("My Conversation", savedConversation.name);
            Assert.IsTrue(savedConversation.messages.ToList().Count > 0);
        }
コード例 #30
0
        /*stammary>
         * /// <param name="inputFilePath">
         * /// The statictic async void SendAsychTask(ConversationExporterConfiguration configuration)
         * {
         *  await Task.Run(() =>
         * }*/

        /// <summary>
        /// Exports the conversation at <paramref name="inputFilePath"/> as JSON to <paramref name="outputFilePath"/>.
        /// </suinput file path.
        /// </param>
        /// <param name="outputFilePath">
        /// The output file path.
        /// </param>
        /// <exception cref="ArgumentException">
        /// Thrown when a path is invalid.
        /// </exception>
        /// <exception cref="Exception">
        /// Thrown when something bad happens.
        /// </exception>
        public void ExportConversation(ConversationExporterConfiguration configuration)
        {
            Task n = Task.Run(() => ReadConversation(configuration.inputFilePath, configuration.outputFilePath, configuration.user, configuration.keyboard, configuration.blacklist));

            n.Wait();
        }
コード例 #31
0
        public void ReadConversationTest()
        {
            ConversationExporter exporter = new ConversationExporter();
            ConversationExporterConfiguration configuration = new ConversationExporterConfiguration("chat.txt", "chat.json");
            Conversation conversation = exporter.ReadConversation(configuration);

            Assert.AreEqual("My Conversation", conversation.name);

            var messages = conversation.messages.ToList();

            Assert.AreEqual(DateTimeOffset.FromUnixTimeSeconds(1448470901), messages[0].timestamp);
            Assert.AreEqual("bob", messages[0].senderId);
            Assert.AreEqual("Hello there!", messages[0].content);

            Assert.AreEqual(DateTimeOffset.FromUnixTimeSeconds(1448470905), messages[1].timestamp);
            Assert.AreEqual("mike", messages[1].senderId);
            Assert.AreEqual("how are you?", messages[1].content);

            Assert.AreEqual(DateTimeOffset.FromUnixTimeSeconds(1448470906), messages[2].timestamp);
            Assert.AreEqual("bob", messages[2].senderId);
            Assert.AreEqual("I'm good thanks, do you like pie?", messages[2].content);

            Assert.AreEqual(DateTimeOffset.FromUnixTimeSeconds(1448470910), messages[3].timestamp);
            Assert.AreEqual("mike", messages[3].senderId);
            Assert.AreEqual("no, let me ask Angus...", messages[3].content);

            Assert.AreEqual(DateTimeOffset.FromUnixTimeSeconds(1448470912), messages[4].timestamp);
            Assert.AreEqual("angus", messages[4].senderId);
            Assert.AreEqual("Hell yes! Are we buying some pie?", messages[4].content);

            Assert.AreEqual(DateTimeOffset.FromUnixTimeSeconds(1448470914), messages[5].timestamp);
            Assert.AreEqual("bob", messages[5].senderId);
            Assert.AreEqual("No, just want to know if there's anybody else in the pie society...", messages[5].content);

            Assert.AreEqual(DateTimeOffset.FromUnixTimeSeconds(1448470915), messages[6].timestamp);
            Assert.AreEqual("angus", messages[6].senderId);
            Assert.AreEqual("YES! I'm the head pie eater there...", messages[6].content);

            Assert.AreEqual(DateTimeOffset.FromUnixTimeSeconds(1448470918), messages[7].timestamp);
            Assert.AreEqual("angus", messages[7].senderId);
            Assert.AreEqual("", messages[7].content);
        }
コード例 #32
0
 public void CompineUsernameAndKeyWordFilter()
 {
     ConversationExporter exporter = new ConversationExporter();
     ConversationExporterConfiguration configuration = new ConversationExporterConfiguration("chat.txt", "chat.json");
     configuration.keyword = "pie";
     configuration.usernameFilter = "bob";
     configuration.filtersActive = true;
     Conversation conversation = exporter.ReadConversation(configuration);
     var messages = conversation.messages.ToList();
     //given conversation should return only 2 messages
     Assert.IsTrue(messages.Count == 2);
     foreach (Message msg in messages)
     {
         Assert.IsTrue(msg.senderId == "bob");
         Assert.IsTrue(msg.content.ToLower().Contains(configuration.keyword.ToLower()));
     }
     //exporter.ExportConversation(configuration);
 }
コード例 #33
0
        public void CheckUsername()
        {
            ConversationExporter exporter = new ConversationExporter();
            ConversationExporterConfiguration configuration = new ConversationExporterConfiguration("chat.txt", "chat.json");
            configuration.usernameFilter = "bob";
            configuration.filtersActive = true;
            Conversation conversation = exporter.ReadConversation(configuration);
            var messages = conversation.messages.ToList();

            foreach (Message msg in messages)
            {
                Assert.AreEqual(configuration.usernameFilter, msg.senderId);
            }
        }
コード例 #34
0
 public void FailToReadConversation()
 {
     ConversationExporter exporter = new ConversationExporter();
     ConversationExporterConfiguration configuration = new ConversationExporterConfiguration(null, "chat.json");
     try
     {
         exporter.ReadConversation(configuration);
     }
     catch (Exception)
     {
         configuration.inputFilePath="chat.txt";
         exporter.ReadConversation(configuration);
     }
 }
コード例 #35
0
 public void FailToExport()
 {
     ConversationExporter exporter = new ConversationExporter();
     ConversationExporterConfiguration configuration = new ConversationExporterConfiguration("chat.txt", "fileNotAllowedToAccess.json");
     try
     {
         exporter.ExportConversation(configuration);
     }
     catch (Exception)
     {
         //catching the exception and correcting the file
         configuration.outputFilePath = "chat.json";
         exporter.ExportConversation(configuration);
     }
 }
コード例 #36
0
        //[TestCase(@"chat_wrong.txt", @"chat3.json", "", "", "", "ExceptionFile", ExpectedException = typeof(FileNotFoundException), ExpectedMessage = "File not found")]

        public void ExportingConversationExportsConversation(string input, string output, string user = "", string keyword = "", string blacklist = "", string test = "test0")
        {
            ConversationExporter exporter = new ConversationExporter();
            ProgramArguments     args     = new ProgramArguments()
            {
                inputFile = AppDomain.CurrentDomain.BaseDirectory + input, outFile = AppDomain.CurrentDomain.BaseDirectory + output, user = user, keyboard = keyword, blacklist = blacklist
            };
            ConversationExporterConfiguration conf = new ConversationExporterConfiguration(args);

            exporter.ExportConversation(conf);

            var    serializedConversation = new StreamReader(new FileStream(AppDomain.CurrentDomain.BaseDirectory + output, FileMode.Open)).ReadToEnd();
            Output savedConversation      = JsonConvert.DeserializeObject <Output>(serializedConversation);

            Assert.AreEqual("My Conversation", savedConversation.conversation.name);

            var messages = savedConversation.conversation.messages.ToList();

            switch (test)
            {
            case "test1":
                Assert.AreEqual(DateTimeOffset.FromUnixTimeSeconds(1448470901), messages[0].timestamp);
                Assert.AreEqual("bob", messages[0].senderId);
                Assert.AreEqual("Hello there!", messages[0].content);

                Assert.AreEqual(DateTimeOffset.FromUnixTimeSeconds(1448470906), messages[1].timestamp);
                Assert.AreEqual("bob", messages[1].senderId);
                Assert.AreEqual("I'm good thanks, do you like pie?", messages[1].content);

                Assert.AreEqual(DateTimeOffset.FromUnixTimeSeconds(1448470914), messages[2].timestamp);
                Assert.AreEqual("bob", messages[2].senderId);
                Assert.AreEqual("No, just want to know if there's anybody else in the pie society...", messages[2].content);
                break;

            case "test2":

                Assert.AreEqual(DateTimeOffset.FromUnixTimeSeconds(1448470914), messages[0].timestamp);
                Assert.AreEqual("bob", messages[0].senderId);
                Assert.AreEqual("No, just want to know if there's anybody else in the pie society...", messages[0].content);
                break;

            case "test3":

                Assert.AreEqual(DateTimeOffset.FromUnixTimeSeconds(1448470914), messages[0].timestamp);
                Assert.AreEqual("bob", messages[0].senderId);
                Assert.AreEqual("No, just *redacted* to know if there's anybody else in the pie society...".ToLower(), messages[0].content);
                break;

            case "ExceptionFile":

                break;

            default:

                Assert.AreEqual(DateTimeOffset.FromUnixTimeSeconds(1448470901), messages[0].timestamp);
                Assert.AreEqual("bob", messages[0].senderId);
                Assert.AreEqual("Hello there!", messages[0].content);

                Assert.AreEqual(DateTimeOffset.FromUnixTimeSeconds(1448470905), messages[1].timestamp);
                Assert.AreEqual("mike", messages[1].senderId);
                Assert.AreEqual("how are you?", messages[1].content);

                Assert.AreEqual(DateTimeOffset.FromUnixTimeSeconds(1448470906), messages[2].timestamp);
                Assert.AreEqual("bob", messages[2].senderId);
                Assert.AreEqual("I'm good thanks, do you like pie?", messages[2].content);

                Assert.AreEqual(DateTimeOffset.FromUnixTimeSeconds(1448470910), messages[3].timestamp);
                Assert.AreEqual("mike", messages[3].senderId);
                Assert.AreEqual("no, let me ask Angus...", messages[3].content);

                Assert.AreEqual(DateTimeOffset.FromUnixTimeSeconds(1448470912), messages[4].timestamp);
                Assert.AreEqual("angus", messages[4].senderId);
                Assert.AreEqual("Hell yes! Are we buying some pie?", messages[4].content);

                Assert.AreEqual(DateTimeOffset.FromUnixTimeSeconds(1448470914), messages[5].timestamp);
                Assert.AreEqual("bob", messages[5].senderId);
                Assert.AreEqual("No, just want to know if there's anybody else in the pie society...", messages[5].content);

                Assert.AreEqual(DateTimeOffset.FromUnixTimeSeconds(1448470915), messages[6].timestamp);
                Assert.AreEqual("angus", messages[6].senderId);
                Assert.AreEqual("YES! I'm the head pie eater there...", messages[6].content);
                break;
            }
        }
コード例 #37
0
        public void HideSpecificWordsCheck()
        {
            ConversationExporter exporter = new ConversationExporter();
            ConversationExporterConfiguration configuration = new ConversationExporterConfiguration("chat.txt", "chat.json");
            configuration.wordsBlacklist = new string[2] { "pie", "hell" };
            configuration.filtersActive = true;

            Conversation conversation = exporter.ReadConversation(configuration);
            var messages = conversation.messages.ToList();

            Assert.AreEqual("*redacted*o there!", messages[0].content);
            Assert.AreEqual("I'm good thanks, do you like *redacted*?", messages[2].content);
            Assert.AreEqual("*redacted* yes! Are we buying some *redacted*?", messages[4].content);
            Assert.AreEqual("No, just want to know if there's anybody else in the *redacted* society...", messages[5].content);
            Assert.AreEqual("YES! I'm the head *redacted* eater there...", messages[6].content);
        }