email_signatur_detection_test.rb 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. require 'test_helper'
  2. class EmailSignaturDetectionTest < ActiveSupport::TestCase
  3. test 'test case 1 - sender a' do
  4. # fixtures of sender a
  5. fixture_files = {
  6. 'email_signature_detection/client_a_1.txt' => { line: 10, content_type: 'text/plain' },
  7. 'email_signature_detection/client_a_2.txt' => { line: 20, content_type: 'text/plain' },
  8. 'email_signature_detection/client_a_3.txt' => { line: 6, content_type: 'text/plain' },
  9. }
  10. fixture_messages = []
  11. fixture_files.each do |filepath, value|
  12. value[:content] = File.new( Rails.root.join('test', 'fixtures', filepath), 'r').read
  13. fixture_messages.push value
  14. end
  15. signature = SignatureDetection.find_signature(fixture_messages)
  16. expected_signature = "\nMit freundlichen Grüßen\n\nBob Smith\nBerechtigungen und dez. Department\n________________________________\n\nMusik AG\nBerechtigungen und dez. Department (ITPBM)\nKastanien 2"
  17. assert_equal(expected_signature, signature)
  18. fixture_files.each_value do |value|
  19. assert_equal(value[:line], SignatureDetection.find_signature_line(signature, value[:content], value[:content_type]))
  20. end
  21. end
  22. test 'test case 2 - sender b' do
  23. fixture_files = {
  24. 'email_signature_detection/client_b_1.txt' => { line: 26, content_type: 'text/plain' },
  25. 'email_signature_detection/client_b_2.txt' => { line: 4, content_type: 'text/plain' },
  26. 'email_signature_detection/client_b_3.txt' => { line: 6, content_type: 'text/plain' },
  27. }
  28. fixture_messages = []
  29. fixture_files.each do |filepath, value|
  30. value[:content] = File.new( Rails.root.join('test', 'fixtures', filepath), 'r').read
  31. fixture_messages.push value
  32. end
  33. signature = SignatureDetection.find_signature(fixture_messages)
  34. expected_signature = "\nFreundliche Grüße\n\nGünter Lässig\nLokale Daten\n\nMusic GmbH\nBaustraße 123, 12345 Max City\nTelefon 0123 5432114\nTelefax 0123 5432139"
  35. assert_equal(expected_signature, signature)
  36. fixture_files.each_value do |value|
  37. assert_equal(value[:line], SignatureDetection.find_signature_line(signature, value[:content], value[:content_type]))
  38. end
  39. end
  40. test 'test case 3 - just tests' do
  41. signature = "~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nBob Smith\nABC Organisation\n\nEXAMPLE IT-Service GmbH\nDorten 5 F&E\n12345 Da / Germany\nPhone: +49 (0) 1234 567 890 / +49 (0) 1234 567 891\nFax:     +49 (0) 1234 567 892"
  42. message = File.new(Rails.root.join('test', 'fixtures', 'email_signature_detection', 'example1.html'), 'r').read
  43. signature_line = SignatureDetection.find_signature_line(signature, message, 'text/html')
  44. assert_equal(11, signature_line)
  45. end
  46. test 'test case 4 - sender c' do
  47. fixture_files = {
  48. 'email_signature_detection/client_c_1.html' => { line: 8, content_type: 'text/html' },
  49. 'email_signature_detection/client_c_2.html' => { line: 29, content_type: 'text/html' },
  50. 'email_signature_detection/client_c_3.html' => { line: 6, content_type: 'text/html' },
  51. }
  52. fixture_messages = []
  53. fixture_files.each do |filepath, value|
  54. value[:content] = File.new( Rails.root.join('test', 'fixtures', filepath), 'r').read
  55. fixture_messages.push value
  56. end
  57. signature = SignatureDetection.find_signature(fixture_messages)
  58. expected_signature = "\nChristianSmith\nTechnik\n\nTel: +49 12 34 56 78 441\nFax: +49 12 34 56 78 499\nEmail: Christian.Smith@example.com\nWeb: www.example.com\nABC KFZ- und Flugzeug B.V. & Co. KG\nHauptverwaltung"
  59. assert_equal(expected_signature, signature)
  60. fixture_files.each do |filepath, value|
  61. assert_equal(value[:line], SignatureDetection.find_signature_line(signature, value[:content], value[:content_type]), filepath)
  62. end
  63. end
  64. test 'test case III - sender a - full cycle' do
  65. raw_email_header = "From: Bob.Smith@music.com\nTo: test@zammad.org\nSubject: test\n\n"
  66. # process email I
  67. file = File.open(Rails.root.join('test', 'fixtures', 'email_signature_detection', 'client_a_1.txt'), 'rb')
  68. raw_email = raw_email_header + file.read
  69. ticket1, article1, user1, mail = Channel::EmailParser.new.process({}, raw_email)
  70. assert(ticket1)
  71. assert(article1)
  72. Scheduler.worker(true)
  73. # process email II
  74. file = File.open(Rails.root.join('test', 'fixtures', 'email_signature_detection', 'client_a_2.txt'), 'rb')
  75. raw_email = raw_email_header + file.read
  76. ticket2, article2, user2, mail = Channel::EmailParser.new.process({}, raw_email)
  77. assert(ticket2)
  78. assert(article2)
  79. Scheduler.worker(true)
  80. # check if user2 has a signature_detection value
  81. user2 = User.find(user2.id)
  82. assert(user2.preferences[:signature_detection])
  83. # process email III
  84. file = File.open(Rails.root.join('test', 'fixtures', 'email_signature_detection', 'client_a_3.txt'), 'rb')
  85. raw_email = raw_email_header + file.read
  86. ticket3, article3, user3, mail = Channel::EmailParser.new.process({}, raw_email)
  87. assert(ticket3)
  88. assert(article3)
  89. Scheduler.worker(true)
  90. # check if article3 has a signature_detection value
  91. article3 = Ticket::Article.find(article3.id)
  92. assert_equal(article3.preferences[:signature_detection], 6)
  93. # relbuild all
  94. SignatureDetection.rebuild_all_articles
  95. article1 = Ticket::Article.find(article1.id)
  96. assert_equal(article1.preferences[:signature_detection], 10)
  97. article2 = Ticket::Article.find(article2.id)
  98. assert_equal(article2.preferences[:signature_detection], 20)
  99. article3 = Ticket::Article.find(article3.id)
  100. assert_equal(article3.preferences[:signature_detection], 6)
  101. end
  102. end