test for forking repo and cloning it to local repo
This commit is contained in:
parent
8f6dfe7b2f
commit
417317f9b5
|
@ -15,3 +15,7 @@ class BasePageObject(object):
|
||||||
@property
|
@property
|
||||||
def time_now(self):
|
def time_now(self):
|
||||||
return datetime.now().strftime('%-m%-d%-H%-M%-S')
|
return datetime.now().strftime('%-m%-d%-H%-M%-S')
|
||||||
|
|
||||||
|
@property
|
||||||
|
def current_url(self):
|
||||||
|
return self.driver.current_url
|
||||||
|
|
|
@ -2,6 +2,10 @@ import time, pytest
|
||||||
from pages.base_element import *
|
from pages.base_element import *
|
||||||
from pages.base_page import BasePageObject
|
from pages.base_page import BasePageObject
|
||||||
from tests import test_data
|
from tests import test_data
|
||||||
|
from git import Repo
|
||||||
|
import os
|
||||||
|
import shutil
|
||||||
|
import logging
|
||||||
|
|
||||||
|
|
||||||
class EmailEditbox(BaseEditBox):
|
class EmailEditbox(BaseEditBox):
|
||||||
|
@ -106,6 +110,32 @@ class ContractBody(BaseText):
|
||||||
super(ContractBody, self).__init__(driver)
|
super(ContractBody, self).__init__(driver)
|
||||||
self.locator = self.Locator.xpath_selector("//tbody//p[contains(text(), "
|
self.locator = self.Locator.xpath_selector("//tbody//p[contains(text(), "
|
||||||
"'Current balance: 0.000000 ETH')]")
|
"'Current balance: 0.000000 ETH')]")
|
||||||
|
class IssueId(BaseText):
|
||||||
|
def __init__(self, driver):
|
||||||
|
super(IssueId, self).__init__(driver)
|
||||||
|
self.locator = self.Locator.css_selector(".gh-header-number")
|
||||||
|
|
||||||
|
class ForkButton(BaseButton):
|
||||||
|
def __init__(self, driver):
|
||||||
|
super(ForkButton, self).__init__(driver)
|
||||||
|
self.locator = self.Locator.css_selector("[href='#fork-destination-box']")
|
||||||
|
|
||||||
|
class HeaderInForkPopup(BaseText):
|
||||||
|
def __init__(self, driver):
|
||||||
|
super(HeaderInForkPopup, self).__init__(driver)
|
||||||
|
self.locator = self.Locator.css_selector("#facebox-header")
|
||||||
|
|
||||||
|
class UserAccountInForkPopup(BaseButton):
|
||||||
|
def __init__(self, driver):
|
||||||
|
super(UserAccountInForkPopup, self).__init__(driver)
|
||||||
|
self.locator = self.Locator.css_selector("[value=%s]"%test_data.config['DEV']['gh_username'])
|
||||||
|
|
||||||
|
|
||||||
|
class ForkedRepoText(BaseText):
|
||||||
|
def __init__(self, driver):
|
||||||
|
super(ForkedRepoText, self).__init__(driver)
|
||||||
|
self.locator = self.Locator.css_selector(".commit-tease")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class GithubPage(BasePageObject):
|
class GithubPage(BasePageObject):
|
||||||
|
@ -133,18 +163,28 @@ class GithubPage(BasePageObject):
|
||||||
self.cross_button = LabelsButton.CrossButton(self.driver)
|
self.cross_button = LabelsButton.CrossButton(self.driver)
|
||||||
self.submit_new_issue_button = SubmitNewIssueButton(self.driver)
|
self.submit_new_issue_button = SubmitNewIssueButton(self.driver)
|
||||||
self.contract_body = ContractBody(self.driver)
|
self.contract_body = ContractBody(self.driver)
|
||||||
|
self.issue_id = IssueId(self.driver)
|
||||||
|
self.fork_button = ForkButton(self.driver)
|
||||||
|
self.header_in_fork_popup = HeaderInForkPopup(self.driver)
|
||||||
|
self.user_account_in_fork_popup = UserAccountInForkPopup(self.driver)
|
||||||
|
self.forked_repo_text = ForkedRepoText(self.driver)
|
||||||
|
|
||||||
|
|
||||||
def get_issues_page(self):
|
def get_issues_page(self):
|
||||||
self.driver.get('https://github.com/Org4/nov13/issues')
|
self.driver.get(test_data.config['ORG']['gh_repo'] + 'issues')
|
||||||
|
|
||||||
|
def get_issue_page(self, issue_id):
|
||||||
|
self.driver.get(test_data.config['ORG']['gh_repo'] + 'issues/' + issue_id)
|
||||||
|
|
||||||
def get_sob_plugin_page(self):
|
def get_sob_plugin_page(self):
|
||||||
self.driver.get('http://github.com/apps/status-open-bounty-app-test')
|
self.driver.get(test_data.config['Common']['sob_test_app'])
|
||||||
|
|
||||||
def sign_in(self, email, password):
|
def sign_in(self, email, password):
|
||||||
self.email_input.send_keys(email)
|
self.email_input.send_keys(email)
|
||||||
self.password_input.send_keys(password)
|
self.password_input.send_keys(password)
|
||||||
self.sign_in_button.click()
|
self.sign_in_button.click()
|
||||||
|
|
||||||
|
|
||||||
def install_sob_plugin(self):
|
def install_sob_plugin(self):
|
||||||
initial_url = self.driver.current_url
|
initial_url = self.driver.current_url
|
||||||
self.get_sob_plugin_page()
|
self.get_sob_plugin_page()
|
||||||
|
@ -164,7 +204,19 @@ class GithubPage(BasePageObject):
|
||||||
self.bounty_label.click()
|
self.bounty_label.click()
|
||||||
self.cross_button.click()
|
self.cross_button.click()
|
||||||
self.submit_new_issue_button.click()
|
self.submit_new_issue_button.click()
|
||||||
return test_data.issue['title']
|
test_data.issue['id'] = self.issue_id.text[1:]
|
||||||
|
logging.info("Issue id is %s" % test_data.issue['id'])
|
||||||
|
logging.info("Issue title is %s" % test_data.issue['title'])
|
||||||
|
|
||||||
|
def fork_repo(self, initial_repo, wait=60):
|
||||||
|
self.driver.get(initial_repo)
|
||||||
|
self.fork_button.click()
|
||||||
|
if self.header_in_fork_popup.text == 'Where should we fork this repository?':
|
||||||
|
self.user_account_in_fork_popup.click()
|
||||||
|
self.forked_repo_text.wait_for_element(wait)
|
||||||
|
|
||||||
|
def get_login_page(self):
|
||||||
|
self.driver.get(test_data.config['Common']['gh_login'])
|
||||||
|
|
||||||
def get_deployed_contract(self, wait=120):
|
def get_deployed_contract(self, wait=120):
|
||||||
for i in range(wait):
|
for i in range(wait):
|
||||||
|
@ -175,3 +227,26 @@ class GithubPage(BasePageObject):
|
||||||
time.sleep(10)
|
time.sleep(10)
|
||||||
pass
|
pass
|
||||||
pytest.fail('Contract is not deployed in %s minutes!' % str(wait/60))
|
pytest.fail('Contract is not deployed in %s minutes!' % str(wait/60))
|
||||||
|
|
||||||
|
#cloning via HTTPS
|
||||||
|
def clone_repo(self, initial_repo=None, username=None, repo_name=None, repo_path='git_repo'):
|
||||||
|
os.mkdir(repo_path)
|
||||||
|
os.chdir(repo_path)
|
||||||
|
test_data.local_repo_path = os.getcwd()
|
||||||
|
fork = 'https://github.com/%s/%s.git' % (username, repo_name)
|
||||||
|
logging.info(('Cloning from %s to %s' % (fork, repo_path)))
|
||||||
|
r = Repo.clone_from(fork, repo_path)
|
||||||
|
logging.info(('Successefully cloned to: %s' % test_data.local_repo_path))
|
||||||
|
logging.info('Set upstream to %s'% initial_repo)
|
||||||
|
upstream = r.create_remote('upstream', initial_repo)
|
||||||
|
upstream.fetch()
|
||||||
|
assert upstream.exists()
|
||||||
|
r.heads.master.checkout()
|
||||||
|
|
||||||
|
def clean_repo_local_folder(self):
|
||||||
|
logging.info('Removing %s' % test_data.local_repo_path)
|
||||||
|
if test_data.local_repo_path:
|
||||||
|
shutil.rmtree(test_data.local_repo_path)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -16,3 +16,6 @@ selenium==2.53.6
|
||||||
six==1.10.0
|
six==1.10.0
|
||||||
urllib3==1.22
|
urllib3==1.22
|
||||||
yarl==0.12.0
|
yarl==0.12.0
|
||||||
|
gitpython==2.1.8
|
||||||
|
gitdb2==2.0.3
|
||||||
|
smmap2==2.0.3
|
|
@ -3,15 +3,17 @@ import configparser
|
||||||
class TestData(object):
|
class TestData(object):
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.test_name = None
|
|
||||||
self.config = configparser.ConfigParser()
|
self.config = configparser.ConfigParser()
|
||||||
|
|
||||||
# define here path to your config.ini file
|
# define here path to your config.ini file
|
||||||
#example - config_example.ini
|
# example - config_example.ini
|
||||||
|
|
||||||
self.config.read('config.ini')
|
self.config.read('config.ini')
|
||||||
self.base_case_issue = dict()
|
|
||||||
self.base_case_issue['title'] = 'Very first auto_test_bounty'
|
# self.issue['title'] is set in GithubPage::create_new_bounty
|
||||||
|
# self.issue['id'] is set in GithubPage::create_new_bounty
|
||||||
|
# self.local_repo_path is set in GithubPage::clone_repo
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
test_data = TestData()
|
test_data = TestData()
|
||||||
|
|
|
@ -1,13 +1,27 @@
|
||||||
[Common]
|
[Common]
|
||||||
;app URL
|
;app URL
|
||||||
url = https://openbounty.status.im:444/
|
url = https://openbounty.status.im:444/
|
||||||
|
;URL to GH openbounty app
|
||||||
|
sob_test_app = http://github.com/apps/status-open-bounty-app-test
|
||||||
|
gh_login = https://github.com/login
|
||||||
[Paths]
|
[Paths]
|
||||||
;AbsolutePath to 'tests' folder
|
;AbsolutePath to 'tests' folder
|
||||||
tests_absolute = /usr/dir/open-bounty/test/end-to-end/tests/
|
tests_absolute = /usr/dir/open-bounty/test/end-to-end/tests/
|
||||||
[ORG]
|
[ORG]
|
||||||
;GitHub credentials for organization
|
|
||||||
|
;GitHub credentials for organization owner
|
||||||
gh_login = login
|
gh_login = login
|
||||||
gh_password = password
|
gh_password = password
|
||||||
|
;GitHub repo path
|
||||||
|
gh_repo = https://github.com/org_name/repo_name/
|
||||||
|
;GitHub repo name
|
||||||
|
gh_repo_name = repo_name
|
||||||
|
|
||||||
;MetaMask password for organization
|
;MetaMask password for organization
|
||||||
mm_password = password
|
mm_password = password
|
||||||
|
|
||||||
|
[DEV]
|
||||||
|
;GitHub credentials for developer
|
||||||
|
gh_login = login
|
||||||
|
gh_password = password
|
||||||
|
gh_username = username
|
|
@ -2,6 +2,7 @@ import pytest
|
||||||
from os import environ
|
from os import environ
|
||||||
from pages.openbounty.landing import LandingPage
|
from pages.openbounty.landing import LandingPage
|
||||||
from pages.openbounty.bounties import BountiesPage
|
from pages.openbounty.bounties import BountiesPage
|
||||||
|
from pages.thirdparty.github import GithubPage
|
||||||
from tests.basetestcase import BaseTestCase
|
from tests.basetestcase import BaseTestCase
|
||||||
from tests import test_data
|
from tests import test_data
|
||||||
|
|
||||||
|
@ -37,6 +38,26 @@ class TestLogin(BaseTestCase):
|
||||||
assert titles[0].text == test_data.issue['title']
|
assert titles[0].text == test_data.issue['title']
|
||||||
|
|
||||||
|
|
||||||
|
def test_forking_repo(self):
|
||||||
|
github = GithubPage(self.driver)
|
||||||
|
self.cleanup = True
|
||||||
|
|
||||||
|
# Sign In to GH as Developer
|
||||||
|
github.get_login_page()
|
||||||
|
github.sign_in(test_data.config['DEV']['gh_login'],
|
||||||
|
test_data.config['DEV']['gh_password'])
|
||||||
|
|
||||||
|
# Fork repo as Developer from Organization
|
||||||
|
github.fork_repo(test_data.config['ORG']['gh_repo'])
|
||||||
|
|
||||||
|
# Cloning repo to local git as Developer and set upstream to Organization (via HTTPS)
|
||||||
|
github.clone_repo(test_data.config['ORG']['gh_repo'],
|
||||||
|
test_data.config['DEV']['gh_username'],
|
||||||
|
test_data.config['ORG']['gh_repo_name'],
|
||||||
|
'git_repo')
|
||||||
|
|
||||||
|
github.clean_repo_local_folder()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue