email_signatur_detection_test.rb 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. # encoding: utf-8
  2. require 'test_helper'
  3. class EmailSignaturDetectionTest < ActiveSupport::TestCase
  4. test 'test case I - sender a' do
  5. # fixtures of sender a
  6. fixture_files = {
  7. 'email_signature_detection/client_a_1.txt' => { line: 10 },
  8. 'email_signature_detection/client_a_2.txt' => { line: 20 },
  9. 'email_signature_detection/client_a_3.txt' => { line: 6 },
  10. }
  11. fixture_files_string_list = []
  12. fixture_files.keys.each do |filepath|
  13. file = File.new("#{Rails.root}/test/fixtures/#{filepath}", 'r')
  14. file_content = file.read
  15. fixture_files[filepath][:content] = file_content
  16. fixture_files_string_list.push(file_content)
  17. end
  18. signature = SignatureDetection.find_signature(fixture_files_string_list)
  19. expected_signature = "\nMit freundlichen Grüßen\n\nBob Smith\nBerechtigungen und dez. Department\n________________________________\n\nMusik AG\nBerechtigungen und dez. Department (ITPBM)\nKastanien 2\n12345 Hornhausen\nTel.: +49 911 6760\nFax: +49 911 85 6760\nMobil: +49 173 911\nE-Mail: Bob.Smith@music.com\nhttp://www.music.com\n\nMusik AG | Kastanien 2 | 12345 Hornhausen\nSitz der AG: Hornhausen, HRB xxxxx | USt.-ID: DE 111222333444\nVorstand: Marc Smith, Weber Huber\nAufsichtsrat: Max Mix (Vors.)"
  20. assert_equal(expected_signature, signature)
  21. fixture_files.keys.each do |filepath|
  22. expected_signature_position = fixture_files[filepath][:line]
  23. assert_equal(expected_signature_position, SignatureDetection.find_signature_line(signature, fixture_files[filepath][:content]))
  24. end
  25. end
  26. test 'test case II - sender b' do
  27. fixture_files = {
  28. 'email_signature_detection/client_b_1.txt' => { line: 26 },
  29. 'email_signature_detection/client_b_2.txt' => { line: 4 },
  30. 'email_signature_detection/client_b_3.txt' => { line: 6 },
  31. }
  32. fixture_files_string_list = []
  33. fixture_files.keys.each do |filepath|
  34. file = File.new("#{Rails.root}/test/fixtures/#{filepath}", 'r')
  35. file_content = file.read
  36. fixture_files[filepath][:content] = file_content
  37. fixture_files_string_list.push(file_content)
  38. end
  39. signature = SignatureDetection.find_signature(fixture_files_string_list)
  40. 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\nE-Mail Günter.Lässig@example.com<mailto:Günter.Lässig@example.com>\n\nExample. Zusammen für eine bessere Welt.\n[cid:image001.png@01CE92A6.EC495B60]<http://www.example.com/>\n\n[cid:image002.png@01CE92A6.EC495B60]<http://www.facebook.com/example.com>\n\n[cid:image003.png@01CE92A6.EC495B60]<http://twitter.com/example>\n\n[cid:image004.png@01CE92A6.EC495B60]<https://www.xing.com/companies/example/neu-example>\n\n[cid:image005.jpg@01CE92A6.EC495B60]<http://www.youtube.com/example>\n\n[cid:image006.png@01CE92A6.EC495B60]<http://www.example.com/no_cache/privatkunden/aktuelles/news-presse/newsletter.html>\n\nSitz der Gesellschaft: Max City, Amtsgericht Max City HRB Nr. 1234\nGeschäftsführer: Bob Smith\nVorsitzender des Aufsichtsrats: Alex Marx"
  41. assert_equal(expected_signature, signature)
  42. fixture_files.keys.each do |filepath|
  43. expected_signature_position = fixture_files[filepath][:line]
  44. assert_equal(expected_signature_position, SignatureDetection.find_signature_line(signature, fixture_files[filepath][:content]))
  45. end
  46. end
  47. test 'test case III - sender a - full cycle' do
  48. raw_email_header = "From: Bob.Smith@music.com\nTo: test@zammad.org\nSubject: test\n\n"
  49. # process email I
  50. file = File.open("#{Rails.root}/test/fixtures/email_signature_detection/client_a_1.txt", 'rb')
  51. raw_email = raw_email_header + file.read
  52. ticket1, article1, user1, mail = Channel::EmailParser.new.process({}, raw_email)
  53. assert(ticket1)
  54. assert(article1)
  55. # process email II
  56. file = File.open("#{Rails.root}/test/fixtures/email_signature_detection/client_a_2.txt", 'rb')
  57. raw_email = raw_email_header + file.read
  58. ticket2, article2, user2, mail = Channel::EmailParser.new.process({}, raw_email)
  59. assert(ticket2)
  60. assert(article2)
  61. # process background jobs (user signature detection & article signature detection)
  62. Delayed::Worker.new.work_off
  63. # check if user2 has a signature_detection value
  64. user2 = User.find(user2.id)
  65. assert(user2.preferences[:signature_detection])
  66. # process email III
  67. file = File.open("#{Rails.root}/test/fixtures/email_signature_detection/client_a_3.txt", 'rb')
  68. raw_email = raw_email_header + file.read
  69. ticket3, article3, user3, mail = Channel::EmailParser.new.process({}, raw_email)
  70. assert(ticket3)
  71. assert(article3)
  72. # check if article3 has a signature_detection value
  73. assert_equal(article3.preferences[:signature_detection], 6)
  74. # relbuild all
  75. SignatureDetection.rebuild_all_articles
  76. article1 = Ticket::Article.find(article1.id)
  77. assert_equal(article1.preferences[:signature_detection], 10)
  78. article2 = Ticket::Article.find(article2.id)
  79. assert_equal(article2.preferences[:signature_detection], 20)
  80. article3 = Ticket::Article.find(article3.id)
  81. assert_equal(article3.preferences[:signature_detection], 6)
  82. end
  83. end