Skip to content

Commit

Permalink
[webui] fix test cases
Browse files Browse the repository at this point in the history
- take out some more caching (for now, to be readded in the models where
  it's sane)
- fix flags validation
- redo the travis split
- use truncation for database cleaner

(and due to rubymine insisting replace "" with '' where no escaping is
necessary)
  • Loading branch information
coolo committed Oct 22, 2013
1 parent 5fa1ae4 commit 73450d0
Show file tree
Hide file tree
Showing 43 changed files with 1,210 additions and 1,236 deletions.
10 changes: 4 additions & 6 deletions .travis.yml
Expand Up @@ -9,16 +9,14 @@ before_script:
script: bash -x dist/ci/obs_testsuite_travis.sh
env:
# just one special test
#- SUBTEST=webui:functional/users_test.rb:test_add_and_edit_package_people
#- SUBTEST=api:functional/public_controller_test.rb:test_binaries
# full api test suite
- SUBTEST=rake:test:units
- SUBTEST=rake:test:webui
- SUBTEST=rake:test:api
- SUBTEST=api:functional/webui/spider_test.rb:test_spider_as_admin RUN_SPIDER=1
- SUBTEST=rake:test:webui1
- SUBTEST=rake:test:webui2
- SUBTEST=api:functional/webui/spider_test.rb:test_spider_anonymously RUN_SPIDER=1
- SUBTEST=api:functional/webui/spider_test.rb:test_spider_as_admin RUN_SPIDER=1
# api and webui webrat with latest gems
- SUBTEST=rake:test REMOVEGEMLOCK=true
#- SUBTEST=rake:test REMOVEGEMLOCK=true
matrix:
allow_failures:
- env: SUBTEST=rake:test REMOVEGEMLOCK=true
Expand Down
1 change: 1 addition & 0 deletions dist/ci/obs_testsuite_travis.sh
Expand Up @@ -24,6 +24,7 @@ case $SUBTEST in
cd src/api
SUBTEST=${SUBTEST/rake:/}
bundle exec rake $SUBTEST --trace || ret=1
tail -n 6000 log/test.log
;;
api:*)
cd src/api
Expand Down
2 changes: 0 additions & 2 deletions src/api/app/controllers/test_controller.rb
Expand Up @@ -47,14 +47,12 @@ def test_start
test_end
end
@@test_running = true
DatabaseCleaner.start
render_ok
end


def test_end
@@test_running = false
DatabaseCleaner.clean
Rails.cache.clear
end
end
16 changes: 8 additions & 8 deletions src/api/app/helpers/flag_helper.rb
Expand Up @@ -96,12 +96,12 @@ def remove_flag(flag, repository, arch)
self.flags.delete(flags_to_remove)
end

def add_flag(flag, status, repository, arch)
def add_flag(flag, status, repository = nil, arch = nil)
validate_type flag
unless status == 'enable' or status == 'disable'
raise ArgumentError.new("Error: unknown status for flag '#{status}'")
end
self.flags.create( :status => status, :flag => flag ) do |f|
self.flags.build( status: status, flag: flag ) do |f|
f.architecture = Architecture.find_by_name(arch) if arch
f.repo = repository
end
Expand All @@ -110,13 +110,13 @@ def add_flag(flag, status, repository, arch)
def enabled_for?(flag_type, repo, arch)
state = find_flag_state(flag_type, repo, arch)
logger.debug "enabled_for #{flag_type} repo:#{repo} arch:#{arch} state:#{state.to_s}"
return state == 'enable' ? true : false
return state.to_sym == :enable ? true : false
end

def disabled_for?(flag_type, repo, arch)
state = find_flag_state(flag_type, repo, arch)
logger.debug "disabled_for #{flag_type} repo:#{repo} arch:#{arch} state:#{state.to_s}"
return state == 'disable' ? true : false
return state.to_sym == :disable ? true : false
end

def find_flag_state(flag_type, repo, arch)
Expand All @@ -133,7 +133,7 @@ def find_flag_state(flag_type, repo, arch)

if state == :default
if self.respond_to? 'project'
logger.debug "flagcheck: package has default state, checking project"
logger.debug 'flagcheck: package has default state, checking project'
state = self.project.find_flag_state(flag_type, repo, arch)
else
state = FlagHelper.default_for(flag_type)
Expand All @@ -145,7 +145,7 @@ def find_flag_state(flag_type, repo, arch)

def flags_to_xml(builder, expand_flags, pkg=nil)
FlagHelper.flag_types.each do |flag_name|
next if pkg and flag_name == "access" # no access flag in packages
next if pkg and flag_name == 'access' # no access flag in packages
builder.send(flag_name) do
expand_flags[flag_name].each do |l|
builder.send(l[0], l[1])
Expand All @@ -159,8 +159,8 @@ def self.xml_disabled_for?(xmlhash, flagtype)
disabled = false
xmlhash.elements(flagtype.to_s) do |xmlflags|
xmlflags.keys.each do |status|
disabled = true if status == "disable"
return false if status == "enable"
disabled = true if status == 'disable'
return false if status == 'enable'
end
end
return disabled
Expand Down
12 changes: 6 additions & 6 deletions src/api/app/models/flag.rb
@@ -1,6 +1,6 @@
class Flag < ActiveRecord::Base
belongs_to :project, foreign_key: :db_project_id
belongs_to :package, foreign_key: :db_package_id
belongs_to :project, foreign_key: :db_project_id, inverse_of: :flags
belongs_to :package, foreign_key: :db_package_id, inverse_of: :flags

belongs_to :architecture

Expand Down Expand Up @@ -72,10 +72,10 @@ def to_s

validate :validate_custom_save
def validate_custom_save
errors.add(:name, "Please set either project_id or package_id.") if self.project.nil? and self.package.nil?
errors.add(:flag, "There needs to be a valid flag.") unless FlagHelper::TYPES.has_key?(self.flag)
errors.add(:status, "Status needs to be enable or disable") unless (self.status == 'enable' or self.status == 'disable')
errors.add(:name, "Please set either project_id or package_id.") unless self.db_project_id.nil? or self.db_package_id.nil?
errors.add(:name, 'Please set either project or package.') if self.project.nil? and self.package.nil?
errors.add(:name, 'Please set either project or package.') unless self.project.nil? or self.package.nil?
errors.add(:flag, 'There needs to be a valid flag.') unless FlagHelper::TYPES.has_key?(self.flag.to_s)
errors.add(:status, 'Status needs to be enable or disable') unless (self.status && (self.status.to_sym == :enable or self.status.to_sym == :disable))
end

end
78 changes: 41 additions & 37 deletions src/api/app/models/package.rb
Expand Up @@ -11,26 +11,26 @@ class Package < ActiveRecord::Base
include HasAttributes

class CycleError < APIException
setup "cycle_error"
setup 'cycle_error'
end
class DeleteError < APIException
attr_accessor :packages
setup "delete_error"
setup 'delete_error'
end
class SaveError < APIException
setup "package_save_error"
setup 'package_save_error'
end
class WritePermissionError < APIException
setup "package_write_permission_error"
setup 'package_write_permission_error'
end
class ReadAccessError < APIException
setup 'unknown_package', 404, "Unknown package"
setup 'unknown_package', 404, 'Unknown package'
end
class UnknownObjectError < APIException
setup 'unknown_package', 404, "Unknown package"
setup 'unknown_package', 404, 'Unknown package'
end
class ReadSourceAccessError < APIException
setup 'source_access_no_permission', 403, "Source Access not allowed"
setup 'source_access_no_permission', 403, 'Source Access not allowed'
end
belongs_to :project, foreign_key: :db_project_id, inverse_of: :packages
delegate :name, to: :project, prefix: true
Expand All @@ -42,10 +42,10 @@ class ReadSourceAccessError < APIException

has_many :download_stats

has_many :flags, -> { order(:position) }, dependent: :delete_all, foreign_key: :db_package_id
has_many :flags, -> { order(:position) }, dependent: :delete_all, foreign_key: :db_package_id, inverse_of: :package

belongs_to :develpackage, :class_name => "Package", :foreign_key => 'develpackage_id'
has_many :develpackages, :class_name => "Package", :foreign_key => 'develpackage_id'
belongs_to :develpackage, :class_name => 'Package', :foreign_key => 'develpackage_id'
has_many :develpackages, :class_name => 'Package', :foreign_key => 'develpackage_id'

has_many :attribs, :dependent => :destroy, foreign_key: :db_package_id

Expand All @@ -61,9 +61,9 @@ class ReadSourceAccessError < APIException
before_update :update_activity
after_rollback :reset_cache

default_scope { where("packages.db_project_id not in (?)", Relationship.forbidden_project_ids ) }
default_scope { where('packages.db_project_id not in (?)', Relationship.forbidden_project_ids ) }

scope :dirty_backend_package, -> { joins("left outer join backend_packages on backend_packages.package_id = packages.id").where("backend_packages.package_id is null") }
scope :dirty_backend_package, -> { joins('left outer join backend_packages on backend_packages.package_id = packages.id').where('backend_packages.package_id is null') }

validates :name, presence: true, length: { maximum: 200 }
validate :valid_name
Expand All @@ -79,7 +79,7 @@ def check_access?(dbpkg=self)
end

def check_cache(project, package, opts)
@key = { "get_by_project_and_name" => 1, package: package, opts: opts }
@key = { 'get_by_project_and_name' => 1, package: package, opts: opts }

@key[:user] = User.current.cache_key if User.current

Expand Down Expand Up @@ -153,12 +153,16 @@ def get_by_project_and_name!( project, package, opts = {} )

# to check existens of a project (local or remote)
def exists_by_project_and_name( project, package, opts = {} )
raise "get_by_project_and_name expects a hash as third arg" unless opts.kind_of? Hash
raise 'get_by_project_and_name expects a hash as third arg' unless opts.kind_of? Hash
opts = { follow_project_links: true, allow_remote_packages: false}.merge(opts)
if Project.is_remote_project?( project )
return opts[:allow_remote_packages] && exist_package_on_backend?(package, project)
end
prj = Project.get_by_name( project )
begin
prj = Project.get_by_name( project )
rescue Project::UnknownObjectError
return false
end
if opts[:follow_project_links]
pkg = prj.find_package(package)
else
Expand Down Expand Up @@ -199,14 +203,14 @@ def find_by_attribute_type( attrib_type, package=nil )
END_SQL

if package
sql += " AND pack.name = ? GROUP by pack.id"
sql += ' AND pack.name = ? GROUP by pack.id'
ret = Package.find_by_sql [sql, attrib_type.id.to_s, attrib_type.id.to_s, package]
ret.each do |dbpkg|
ret.delete(dbpkg) unless Package.check_access?(dbpkg)
end
return ret
end
sql += " GROUP by pack.id"
sql += ' GROUP by pack.id'
ret = Package.find_by_sql [sql, attrib_type.id.to_s, attrib_type.id.to_s]
ret.each do |dbpkg|
ret.delete(dbpkg) unless Package.check_access?(dbpkg)
Expand All @@ -225,14 +229,14 @@ def find_by_attribute_type_and_value( attrib_type, value, package=nil )
END_SQL

if package
sql += " AND pack.name = ?"
sql += ' AND pack.name = ?'
ret = Package.find_by_sql [sql, attrib_type.id.to_s, value.to_s, package]
ret.each do |dbpkg|
ret.delete(dbpkg) unless Package.check_access?(dbpkg)
end
return ret
end
sql += " GROUP by pack.id"
sql += ' GROUP by pack.id'
ret = Package.find_by_sql [sql, attrib_type.id.to_s, value.to_s]
ret.each do |dbpkg|
ret.delete(dbpkg) unless Package.check_access?(dbpkg)
Expand Down Expand Up @@ -298,10 +302,10 @@ def find_linking_packages(project_local=nil)
data = REXML::Document.new(answer.body)
result = []

data.elements.each("collection/package") do |e|
data.elements.each('collection/package') do |e|
p = Package.find_by_project_and_name( e.attributes['project'], e.attributes['name'] )
if p.nil?
logger.error "read permission or data inconsistency, backend delivered package as linked package where no database object exists: #{e.attributes["project"]} / #{e.attributes["name"]}"
logger.error "read permission or data inconsistency, backend delivered package as linked package where no database object exists: #{e.attributes['project']} / #{e.attributes['name']}"
else
result.push( p )
end
Expand Down Expand Up @@ -466,15 +470,15 @@ def update_product_list
end

def detect_package_kinds(directory)
raise ArgumentError.new "neh!" if directory.has_key? 'time'
raise ArgumentError.new 'neh!' if directory.has_key? 'time'
ret = []
directory.elements("entry") do |e|
directory.elements('entry') do |e|
%w{patchinfo aggregate link channel}.each do |kind|
if e["name"] == '_' + kind
if e['name'] == '_' + kind
ret << kind
end
end
if e["name"] =~ /.product$/
if e['name'] =~ /.product$/
ret << 'product'
end
# further types my be spec, dsc, kiwi in future
Expand All @@ -494,10 +498,10 @@ def resolve_devel_package
#logger.debug "resolve_devel_package #{pkg.inspect}"

# cycle detection
str = prj_name+"/"+pkg.name
str = prj_name+'/'+pkg.name
if processed[str]
processed.keys.each do |key|
str = str + " -- " + key
str = str + ' -- ' + key
end
raise CycleError.new "There is a cycle in devel definition at #{str}"
end
Expand Down Expand Up @@ -566,7 +570,7 @@ def update_from_xml( xmlhash )

# for the HasAttributes mixing
def attribute_url
self.source_path("_attribute")
self.source_path('_attribute')
end

def store(opts = {})
Expand Down Expand Up @@ -612,9 +616,9 @@ def to_axml(view = nil)
def self.activity_algorithm
# this is the algorithm (sql) we use for calculating activity of packages
# we use Time.now.to_i instead of UNIX_TIMESTAMP() so we can test with frozen ruby time
"( packages.activity_index * " +
'( packages.activity_index * ' +
"POWER( 2.3276, (UNIX_TIMESTAMP(packages.updated_at) - #{Time.now.to_i})/10000000 ) " +
") as activity_value"
') as activity_value'
end

before_validation(on: :create) do
Expand Down Expand Up @@ -651,14 +655,14 @@ def expand_flags

def open_requests_with_package_as_source_or_target
rel = BsRequest.where(state: [:new, :review, :declined]).joins(:bs_request_actions)
rel = rel.where("(bs_request_actions.source_project = ? and bs_request_actions.source_package = ?) or (bs_request_actions.target_project = ? and bs_request_actions.target_package = ?)", self.project.name, self.name, self.project.name, self.name)
return BsRequest.where(id: rel.select("bs_requests.id").map { |r| r.id})
rel = rel.where('(bs_request_actions.source_project = ? and bs_request_actions.source_package = ?) or (bs_request_actions.target_project = ? and bs_request_actions.target_package = ?)', self.project.name, self.name, self.project.name, self.name)
return BsRequest.where(id: rel.select('bs_requests.id').map { |r| r.id})
end

def open_requests_with_by_package_review
rel = BsRequest.where(state: [:new, :review])
rel = rel.joins(:reviews).where("reviews.state = 'new' and reviews.by_project = ? and reviews.by_package = ? ", self.project.name, self.name)
return BsRequest.where(id: rel.select("bs_requests.id").map { |r| r.id})
return BsRequest.where(id: rel.select('bs_requests.id').map { |r| r.id})
end

def linkinfo
Expand Down Expand Up @@ -717,18 +721,18 @@ def self.valid_name?(name)
end

def valid_name
errors.add(:name, "is illegal") unless Package.valid_name?(self.name)
errors.add(:name, 'is illegal') unless Package.valid_name?(self.name)
end

def branch_from(origin_project, origin_package, rev=nil, missingok=nil, comment=nil)
myparam = { :cmd => "branch",
:noservice => "1",
myparam = { :cmd => 'branch',
:noservice => '1',
:oproject => origin_project,
:opackage => origin_package,
:user => User.current.login,
}
myparam[:orev] = rev if rev and not rev.empty?
myparam[:missingok] = "1" if missingok
myparam[:missingok] = '1' if missingok
myparam[:comment] = comment if comment
path = self.source_path + Suse::Backend.build_query_from_hash(myparam, [:cmd, :oproject, :opackage, :user, :comment, :orev, :missingok])
# branch sources in backend
Expand Down

0 comments on commit 73450d0

Please sign in to comment.