twitter_test.rb 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. # encoding: utf-8
  2. require 'test_helper'
  3. class TwitterTest < ActiveSupport::TestCase
  4. # app config
  5. consumer_key = 'd2zoZBmMXmT7KLPgEHSzpw'
  6. consumer_secret = 'QMUrlyDlqjITCkWdrOgsTxMVVLxr4A4IW3DIgtIg'
  7. # user1: armin_theo (is system and is following marion_bauer)
  8. user1_token = '1405469528-WQ6XHizgrbYasUwjp0I0TUONhftNkrfrpgFLrdc'
  9. user1_token_secret = '0LHChGFlQx9jSxM8tkBsuDOMhbJMSXTL2zKJJO5Xk'
  10. # user2: me_bauer (is following armin_theo)
  11. user2_token = '1406098795-XQTjg1Zj5uVW0C11NNpNA4xopyclRJJoriWis0I'
  12. user2_token_secret = 'T8ph5afeSDjGDA9X1ZBlzEvoSiXfN266ZZUMj5UaY'
  13. # add channel
  14. current = Channel.where( :adapter => 'Twitter2' )
  15. current.each {|r|
  16. r.destroy
  17. }
  18. Channel.create(
  19. :adapter => 'Twitter2',
  20. :area => 'Twitter::Inbound',
  21. :options => {
  22. :consumer_key => consumer_key,
  23. :consumer_secret => consumer_secret,
  24. :oauth_token => user1_token,
  25. :oauth_token_secret => user1_token_secret,
  26. :search => [
  27. {
  28. :item => '#citheo42',
  29. :group => 'Twitter',
  30. },
  31. {
  32. :item => '#citheo24',
  33. :group => 'Users',
  34. },
  35. ],
  36. :mentions => {
  37. :group => 'Twitter',
  38. },
  39. :direct_messages => {
  40. :group => 'Twitter',
  41. }
  42. },
  43. :active => true,
  44. :created_by_id => 1,
  45. :updated_by_id => 1,
  46. )
  47. test 'new outbound and reply' do
  48. user = User.find(2)
  49. group = Group.where( :name => 'Twitter' ).first
  50. state = Ticket::State.where( :name => 'new' ).first
  51. priority = Ticket::Priority.where( :name => '2 normal' ).first
  52. hash = '#citheo42' + rand(9999).to_s
  53. text = 'Today the weather is really nice... ' + hash
  54. ticket = Ticket.create(
  55. :group_id => group.id,
  56. :customer_id => user.id,
  57. :title => text[0,40],
  58. :ticket_state_id => state.id,
  59. :ticket_priority_id => priority.id,
  60. :updated_by_id => 1,
  61. :created_by_id => 1,
  62. )
  63. assert( ticket, "outbound ticket created" )
  64. article = Ticket::Article.create(
  65. :ticket_id => ticket.id,
  66. :ticket_article_type_id => Ticket::Article::Type.where( :name => 'twitter status' ).first.id,
  67. :ticket_article_sender_id => Ticket::Article::Sender.where( :name => 'Agent' ).first.id,
  68. :body => text,
  69. # :from => sender.name,
  70. # :to => to,
  71. # :message_id => tweet.id,
  72. :internal => false,
  73. :updated_by_id => 1,
  74. :created_by_id => 1,
  75. )
  76. assert( article, "outbound article created" )
  77. assert_equal( article.ticket.articles.count, 1 )
  78. sleep 10
  79. # reply by me_bauer
  80. client = Twitter::Client.new(
  81. :consumer_key => consumer_key,
  82. :consumer_secret => consumer_secret,
  83. :oauth_token => user2_token,
  84. :oauth_token_secret => user2_token_secret
  85. )
  86. tweets = client.search( hash )
  87. tweets.results.map do |tweet|
  88. assert_equal( tweet.id, article.message_id )
  89. end
  90. reply_hash = '#weather' + rand(9999).to_s
  91. reply_text = '@armin_theo on my side the weather is also nice! ' + reply_hash
  92. tweet = client.update(
  93. reply_text,
  94. {
  95. :in_reply_to_status_id => article.message_id
  96. }
  97. )
  98. sleep 10
  99. # fetch check system account
  100. Channel.fetch
  101. # check if follow up article has been created
  102. assert_equal( article.ticket.articles.count, 2 )
  103. reply_article = article.ticket.articles.last
  104. assert_equal( reply_article.body, reply_text )
  105. end
  106. test 'new by direct message inbound' do
  107. # cleanup direct messages of system
  108. client = Twitter::Client.new(
  109. :consumer_key => consumer_key,
  110. :consumer_secret => consumer_secret,
  111. :oauth_token => user1_token,
  112. :oauth_token_secret => user1_token_secret
  113. )
  114. dms = client.direct_messages( :count => 200 )
  115. dms.each {|dm|
  116. client.direct_message_destroy(dm.id)
  117. }
  118. # direct message to @armin_theo
  119. client = Twitter::Client.new(
  120. :consumer_key => consumer_key,
  121. :consumer_secret => consumer_secret,
  122. :oauth_token => user2_token,
  123. :oauth_token_secret => user2_token_secret
  124. )
  125. dms = client.direct_messages( :count => 200 )
  126. dms.each {|dm|
  127. client.direct_message_destroy(dm.id)
  128. }
  129. sleep 5
  130. hash = '#citheo44' + rand(9999).to_s
  131. text = 'How about the details? ' + hash
  132. dm = client.direct_message_create(
  133. 'armin_theo',
  134. text,
  135. )
  136. assert( dm, "dm with ##{hash} created" )
  137. sleep 10
  138. # fetch check system account
  139. Channel.fetch
  140. # check if ticket and article has been created
  141. article = Ticket::Article.where( :message_id => dm.id ).last
  142. assert( article, "inbound article created" )
  143. # ticket = Ticket.find( article.ticket.id )
  144. ticket = article.ticket
  145. assert( ticket, "ticket of inbound article exists" )
  146. assert( ticket.articles, "ticket.articles exists" )
  147. article_count = ticket.articles.count
  148. assert( article_count )
  149. # assert_equal( ticket.ticket_state.name, 'new' )
  150. # reply via ticket
  151. outbound_article = Ticket::Article.create(
  152. :ticket_id => ticket.id,
  153. :ticket_article_type_id => Ticket::Article::Type.where( :name => 'twitter direct-message' ).first.id,
  154. :ticket_article_sender_id => Ticket::Article::Sender.where( :name => 'Agent' ).first.id,
  155. :body => text,
  156. # :from => sender.name,
  157. :to => 'me_bauer',
  158. :internal => false,
  159. :updated_by_id => 1,
  160. :created_by_id => 1,
  161. )
  162. assert( outbound_article, "outbound article created" )
  163. assert_equal( outbound_article.ticket.articles.count, article_count + 1 )
  164. sleep 10
  165. end
  166. end