diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 62a24f7dd..c55ac143a 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -103,17 +103,6 @@ test:unit:postgresql: - ruby -I test/ test/integration/monitoring_controller_test.rb - rake db:drop -test:integration:autowizard: - stage: test - tags: - - core - script: - - export RAILS_ENV=test - - rake db:create - - rake db:migrate - - ruby -I test/ test/integration/auto_wizard_test.rb - - rake db:drop - test:integration:email_helper: stage: test tags: diff --git a/.travis.yml b/.travis.yml index 89dd94884..a7d7a214a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -71,11 +71,6 @@ script: - rake db:create - rake db:migrate - rake db:seed - - ruby -I test/ test/integration/auto_wizard_test.rb - - rake db:drop - - rake db:create - - rake db:migrate - - rake db:seed - ruby -I test/ test/integration/geo_location_test.rb - ruby -I test/ test/integration/geo_calendar_test.rb - ruby -I test/ test/integration/user_agent_test.rb diff --git a/test/unit/auto_wizard_test.rb b/test/unit/auto_wizard_test.rb new file mode 100644 index 000000000..026466bc6 --- /dev/null +++ b/test/unit/auto_wizard_test.rb @@ -0,0 +1,252 @@ + +require 'test_helper' + +class AutoWizardTest < ActiveSupport::TestCase + + test 'a simple' do + auto_wizard_data = { + Users: [ + { + login: 'master_unit_test01@example.com', + firstname: 'Test Master', + lastname: 'Agent', + email: 'master_unit_test01@example.com', + password: 'test', + }, + { + login: 'agent1_unit_test01@example.com', + firstname: 'Agent 1', + lastname: 'Test', + email: 'agent1_unit_test01@example.com', + password: 'test', + roles: ['Agent'], + } + ], + Groups: [ + { + name: 'some group1', + users: ['master_unit_test01@example.com', 'agent1_unit_test01@example.com'] + } + ], + Settings: [ + { + name: 'developer_mode', + value: true + }, + { + name: 'product_name', + value: 'Zammad UnitTest01 System' + }, + ] + } + assert_equal(false, AutoWizard.enabled?) + auto_wizard_file_write(auto_wizard_data) + assert_equal(true, AutoWizard.enabled?) + AutoWizard.setup + assert_equal(false, AutoWizard.enabled?) + + # check first user roles + auto_wizard_data[:Users][0][:roles] = %w[Agent Admin] + + auto_wizard_data[:Users].each do |local_user| + user = User.find_by(login: local_user[:login]) + assert_equal(local_user[:login], user.login) + assert_equal(local_user[:firstname], user.firstname) + assert_equal(local_user[:lastname], user.lastname) + assert_equal(local_user[:email], user.email) + assert_equal(local_user[:roles].count, user.role_ids.count) + next unless local_user[:roles] + local_user[:roles].each do |local_role_name| + local_role = Role.find_by(name: local_role_name) + assert(user.role_ids.include?(local_role.id)) + end + end + auto_wizard_data[:Groups].each do |local_group| + group = Group.find_by(name: local_group[:name]) + assert_equal(local_group[:name], group.name) + next unless local_group[:users] + local_group[:users].each do |local_user_login| + local_user = User.find_by(login: local_user_login) + assert(group.user_ids.include?(local_user.id)) + end + end + auto_wizard_data[:Settings].each do |local_setting| + setting_value = Setting.get(local_setting[:name]) + assert_equal(local_setting[:value], setting_value) + end + end + + test 'b complex' do + auto_wizard_data = { + Organizations: [ + { + name: 'Auto Wizard Test Org', + shared: false, + } + ], + Users: [ + { + login: 'master_unit_test01@example.com', + firstname: 'Test Master', + lastname: 'Agent', + email: 'master_unit_test01@example.com', + password: 'test', + organization: 'Auto Wizard Test Org', + roles: ['Admin'], + }, + { + login: 'agent1_unit_test01@example.com', + firstname: 'Agent 1', + lastname: 'Test', + email: 'agent1_unit_test01@example.com', + password: 'test', + roles: ['Agent'], + } + ], + Groups: [ + { + name: 'some group1', + users: ['master_unit_test01@example.com', 'agent1_unit_test01@example.com'] + }, + { + name: 'Users', + users: ['master_unit_test01@example.com', 'agent1_unit_test01@example.com'], + signature: 'default', + email_address_id: 1, + note: 'Standard Group/Pool for Tickets.', + } + ], + Settings: [ + { + name: 'developer_mode', + value: false, + }, + { + name: 'product_name', + value: 'Zammad UnitTest02 System' + }, + ], + Permissions: [ + { + name: 'admin.session', + active: false, + }, + { + name: 'admin.session.new', + active: true, + }, + ], + Channels: [ + { + id: 1, + area: 'Email::Account', + group: 'Users', + options: { + inbound: { + adapter: 'imap', + options: { + host: 'mx1.example.com', + user: 'not_existing', + password: 'some_pass', + ssl: true + } + }, + outbound: { + adapter: 'sendmail' + } + }, + preferences: { + online_service_disable: true, + }, + active: true + } + ], + EmailAddresses: [ + { + id: 1, + channel_id: 1, + realname: 'Zammad', + email: 'zammad@localhost', + } + ], + TextModuleLocale: { + Locale: 'de-de', + }, + CalendarSetup: { + Ip: '195.65.29.254', + }, + } + assert_equal(false, AutoWizard.enabled?) + auto_wizard_file_write(auto_wizard_data) + assert_equal(true, AutoWizard.enabled?) + AutoWizard.setup + assert_equal(false, AutoWizard.enabled?) + + assert_not_equal(0, TextModule.count) + assert_equal(1, Calendar.count) + assert_equal('Switzerland', Calendar.first.name) + assert_equal('Europe/Zurich', Calendar.first.timezone) + + auto_wizard_data[:Users].each do |local_user| + user = User.find_by(login: local_user[:login]) + assert_equal(local_user[:login], user.login) + assert_equal(local_user[:firstname], user.firstname) + assert_equal(local_user[:lastname], user.lastname) + assert_equal(local_user[:email], user.email) + next unless local_user[:roles] + assert_equal(local_user[:roles].count, user.role_ids.count) + local_user[:roles].each do |local_role_name| + local_role = Role.find_by(name: local_role_name) + assert(user.role_ids.include?(local_role.id)) + end + end + auto_wizard_data[:Groups].each do |local_group| + group = Group.find_by(name: local_group[:name]) + assert_equal(local_group[:name], group.name) + local_group[:users]&.each do |local_user_login| + local_user = User.find_by(login: local_user_login) + assert(group.user_ids.include?(local_user.id)) + end + if local_group[:signature] + signature = group.signature + assert_equal('default', signature.name) + end + end + auto_wizard_data[:EmailAddresses].each do |local_email_address| + email_address = EmailAddress.find_by(email: local_email_address[:email]) + assert_equal(local_email_address[:email], email_address.email) + assert_equal(local_email_address[:realname], email_address.realname) + channel = email_address.channel + assert_equal(local_email_address[:channel_id], email_address.channel.id) + end + auto_wizard_data[:Channels].each do |local_channel| + channel = Channel.find_by(id: local_channel[:id]) + assert_equal(local_channel[:area], channel.area) + group = channel.group + assert_equal(local_channel[:group], group.name) + end + auto_wizard_data[:Settings].each do |local_setting| + setting_value = Setting.get(local_setting[:name]) + assert_equal(local_setting[:value], setting_value) + end + auto_wizard_data[:Permissions].each do |local_permission| + permission = Permission.find_by(name: local_permission[:name]) + assert_equal(local_permission[:name], permission.name) + assert_equal(local_permission[:active], permission.active) + end + end + + def auto_wizard_file_write(data) + location = Rails.root.join('auto_wizard.json') + file = File.new(location, 'wb') + file.write(data.to_json) + file.close + end + + def auto_wizard_file_exists? + location = Rails.root.join('auto_wizard.json') + return false if File.exist?(location) + true + end + +end