mirror of
https://github.com/odoo/runbot.git
synced 2025-03-24 03:46:00 +07:00

rebase() can fail after merge(), during set_ref(), having already updated the target. Under the pre-rebase model, stage() assumed on a staging failure on a given repo it only had to rollback stagings having succeeded. This assumption fails in a post-rebase model as even a failed staging can have modified the target, leading to the next staging (if multiple batches are ready) containing the failed one. Things can get really strange if the set_ref failure was (as it probably is) some sort of transient failure, as the following staging will likely succeed (under the assumption that most PRs/batches pass staging) as PR1's content gets merged as part of PR2, and PR2 is merged empty of content later on.
102 lines
2.8 KiB
Python
102 lines
2.8 KiB
Python
# -*- coding: utf-8 -*-
|
|
import odoo
|
|
import pytest
|
|
import fake_github
|
|
|
|
@pytest.fixture(scope='session')
|
|
def remote_p():
|
|
return False
|
|
|
|
@pytest.fixture
|
|
def gh():
|
|
with fake_github.Github() as gh:
|
|
yield gh
|
|
|
|
@pytest.fixture(scope='session')
|
|
def registry(request):
|
|
""" Set up Odoo & yields a registry to the specified db
|
|
"""
|
|
db = request.config.getoption('--db')
|
|
addons = request.config.getoption('--addons-path')
|
|
odoo.tools.config.parse_config(['--addons-path', addons, '-d', db, '--db-filter', db])
|
|
try:
|
|
odoo.service.db._create_empty_database(db)
|
|
odoo.service.db._initialize_db(None, db, False, False, 'admin')
|
|
except odoo.service.db.DatabaseExists:
|
|
pass
|
|
|
|
#odoo.service.server.load_server_wide_modules()
|
|
#odoo.service.server.preload_registries([db])
|
|
|
|
with odoo.api.Environment.manage():
|
|
# ensure module is installed
|
|
r0 = odoo.registry(db)
|
|
with r0.cursor() as cr:
|
|
env = odoo.api.Environment(cr, 1, {})
|
|
[mod] = env['ir.module.module'].search([('name', '=', 'runbot_merge')])
|
|
mod.button_immediate_install()
|
|
|
|
from odoo.addons.runbot_merge.models import pull_requests
|
|
pull_requests.STAGING_SLEEP = 0
|
|
yield odoo.registry(db)
|
|
|
|
@pytest.fixture
|
|
def env(registry):
|
|
with registry.cursor() as cr:
|
|
env = odoo.api.Environment(cr, odoo.SUPERUSER_ID, {})
|
|
ctx = env['res.users'].context_get()
|
|
registry.enter_test_mode(cr)
|
|
yield env(context=ctx)
|
|
registry.leave_test_mode()
|
|
|
|
cr.rollback()
|
|
|
|
@pytest.fixture
|
|
def owner():
|
|
return 'user'
|
|
|
|
@pytest.fixture(autouse=True)
|
|
def users(env):
|
|
env['res.partner'].create({
|
|
'name': "Reviewer",
|
|
'github_login': 'reviewer',
|
|
'reviewer': True,
|
|
})
|
|
env['res.partner'].create({
|
|
'name': "Self Reviewer",
|
|
'github_login': 'self_reviewer',
|
|
'self_reviewer': True,
|
|
})
|
|
|
|
return {
|
|
'reviewer': 'reviewer',
|
|
'self_reviewer': 'self_reviewer',
|
|
'other': 'other',
|
|
'user': 'user',
|
|
}
|
|
|
|
@pytest.fixture
|
|
def project(env):
|
|
return env['runbot_merge.project'].create({
|
|
'name': 'odoo',
|
|
'github_token': 'okokok',
|
|
'github_prefix': 'hansen',
|
|
'branch_ids': [(0, 0, {'name': 'master'})],
|
|
'required_statuses': 'legal/cla,ci/runbot',
|
|
})
|
|
|
|
@pytest.fixture
|
|
def make_repo(gh, project):
|
|
def make_repo(name):
|
|
fullname = 'org/' + name
|
|
project.write({'repo_ids': [(0, 0, {'name': fullname})]})
|
|
return gh.repo(fullname, hooks=[
|
|
((odoo.http.root, '/runbot_merge/hooks'), [
|
|
'pull_request', 'issue_comment', 'status', 'pull_request_review'
|
|
])
|
|
])
|
|
return make_repo
|
|
# TODO: project fixture
|
|
# TODO: repos (indirect/parameterize?) w/ WS hook
|
|
# + repo proxy object
|