Merge branch 'develop' of github.com:martini/zammad into develop
This commit is contained in:
commit
56d3c66c9e
76 changed files with 325 additions and 358 deletions
|
@ -184,6 +184,10 @@ Metrics/BlockNesting:
|
|||
StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#three-is-the-number-thou-shalt-count'
|
||||
Enabled: false
|
||||
|
||||
Metrics/ModuleLength:
|
||||
Description: 'Avoid modules longer than 100 lines of code.'
|
||||
Enabled: false
|
||||
|
||||
# TODO
|
||||
|
||||
Style/Documentation:
|
||||
|
|
|
@ -25,7 +25,7 @@ class App.TicketZoom extends App.Controller
|
|||
@sidebarState = {}
|
||||
@ticketLastAttributes = {}
|
||||
|
||||
# if we are in init task startup, ognore overview_dd
|
||||
# if we are in init task startup, ignore overview_id
|
||||
if !params.init
|
||||
@overview_id = params.overview_id
|
||||
else
|
||||
|
|
|
@ -44,24 +44,24 @@ Example:
|
|||
{
|
||||
"item":"#otrs",
|
||||
"type": "mixed", # optional, possible 'mixed' (default), 'recent', 'popular'
|
||||
"group": "OTRS",
|
||||
"group_id:": 1,
|
||||
"limit": 1, # optional
|
||||
},
|
||||
{
|
||||
"item":"#zombie23",
|
||||
"group": "Zombie Apocalypse Early Warning System",
|
||||
"group_id:": 2,
|
||||
},
|
||||
{
|
||||
"item":"#otterhub",
|
||||
"group": "Community",
|
||||
"group_id:": 3,
|
||||
}
|
||||
],
|
||||
"mentions" {
|
||||
"group": "Twitter",
|
||||
"group_id:": 4,
|
||||
"limit": 100, # optional
|
||||
},
|
||||
"direct_messages": {
|
||||
"group": "Twitter",
|
||||
"group_id:": 4,
|
||||
"limit": 1, # optional
|
||||
}
|
||||
}
|
||||
|
|
|
@ -673,7 +673,7 @@ curl http://localhost/api/v1/getting_started -v -u #{login}:#{password}
|
|||
message: e.to_s,
|
||||
subject: subject,
|
||||
}
|
||||
return # rubocop:disable Lint/NonLocalExitFromIterator
|
||||
return
|
||||
end
|
||||
|
||||
next if !found
|
||||
|
@ -735,7 +735,7 @@ curl http://localhost/api/v1/getting_started -v -u #{login}:#{password}
|
|||
render json: {
|
||||
result: 'ok',
|
||||
}
|
||||
return # rubocop:disable Lint/NonLocalExitFromIterator
|
||||
return
|
||||
}
|
||||
|
||||
# check delivery for 30 sek.
|
||||
|
|
|
@ -38,7 +38,7 @@ class LongPollingController < ApplicationController
|
|||
spool = Sessions.spool_list( params['data']['timestamp'], current_user.id )
|
||||
spool.each { |item|
|
||||
if item[:type] == 'direct'
|
||||
log "send spool to (user_id=#{ current_user.id })", client_id
|
||||
log "send spool to (user_id=#{current_user.id})", client_id
|
||||
Sessions.send( client_id, item[:message] )
|
||||
else
|
||||
log 'send spool', client_id
|
||||
|
@ -159,6 +159,6 @@ class LongPollingController < ApplicationController
|
|||
end
|
||||
|
||||
def log( data, client_id = '-' )
|
||||
logger.info "client(#{ client_id }) #{ data }"
|
||||
logger.info "client(#{client_id}) #{data}"
|
||||
end
|
||||
end
|
||||
|
|
|
@ -21,7 +21,7 @@ curl http://localhost/api/v1/rss_fetch.json -v -u #{login}:#{password} -H "Conte
|
|||
def fetch
|
||||
items = Rss.fetch(params[:url], params[:limit])
|
||||
if items.nil?
|
||||
render json: { message: "failed to fetch #{ params[:url] }", status: :unprocessable_entity }
|
||||
render json: { message: "failed to fetch #{params[:url]}", status: :unprocessable_entity }
|
||||
return
|
||||
end
|
||||
render json: { items: items }
|
||||
|
|
|
@ -44,7 +44,7 @@ class TicketOverviewsController < ApplicationController
|
|||
array: true,
|
||||
)
|
||||
if !overview
|
||||
render json: { error: "No such view #{ params[:view] }!" }, status: :unprocessable_entity
|
||||
render json: { error: "No such view #{params[:view]}!" }, status: :unprocessable_entity
|
||||
return
|
||||
end
|
||||
|
||||
|
|
|
@ -338,7 +338,6 @@ class UsersController < ApplicationController
|
|||
user_all = User.where('id != 1').order('created_at DESC').limit( params[:limit] || 20 )
|
||||
end
|
||||
|
||||
|
||||
# build result list
|
||||
if !params[:full]
|
||||
users = []
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
module ApplicationHelper
|
||||
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
|
||||
end
|
||||
end
|
||||
|
|
|
@ -261,11 +261,9 @@ returns
|
|||
end
|
||||
|
||||
# delete login caches
|
||||
if self[:login]
|
||||
key = "#{self.class}::#{login}"
|
||||
Cache.delete(key)
|
||||
end
|
||||
return if !self[:login]
|
||||
|
||||
Cache.delete("#{self.class}::#{login}")
|
||||
end
|
||||
|
||||
def self.cache_set(data_id, data)
|
||||
|
@ -524,7 +522,7 @@ class OwnModel < ApplicationModel
|
|||
|
||||
# return if we run import mode
|
||||
return if Setting.get('import_mode')
|
||||
logger.debug "#{ self.class.name }.find(#{ id }) notify created " + created_at.to_s
|
||||
logger.debug "#{self.class.name}.find(#{id}) notify created " + created_at.to_s
|
||||
class_name = self.class.name
|
||||
class_name.gsub!(/::/, '')
|
||||
Sessions.broadcast(
|
||||
|
@ -553,7 +551,7 @@ class OwnModel < ApplicationModel
|
|||
|
||||
# return if we run import mode
|
||||
return if Setting.get('import_mode')
|
||||
logger.debug "#{ self.class.name }.find(#{ id }) notify UPDATED " + updated_at.to_s
|
||||
logger.debug "#{self.class.name}.find(#{id}) notify UPDATED " + updated_at.to_s
|
||||
class_name = self.class.name
|
||||
class_name.gsub!(/::/, '')
|
||||
Sessions.broadcast(
|
||||
|
@ -582,7 +580,7 @@ class OwnModel < ApplicationModel
|
|||
|
||||
# return if we run import mode
|
||||
return if Setting.get('import_mode')
|
||||
logger.debug "#{ self.class.name }.find(#{ id }) notify TOUCH " + updated_at.to_s
|
||||
logger.debug "#{self.class.name}.find(#{id}) notify TOUCH " + updated_at.to_s
|
||||
class_name = self.class.name
|
||||
class_name.gsub!(/::/, '')
|
||||
Sessions.broadcast(
|
||||
|
@ -610,7 +608,7 @@ class OwnModel < ApplicationModel
|
|||
|
||||
# return if we run import mode
|
||||
return if Setting.get('import_mode')
|
||||
logger.debug "#{ self.class.name }.find(#{ id }) notify DESTOY " + updated_at.to_s
|
||||
logger.debug "#{self.class.name}.find(#{id}) notify DESTOY " + updated_at.to_s
|
||||
class_name = self.class.name
|
||||
class_name.gsub!(/::/, '')
|
||||
Sessions.broadcast(
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
# Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/
|
||||
# rubocop:disable ClassAndModuleChildren
|
||||
module ApplicationModel::ActivityStreamBase
|
||||
|
||||
=begin
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
# Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/
|
||||
# rubocop:disable ClassAndModuleChildren
|
||||
#36 Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/
|
||||
module ApplicationModel::Assets
|
||||
|
||||
=begin
|
||||
|
@ -32,7 +31,7 @@ returns
|
|||
return data if !self['created_by_id'] && !self['updated_by_id']
|
||||
%w(created_by_id updated_by_id).each {|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 ] )
|
||||
data = user.assets( data )
|
||||
}
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
# Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/
|
||||
# rubocop:disable ClassAndModuleChildren
|
||||
class ApplicationModel::BackgroundJobSearchIndex
|
||||
def initialize(object, o_id)
|
||||
@object = object
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
# Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/
|
||||
# rubocop:disable ClassAndModuleChildren
|
||||
module ApplicationModel::HistoryLogBase
|
||||
|
||||
=begin
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
# Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/
|
||||
# rubocop:disable ClassAndModuleChildren
|
||||
module ApplicationModel::SearchIndexBase
|
||||
|
||||
=begin
|
||||
|
|
|
@ -288,7 +288,7 @@ return all avatars of an user
|
|||
data = avatar.attributes
|
||||
if avatar.store_resize_id
|
||||
file = Store.find(avatar.store_resize_id)
|
||||
data['content'] = "data:#{ file.preferences['Mime-Type'] };base64,#{ Base64.strict_encode64( file.content ) }"
|
||||
data['content'] = "data:#{file.preferences['Mime-Type']};base64,#{Base64.strict_encode64( file.content )}"
|
||||
end
|
||||
avatar_list.push data
|
||||
end
|
||||
|
|
|
@ -19,10 +19,10 @@ module Channel::Filter::Database
|
|||
scan = mail[ key.downcase.to_sym ].scan(/#{value}/i)
|
||||
end
|
||||
if match && scan[0]
|
||||
Rails.logger.info " matching #{ key.downcase }:'#{ mail[ key.downcase.to_sym ] }' on #{value}"
|
||||
Rails.logger.info " matching #{key.downcase}:'#{mail[ key.downcase.to_sym ]}' on #{value}"
|
||||
match = true
|
||||
else
|
||||
Rails.logger.info " is not matching #{ key.downcase }:'#{ mail[ key.downcase.to_sym ] }' on #{value}"
|
||||
Rails.logger.info " is not matching #{key.downcase}:'#{mail[ key.downcase.to_sym ]}' on #{value}"
|
||||
match = false
|
||||
end
|
||||
rescue => e
|
||||
|
@ -36,7 +36,7 @@ module Channel::Filter::Database
|
|||
next if !match
|
||||
|
||||
filter[:perform].each {|key, value|
|
||||
Rails.logger.info " perform '#{ key.downcase }' = '#{value}'"
|
||||
Rails.logger.info " perform '#{key.downcase}' = '#{value}'"
|
||||
mail[ key.downcase.to_sym ] = value
|
||||
}
|
||||
}
|
||||
|
|
|
@ -8,7 +8,7 @@ class Channel::Twitter
|
|||
@tweet = Tweet.new( @channel[:options][:auth] )
|
||||
@sync = @channel[:options][:sync]
|
||||
|
||||
Rails.logger.debug "twitter fetch started"
|
||||
Rails.logger.debug 'twitter fetch started'
|
||||
|
||||
fetch_search
|
||||
fetch_mentions
|
||||
|
@ -50,12 +50,12 @@ class Channel::Twitter
|
|||
Rails.logger.debug " - searching for '#{search[:term]}'"
|
||||
|
||||
counter = 0
|
||||
@tweet.client.search( search[:term], result_type: result_type ).collect{ |tweet|
|
||||
@tweet.client.search( search[:term], result_type: result_type ).collect { |tweet|
|
||||
|
||||
break if search[:limit] && search[:limit] <= counter
|
||||
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
|
||||
}
|
||||
|
@ -75,7 +75,7 @@ class Channel::Twitter
|
|||
break if @sync[:mentions][:limit] && @sync[:mentions][:limit] <= counter
|
||||
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
|
||||
}
|
||||
|
@ -94,7 +94,7 @@ class Channel::Twitter
|
|||
break if @sync[:direct_messages][:limit] && @sync[:direct_messages][:limit] <= counter
|
||||
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
|
||||
}
|
||||
|
|
|
@ -22,11 +22,11 @@ class Observer::Ticket::Article::CommunicateTwitter < ActiveRecord::Observer
|
|||
|
||||
twitter = Channel::Twitter.new
|
||||
tweet = twitter.send({
|
||||
type: type['name'],
|
||||
to: record.to,
|
||||
body: record.body,
|
||||
in_reply_to: record.in_reply_to
|
||||
})
|
||||
type: type['name'],
|
||||
to: record.to,
|
||||
body: record.body,
|
||||
in_reply_to: record.in_reply_to
|
||||
})
|
||||
record.message_id = tweet.id
|
||||
record.save
|
||||
end
|
||||
|
|
|
@ -17,7 +17,6 @@ class Organization < ApplicationModel
|
|||
notify_clients_support
|
||||
latest_change_support
|
||||
|
||||
|
||||
private
|
||||
|
||||
def cache_delete
|
||||
|
|
|
@ -22,7 +22,7 @@ class Scheduler < ApplicationModel
|
|||
begin
|
||||
ActiveRecord::Base.connection.reconnect!
|
||||
rescue => e
|
||||
logger.error "Can't reconnect to database #{ e.inspect }"
|
||||
logger.error "Can't reconnect to database #{e.inspect}"
|
||||
end
|
||||
|
||||
# read/load jobs and check if it is alredy started
|
||||
|
@ -82,37 +82,35 @@ class Scheduler < ApplicationModel
|
|||
end
|
||||
|
||||
def self._start_job( job, try_count = 0, try_run_time = Time.zone.now )
|
||||
job.last_run = Time.zone.now
|
||||
job.pid = Thread.current.object_id
|
||||
job.save
|
||||
logger.info "execute #{job.method} (try_count #{try_count})..."
|
||||
eval job.method() # rubocop:disable Lint/Eval
|
||||
rescue => e
|
||||
logger.error "execute #{job.method} (try_count #{try_count}) exited with error #{e.inspect}"
|
||||
|
||||
# reconnect in case db connection is lost
|
||||
begin
|
||||
job.last_run = Time.zone.now
|
||||
job.pid = Thread.current.object_id
|
||||
job.save
|
||||
logger.info "execute #{job.method} (try_count #{try_count})..."
|
||||
eval job.method() # rubocop:disable Lint/Eval
|
||||
ActiveRecord::Base.connection.reconnect!
|
||||
rescue => e
|
||||
logger.error "execute #{job.method} (try_count #{try_count}) exited with error #{ e.inspect }"
|
||||
logger.error "Can't reconnect to database #{e.inspect}"
|
||||
end
|
||||
|
||||
# reconnect in case db connection is lost
|
||||
begin
|
||||
ActiveRecord::Base.connection.reconnect!
|
||||
rescue => e
|
||||
logger.error "Can't reconnect to database #{ e.inspect }"
|
||||
end
|
||||
try_run_max = 10
|
||||
try_count += 1
|
||||
|
||||
try_run_max = 10
|
||||
try_count += 1
|
||||
# reset error counter if to old
|
||||
if try_run_time + ( 60 * 5 ) < Time.zone.now
|
||||
try_count = 0
|
||||
end
|
||||
try_run_time = Time.zone.now
|
||||
|
||||
# reset error counter if to old
|
||||
if try_run_time + ( 60 * 5 ) < Time.zone.now
|
||||
try_count = 0
|
||||
end
|
||||
try_run_time = Time.zone.now
|
||||
|
||||
# restart job again
|
||||
if try_run_max > try_count
|
||||
_start_job( job, try_count, try_run_time)
|
||||
else
|
||||
raise "STOP thread for #{job.method} after #{try_count} tries"
|
||||
end
|
||||
# restart job again
|
||||
if try_run_max > try_count
|
||||
_start_job( job, try_count, try_run_time)
|
||||
else
|
||||
raise "STOP thread for #{job.method} after #{try_count} tries"
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -142,7 +142,7 @@ returns
|
|||
def content
|
||||
file = Store::File.find_by( id: store_file_id )
|
||||
if !file
|
||||
fail "No such file #{ store_file_id }!"
|
||||
fail "No such file #{store_file_id}!"
|
||||
end
|
||||
file.content
|
||||
end
|
||||
|
@ -150,7 +150,7 @@ returns
|
|||
def provider
|
||||
file = Store::File.find_by( id: store_file_id )
|
||||
if !file
|
||||
fail "No such file #{ store_file_id }!"
|
||||
fail "No such file #{store_file_id}!"
|
||||
end
|
||||
file.provider
|
||||
end
|
||||
|
|
|
@ -17,7 +17,7 @@ class Store
|
|||
if !adapter_name
|
||||
fail 'Missing storage_provider setting option'
|
||||
end
|
||||
adapter = load_adapter( "Store::Provider::#{ adapter_name }" )
|
||||
adapter = load_adapter( "Store::Provider::#{adapter_name}" )
|
||||
adapter.add( data, sha )
|
||||
file = Store::File.create(
|
||||
provider: adapter_name,
|
||||
|
@ -29,7 +29,7 @@ class Store
|
|||
|
||||
# read content
|
||||
def content
|
||||
adapter = self.class.load_adapter("Store::Provider::#{ provider }")
|
||||
adapter = self.class.load_adapter("Store::Provider::#{provider}")
|
||||
if sha
|
||||
c = adapter.get( sha )
|
||||
else
|
||||
|
@ -62,8 +62,8 @@ class Store
|
|||
# e. g. Store::File.move('File', 'DB')
|
||||
# e. g. Store::File.move('DB', 'File')
|
||||
def self.move(source, target)
|
||||
adapter_source = load_adapter("Store::Provider::#{ source }")
|
||||
adapter_target = load_adapter("Store::Provider::#{ target }")
|
||||
adapter_source = load_adapter("Store::Provider::#{source}")
|
||||
adapter_target = load_adapter("Store::Provider::#{target}")
|
||||
|
||||
Store::File.all.each {|item|
|
||||
next if item.provider == target
|
||||
|
@ -86,7 +86,7 @@ class Store
|
|||
private
|
||||
|
||||
def destroy_provider
|
||||
adapter = self.class.load_adapter("Store::Provider::#{ provider }")
|
||||
adapter = self.class.load_adapter("Store::Provider::#{provider}")
|
||||
adapter.delete( sha )
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,6 +1,4 @@
|
|||
# Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/
|
||||
# rubocop:disable ClassAndModuleChildren
|
||||
|
||||
class Store::Provider::File
|
||||
|
||||
# write file to fs
|
||||
|
@ -9,7 +7,7 @@ class Store::Provider::File
|
|||
# install file
|
||||
permission = '600'
|
||||
if !File.exist?( get_locaton(sha) )
|
||||
Rails.logger.debug "storge write '#{ get_locaton(sha) }' (#{permission})"
|
||||
Rails.logger.debug "storge write '#{get_locaton(sha)}' (#{permission})"
|
||||
file = File.new( get_locaton(sha), 'wb' )
|
||||
file.write( data )
|
||||
file.close
|
||||
|
@ -19,7 +17,7 @@ class Store::Provider::File
|
|||
# check sha
|
||||
local_sha = Digest::SHA256.hexdigest( get(sha) )
|
||||
if sha != local_sha
|
||||
fail "ERROR: Corrupt file in fs #{ get_locaton(sha) }, sha should be #{sha} but is #{local_sha}"
|
||||
fail "ERROR: Corrupt file in fs #{get_locaton(sha)}, sha should be #{sha} but is #{local_sha}"
|
||||
end
|
||||
|
||||
true
|
||||
|
@ -27,9 +25,9 @@ class Store::Provider::File
|
|||
|
||||
# read file from fs
|
||||
def self.get(sha)
|
||||
Rails.logger.debug "read from fs #{ get_locaton(sha) }"
|
||||
Rails.logger.debug "read from fs #{get_locaton(sha)}"
|
||||
if !File.exist?( get_locaton(sha) )
|
||||
fail "ERROR: No such file #{ get_locaton(sha) }"
|
||||
fail "ERROR: No such file #{get_locaton(sha)}"
|
||||
end
|
||||
data = File.open( get_locaton(sha), 'rb' )
|
||||
content = data.read
|
||||
|
@ -37,7 +35,7 @@ class Store::Provider::File
|
|||
# check sha
|
||||
local_sha = Digest::SHA256.hexdigest( content )
|
||||
if local_sha != sha
|
||||
fail "ERROR: Corrupt file in fs #{ get_locaton(sha) }, sha should be #{sha} but is #{local_sha}"
|
||||
fail "ERROR: Corrupt file in fs #{get_locaton(sha)}, sha should be #{sha} but is #{local_sha}"
|
||||
end
|
||||
content
|
||||
end
|
||||
|
@ -45,7 +43,7 @@ class Store::Provider::File
|
|||
# unlink file from fs
|
||||
def self.delete(sha)
|
||||
if File.exist?( get_locaton(sha) )
|
||||
Rails.logger.info "storge remove '#{ get_locaton(sha) }'"
|
||||
Rails.logger.info "storge remove '#{get_locaton(sha)}'"
|
||||
File.delete( get_locaton(sha) )
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
# Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/
|
||||
# rubocop:disable ClassAndModuleChildren
|
||||
module Ticket::ActivityStreamLog
|
||||
|
||||
=begin
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
# Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/
|
||||
# rubocop:disable ClassAndModuleChildren
|
||||
class Ticket::Article < ApplicationModel
|
||||
load 'ticket/article/assets.rb'
|
||||
include Ticket::Article::Assets
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
# Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/
|
||||
# rubocop:disable ClassAndModuleChildren
|
||||
module Ticket::Article::ActivityStreamLog
|
||||
|
||||
=begin
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
# Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/
|
||||
# rubocop:disable ClassAndModuleChildren
|
||||
module Ticket::Assets
|
||||
|
||||
=begin
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
# Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/
|
||||
# rubocop:disable ClassAndModuleChildren
|
||||
class Ticket::Counter < ApplicationModel
|
||||
end
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
# Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/
|
||||
# rubocop:disable ClassAndModuleChildren
|
||||
module Ticket::Escalation
|
||||
|
||||
=begin
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
# Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/
|
||||
# rubocop:disable ClassAndModuleChildren
|
||||
module Ticket::HistoryLog
|
||||
|
||||
=begin
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
# Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/
|
||||
# rubocop:disable ClassAndModuleChildren
|
||||
module Ticket::Number::Date
|
||||
module_function
|
||||
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
# Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/
|
||||
# rubocop:disable ClassAndModuleChildren
|
||||
module Ticket::Overviews
|
||||
|
||||
=begin
|
||||
|
@ -88,7 +87,7 @@ returns
|
|||
}
|
||||
|
||||
if data[:view] && !overview_selected
|
||||
fail "No such view '#{ data[:view] }'"
|
||||
fail "No such view '#{data[:view]}'"
|
||||
end
|
||||
|
||||
# sortby
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
# Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/
|
||||
# rubocop:disable ClassAndModuleChildren
|
||||
module Ticket::Permission
|
||||
|
||||
=begin
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
# Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/
|
||||
# rubocop:disable ClassAndModuleChildren
|
||||
class Ticket::Priority < ApplicationModel
|
||||
self.table_name = 'ticket_priorities'
|
||||
validates :name, presence: true
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
# Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/
|
||||
# rubocop:disable ClassAndModuleChildren
|
||||
module Ticket::ScreenOptions
|
||||
|
||||
=begin
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
# Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/
|
||||
# rubocop:disable ClassAndModuleChildren
|
||||
module Ticket::Search
|
||||
|
||||
=begin
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
# Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/
|
||||
# rubocop:disable ClassAndModuleChildren
|
||||
module Ticket::SearchIndex
|
||||
|
||||
=begin
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
# Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/
|
||||
# rubocop:disable ClassAndModuleChildren
|
||||
class Ticket::State < ApplicationModel
|
||||
belongs_to :state_type, class_name: 'Ticket::StateType'
|
||||
belongs_to :state_type, class_name: 'Ticket::StateType'
|
||||
validates :name, presence: true
|
||||
|
||||
latest_change_support
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
# Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/
|
||||
# rubocop:disable ClassAndModuleChildren
|
||||
class Ticket::StateType < ApplicationModel
|
||||
has_many :states, class_name: 'Ticket::State'
|
||||
has_many :states, class_name: 'Ticket::State'
|
||||
validates :name, presence: true
|
||||
latest_change_support
|
||||
end
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
# Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/
|
||||
# rubocop:disable ClassAndModuleChildren
|
||||
module Ticket::Subject
|
||||
|
||||
=begin
|
||||
|
|
|
@ -17,7 +17,7 @@ returns
|
|||
=end
|
||||
|
||||
def search_index_data
|
||||
attributes = { 'fullname' => "#{ self['firstname'] } #{ self['lastname'] }" }
|
||||
attributes = { 'fullname' => "#{self['firstname']} #{self['lastname']}" }
|
||||
%w(login firstname lastname phone email address city country note created_at).each { |key|
|
||||
if self[key] && (!self.respond_to?('empty?') || !self[key].empty?)
|
||||
attributes[key] = self[key]
|
||||
|
|
|
@ -57,7 +57,7 @@ class String
|
|||
return if ActiveRecord::Base.connection_config[:adapter] != 'mysql2'
|
||||
each_char.select {|c|
|
||||
if c.bytes.count > 3
|
||||
Rails.logger.warn "strip out 4 bytes utf8 chars '#{c}' of '#{ self }'"
|
||||
Rails.logger.warn "strip out 4 bytes utf8 chars '#{c}' of '#{self}'"
|
||||
next
|
||||
end
|
||||
c
|
||||
|
|
|
@ -27,9 +27,9 @@ returns
|
|||
dir = "#{Rails.root}/app/models/"
|
||||
Dir.glob( "#{dir}**/*.rb" ) do |entry|
|
||||
next if entry =~ /application_model/i
|
||||
next if entry =~ /channel\//i
|
||||
next if entry =~ /observer\//i
|
||||
next if entry =~ /store\/provider\//i
|
||||
next if entry =~ %r{channel/}i
|
||||
next if entry =~ %r{observer/}i
|
||||
next if entry =~ %r{store/provider/}i
|
||||
entry.gsub!(dir, '')
|
||||
entry = entry.to_classname
|
||||
model_class = load_adapter(entry)
|
||||
|
@ -81,37 +81,43 @@ returns
|
|||
list.each {|model_class, model_attributes|
|
||||
references[:model][model_class.to_s] = 0
|
||||
next if !model_attributes[:attributes]
|
||||
['created_by_id', 'updated_by_id'].each {|item|
|
||||
if model_attributes[:attributes].include?(item)
|
||||
count = model_class.where("#{item} = ?", object_id).count
|
||||
next if count == 0
|
||||
Rails.logger.debug "FOUND (by id) #{model_class}->#{item} #{count}!"
|
||||
references[:model][model_class.to_s] += count
|
||||
end
|
||||
%w(created_by_id updated_by_id).each {|item|
|
||||
|
||||
next if !model_attributes[:attributes].include?(item)
|
||||
|
||||
count = model_class.where("#{item} = ?", object_id).count
|
||||
next if count == 0
|
||||
Rails.logger.debug "FOUND (by id) #{model_class}->#{item} #{count}!"
|
||||
references[:model][model_class.to_s] += count
|
||||
}
|
||||
}
|
||||
|
||||
# find relations via reflections
|
||||
list.each {|model_class, model_attributes|
|
||||
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
|
||||
|
||||
if reflection_value.options[:class_name] == object_name
|
||||
count = model_class.where("#{reflection_value.name}_id = ?", object_id).count
|
||||
next if count == 0
|
||||
Rails.logger.debug "FOUND (by ref without class) #{model_class}->#{reflection_value.name} #{count}!"
|
||||
references[:model][model_class.to_s] += count
|
||||
end
|
||||
if !reflection_value.options[:class_name] && reflection_value.name == object_name.downcase.to_sym
|
||||
count = model_class.where("#{reflection_value.name}_id = ?", object_id).count
|
||||
next if count == 0
|
||||
Rails.logger.debug "FOUND (by ref with class) #{model_class}->#{reflection_value.name} #{count}!"
|
||||
references[:model][model_class.to_s] += count
|
||||
end
|
||||
|
||||
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
|
||||
next if count == 0
|
||||
|
||||
Rails.logger.debug "FOUND (by ref with class) #{model_class}->#{reflection_value.name} #{count}!"
|
||||
references[:model][model_class.to_s] += count
|
||||
}
|
||||
}
|
||||
|
||||
references[:model].each {|k, v|
|
||||
references[:model].each {|_k, v|
|
||||
next if v == 0
|
||||
references[:total] += v
|
||||
}
|
||||
|
|
|
@ -295,7 +295,7 @@ returns
|
|||
|
||||
def self.send( client_id, data )
|
||||
path = "#{@path}/#{client_id}/"
|
||||
filename = "send-#{ Time.now.utc.to_f }"
|
||||
filename = "send-#{Time.now.utc.to_f}"
|
||||
check = true
|
||||
count = 0
|
||||
while check
|
||||
|
@ -458,7 +458,7 @@ returns
|
|||
begin
|
||||
message_parsed = JSON.parse( spool['msg'] )
|
||||
rescue => e
|
||||
log('error', "can't parse spool message: #{ message }, #{ e.inspect }")
|
||||
log('error', "can't parse spool message: #{message}, #{e.inspect}")
|
||||
next
|
||||
end
|
||||
|
||||
|
@ -579,13 +579,13 @@ returns
|
|||
begin
|
||||
Sessions::Client.new(client_id)
|
||||
rescue => e
|
||||
log('error', "thread_client #{client_id} exited with error #{ e.inspect }")
|
||||
log('error', "thread_client #{client_id} exited with error #{e.inspect}")
|
||||
log('error', e.backtrace.join("\n ") )
|
||||
sleep 10
|
||||
begin
|
||||
ActiveRecord::Base.connection_pool.release_connection
|
||||
rescue => e
|
||||
log('error', "Can't reconnect to database #{ e.inspect }")
|
||||
log('error', "Can't reconnect to database #{e.inspect}")
|
||||
end
|
||||
|
||||
try_run_max = 10
|
||||
|
|
|
@ -29,7 +29,7 @@ class Sessions::Backend::ActivityStream
|
|||
end
|
||||
|
||||
def client_key
|
||||
"as::load::#{ self.class }::#{ @user.id }::#{ @client_id }"
|
||||
"as::load::#{self.class}::#{@user.id}::#{@client_id}"
|
||||
end
|
||||
|
||||
def push
|
||||
|
@ -53,7 +53,7 @@ class Sessions::Backend::ActivityStream
|
|||
}
|
||||
end
|
||||
|
||||
@client.log "push activity_stream #{ data.first.class } for user #{ @user.id }"
|
||||
@client.log "push activity_stream #{data.first.class} for user #{@user.id}"
|
||||
@client.send(
|
||||
event: 'activity_stream_rebuild',
|
||||
collection: 'activity_stream',
|
||||
|
|
|
@ -16,7 +16,7 @@ class Sessions::Backend::Collections::Base
|
|||
end
|
||||
|
||||
def client_key
|
||||
"collections::load::#{ self.class }::#{ @user.id }::#{ @client_id }"
|
||||
"collections::load::#{self.class}::#{@user.id}::#{@client_id}"
|
||||
end
|
||||
|
||||
def push
|
||||
|
@ -77,13 +77,13 @@ class Sessions::Backend::Collections::Base
|
|||
assets: assets,
|
||||
}
|
||||
end
|
||||
@client.log "push assets for push_collection #{ items.first.class } for user #{ @user.id }"
|
||||
@client.log "push assets for push_collection #{items.first.class} for user #{@user.id}"
|
||||
@client.send(
|
||||
data: assets,
|
||||
event: [ 'loadAssets' ],
|
||||
)
|
||||
|
||||
@client.log "push push_collection #{ items.first.class } for user #{ @user.id }"
|
||||
@client.log "push push_collection #{items.first.class} for user #{@user.id}"
|
||||
@client.send(
|
||||
event: 'resetCollection',
|
||||
data: {
|
||||
|
|
|
@ -10,7 +10,7 @@ class Sessions::Backend::Rss
|
|||
end
|
||||
|
||||
def collection_key
|
||||
"rss::load::#{ self.class }::#{ @user.id }"
|
||||
"rss::load::#{self.class}::#{@user.id}"
|
||||
end
|
||||
|
||||
def load
|
||||
|
@ -29,7 +29,7 @@ class Sessions::Backend::Rss
|
|||
end
|
||||
|
||||
def client_key
|
||||
"rss::load::#{ self.class }::#{ @user.id }::#{ @client_id }"
|
||||
"rss::load::#{self.class}::#{@user.id}::#{@client_id}"
|
||||
end
|
||||
|
||||
def push
|
||||
|
|
|
@ -27,7 +27,7 @@ class Sessions::Backend::TicketCreate
|
|||
end
|
||||
|
||||
def client_key
|
||||
"as::load::#{ self.class }::#{ @user.id }::#{ @client_id }"
|
||||
"as::load::#{self.class}::#{@user.id}::#{@client_id}"
|
||||
end
|
||||
|
||||
def push
|
||||
|
@ -58,7 +58,7 @@ class Sessions::Backend::TicketCreate
|
|||
}
|
||||
end
|
||||
|
||||
@client.log "push ticket_create for user #{ @user.id }"
|
||||
@client.log "push ticket_create for user #{@user.id}"
|
||||
@client.send(
|
||||
collection: 'ticket_create_attributes',
|
||||
data: data,
|
||||
|
|
|
@ -28,7 +28,7 @@ class Sessions::Backend::TicketOverviewIndex
|
|||
end
|
||||
|
||||
def client_key
|
||||
"as::load::#{ self.class }::#{ @user.id }::#{ @client_id }"
|
||||
"as::load::#{self.class}::#{@user.id}::#{@client_id}"
|
||||
end
|
||||
|
||||
def push
|
||||
|
@ -56,7 +56,7 @@ class Sessions::Backend::TicketOverviewIndex
|
|||
}
|
||||
end
|
||||
|
||||
@client.log "push overview_index for user #{ @user.id }"
|
||||
@client.log "push overview_index for user #{@user.id}"
|
||||
@client.send(
|
||||
event: ['ticket_overview_index'],
|
||||
data: data,
|
||||
|
|
|
@ -38,7 +38,7 @@ class Sessions::Backend::TicketOverviewList
|
|||
end
|
||||
|
||||
def client_key
|
||||
"as::load::#{ self.class }::#{ @user.id }::#{ @client_id }"
|
||||
"as::load::#{self.class}::#{@user.id}::#{@client_id}"
|
||||
end
|
||||
|
||||
def push
|
||||
|
@ -102,7 +102,7 @@ class Sessions::Backend::TicketOverviewList
|
|||
results.push result
|
||||
else
|
||||
|
||||
@client.log "push overview_list for user #{ @user.id }"
|
||||
@client.log "push overview_list for user #{@user.id}"
|
||||
|
||||
# send update to browser
|
||||
@client.send(
|
||||
|
|
|
@ -71,6 +71,6 @@ class Sessions::Client
|
|||
end
|
||||
|
||||
def log( msg )
|
||||
Rails.logger.debug "client(#{ @client_id }) #{ msg }"
|
||||
Rails.logger.debug "client(#{@client_id}) #{msg}"
|
||||
end
|
||||
end
|
||||
|
|
25
lib/tweet.rb
25
lib/tweet.rb
|
@ -40,12 +40,11 @@ class Tweet
|
|||
|
||||
Rails.logger.error "Twitter (#{tweet.id}): unknown user source"
|
||||
|
||||
return
|
||||
end
|
||||
|
||||
def to_user(tweet)
|
||||
|
||||
Rails.logger.debug "Create user from tweet..."
|
||||
Rails.logger.debug 'Create user from tweet...'
|
||||
Rails.logger.debug tweet.inspect
|
||||
|
||||
# do tweet_user lookup
|
||||
|
@ -90,12 +89,12 @@ class Tweet
|
|||
user
|
||||
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 user.inspect
|
||||
Rails.logger.debug group.inspect
|
||||
Rails.logger.debug group_id.inspect
|
||||
|
||||
if tweet.class.to_s == 'Twitter::DirectMessage'
|
||||
ticket = Ticket.find_by(
|
||||
|
@ -112,7 +111,7 @@ class Tweet
|
|||
Ticket.create(
|
||||
customer_id: user.id,
|
||||
title: "#{tweet.text[0, 37]}...",
|
||||
group: Group.find_by( name: group ),
|
||||
group_id: group_id,
|
||||
state: Ticket::State.find_by( name: 'new' ),
|
||||
priority: Ticket::Priority.find_by( name: '2 normal' ),
|
||||
)
|
||||
|
@ -120,7 +119,7 @@ class Tweet
|
|||
|
||||
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 user.inspect
|
||||
Rails.logger.debug ticket.inspect
|
||||
|
@ -154,7 +153,7 @@ class Tweet
|
|||
)
|
||||
end
|
||||
|
||||
def to_group(tweet, group)
|
||||
def to_group(tweet, group_id)
|
||||
|
||||
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
|
||||
|
||||
parent_tweet = @client.status( tweet.in_reply_to_status_id )
|
||||
ticket = to_group( parent_tweet, group )
|
||||
ticket = to_group( parent_tweet, group_id )
|
||||
end
|
||||
else
|
||||
ticket = to_ticket(tweet, user, group)
|
||||
ticket = to_ticket(tweet, user, group_id)
|
||||
end
|
||||
|
||||
to_article(tweet, user, ticket)
|
||||
|
@ -195,7 +194,6 @@ class Tweet
|
|||
|
||||
def from_article(article)
|
||||
|
||||
|
||||
tweet = nil
|
||||
if article[:type] == 'twitter direct-message'
|
||||
|
||||
|
@ -206,10 +204,9 @@ class Tweet
|
|||
article[:body],
|
||||
{}
|
||||
)
|
||||
|
||||
elsif article[:type] == 'twitter status'
|
||||
|
||||
Rails.logger.debug "Create tweet from article..."
|
||||
Rails.logger.debug 'Create tweet from article...'
|
||||
|
||||
tweet = @client.update(
|
||||
article[:body],
|
||||
|
@ -217,6 +214,8 @@ class Tweet
|
|||
in_reply_to_status_id: article[:in_reply_to]
|
||||
}
|
||||
)
|
||||
else
|
||||
fail "Can't handle unknown twitter article type 'article[:type]'."
|
||||
end
|
||||
|
||||
Rails.logger.debug tweet.inspect
|
||||
|
|
|
@ -59,7 +59,7 @@ if ARGV[0] != 'start' && ARGV[0] != 'stop'
|
|||
exit
|
||||
end
|
||||
|
||||
puts "Starting websocket server on #{ @options[:b] }:#{ @options[:p] } (secure:#{ @options[:s] },pid:#{@options[:i]})"
|
||||
puts "Starting websocket server on #{@options[:b]}:#{@options[:p]} (secure:#{@options[:s]},pid:#{@options[:i]})"
|
||||
#puts options.inspect
|
||||
|
||||
if ARGV[0] == 'stop'
|
||||
|
@ -119,11 +119,11 @@ EventMachine.run {
|
|||
ws.onmessage { |msg|
|
||||
|
||||
client_id = ws.object_id.to_s
|
||||
log 'debug', "received: #{ msg } ", client_id
|
||||
log 'debug', "received: #{msg} ", client_id
|
||||
begin
|
||||
data = JSON.parse(msg)
|
||||
rescue => e
|
||||
log 'error', "can't parse message: #{ msg }, #{ e.inspect }", client_id
|
||||
log 'error', "can't parse message: #{msg}, #{e.inspect}", client_id
|
||||
next
|
||||
end
|
||||
|
||||
|
@ -151,7 +151,7 @@ EventMachine.run {
|
|||
|
||||
# create new msg to push to client
|
||||
if item[:type] == 'direct'
|
||||
log 'notice', "send spool to (user_id=#{ @clients[client_id][:session]['id'] })", client_id
|
||||
log 'notice', "send spool to (user_id=#{@clients[client_id][:session]['id']})", client_id
|
||||
websocket_send(client_id, item[:message])
|
||||
else
|
||||
log 'notice', 'send spool', client_id
|
||||
|
@ -198,13 +198,13 @@ EventMachine.run {
|
|||
# broadcast to recipient list
|
||||
if data['recipient']
|
||||
if data['recipient'].class != Hash
|
||||
log 'error', "recipient attribute isn't a hash '#{ data['recipient'].inspect }'"
|
||||
log 'error', "recipient attribute isn't a hash '#{data['recipient'].inspect}'"
|
||||
else
|
||||
if !data['recipient'].key?('user_id')
|
||||
log 'error', "need recipient.user_id attribute '#{ data['recipient'].inspect }'"
|
||||
log 'error', "need recipient.user_id attribute '#{data['recipient'].inspect}'"
|
||||
else
|
||||
if data['recipient']['user_id'].class != Array
|
||||
log 'error', "recipient.user_id attribute isn't an array '#{ data['recipient']['user_id'].inspect }'"
|
||||
log 'error', "recipient.user_id attribute isn't an array '#{data['recipient']['user_id'].inspect}'"
|
||||
else
|
||||
data['recipient']['user_id'].each { |user_id|
|
||||
|
||||
|
@ -251,7 +251,7 @@ EventMachine.run {
|
|||
EventMachine.add_periodic_timer(20) {
|
||||
|
||||
# websocket
|
||||
log 'notice', "Status: websocket clients: #{ @clients.size }"
|
||||
log 'notice', "Status: websocket clients: #{@clients.size}"
|
||||
@clients.each { |client_id, _client|
|
||||
log 'notice', 'working...', client_id
|
||||
}
|
||||
|
@ -263,7 +263,7 @@ EventMachine.run {
|
|||
next if client[:meta][:type] == 'websocket'
|
||||
clients = clients + 1
|
||||
}
|
||||
log 'notice', "Status: ajax clients: #{ clients }"
|
||||
log 'notice', "Status: ajax clients: #{clients}"
|
||||
client_list.each {|client_id, client|
|
||||
next if client[:meta][:type] == 'websocket'
|
||||
log 'notice', 'working...', client_id
|
||||
|
@ -346,7 +346,7 @@ EventMachine.run {
|
|||
if !@options[:v]
|
||||
return if level == 'debug'
|
||||
end
|
||||
puts "#{Time.now.utc.iso8601}:client(#{ client_id }) #{ data }"
|
||||
puts "#{Time.now.utc.iso8601}:client(#{client_id}) #{data}"
|
||||
#puts "#{Time.now.utc.iso8601}:#{ level }:client(#{ client_id }) #{ data }"
|
||||
end
|
||||
|
||||
|
|
|
@ -6,7 +6,7 @@ class AgentUserManageTest < TestCase
|
|||
customer_user_email = 'customer-test-' + rand(999_999).to_s + '@example.com'
|
||||
firstname = 'Customer Firstname'
|
||||
lastname = 'Customer Lastname'
|
||||
fullname = "#{ firstname } #{ lastname } <#{ customer_user_email }>"
|
||||
fullname = "#{firstname} #{lastname} <#{customer_user_email}>"
|
||||
|
||||
@browser = browser_instance
|
||||
login(
|
||||
|
|
|
@ -26,12 +26,12 @@ class SwitchToUserTest < TestCase
|
|||
)
|
||||
|
||||
watch_for(
|
||||
:css => '.switchBackToUser',
|
||||
:value => 'zammad looks like',
|
||||
css: '.switchBackToUser',
|
||||
value: 'zammad looks like',
|
||||
)
|
||||
watch_for(
|
||||
:css => '.switchBackToUser',
|
||||
:value => 'Nicole',
|
||||
css: '.switchBackToUser',
|
||||
value: 'Nicole',
|
||||
)
|
||||
login = @browser.find_elements( { css: '.user-menu .user a' } )[0].attribute('title')
|
||||
assert_equal(login, 'nicole.braun@zammad.org')
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
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 'selenium-webdriver'
|
||||
|
||||
|
@ -152,11 +152,11 @@ class TestCase < Test::Unit::TestCase
|
|||
(1..6).each {
|
||||
sleep 1
|
||||
login = instance.find_elements( { css: '#login' } )[0]
|
||||
if login
|
||||
screenshot( browser: instance, comment: 'logout_ok' )
|
||||
assert( true, 'logout ok' )
|
||||
return
|
||||
end
|
||||
|
||||
next if !login
|
||||
screenshot( browser: instance, comment: 'logout_ok' )
|
||||
assert( true, 'logout ok' )
|
||||
return
|
||||
}
|
||||
screenshot( browser: instance, comment: 'logout_failed' )
|
||||
fail 'no login box found, seems logout was not successfully!'
|
||||
|
@ -578,23 +578,22 @@ class TestCase < Test::Unit::TestCase
|
|||
cookies.each {|cookie|
|
||||
#puts "CCC #{cookie.inspect}"
|
||||
# :name=>"_zammad_session_c25832f4de2", :value=>"adc31cd21615cb0a7ab269184ec8b76f", :path=>"/", :domain=>"localhost", :expires=>nil, :secure=>false}
|
||||
if cookie[:name] =~ /#{params[:name]}/i
|
||||
if params.key?( :value ) && cookie[:value].to_s =~ /#{params[:value]}/i
|
||||
assert( true, "matching value '#{params[:value]}' in cookie '#{cookie}'" )
|
||||
else
|
||||
fail "not matching value '#{params[:value]}' in cookie '#{cookie}'"
|
||||
end
|
||||
if params.key?( :expires ) && cookie[:expires].to_s =~ /#{params[:expires]}/i
|
||||
assert( true, "matching expires '#{params[:expires].inspect}' in cookie '#{cookie}'" )
|
||||
else
|
||||
fail "not matching expires '#{params[:expires]}' in cookie '#{cookie}'"
|
||||
end
|
||||
next if cookie[:name] !~ /#{params[:name]}/i
|
||||
|
||||
if params[:should_not_exist]
|
||||
fail "cookie with name '#{params[:name]}' should not exist, but exists '#{cookies}'"
|
||||
end
|
||||
return
|
||||
if params.key?( :value ) && cookie[:value].to_s =~ /#{params[:value]}/i
|
||||
assert( true, "matching value '#{params[:value]}' in cookie '#{cookie}'" )
|
||||
else
|
||||
fail "not matching value '#{params[:value]}' in cookie '#{cookie}'"
|
||||
end
|
||||
if params.key?( :expires ) && cookie[:expires].to_s =~ /#{params[:expires]}/i
|
||||
assert( true, "matching expires '#{params[:expires].inspect}' in cookie '#{cookie}'" )
|
||||
else
|
||||
fail "not matching expires '#{params[:expires]}' in cookie '#{cookie}'"
|
||||
end
|
||||
|
||||
return if !params[:should_not_exist]
|
||||
|
||||
fail "cookie with name '#{params[:name]}' should not exist, but exists '#{cookies}'"
|
||||
}
|
||||
if params[:should_not_exist]
|
||||
assert( true, "cookie with name '#{params[:name]}' is not existing" )
|
||||
|
@ -1095,7 +1094,7 @@ wait untill text in selector disabppears
|
|||
sleep 1
|
||||
}
|
||||
screenshot( browser: instance, comment: 'ticket_create_failed' )
|
||||
fail "ticket creation failed, can't get zoom url (current url is '#{ instance.current_url }')"
|
||||
fail "ticket creation failed, can't get zoom url (current url is '#{instance.current_url}')"
|
||||
end
|
||||
|
||||
=begin
|
||||
|
@ -1226,17 +1225,18 @@ wait untill text in selector disabppears
|
|||
if data[:state] || data[:group] || data[:body]
|
||||
found = nil
|
||||
(1..10).each {
|
||||
if !found
|
||||
begin
|
||||
text = instance.find_elements( { css: '.content.active .js-reset' } )[0].text
|
||||
if text =~ /(Discard your unsaved changes.|Verwerfen der)/
|
||||
found = true
|
||||
end
|
||||
rescue
|
||||
# try again
|
||||
|
||||
next if found
|
||||
|
||||
begin
|
||||
text = instance.find_elements( { css: '.content.active .js-reset' } )[0].text
|
||||
if text =~ /(Discard your unsaved changes.|Verwerfen der)/
|
||||
found = true
|
||||
end
|
||||
sleep 1
|
||||
rescue
|
||||
# try again
|
||||
end
|
||||
sleep 1
|
||||
}
|
||||
if !found
|
||||
screenshot( browser: instance, comment: 'ticket_update_discard_message_failed' )
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
# encoding: utf-8
|
||||
# rubocop:disable UselessAssignment
|
||||
require 'integration_test_helper'
|
||||
|
||||
class ElasticsearchTest < ActiveSupport::TestCase
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
# encoding: utf-8
|
||||
# rubocop:disable UselessAssignment
|
||||
require 'integration_test_helper'
|
||||
|
||||
class TwitterTest < ActiveSupport::TestCase
|
||||
|
@ -45,18 +44,18 @@ class TwitterTest < ActiveSupport::TestCase
|
|||
search: [
|
||||
{
|
||||
term: '#citheo42',
|
||||
group: 'Twitter',
|
||||
group_id: 2,
|
||||
},
|
||||
{
|
||||
term: '#citheo24',
|
||||
group: 'Users',
|
||||
group_id: 1,
|
||||
},
|
||||
],
|
||||
mentions: {
|
||||
group: 'Twitter',
|
||||
group_id: 2,
|
||||
},
|
||||
direct_messages: {
|
||||
group: 'Twitter',
|
||||
group_id: 2,
|
||||
}
|
||||
}
|
||||
},
|
||||
|
@ -73,7 +72,7 @@ class TwitterTest < ActiveSupport::TestCase
|
|||
ticket = Ticket.create(
|
||||
title: text[0, 40],
|
||||
customer_id: user.id,
|
||||
group: Group.find_by( name: 'Twitter' ),
|
||||
group_id: 2,
|
||||
state: Ticket::State.find_by( name: 'new' ),
|
||||
priority: Ticket::Priority.find_by( name: '2 normal' ),
|
||||
updated_by_id: 1,
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
ENV['RAILS_ENV'] = 'test'
|
||||
# rubocop:disable ClassAndModuleChildren
|
||||
require File.expand_path('../../config/environment', __FILE__)
|
||||
require 'rails/test_help'
|
||||
require 'cache'
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
ENV['RAILS_ENV'] = 'test'
|
||||
# rubocop:disable ClassAndModuleChildren
|
||||
require File.expand_path('../../config/environment', __FILE__)
|
||||
require 'rails/test_help'
|
||||
require 'cache'
|
||||
|
|
|
@ -385,7 +385,7 @@ class ActivityStreamTest < ActiveSupport::TestCase
|
|||
assert_equal( check_item[:o_id], item['o_id'] )
|
||||
else
|
||||
if 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'] }" )
|
||||
assert( false, "entry should not exist #{item['object']}/#{item['type']}/#{item['o_id']}" )
|
||||
end
|
||||
end
|
||||
}
|
||||
|
|
|
@ -86,7 +86,7 @@ class AssetsTest < ActiveSupport::TestCase
|
|||
# touch org, check if user1 has changed
|
||||
sleep 2
|
||||
org2 = Organization.find(org.id)
|
||||
org2.note = "some note...#{rand(9999999999999)}"
|
||||
org2.note = "some note...#{rand(9_999_999_999_999)}"
|
||||
org2.save
|
||||
|
||||
attributes = org2.attributes_with_associations
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
# encoding: utf-8
|
||||
# rubocop:disable PerceivedComplexity, CyclomaticComplexity
|
||||
require 'test_helper'
|
||||
|
||||
class HistoryTest < ActiveSupport::TestCase
|
||||
|
|
|
@ -4,74 +4,74 @@ require 'test_helper'
|
|||
class ModelTest < ActiveSupport::TestCase
|
||||
test 'references test' do
|
||||
|
||||
# create base
|
||||
groups = Group.where( name: 'Users' )
|
||||
roles = Role.where( name: ['Agent', 'Admin'] )
|
||||
agent1 = User.create_or_update(
|
||||
login: 'model-agent1@example.com',
|
||||
firstname: 'Model',
|
||||
lastname: 'Agent1',
|
||||
email: 'model-agent1@example.com',
|
||||
password: 'agentpw',
|
||||
active: true,
|
||||
roles: roles,
|
||||
groups: groups,
|
||||
updated_at: '2015-02-05 16:37:00',
|
||||
updated_by_id: 1,
|
||||
created_by_id: 1,
|
||||
)
|
||||
organization1 = Organization.create_if_not_exists(
|
||||
name: 'Model Org 1',
|
||||
updated_at: '2015-02-05 16:37:00',
|
||||
updated_by_id: 1,
|
||||
created_by_id: 1,
|
||||
)
|
||||
organization2 = Organization.create_if_not_exists(
|
||||
name: 'Model Org 2',
|
||||
updated_at: '2015-02-05 16:37:00',
|
||||
updated_by_id: agent1.id,
|
||||
created_by_id: 1,
|
||||
)
|
||||
roles = Role.where( name: 'Customer' )
|
||||
customer1 = User.create_or_update(
|
||||
login: 'model-customer1@example.com',
|
||||
firstname: 'Model',
|
||||
lastname: 'Customer1',
|
||||
email: 'model-customer1@example.com',
|
||||
password: 'customerpw',
|
||||
active: true,
|
||||
organization_id: organization1.id,
|
||||
roles: roles,
|
||||
updated_at: '2015-02-05 16:37:00',
|
||||
updated_by_id: 1,
|
||||
created_by_id: 1,
|
||||
)
|
||||
customer2 = User.create_or_update(
|
||||
login: 'model-customer2@example.com',
|
||||
firstname: 'Model',
|
||||
lastname: 'Customer2',
|
||||
email: 'model-customer2@example.com',
|
||||
password: 'customerpw',
|
||||
active: true,
|
||||
organization_id: nil,
|
||||
roles: roles,
|
||||
updated_at: '2015-02-05 16:37:00',
|
||||
updated_by_id: agent1.id,
|
||||
created_by_id: 1,
|
||||
)
|
||||
customer3 = User.create_or_update(
|
||||
login: 'model-customer3@example.com',
|
||||
firstname: 'Model',
|
||||
lastname: 'Customer3',
|
||||
email: 'model-customer3@example.com',
|
||||
password: 'customerpw',
|
||||
active: true,
|
||||
organization_id: nil,
|
||||
roles: roles,
|
||||
updated_at: '2015-02-05 16:37:00',
|
||||
updated_by_id: agent1.id,
|
||||
created_by_id: agent1.id,
|
||||
)
|
||||
# create base
|
||||
groups = Group.where( name: 'Users' )
|
||||
roles = Role.where( name: %w(Agent Admin) )
|
||||
agent1 = User.create_or_update(
|
||||
login: 'model-agent1@example.com',
|
||||
firstname: 'Model',
|
||||
lastname: 'Agent1',
|
||||
email: 'model-agent1@example.com',
|
||||
password: 'agentpw',
|
||||
active: true,
|
||||
roles: roles,
|
||||
groups: groups,
|
||||
updated_at: '2015-02-05 16:37:00',
|
||||
updated_by_id: 1,
|
||||
created_by_id: 1,
|
||||
)
|
||||
organization1 = Organization.create_if_not_exists(
|
||||
name: 'Model Org 1',
|
||||
updated_at: '2015-02-05 16:37:00',
|
||||
updated_by_id: 1,
|
||||
created_by_id: 1,
|
||||
)
|
||||
organization2 = Organization.create_if_not_exists(
|
||||
name: 'Model Org 2',
|
||||
updated_at: '2015-02-05 16:37:00',
|
||||
updated_by_id: agent1.id,
|
||||
created_by_id: 1,
|
||||
)
|
||||
roles = Role.where( name: 'Customer' )
|
||||
customer1 = User.create_or_update(
|
||||
login: 'model-customer1@example.com',
|
||||
firstname: 'Model',
|
||||
lastname: 'Customer1',
|
||||
email: 'model-customer1@example.com',
|
||||
password: 'customerpw',
|
||||
active: true,
|
||||
organization_id: organization1.id,
|
||||
roles: roles,
|
||||
updated_at: '2015-02-05 16:37:00',
|
||||
updated_by_id: 1,
|
||||
created_by_id: 1,
|
||||
)
|
||||
customer2 = User.create_or_update(
|
||||
login: 'model-customer2@example.com',
|
||||
firstname: 'Model',
|
||||
lastname: 'Customer2',
|
||||
email: 'model-customer2@example.com',
|
||||
password: 'customerpw',
|
||||
active: true,
|
||||
organization_id: nil,
|
||||
roles: roles,
|
||||
updated_at: '2015-02-05 16:37:00',
|
||||
updated_by_id: agent1.id,
|
||||
created_by_id: 1,
|
||||
)
|
||||
customer3 = User.create_or_update(
|
||||
login: 'model-customer3@example.com',
|
||||
firstname: 'Model',
|
||||
lastname: 'Customer3',
|
||||
email: 'model-customer3@example.com',
|
||||
password: 'customerpw',
|
||||
active: true,
|
||||
organization_id: nil,
|
||||
roles: roles,
|
||||
updated_at: '2015-02-05 16:37:00',
|
||||
updated_by_id: agent1.id,
|
||||
created_by_id: agent1.id,
|
||||
)
|
||||
|
||||
references = Models.references('User', agent1.id)
|
||||
|
||||
|
|
|
@ -54,7 +54,7 @@ class ObjectCacheTest < ActiveSupport::TestCase
|
|||
|
||||
# update group
|
||||
group1 = groups.first
|
||||
group1.note = "some note #{rand(9999999999)}"
|
||||
group1.note = "some note #{rand(9_999_999_999)}"
|
||||
group1.save
|
||||
|
||||
assets = user1.assets({})
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
# encoding: utf-8
|
||||
# rubocop:disable Next, UselessAssignment, BlockNesting
|
||||
require 'test_helper'
|
||||
|
||||
class OnlineNotificationTest < ActiveSupport::TestCase
|
||||
|
@ -283,14 +282,14 @@ class OnlineNotificationTest < ActiveSupport::TestCase
|
|||
notification_check( OnlineNotification.list(agent_user2, 10), test[:check] )
|
||||
|
||||
# check online notifications
|
||||
if test[:update][:online_notification]
|
||||
if test[:update][:online_notification][:seen_only_exists]
|
||||
notifications = OnlineNotification.list_by_object( 'Ticket', ticket.id )
|
||||
assert( notification_seen_only_exists_exists( notifications ), 'not seen notifications for ticket available')
|
||||
else
|
||||
notifications = OnlineNotification.list_by_object( 'Ticket', ticket.id )
|
||||
assert( !notification_seen_only_exists_exists( notifications ), 'seen notifications for ticket available')
|
||||
end
|
||||
next if !test[:update][:online_notification]
|
||||
|
||||
if test[:update][:online_notification][:seen_only_exists]
|
||||
notifications = OnlineNotification.list_by_object( 'Ticket', ticket.id )
|
||||
assert( notification_seen_only_exists_exists( notifications ), 'not seen notifications for ticket available')
|
||||
else
|
||||
notifications = OnlineNotification.list_by_object( 'Ticket', ticket.id )
|
||||
assert( !notification_seen_only_exists_exists( notifications ), 'seen notifications for ticket available')
|
||||
end
|
||||
}
|
||||
|
||||
|
@ -322,27 +321,27 @@ class OnlineNotificationTest < ActiveSupport::TestCase
|
|||
}
|
||||
end
|
||||
|
||||
def notification_check( onine_notifications, checks )
|
||||
def notification_check( online_notifications, checks )
|
||||
checks.each { |check_item|
|
||||
hit = false
|
||||
onine_notifications.each {|onine_notification|
|
||||
if onine_notification['o_id'] == check_item[:o_id]
|
||||
if onine_notification['object'] == check_item[:object]
|
||||
if onine_notification['type'] == check_item[:type]
|
||||
if onine_notification['created_by_id'] == check_item[:created_by_id]
|
||||
hit = true
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
online_notifications.each {|onine_notification|
|
||||
|
||||
next if onine_notification['o_id'] != check_item[:o_id]
|
||||
next if onine_notification['object'] != check_item[:object]
|
||||
next if onine_notification['type'] != check_item[:type]
|
||||
next if onine_notification['created_by_id'] != check_item[:created_by_id]
|
||||
|
||||
hit = true
|
||||
|
||||
break
|
||||
}
|
||||
#puts "--- #{onine_notifications.inspect}"
|
||||
assert( hit, "online notification exists not #{ check_item.inspect }" )
|
||||
#puts "--- #{online_notifications.inspect}"
|
||||
assert( hit, "online notification exists not #{check_item.inspect}" )
|
||||
}
|
||||
end
|
||||
|
||||
def notification_seen_only_exists_exists( onine_notifications )
|
||||
onine_notifications.each {|onine_notification|
|
||||
def notification_seen_only_exists_exists( online_notifications )
|
||||
online_notifications.each {|onine_notification|
|
||||
return false if !onine_notification['seen']
|
||||
}
|
||||
true
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
# encoding: utf-8
|
||||
# rubocop:disable Next, UselessAssignment
|
||||
require 'test_helper'
|
||||
|
||||
class PackageTest < ActiveSupport::TestCase
|
||||
|
@ -281,16 +280,17 @@ X3RhYmxlIDpzYW1wbGVfdGFibGVzDQogIGVuZA0KZW5k</file>
|
|||
exists = Package.where( name: test[:verify][:package][:name], version: test[:verify][:package][:version] ).first
|
||||
assert( exists, "package '#{test[:verify][:package][:name]}' is not installed" )
|
||||
end
|
||||
if test[:verify] && test[:verify][:check_files]
|
||||
test[:verify][:check_files].each {|item|
|
||||
exists = File.exist?( item[:location] )
|
||||
if item[:result]
|
||||
assert( exists, "'#{item[:location]}' exists" )
|
||||
else
|
||||
assert( !exists, "'#{item[:location]}' doesn't exists" )
|
||||
end
|
||||
}
|
||||
end
|
||||
next if !test[:verify]
|
||||
next if !test[:verify][:check_files]
|
||||
|
||||
test[:verify][:check_files].each {|item|
|
||||
exists = File.exist?( item[:location] )
|
||||
if item[:result]
|
||||
assert( exists, "'#{item[:location]}' exists" )
|
||||
else
|
||||
assert( !exists, "'#{item[:location]}' doesn't exists" )
|
||||
end
|
||||
}
|
||||
}
|
||||
|
||||
end
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
# encoding: utf-8
|
||||
# rubocop:disable UselessAssignment
|
||||
require 'test_helper'
|
||||
|
||||
class RestTest < ActiveSupport::TestCase
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
# encoding: utf-8
|
||||
# rubocop:disable UselessAssignment
|
||||
require 'test_helper'
|
||||
|
||||
class SessionBasicTest < ActiveSupport::TestCase
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
# encoding: utf-8
|
||||
# rubocop:disable UselessAssignment
|
||||
require 'test_helper'
|
||||
|
||||
class SessionBasicTicketTest < ActiveSupport::TestCase
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
# encoding: utf-8
|
||||
# rubocop:disable Next, CyclomaticComplexity
|
||||
require 'test_helper'
|
||||
|
||||
class SessionCollectionsTest < ActiveSupport::TestCase
|
||||
|
@ -139,22 +138,22 @@ class SessionCollectionsTest < ActiveSupport::TestCase
|
|||
def check_if_collection_exists(results, collection, attributes = nil)
|
||||
results.each {|result|
|
||||
next if !result
|
||||
if result[:collection] && result[:collection][collection]
|
||||
next if !result[:collection]
|
||||
next if !result[:collection][collection]
|
||||
|
||||
# check just if collection exists
|
||||
return true if !attributes
|
||||
# check just if collection exists
|
||||
return true if !attributes
|
||||
|
||||
# check if objetc with attributes in collection exists
|
||||
result[:collection][collection].each {|item|
|
||||
match_all = true
|
||||
attributes.each {|key, value|
|
||||
if item[ key.to_s ] != value
|
||||
match_all = false
|
||||
end
|
||||
}
|
||||
return true if match_all
|
||||
# check if objetc with attributes in collection exists
|
||||
result[:collection][collection].each {|item|
|
||||
match_all = true
|
||||
attributes.each {|key, value|
|
||||
if item[ key.to_s ] != value
|
||||
match_all = false
|
||||
end
|
||||
}
|
||||
end
|
||||
return true if match_all
|
||||
}
|
||||
}
|
||||
nil
|
||||
end
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
# encoding: utf-8
|
||||
# rubocop:disable Next, UselessAssignment
|
||||
require 'test_helper'
|
||||
|
||||
class SessionEnhancedTest < ActiveSupport::TestCase
|
||||
|
@ -297,15 +296,14 @@ class SessionEnhancedTest < ActiveSupport::TestCase
|
|||
messages.each {|message|
|
||||
#puts ""
|
||||
#puts "message: #{message.inspect}"
|
||||
if message['event'] == 'resetCollection'
|
||||
#puts "rc: "
|
||||
if message['data']
|
||||
message['data'].each {|key, _value|
|
||||
#puts "rc: #{key}"
|
||||
collections_result[key] = true
|
||||
}
|
||||
end
|
||||
end
|
||||
next if message['event'] != 'resetCollection'
|
||||
#puts "rc: "
|
||||
next if !message['data']
|
||||
|
||||
message['data'].each {|key, _value|
|
||||
#puts "rc: #{key}"
|
||||
collections_result[key] = true
|
||||
}
|
||||
}
|
||||
#puts "c: #{collections_result.inspect}"
|
||||
collections_orig.each {|key, _value|
|
||||
|
|
|
@ -49,7 +49,7 @@ class StoreTest < ActiveSupport::TestCase
|
|||
|
||||
# sha check
|
||||
sha_new = Digest::SHA256.hexdigest( attachments[0].content )
|
||||
assert_equal( sha, sha_new, "check file #{ file[:filename] }")
|
||||
assert_equal( sha, sha_new, "check file #{file[:filename]}")
|
||||
|
||||
# filename check
|
||||
assert_equal( file[:filename], attachments[0].filename )
|
||||
|
@ -75,7 +75,7 @@ class StoreTest < ActiveSupport::TestCase
|
|||
|
||||
# sha check
|
||||
sha_new = Digest::SHA256.hexdigest( attachments[0].content )
|
||||
assert_equal( sha, sha_new, "check file #{ file[:filename] }")
|
||||
assert_equal( sha, sha_new, "check file #{file[:filename]}")
|
||||
|
||||
# filename check
|
||||
assert_equal( file[:filename], attachments[0].filename )
|
||||
|
@ -101,7 +101,7 @@ class StoreTest < ActiveSupport::TestCase
|
|||
|
||||
# sha check
|
||||
sha_new = Digest::SHA256.hexdigest( attachments[0].content )
|
||||
assert_equal( sha, sha_new, "check file #{ file[:filename] }")
|
||||
assert_equal( sha, sha_new, "check file #{file[:filename]}")
|
||||
|
||||
# filename check
|
||||
assert_equal( file[:filename], attachments[0].filename )
|
||||
|
|
|
@ -106,9 +106,9 @@ class TagTest < ActiveSupport::TestCase
|
|||
list = Tag.tag_list( tags )
|
||||
test[:verify][:items].each {|key, value|
|
||||
if value == true
|
||||
assert( list.include?( key ), "Tag verify - should exists but exists #{ key }")
|
||||
assert( list.include?( key ), "Tag verify - should exists but exists #{key}")
|
||||
else
|
||||
assert( !list.include?( key ), "Tag verify - exists but should not #{ key }")
|
||||
assert( !list.include?( key ), "Tag verify - exists but should not #{key}")
|
||||
end
|
||||
}
|
||||
}
|
||||
|
|
|
@ -255,15 +255,15 @@ class UserTest < ActiveSupport::TestCase
|
|||
test[:create_verify].each { |key, value|
|
||||
next if key == :image_md5
|
||||
if user.respond_to?( key )
|
||||
assert_equal( value, user.send(key), "create check #{ key } in (#{ test[:name] })" )
|
||||
assert_equal( value, user.send(key), "create check #{key} in (#{test[:name]})" )
|
||||
else
|
||||
assert_equal( value, user[key], "create check #{ key } in (#{ test[:name] })" )
|
||||
assert_equal( value, user[key], "create check #{key} in (#{test[:name]})" )
|
||||
end
|
||||
}
|
||||
if test[:create_verify][:image_md5]
|
||||
file = Avatar.get_by_hash( user.image )
|
||||
file_md5 = Digest::MD5.hexdigest( file.content )
|
||||
assert_equal( test[:create_verify][:image_md5], file_md5, "create avatar md5 check in (#{ test[:name] })" )
|
||||
assert_equal( test[:create_verify][:image_md5], file_md5, "create avatar md5 check in (#{test[:name]})" )
|
||||
end
|
||||
if test[:update]
|
||||
user.update_attributes( test[:update] )
|
||||
|
@ -271,16 +271,16 @@ class UserTest < ActiveSupport::TestCase
|
|||
test[:update_verify].each { |key, value|
|
||||
next if key == :image_md5
|
||||
if user.respond_to?( key )
|
||||
assert_equal( value, user.send(key), "update check #{ key } in (#{ test[:name] })" )
|
||||
assert_equal( value, user.send(key), "update check #{key} in (#{test[:name]})" )
|
||||
else
|
||||
assert_equal( value, user[key], "update check #{ key } in (#{ test[:name] })" )
|
||||
assert_equal( value, user[key], "update check #{key} in (#{test[:name]})" )
|
||||
end
|
||||
}
|
||||
|
||||
if test[:update_verify][:image_md5]
|
||||
file = Avatar.get_by_hash( user.image )
|
||||
file_md5 = Digest::MD5.hexdigest( file.content )
|
||||
assert_equal( test[:update_verify][:image_md5], file_md5, "update avatar md5 check in (#{ test[:name] })" )
|
||||
assert_equal( test[:update_verify][:image_md5], file_md5, "update avatar md5 check in (#{test[:name]})" )
|
||||
end
|
||||
end
|
||||
|
||||
|
|
Loading…
Reference in a new issue