123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221 |
- require 'test_helper'
- class SessionCollectionsTest < ActiveSupport::TestCase
- test 'a collections' do
- UserInfo.current_user_id = 1
- # create users
- roles = Role.where(name: %w[Agent Admin])
- groups = Group.all
- agent1 = User.create_or_update(
- login: 'session-collections-agent-1',
- firstname: 'Session',
- lastname: 'collections 1',
- email: 'session-collections-agent-1@example.com',
- password: 'agentpw',
- organization_id: nil,
- active: true,
- roles: roles,
- groups: groups,
- )
- agent1.save!
- roles = Role.where(name: ['Agent'])
- groups = Group.all
- agent2 = User.create_or_update(
- login: 'session-collections-agent-2',
- firstname: 'Session',
- lastname: 'collections 2',
- email: 'session-collections-agent-2@example.com',
- password: 'agentpw',
- organization_id: nil,
- active: true,
- roles: roles,
- groups: groups,
- )
- agent2.save!
- roles = Role.where(name: ['Customer'])
- customer1 = User.create_or_update(
- login: 'session-collections-customer-1',
- firstname: 'Session',
- lastname: 'collections 2',
- email: 'session-collections-customer-1@example.com',
- password: 'customerpw',
- organization_id: nil,
- active: true,
- roles: roles,
- )
- customer1.save!
- collection_client1 = Sessions::Backend::Collections.new(agent1, {}, nil, 'aaa-1', 2)
- collection_client2 = Sessions::Backend::Collections.new(agent2, {}, nil, 'bbb-2', 2)
- collection_client3 = Sessions::Backend::Collections.new(customer1, {}, nil, 'ccc-2', 2)
- # get whole collections
- result1 = collection_client1.push
- assert(result1, 'check collections')
- assert(check_if_collection_exists(result1, :Group), 'check collections - after init')
- assert(check_if_collection_exists(result1, :Role), 'check collections - after init')
- assert(check_if_collection_exists(result1, :Signature), 'check collections - after init')
- assert(check_if_collection_exists(result1, :EmailAddress), 'check collections - after init')
- travel 1.second
- result2 = collection_client2.push
- assert(result2, 'check collections')
- assert(check_if_collection_exists(result2, :Group), 'check collections - after init')
- assert(check_if_collection_exists(result2, :Role), 'check collections - after init')
- assert(check_if_collection_exists(result2, :Signature), 'check collections - after init')
- assert(check_if_collection_exists(result2, :EmailAddress), 'check collections - after init')
- assert_equal(result1.length, result2.length, 'check collections')
- assert_equal(result1[0], result2[0], 'check collections')
- assert_equal(result1[1], result2[1], 'check collections')
- assert_equal(result1[2], result2[2], 'check collections')
- assert_equal(result1[3], result2[3], 'check collections')
- assert_equal(result1[4], result2[4], 'check collections')
- assert_equal(result1[5], result2[5], 'check collections')
- assert_equal(result1[6], result2[6], 'check collections')
- assert_equal(result1[7], result2[7], 'check collections')
- assert_equal(result1[8], result2[8], 'check collections')
- assert_equal(result1[9], result2[9], 'check collections')
- assert_equal(result1, result2, 'check collections')
- result3 = collection_client3.push
- assert(result3, 'check collections')
- assert(check_if_collection_exists(result3, :Group), 'check collections - after init')
- assert(check_if_collection_exists(result3, :Role), 'check collections - after init')
- assert_not(check_if_collection_exists(result3, :Signature), 'check collections - after init')
- assert_not(check_if_collection_exists(result3, :EmailAddress), 'check collections - after init')
- # next check should be empty
- result1 = collection_client1.push
- assert(result1.blank?, 'check collections - recall')
- travel 0.4.seconds
- result2 = collection_client2.push
- assert(result2.blank?, 'check collections - recall')
- result3 = collection_client3.push
- assert(result3.blank?, 'check collections - recall')
- # change collection
- group = Group.first
- travel 6.seconds
- group.touch
- travel 6.seconds
- # get whole collections
- result1 = collection_client1.push
- assert(result1, 'check collections - after touch')
- assert(check_if_collection_exists(result1, :Group), 'check collections - after touch')
- travel 0.1.seconds
- result2 = collection_client2.push
- assert(result2, 'check collections - after touch')
- assert(check_if_collection_exists(result2, :Group), 'check collections - after touch')
- result3 = collection_client3.push
- assert(result3, 'check collections - after touch')
- assert(check_if_collection_exists(result3, :Group), 'check collections - after touch')
- # next check should be empty
- travel 0.5.seconds
- result1 = collection_client1.push
- assert(result1.blank?, 'check collections - recall')
- result2 = collection_client2.push
- assert(result2.blank?, 'check collections - recall')
- result3 = collection_client3.push
- assert(result3.blank?, 'check collections - recall')
- travel 10.seconds
- Sessions.destroy_idle_sessions(3)
- travel_back
- end
- def check_if_collection_exists(results, collection, attributes = nil)
- results.each do |result|
- next if !result
- next if !result[:collection]
- next if !result[:collection][collection]
- # check just if collection exists
- return true if !attributes
- # check if objetc with attributes in collection exists
- result[:collection][collection].each do |item|
- match_all = true
- attributes.each do |key, value|
- # sort array, database result maybe unsorted
- item_attributes = item[ key.to_s ]
- if item[ key.to_s ].class == Array
- item_attributes.sort!
- end
- if value.class == Array
- value.sort!
- end
- # compare values
- if item_attributes != value
- #p "FAILED: #{key} -> #{item_attributes.inspect} vs. #{value.inspect}"
- match_all = false
- end
- end
- return true if match_all
- end
- end
- nil
- end
- test 'b assets' do
- roles = Role.where(name: %w[Agent Admin])
- groups = Group.all.order(id: :asc)
- UserInfo.current_user_id = 2
- agent1 = User.create_or_update(
- login: "sessions-assets-1-#{rand(99_999)}",
- firstname: 'Session',
- lastname: "sessions assets #{rand(99_999)}",
- email: 'sessions-assets1@example.com',
- password: 'agentpw',
- active: true,
- roles: roles,
- groups: groups,
- )
- assert(agent1.save!, 'create/update agent1')
- assets = {}
- client1 = Sessions::Backend::Collections::Group.new(agent1, assets, false, '123-1', 4)
- data = client1.push
- assert_equal(data[:collection][:Group][0]['id'], groups[0].id)
- assert(data[:assets][:Group][groups.first.id])
- travel 10.seconds
- client1 = Sessions::Backend::Collections::Group.new(agent1, assets, false, '123-1', 4)
- data = client1.push
- assert_equal(data[:collection][:Group][0]['id'], groups[0].id)
- assert(data[:assets])
- assert_not(data[:assets][:Group])
- travel 125.minutes
- client1 = Sessions::Backend::Collections::Group.new(agent1, assets, false, '123-1', 4)
- data = client1.push
- assert_equal(data[:collection][:Group][0]['id'], groups[0].id)
- assert(data[:assets][:Group][groups.first.id])
- travel 2.minutes
- client1 = Sessions::Backend::Collections::Group.new(agent1, assets, false, '123-1', 4)
- data = client1.push
- assert_equal(data[:collection][:Group][0]['id'], groups[0].id)
- assert_nil(data[:assets][:Group])
- travel 10.seconds
- Sessions.destroy_idle_sessions(3)
- travel_back
- end
- end
|