123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399 |
- # encoding: utf-8
- require 'test_helper'
- class ActivityStreamTest < ActiveSupport::TestCase
- role = Role.lookup(name: 'Admin')
- group = Group.lookup(name: 'Users')
- admin_user = User.create_or_update(
- login: 'admin',
- firstname: 'Bob',
- lastname: 'Smith',
- email: 'bob@example.com',
- password: 'some_pass',
- active: true,
- role_ids: [role.id],
- group_ids: [group.id],
- updated_by_id: 1,
- created_by_id: 1
- )
- current_user = User.lookup(email: 'nicole.braun@zammad.org')
- activity_record_delay = if ENV['ZAMMAD_ACTIVITY_RECORD_DELAY']
- ENV['ZAMMAD_ACTIVITY_RECORD_DELAY'].to_i.seconds
- else
- 90.seconds
- end
- test 'ticket+user' do
- tests = [
- # test 1
- {
- create: {
- ticket: {
- group_id: Group.lookup(name: 'Users').id,
- customer_id: current_user.id,
- owner_id: User.lookup(login: '-').id,
- title: 'Unit Test 1 (äöüß)!',
- state_id: Ticket::State.lookup(name: 'new').id,
- priority_id: Ticket::Priority.lookup(name: '2 normal').id,
- updated_by_id: current_user.id,
- created_by_id: current_user.id,
- },
- article: {
- updated_by_id: current_user.id,
- created_by_id: current_user.id,
- type_id: Ticket::Article::Type.lookup(name: 'phone').id,
- sender_id: Ticket::Article::Sender.lookup(name: 'Customer').id,
- from: 'Unit Test <unittest@example.com>',
- body: 'Unit Test 123',
- internal: false,
- },
- },
- update: {
- ticket: {
- title: 'Unit Test 1 (äöüß) - update!',
- state_id: Ticket::State.lookup(name: 'open').id,
- priority_id: Ticket::Priority.lookup(name: '1 low').id,
- },
- },
- update2: {
- ticket: {
- title: 'Unit Test 2 (äöüß) - update!',
- priority_id: Ticket::Priority.lookup(name: '2 normal').id,
- },
- },
- check: [
- {
- result: true,
- object: 'Ticket',
- type: 'update',
- },
- {
- result: true,
- object: 'Ticket::Article',
- type: 'create',
- },
- {
- result: true,
- object: 'Ticket',
- type: 'create',
- },
- {
- result: false,
- object: 'User',
- type: 'update',
- o_id: current_user.id,
- },
- ]
- },
- ]
- tickets = []
- tests.each { |test|
- ticket = Ticket.create(test[:create][:ticket])
- test[:check][0][:o_id] = ticket.id
- test[:check][2][:o_id] = ticket.id
- test[:check][2][:created_at] = ticket.created_at
- test[:check][2][:created_by_id] = current_user.id
- sleep 2
- test[:create][:article][:ticket_id] = ticket.id
- article = Ticket::Article.create(test[:create][:article])
- test[:check][1][:o_id] = article.id
- test[:check][1][:created_at] = article.created_at
- test[:check][1][:created_by_id] = current_user.id
- assert_equal(ticket.class.to_s, 'Ticket')
- assert_equal(article.class.to_s, 'Ticket::Article')
- # update ticket
- if test[:update][:ticket]
- ticket.update_attributes(test[:update][:ticket])
- # check updated user
- test[:check][3][:o_id] = current_user.id
- test[:check][3][:created_at] = ticket.created_at
- test[:check][3][:created_by_id] = current_user.id
- end
- if test[:update2][:ticket]
- ticket = Ticket.find(ticket.id)
- ticket.update_attributes(test[:update2][:ticket])
- end
- if test[:update][:article]
- article.update_attributes(test[:update][:article])
- end
- sleep activity_record_delay + 1
- if test[:update][:ticket]
- ticket.update_attributes(test[:update][:ticket])
- end
- if test[:update2][:ticket]
- ticket.update_attributes(test[:update2][:ticket])
- end
- # remember ticket
- tickets.push ticket
- # check activity_stream
- activity_stream_check(admin_user.activity_stream(3), test[:check])
- }
- # delete tickets
- tickets.each { |ticket|
- ticket_id = ticket.id
- ticket.destroy
- found = Ticket.where(id: ticket_id).first
- assert_not(found, 'Ticket destroyed')
- }
- end
- test 'organization' do
- tests = [
- # test 1
- {
- create: {
- organization: {
- name: 'some name',
- updated_by_id: current_user.id,
- created_by_id: current_user.id,
- },
- },
- update1: {
- organization: {
- name: 'some name (äöüß)',
- },
- },
- update2: {
- organization: {
- name: 'some name 2 (äöüß)',
- },
- },
- check: [
- {
- result: true,
- object: 'Organization',
- type: 'update',
- },
- {
- result: true,
- object: 'Organization',
- type: 'create',
- },
- ]
- },
- ]
- organizations = []
- tests.each { |test|
- organization = Organization.create(test[:create][:organization])
- test[:check][0][:o_id] = organization.id
- test[:check][0][:created_at] = organization.created_at
- test[:check][0][:created_by_id] = current_user.id
- sleep 2
- assert_equal(organization.class.to_s, 'Organization')
- if test[:update1][:organization]
- organization.update_attributes(test[:update1][:organization])
- test[:check][1][:o_id] = organization.id
- test[:check][1][:updated_at] = organization.updated_at
- test[:check][1][:created_by_id] = current_user.id
- sleep activity_record_delay - 1
- end
- if test[:update2][:organization]
- organization.update_attributes(test[:update2][:organization])
- end
- # remember organization
- organizations.push organization
- # check activity_stream
- activity_stream_check(admin_user.activity_stream(2), test[:check])
- }
- # delete tickets
- organizations.each { |organization|
- organization_id = organization.id
- organization.destroy
- found = Organization.where(id: organization_id).first
- assert( !found, 'Organization destroyed')
- }
- end
- test 'user with update check false' do
- tests = [
- # test 1
- {
- create: {
- user: {
- login: 'someemail@example.com',
- email: 'Bob Smith II <someemail@example.com>',
- updated_by_id: current_user.id,
- created_by_id: current_user.id,
- },
- },
- update1: {
- user: {
- firstname: 'Bob U',
- lastname: 'Smith U',
- },
- },
- check: [
- {
- result: true,
- object: 'User',
- type: 'create',
- },
- {
- result: false,
- object: 'User',
- type: 'update',
- },
- ]
- },
- ]
- users = []
- tests.each { |test|
- user = User.create(test[:create][:user])
- test[:check][0][:o_id] = user.id
- test[:check][0][:created_at] = user.created_at
- test[:check][0][:created_by_id] = current_user.id
- assert_equal(user.class.to_s, 'User')
- if test[:update1][:user]
- user.update_attributes(test[:update1][:user])
- test[:check][1][:o_id] = user.id
- test[:check][1][:updated_at] = user.updated_at
- test[:check][1][:created_by_id] = current_user.id
- end
- # remember organization
- users.push user
- # check activity_stream
- activity_stream_check(admin_user.activity_stream(3), test[:check])
- }
- # delete tickets
- users.each { |user|
- user_id = user.id
- user.destroy
- found = User.where( id: user_id ).first
- assert_not(found, 'User destroyed')
- }
- end
- test 'user with update check true' do
- tests = [
- # test 1
- {
- create: {
- user: {
- login: 'someemail@example.com',
- email: 'Bob Smith II <someemail@example.com>',
- updated_by_id: current_user.id,
- created_by_id: current_user.id,
- },
- },
- update1: {
- user: {
- firstname: 'Bob U',
- lastname: 'Smith U',
- },
- },
- update2: {
- user: {
- firstname: 'Bob',
- lastname: 'Smith',
- },
- },
- check: [
- {
- result: true,
- object: 'User',
- type: 'update',
- },
- {
- result: true,
- object: 'User',
- type: 'create',
- },
- ]
- },
- ]
- users = []
- tests.each { |test|
- user = User.create(test[:create][:user])
- test[:check][0][:o_id] = user.id
- test[:check][0][:created_at] = user.created_at
- test[:check][0][:created_by_id] = current_user.id
- assert_equal(user.class.to_s, 'User')
- if test[:update1][:user]
- user.update_attributes(test[:update1][:user])
- test[:check][1][:o_id] = user.id
- test[:check][1][:updated_at] = user.updated_at
- test[:check][1][:created_by_id] = current_user.id
- end
- # to verify update which need to be logged
- sleep activity_record_delay + 1
- if test[:update2][:user]
- user.update_attributes(test[:update2][:user])
- end
- # remember organization
- users.push user
- # check activity_stream
- activity_stream_check(admin_user.activity_stream(2), test[:check])
- }
- # delete tickets
- users.each { |user|
- user_id = user.id
- user.destroy
- found = User.where(id: user_id).first
- assert(!found, 'User destroyed')
- }
- end
- def activity_stream_check(activity_stream_list, checks)
- #activity_stream_list = activity_stream_list.reverse
- #puts 'AS ' + activity_stream_list.inspect
- check_count = 0
- checks.each { |check_item|
- check_count += 1
- #puts '+++++++++++'
- #puts check_item.inspect
- check_list = 0
- activity_stream_list.each { |item|
- check_list += 1
- next if check_list != check_count
- #next if match
- #puts '--------'
- #puts item.inspect
- #puts check_item.inspect
- if check_item[:result]
- assert_equal(check_item[:object], item['object'])
- assert_equal(check_item[:type], item['type'])
- assert_equal(check_item[:o_id], item['o_id'])
- elsif check_item[:object] == item['object'] && check_item[:type] == item['type'] && check_item[:o_id] == item['o_id']
- assert(false, "entry should not exist #{item['object']}/#{item['type']}/#{item['o_id']}")
- end
- }
- }
- end
- end
|