Merge branch 'develop' of github.com:martini/zammad into develop

This commit is contained in:
Martin Edenhofer 2015-07-04 13:54:05 +02:00
commit 56d3c66c9e
76 changed files with 325 additions and 358 deletions

View file

@ -184,6 +184,10 @@ Metrics/BlockNesting:
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#three-is-the-number-thou-shalt-count' StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#three-is-the-number-thou-shalt-count'
Enabled: false Enabled: false
Metrics/ModuleLength:
Description: 'Avoid modules longer than 100 lines of code.'
Enabled: false
# TODO # TODO
Style/Documentation: Style/Documentation:

View file

@ -25,7 +25,7 @@ class App.TicketZoom extends App.Controller
@sidebarState = {} @sidebarState = {}
@ticketLastAttributes = {} @ticketLastAttributes = {}
# if we are in init task startup, ognore overview_dd # if we are in init task startup, ignore overview_id
if !params.init if !params.init
@overview_id = params.overview_id @overview_id = params.overview_id
else else

View file

@ -44,24 +44,24 @@ Example:
{ {
"item":"#otrs", "item":"#otrs",
"type": "mixed", # optional, possible 'mixed' (default), 'recent', 'popular' "type": "mixed", # optional, possible 'mixed' (default), 'recent', 'popular'
"group": "OTRS", "group_id:": 1,
"limit": 1, # optional "limit": 1, # optional
}, },
{ {
"item":"#zombie23", "item":"#zombie23",
"group": "Zombie Apocalypse Early Warning System", "group_id:": 2,
}, },
{ {
"item":"#otterhub", "item":"#otterhub",
"group": "Community", "group_id:": 3,
} }
], ],
"mentions" { "mentions" {
"group": "Twitter", "group_id:": 4,
"limit": 100, # optional "limit": 100, # optional
}, },
"direct_messages": { "direct_messages": {
"group": "Twitter", "group_id:": 4,
"limit": 1, # optional "limit": 1, # optional
} }
} }

View file

@ -673,7 +673,7 @@ curl http://localhost/api/v1/getting_started -v -u #{login}:#{password}
message: e.to_s, message: e.to_s,
subject: subject, subject: subject,
} }
return # rubocop:disable Lint/NonLocalExitFromIterator return
end end
next if !found next if !found
@ -735,7 +735,7 @@ curl http://localhost/api/v1/getting_started -v -u #{login}:#{password}
render json: { render json: {
result: 'ok', result: 'ok',
} }
return # rubocop:disable Lint/NonLocalExitFromIterator return
} }
# check delivery for 30 sek. # check delivery for 30 sek.

View file

@ -338,7 +338,6 @@ class UsersController < ApplicationController
user_all = User.where('id != 1').order('created_at DESC').limit( params[:limit] || 20 ) user_all = User.where('id != 1').order('created_at DESC').limit( params[:limit] || 20 )
end end
# build result list # build result list
if !params[:full] if !params[:full]
users = [] users = []

View file

@ -2,7 +2,7 @@
module ApplicationHelper module ApplicationHelper
def inline_svg(path) def inline_svg(path)
File.open("public/assets/images/#{path}", "rb") do |file| File.open("public/assets/images/#{path}", 'rb') do |file|
raw file.read raw file.read
end end
end end

View file

@ -261,11 +261,9 @@ returns
end end
# delete login caches # delete login caches
if self[:login] return if !self[:login]
key = "#{self.class}::#{login}"
Cache.delete(key)
end
Cache.delete("#{self.class}::#{login}")
end end
def self.cache_set(data_id, data) def self.cache_set(data_id, data)

View file

@ -1,5 +1,4 @@
# Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/ # Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/
# rubocop:disable ClassAndModuleChildren
module ApplicationModel::ActivityStreamBase module ApplicationModel::ActivityStreamBase
=begin =begin

View file

@ -1,5 +1,4 @@
# Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/ #36 Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/
# rubocop:disable ClassAndModuleChildren
module ApplicationModel::Assets module ApplicationModel::Assets
=begin =begin
@ -32,7 +31,7 @@ returns
return data if !self['created_by_id'] && !self['updated_by_id'] return data if !self['created_by_id'] && !self['updated_by_id']
%w(created_by_id updated_by_id).each {|local_user_id| %w(created_by_id updated_by_id).each {|local_user_id|
next if !self[ local_user_id ] next if !self[ local_user_id ]
next data[ User.to_app_model ] && data[ User.to_app_model ][ self[ local_user_id ] ] next if data[ User.to_app_model ] && data[ User.to_app_model ][ self[ local_user_id ] ]
user = User.lookup( id: self[ local_user_id ] ) user = User.lookup( id: self[ local_user_id ] )
data = user.assets( data ) data = user.assets( data )
} }

View file

@ -1,5 +1,4 @@
# Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/ # Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/
# rubocop:disable ClassAndModuleChildren
class ApplicationModel::BackgroundJobSearchIndex class ApplicationModel::BackgroundJobSearchIndex
def initialize(object, o_id) def initialize(object, o_id)
@object = object @object = object

View file

@ -1,5 +1,4 @@
# Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/ # Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/
# rubocop:disable ClassAndModuleChildren
module ApplicationModel::HistoryLogBase module ApplicationModel::HistoryLogBase
=begin =begin

View file

@ -1,5 +1,4 @@
# Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/ # Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/
# rubocop:disable ClassAndModuleChildren
module ApplicationModel::SearchIndexBase module ApplicationModel::SearchIndexBase
=begin =begin

View file

@ -8,7 +8,7 @@ class Channel::Twitter
@tweet = Tweet.new( @channel[:options][:auth] ) @tweet = Tweet.new( @channel[:options][:auth] )
@sync = @channel[:options][:sync] @sync = @channel[:options][:sync]
Rails.logger.debug "twitter fetch started" Rails.logger.debug 'twitter fetch started'
fetch_search fetch_search
fetch_mentions fetch_mentions
@ -55,7 +55,7 @@ class Channel::Twitter
break if search[:limit] && search[:limit] <= counter break if search[:limit] && search[:limit] <= counter
break if Ticket::Article.find_by( message_id: tweet.id.to_s ) break if Ticket::Article.find_by( message_id: tweet.id.to_s )
@tweet.to_group( tweet, search[:group] ) @tweet.to_group( tweet, search[:group_id] )
counter += 1 counter += 1
} }
@ -75,7 +75,7 @@ class Channel::Twitter
break if @sync[:mentions][:limit] && @sync[:mentions][:limit] <= counter break if @sync[:mentions][:limit] && @sync[:mentions][:limit] <= counter
break if Ticket::Article.find_by( message_id: tweet.id.to_s ) break if Ticket::Article.find_by( message_id: tweet.id.to_s )
@tweet.to_group( tweet, @sync[:mentions][:group] ) @tweet.to_group( tweet, @sync[:mentions][:group_id] )
counter += 1 counter += 1
} }
@ -94,7 +94,7 @@ class Channel::Twitter
break if @sync[:direct_messages][:limit] && @sync[:direct_messages][:limit] <= counter break if @sync[:direct_messages][:limit] && @sync[:direct_messages][:limit] <= counter
break if Ticket::Article.find_by( message_id: tweet.id.to_s ) break if Ticket::Article.find_by( message_id: tweet.id.to_s )
@tweet.to_group( tweet, @sync[:direct_messages][:group] ) @tweet.to_group( tweet, @sync[:direct_messages][:group_id] )
counter += 1 counter += 1
} }

View file

@ -17,7 +17,6 @@ class Organization < ApplicationModel
notify_clients_support notify_clients_support
latest_change_support latest_change_support
private private
def cache_delete def cache_delete

View file

@ -82,7 +82,6 @@ class Scheduler < ApplicationModel
end end
def self._start_job( job, try_count = 0, try_run_time = Time.zone.now ) def self._start_job( job, try_count = 0, try_run_time = Time.zone.now )
begin
job.last_run = Time.zone.now job.last_run = Time.zone.now
job.pid = Thread.current.object_id job.pid = Thread.current.object_id
job.save job.save
@ -114,7 +113,6 @@ class Scheduler < ApplicationModel
raise "STOP thread for #{job.method} after #{try_count} tries" raise "STOP thread for #{job.method} after #{try_count} tries"
end end
end end
end
def self.worker def self.worker
wait = 8 wait = 8

View file

@ -1,6 +1,4 @@
# Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/ # Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/
# rubocop:disable ClassAndModuleChildren
class Store::Provider::File class Store::Provider::File
# write file to fs # write file to fs

View file

@ -1,5 +1,4 @@
# Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/ # Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/
# rubocop:disable ClassAndModuleChildren
module Ticket::ActivityStreamLog module Ticket::ActivityStreamLog
=begin =begin

View file

@ -1,5 +1,4 @@
# Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/ # Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/
# rubocop:disable ClassAndModuleChildren
class Ticket::Article < ApplicationModel class Ticket::Article < ApplicationModel
load 'ticket/article/assets.rb' load 'ticket/article/assets.rb'
include Ticket::Article::Assets include Ticket::Article::Assets

View file

@ -1,5 +1,4 @@
# Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/ # Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/
# rubocop:disable ClassAndModuleChildren
module Ticket::Article::ActivityStreamLog module Ticket::Article::ActivityStreamLog
=begin =begin

View file

@ -1,5 +1,4 @@
# Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/ # Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/
# rubocop:disable ClassAndModuleChildren
module Ticket::Assets module Ticket::Assets
=begin =begin

View file

@ -1,4 +1,3 @@
# Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/ # Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/
# rubocop:disable ClassAndModuleChildren
class Ticket::Counter < ApplicationModel class Ticket::Counter < ApplicationModel
end end

View file

@ -1,5 +1,4 @@
# Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/ # Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/
# rubocop:disable ClassAndModuleChildren
module Ticket::Escalation module Ticket::Escalation
=begin =begin

View file

@ -1,5 +1,4 @@
# Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/ # Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/
# rubocop:disable ClassAndModuleChildren
module Ticket::HistoryLog module Ticket::HistoryLog
=begin =begin

View file

@ -1,5 +1,4 @@
# Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/ # Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/
# rubocop:disable ClassAndModuleChildren
module Ticket::Number::Date module Ticket::Number::Date
module_function module_function

View file

@ -1,5 +1,4 @@
# Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/ # Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/
# rubocop:disable ClassAndModuleChildren
module Ticket::Overviews module Ticket::Overviews
=begin =begin

View file

@ -1,5 +1,4 @@
# Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/ # Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/
# rubocop:disable ClassAndModuleChildren
module Ticket::Permission module Ticket::Permission
=begin =begin

View file

@ -1,5 +1,4 @@
# Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/ # Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/
# rubocop:disable ClassAndModuleChildren
class Ticket::Priority < ApplicationModel class Ticket::Priority < ApplicationModel
self.table_name = 'ticket_priorities' self.table_name = 'ticket_priorities'
validates :name, presence: true validates :name, presence: true

View file

@ -1,5 +1,4 @@
# Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/ # Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/
# rubocop:disable ClassAndModuleChildren
module Ticket::ScreenOptions module Ticket::ScreenOptions
=begin =begin

View file

@ -1,5 +1,4 @@
# Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/ # Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/
# rubocop:disable ClassAndModuleChildren
module Ticket::Search module Ticket::Search
=begin =begin

View file

@ -1,5 +1,4 @@
# Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/ # Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/
# rubocop:disable ClassAndModuleChildren
module Ticket::SearchIndex module Ticket::SearchIndex
=begin =begin

View file

@ -1,5 +1,4 @@
# Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/ # Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/
# rubocop:disable ClassAndModuleChildren
class Ticket::State < ApplicationModel class Ticket::State < ApplicationModel
belongs_to :state_type, class_name: 'Ticket::StateType' belongs_to :state_type, class_name: 'Ticket::StateType'
validates :name, presence: true validates :name, presence: true

View file

@ -1,5 +1,4 @@
# Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/ # Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/
# rubocop:disable ClassAndModuleChildren
class Ticket::StateType < ApplicationModel class Ticket::StateType < ApplicationModel
has_many :states, class_name: 'Ticket::State' has_many :states, class_name: 'Ticket::State'
validates :name, presence: true validates :name, presence: true

View file

@ -1,5 +1,4 @@
# Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/ # Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/
# rubocop:disable ClassAndModuleChildren
module Ticket::Subject module Ticket::Subject
=begin =begin

View file

@ -27,9 +27,9 @@ returns
dir = "#{Rails.root}/app/models/" dir = "#{Rails.root}/app/models/"
Dir.glob( "#{dir}**/*.rb" ) do |entry| Dir.glob( "#{dir}**/*.rb" ) do |entry|
next if entry =~ /application_model/i next if entry =~ /application_model/i
next if entry =~ /channel\//i next if entry =~ %r{channel/}i
next if entry =~ /observer\//i next if entry =~ %r{observer/}i
next if entry =~ /store\/provider\//i next if entry =~ %r{store/provider/}i
entry.gsub!(dir, '') entry.gsub!(dir, '')
entry = entry.to_classname entry = entry.to_classname
model_class = load_adapter(entry) model_class = load_adapter(entry)
@ -81,37 +81,43 @@ returns
list.each {|model_class, model_attributes| list.each {|model_class, model_attributes|
references[:model][model_class.to_s] = 0 references[:model][model_class.to_s] = 0
next if !model_attributes[:attributes] next if !model_attributes[:attributes]
['created_by_id', 'updated_by_id'].each {|item| %w(created_by_id updated_by_id).each {|item|
if model_attributes[:attributes].include?(item)
next if !model_attributes[:attributes].include?(item)
count = model_class.where("#{item} = ?", object_id).count count = model_class.where("#{item} = ?", object_id).count
next if count == 0 next if count == 0
Rails.logger.debug "FOUND (by id) #{model_class}->#{item} #{count}!" Rails.logger.debug "FOUND (by id) #{model_class}->#{item} #{count}!"
references[:model][model_class.to_s] += count references[:model][model_class.to_s] += count
end
} }
} }
# find relations via reflections # find relations via reflections
list.each {|model_class, model_attributes| list.each {|model_class, model_attributes|
next if !model_attributes[:reflections] next if !model_attributes[:reflections]
model_attributes[:reflections].each{|reflection_key, reflection_value| model_attributes[:reflections].each {|_reflection_key, reflection_value|
next if reflection_value.macro != :belongs_to next if reflection_value.macro != :belongs_to
if reflection_value.options[:class_name] == object_name if reflection_value.options[:class_name] == object_name
count = model_class.where("#{reflection_value.name}_id = ?", object_id).count count = model_class.where("#{reflection_value.name}_id = ?", object_id).count
next if count == 0 next if count == 0
Rails.logger.debug "FOUND (by ref without class) #{model_class}->#{reflection_value.name} #{count}!" Rails.logger.debug "FOUND (by ref without class) #{model_class}->#{reflection_value.name} #{count}!"
references[:model][model_class.to_s] += count references[:model][model_class.to_s] += count
end end
if !reflection_value.options[:class_name] && reflection_value.name == object_name.downcase.to_sym
next if reflection_value.options[:class_name]
next if reflection_value.name != object_name.downcase.to_sym
count = model_class.where("#{reflection_value.name}_id = ?", object_id).count count = model_class.where("#{reflection_value.name}_id = ?", object_id).count
next if count == 0 next if count == 0
Rails.logger.debug "FOUND (by ref with class) #{model_class}->#{reflection_value.name} #{count}!" Rails.logger.debug "FOUND (by ref with class) #{model_class}->#{reflection_value.name} #{count}!"
references[:model][model_class.to_s] += count references[:model][model_class.to_s] += count
end
} }
} }
references[:model].each {|k, v| references[:model].each {|_k, v|
next if v == 0 next if v == 0
references[:total] += v references[:total] += v
} }

View file

@ -40,12 +40,11 @@ class Tweet
Rails.logger.error "Twitter (#{tweet.id}): unknown user source" Rails.logger.error "Twitter (#{tweet.id}): unknown user source"
return
end end
def to_user(tweet) def to_user(tweet)
Rails.logger.debug "Create user from tweet..." Rails.logger.debug 'Create user from tweet...'
Rails.logger.debug tweet.inspect Rails.logger.debug tweet.inspect
# do tweet_user lookup # do tweet_user lookup
@ -90,12 +89,12 @@ class Tweet
user user
end end
def to_ticket(tweet, user, group) def to_ticket(tweet, user, group_id)
Rails.logger.debug "Create ticket from tweet..." Rails.logger.debug 'Create ticket from tweet...'
Rails.logger.debug tweet.inspect Rails.logger.debug tweet.inspect
Rails.logger.debug user.inspect Rails.logger.debug user.inspect
Rails.logger.debug group.inspect Rails.logger.debug group_id.inspect
if tweet.class.to_s == 'Twitter::DirectMessage' if tweet.class.to_s == 'Twitter::DirectMessage'
ticket = Ticket.find_by( ticket = Ticket.find_by(
@ -112,7 +111,7 @@ class Tweet
Ticket.create( Ticket.create(
customer_id: user.id, customer_id: user.id,
title: "#{tweet.text[0, 37]}...", title: "#{tweet.text[0, 37]}...",
group: Group.find_by( name: group ), group_id: group_id,
state: Ticket::State.find_by( name: 'new' ), state: Ticket::State.find_by( name: 'new' ),
priority: Ticket::Priority.find_by( name: '2 normal' ), priority: Ticket::Priority.find_by( name: '2 normal' ),
) )
@ -120,7 +119,7 @@ class Tweet
def to_article(tweet, user, ticket) def to_article(tweet, user, ticket)
Rails.logger.debug "Create article from tweet..." Rails.logger.debug 'Create article from tweet...'
Rails.logger.debug tweet.inspect Rails.logger.debug tweet.inspect
Rails.logger.debug user.inspect Rails.logger.debug user.inspect
Rails.logger.debug ticket.inspect Rails.logger.debug ticket.inspect
@ -154,7 +153,7 @@ class Tweet
) )
end end
def to_group(tweet, group) def to_group(tweet, group_id)
Rails.logger.debug 'import tweet' Rails.logger.debug 'import tweet'
@ -178,10 +177,10 @@ class Tweet
Rails.logger.debug 'import in_reply_tweet ' + tweet.in_reply_to_status_id.to_s Rails.logger.debug 'import in_reply_tweet ' + tweet.in_reply_to_status_id.to_s
parent_tweet = @client.status( tweet.in_reply_to_status_id ) parent_tweet = @client.status( tweet.in_reply_to_status_id )
ticket = to_group( parent_tweet, group ) ticket = to_group( parent_tweet, group_id )
end end
else else
ticket = to_ticket(tweet, user, group) ticket = to_ticket(tweet, user, group_id)
end end
to_article(tweet, user, ticket) to_article(tweet, user, ticket)
@ -195,7 +194,6 @@ class Tweet
def from_article(article) def from_article(article)
tweet = nil tweet = nil
if article[:type] == 'twitter direct-message' if article[:type] == 'twitter direct-message'
@ -206,10 +204,9 @@ class Tweet
article[:body], article[:body],
{} {}
) )
elsif article[:type] == 'twitter status' elsif article[:type] == 'twitter status'
Rails.logger.debug "Create tweet from article..." Rails.logger.debug 'Create tweet from article...'
tweet = @client.update( tweet = @client.update(
article[:body], article[:body],
@ -217,6 +214,8 @@ class Tweet
in_reply_to_status_id: article[:in_reply_to] in_reply_to_status_id: article[:in_reply_to]
} }
) )
else
fail "Can't handle unknown twitter article type 'article[:type]'."
end end
Rails.logger.debug tweet.inspect Rails.logger.debug tweet.inspect

View file

@ -26,12 +26,12 @@ class SwitchToUserTest < TestCase
) )
watch_for( watch_for(
:css => '.switchBackToUser', css: '.switchBackToUser',
:value => 'zammad looks like', value: 'zammad looks like',
) )
watch_for( watch_for(
:css => '.switchBackToUser', css: '.switchBackToUser',
:value => 'Nicole', value: 'Nicole',
) )
login = @browser.find_elements( { css: '.user-menu .user a' } )[0].attribute('title') login = @browser.find_elements( { css: '.user-menu .user a' } )[0].attribute('title')
assert_equal(login, 'nicole.braun@zammad.org') assert_equal(login, 'nicole.braun@zammad.org')

View file

@ -1,5 +1,5 @@
ENV['RAILS_ENV'] = 'test' ENV['RAILS_ENV'] = 'test'
# rubocop:disable Next, CyclomaticComplexity, PerceivedComplexity, HandleExceptions, ClassVars, NonLocalExitFromIterator # rubocop:disable HandleExceptions, ClassVars, NonLocalExitFromIterator
require File.expand_path('../../config/environment', __FILE__) require File.expand_path('../../config/environment', __FILE__)
require 'selenium-webdriver' require 'selenium-webdriver'
@ -152,11 +152,11 @@ class TestCase < Test::Unit::TestCase
(1..6).each { (1..6).each {
sleep 1 sleep 1
login = instance.find_elements( { css: '#login' } )[0] login = instance.find_elements( { css: '#login' } )[0]
if login
next if !login
screenshot( browser: instance, comment: 'logout_ok' ) screenshot( browser: instance, comment: 'logout_ok' )
assert( true, 'logout ok' ) assert( true, 'logout ok' )
return return
end
} }
screenshot( browser: instance, comment: 'logout_failed' ) screenshot( browser: instance, comment: 'logout_failed' )
fail 'no login box found, seems logout was not successfully!' fail 'no login box found, seems logout was not successfully!'
@ -578,7 +578,8 @@ class TestCase < Test::Unit::TestCase
cookies.each {|cookie| cookies.each {|cookie|
#puts "CCC #{cookie.inspect}" #puts "CCC #{cookie.inspect}"
# :name=>"_zammad_session_c25832f4de2", :value=>"adc31cd21615cb0a7ab269184ec8b76f", :path=>"/", :domain=>"localhost", :expires=>nil, :secure=>false} # :name=>"_zammad_session_c25832f4de2", :value=>"adc31cd21615cb0a7ab269184ec8b76f", :path=>"/", :domain=>"localhost", :expires=>nil, :secure=>false}
if cookie[:name] =~ /#{params[:name]}/i next if cookie[:name] !~ /#{params[:name]}/i
if params.key?( :value ) && cookie[:value].to_s =~ /#{params[:value]}/i if params.key?( :value ) && cookie[:value].to_s =~ /#{params[:value]}/i
assert( true, "matching value '#{params[:value]}' in cookie '#{cookie}'" ) assert( true, "matching value '#{params[:value]}' in cookie '#{cookie}'" )
else else
@ -590,11 +591,9 @@ class TestCase < Test::Unit::TestCase
fail "not matching expires '#{params[:expires]}' in cookie '#{cookie}'" fail "not matching expires '#{params[:expires]}' in cookie '#{cookie}'"
end end
if params[:should_not_exist] return if !params[:should_not_exist]
fail "cookie with name '#{params[:name]}' should not exist, but exists '#{cookies}'" fail "cookie with name '#{params[:name]}' should not exist, but exists '#{cookies}'"
end
return
end
} }
if params[:should_not_exist] if params[:should_not_exist]
assert( true, "cookie with name '#{params[:name]}' is not existing" ) assert( true, "cookie with name '#{params[:name]}' is not existing" )
@ -1226,7 +1225,9 @@ wait untill text in selector disabppears
if data[:state] || data[:group] || data[:body] if data[:state] || data[:group] || data[:body]
found = nil found = nil
(1..10).each { (1..10).each {
if !found
next if found
begin begin
text = instance.find_elements( { css: '.content.active .js-reset' } )[0].text text = instance.find_elements( { css: '.content.active .js-reset' } )[0].text
if text =~ /(Discard your unsaved changes.|Verwerfen der)/ if text =~ /(Discard your unsaved changes.|Verwerfen der)/
@ -1236,7 +1237,6 @@ wait untill text in selector disabppears
# try again # try again
end end
sleep 1 sleep 1
end
} }
if !found if !found
screenshot( browser: instance, comment: 'ticket_update_discard_message_failed' ) screenshot( browser: instance, comment: 'ticket_update_discard_message_failed' )

View file

@ -1,5 +1,4 @@
# encoding: utf-8 # encoding: utf-8
# rubocop:disable UselessAssignment
require 'integration_test_helper' require 'integration_test_helper'
class ElasticsearchTest < ActiveSupport::TestCase class ElasticsearchTest < ActiveSupport::TestCase

View file

@ -1,5 +1,4 @@
# encoding: utf-8 # encoding: utf-8
# rubocop:disable UselessAssignment
require 'integration_test_helper' require 'integration_test_helper'
class TwitterTest < ActiveSupport::TestCase class TwitterTest < ActiveSupport::TestCase
@ -45,18 +44,18 @@ class TwitterTest < ActiveSupport::TestCase
search: [ search: [
{ {
term: '#citheo42', term: '#citheo42',
group: 'Twitter', group_id: 2,
}, },
{ {
term: '#citheo24', term: '#citheo24',
group: 'Users', group_id: 1,
}, },
], ],
mentions: { mentions: {
group: 'Twitter', group_id: 2,
}, },
direct_messages: { direct_messages: {
group: 'Twitter', group_id: 2,
} }
} }
}, },
@ -73,7 +72,7 @@ class TwitterTest < ActiveSupport::TestCase
ticket = Ticket.create( ticket = Ticket.create(
title: text[0, 40], title: text[0, 40],
customer_id: user.id, customer_id: user.id,
group: Group.find_by( name: 'Twitter' ), group_id: 2,
state: Ticket::State.find_by( name: 'new' ), state: Ticket::State.find_by( name: 'new' ),
priority: Ticket::Priority.find_by( name: '2 normal' ), priority: Ticket::Priority.find_by( name: '2 normal' ),
updated_by_id: 1, updated_by_id: 1,

View file

@ -1,5 +1,4 @@
ENV['RAILS_ENV'] = 'test' ENV['RAILS_ENV'] = 'test'
# rubocop:disable ClassAndModuleChildren
require File.expand_path('../../config/environment', __FILE__) require File.expand_path('../../config/environment', __FILE__)
require 'rails/test_help' require 'rails/test_help'
require 'cache' require 'cache'

View file

@ -1,5 +1,4 @@
ENV['RAILS_ENV'] = 'test' ENV['RAILS_ENV'] = 'test'
# rubocop:disable ClassAndModuleChildren
require File.expand_path('../../config/environment', __FILE__) require File.expand_path('../../config/environment', __FILE__)
require 'rails/test_help' require 'rails/test_help'
require 'cache' require 'cache'

View file

@ -86,7 +86,7 @@ class AssetsTest < ActiveSupport::TestCase
# touch org, check if user1 has changed # touch org, check if user1 has changed
sleep 2 sleep 2
org2 = Organization.find(org.id) org2 = Organization.find(org.id)
org2.note = "some note...#{rand(9999999999999)}" org2.note = "some note...#{rand(9_999_999_999_999)}"
org2.save org2.save
attributes = org2.attributes_with_associations attributes = org2.attributes_with_associations

View file

@ -1,5 +1,4 @@
# encoding: utf-8 # encoding: utf-8
# rubocop:disable PerceivedComplexity, CyclomaticComplexity
require 'test_helper' require 'test_helper'
class HistoryTest < ActiveSupport::TestCase class HistoryTest < ActiveSupport::TestCase

View file

@ -6,7 +6,7 @@ class ModelTest < ActiveSupport::TestCase
# create base # create base
groups = Group.where( name: 'Users' ) groups = Group.where( name: 'Users' )
roles = Role.where( name: ['Agent', 'Admin'] ) roles = Role.where( name: %w(Agent Admin) )
agent1 = User.create_or_update( agent1 = User.create_or_update(
login: 'model-agent1@example.com', login: 'model-agent1@example.com',
firstname: 'Model', firstname: 'Model',

View file

@ -54,7 +54,7 @@ class ObjectCacheTest < ActiveSupport::TestCase
# update group # update group
group1 = groups.first group1 = groups.first
group1.note = "some note #{rand(9999999999)}" group1.note = "some note #{rand(9_999_999_999)}"
group1.save group1.save
assets = user1.assets({}) assets = user1.assets({})

View file

@ -1,5 +1,4 @@
# encoding: utf-8 # encoding: utf-8
# rubocop:disable Next, UselessAssignment, BlockNesting
require 'test_helper' require 'test_helper'
class OnlineNotificationTest < ActiveSupport::TestCase class OnlineNotificationTest < ActiveSupport::TestCase
@ -283,7 +282,8 @@ class OnlineNotificationTest < ActiveSupport::TestCase
notification_check( OnlineNotification.list(agent_user2, 10), test[:check] ) notification_check( OnlineNotification.list(agent_user2, 10), test[:check] )
# check online notifications # check online notifications
if test[:update][:online_notification] next if !test[:update][:online_notification]
if test[:update][:online_notification][:seen_only_exists] if test[:update][:online_notification][:seen_only_exists]
notifications = OnlineNotification.list_by_object( 'Ticket', ticket.id ) notifications = OnlineNotification.list_by_object( 'Ticket', ticket.id )
assert( notification_seen_only_exists_exists( notifications ), 'not seen notifications for ticket available') assert( notification_seen_only_exists_exists( notifications ), 'not seen notifications for ticket available')
@ -291,7 +291,6 @@ class OnlineNotificationTest < ActiveSupport::TestCase
notifications = OnlineNotification.list_by_object( 'Ticket', ticket.id ) notifications = OnlineNotification.list_by_object( 'Ticket', ticket.id )
assert( !notification_seen_only_exists_exists( notifications ), 'seen notifications for ticket available') assert( !notification_seen_only_exists_exists( notifications ), 'seen notifications for ticket available')
end end
end
} }
# merge tickets - also remove notifications of merged tickets # merge tickets - also remove notifications of merged tickets
@ -322,27 +321,27 @@ class OnlineNotificationTest < ActiveSupport::TestCase
} }
end end
def notification_check( onine_notifications, checks ) def notification_check( online_notifications, checks )
checks.each { |check_item| checks.each { |check_item|
hit = false hit = false
onine_notifications.each {|onine_notification| online_notifications.each {|onine_notification|
if onine_notification['o_id'] == check_item[:o_id]
if onine_notification['object'] == check_item[:object] next if onine_notification['o_id'] != check_item[:o_id]
if onine_notification['type'] == check_item[:type] next if onine_notification['object'] != check_item[:object]
if onine_notification['created_by_id'] == check_item[:created_by_id] next if onine_notification['type'] != check_item[:type]
next if onine_notification['created_by_id'] != check_item[:created_by_id]
hit = true hit = true
end
end break
end
end
} }
#puts "--- #{onine_notifications.inspect}" #puts "--- #{online_notifications.inspect}"
assert( hit, "online notification exists not #{check_item.inspect}" ) assert( hit, "online notification exists not #{check_item.inspect}" )
} }
end end
def notification_seen_only_exists_exists( onine_notifications ) def notification_seen_only_exists_exists( online_notifications )
onine_notifications.each {|onine_notification| online_notifications.each {|onine_notification|
return false if !onine_notification['seen'] return false if !onine_notification['seen']
} }
true true

View file

@ -1,5 +1,4 @@
# encoding: utf-8 # encoding: utf-8
# rubocop:disable Next, UselessAssignment
require 'test_helper' require 'test_helper'
class PackageTest < ActiveSupport::TestCase class PackageTest < ActiveSupport::TestCase
@ -281,7 +280,9 @@ X3RhYmxlIDpzYW1wbGVfdGFibGVzDQogIGVuZA0KZW5k</file>
exists = Package.where( name: test[:verify][:package][:name], version: test[:verify][:package][:version] ).first exists = Package.where( name: test[:verify][:package][:name], version: test[:verify][:package][:version] ).first
assert( exists, "package '#{test[:verify][:package][:name]}' is not installed" ) assert( exists, "package '#{test[:verify][:package][:name]}' is not installed" )
end end
if test[:verify] && test[:verify][:check_files] next if !test[:verify]
next if !test[:verify][:check_files]
test[:verify][:check_files].each {|item| test[:verify][:check_files].each {|item|
exists = File.exist?( item[:location] ) exists = File.exist?( item[:location] )
if item[:result] if item[:result]
@ -290,7 +291,6 @@ X3RhYmxlIDpzYW1wbGVfdGFibGVzDQogIGVuZA0KZW5k</file>
assert( !exists, "'#{item[:location]}' doesn't exists" ) assert( !exists, "'#{item[:location]}' doesn't exists" )
end end
} }
end
} }
end end

View file

@ -1,5 +1,4 @@
# encoding: utf-8 # encoding: utf-8
# rubocop:disable UselessAssignment
require 'test_helper' require 'test_helper'
class RestTest < ActiveSupport::TestCase class RestTest < ActiveSupport::TestCase

View file

@ -1,5 +1,4 @@
# encoding: utf-8 # encoding: utf-8
# rubocop:disable UselessAssignment
require 'test_helper' require 'test_helper'
class SessionBasicTest < ActiveSupport::TestCase class SessionBasicTest < ActiveSupport::TestCase

View file

@ -1,5 +1,4 @@
# encoding: utf-8 # encoding: utf-8
# rubocop:disable UselessAssignment
require 'test_helper' require 'test_helper'
class SessionBasicTicketTest < ActiveSupport::TestCase class SessionBasicTicketTest < ActiveSupport::TestCase

View file

@ -1,5 +1,4 @@
# encoding: utf-8 # encoding: utf-8
# rubocop:disable Next, CyclomaticComplexity
require 'test_helper' require 'test_helper'
class SessionCollectionsTest < ActiveSupport::TestCase class SessionCollectionsTest < ActiveSupport::TestCase
@ -139,7 +138,8 @@ class SessionCollectionsTest < ActiveSupport::TestCase
def check_if_collection_exists(results, collection, attributes = nil) def check_if_collection_exists(results, collection, attributes = nil)
results.each {|result| results.each {|result|
next if !result next if !result
if result[:collection] && result[:collection][collection] next if !result[:collection]
next if !result[:collection][collection]
# check just if collection exists # check just if collection exists
return true if !attributes return true if !attributes
@ -154,7 +154,6 @@ class SessionCollectionsTest < ActiveSupport::TestCase
} }
return true if match_all return true if match_all
} }
end
} }
nil nil
end end

View file

@ -1,5 +1,4 @@
# encoding: utf-8 # encoding: utf-8
# rubocop:disable Next, UselessAssignment
require 'test_helper' require 'test_helper'
class SessionEnhancedTest < ActiveSupport::TestCase class SessionEnhancedTest < ActiveSupport::TestCase
@ -297,15 +296,14 @@ class SessionEnhancedTest < ActiveSupport::TestCase
messages.each {|message| messages.each {|message|
#puts "" #puts ""
#puts "message: #{message.inspect}" #puts "message: #{message.inspect}"
if message['event'] == 'resetCollection' next if message['event'] != 'resetCollection'
#puts "rc: " #puts "rc: "
if message['data'] next if !message['data']
message['data'].each {|key, _value| message['data'].each {|key, _value|
#puts "rc: #{key}" #puts "rc: #{key}"
collections_result[key] = true collections_result[key] = true
} }
end
end
} }
#puts "c: #{collections_result.inspect}" #puts "c: #{collections_result.inspect}"
collections_orig.each {|key, _value| collections_orig.each {|key, _value|