diff --git a/tests/commands/test_account_org_team.py b/tests/commands/test_account_org_team.py
index a7711ee2..cc97b33f 100644
--- a/tests/commands/test_account_org_team.py
+++ b/tests/commands/test_account_org_team.py
@@ -26,16 +26,29 @@ from platformio.commands.team import cli as cmd_team
from platformio.downloader import FileDownloader
from platformio.unpacker import FileUnpacker
-pytestmark = pytest.mark.skip()
-
-
-@pytest.mark.skipif(
- not os.environ.get("TEST_EMAIL_LOGIN"),
+pytestmark = pytest.mark.skipif(
+ not (os.environ.get("TEST_EMAIL_LOGIN") and os.environ.get("TEST_EMAIL_PASSWORD")),
reason="requires TEST_EMAIL_LOGIN, TEST_EMAIL_PASSWORD environ variables",
-) # pylint:disable=too-many-arguments
-def test_account(
- clirunner, validate_cliresult, receive_email, isolated_pio_home, tmpdir_factory
-):
+)
+
+username = None
+email = None
+firstname = None
+lastname = None
+password = None
+
+orgname = None
+display_name = None
+second_username = None
+
+teamname = None
+team_description = None
+
+
+def test_prepare():
+ global username, splited_email, email, firstname, lastname
+ global password, orgname, display_name, second_username, teamname, team_description
+
username = "test-piocore-%s" % str(random.randint(0, 100000))
splited_email = os.environ.get("TEST_EMAIL_LOGIN").split("@")
email = "%s+%s@%s" % (splited_email[0], username, splited_email[1])
@@ -43,522 +56,436 @@ def test_account(
lastname = "User"
password = "Qwerty123!"
- # pio account register
- result = clirunner.invoke(
- cmd_account,
- [
- "register",
- "-u",
- username,
- "-e",
- email,
- "-p",
- password,
- "--firstname",
- firstname,
- "--lastname",
- lastname,
- ],
- )
- validate_cliresult(result)
-
- # email verification
- result = receive_email(email)
- link = (
- result.split("Click on the link below to start this process.")[1]
- .split("This link will expire within 12 hours.")[0]
- .strip()
- )
- session = requests.Session()
- result = session.get(link).text
- link = result.split(' 0
- assert result.exception
- assert "You are not authorized! Please log in to PIO Account" in str(
- result.exception
- )
-
- os.environ["PLATFORMIO_AUTH_TOKEN"] = token
-
- result = clirunner.invoke(
- cmd_account, ["token", "--password", password, "--json-output"],
- )
- validate_cliresult(result)
- json_result = json.loads(result.output.strip())
- assert json_result
- assert json_result.get("status") == "success"
- assert json_result.get("result") == token
-
- os.environ.pop("PLATFORMIO_AUTH_TOKEN")
-
- result = clirunner.invoke(
- cmd_account, ["login", "-u", username, "-p", password],
- )
- validate_cliresult(result)
-
- # pio account password
- new_password = "Testpassword123"
- result = clirunner.invoke(
- cmd_account,
- ["password", "--old-password", password, "--new-password", new_password,],
- )
- validate_cliresult(result)
- assert "Password successfully changed!" in result.output
-
- clirunner.invoke(cmd_account, ["logout"])
-
- result = clirunner.invoke(
- cmd_account, ["login", "-u", username, "-p", new_password],
- )
- validate_cliresult(result)
-
- result = clirunner.invoke(
- cmd_account,
- ["password", "--old-password", new_password, "--new-password", password,],
- )
- validate_cliresult(result)
-
- # pio account update
- firstname = "First " + str(random.randint(0, 100000))
- lastname = "Last" + str(random.randint(0, 100000))
-
- new_username = "username" + str(random.randint(0, 100000))
- new_email = "%s+new-%s@%s" % (splited_email[0], username, splited_email[1])
- result = clirunner.invoke(
- cmd_account,
- [
- "update",
- "--current-password",
- password,
- "--firstname",
- firstname,
- "--lastname",
- lastname,
- "--username",
- new_username,
- "--email",
- new_email,
- ],
- )
- validate_cliresult(result)
- assert "Profile successfully updated!" in result.output
- assert (
- "Please check your mail to verify your new email address and re-login. "
- in result.output
- )
-
- result = receive_email(new_email)
- link = (
- result.split("Click on the link below to start this process.")[1]
- .split("This link will expire within 12 hours.")[0]
- .strip()
- )
- session = requests.Session()
- result = session.get(link).text
- link = result.split(' 0
- assert result.exception
- assert "You are not authorized! Please log in to PIO Account" in str(
- result.exception
- )
-
- result = clirunner.invoke(
- cmd_account, ["login", "-u", new_username, "-p", password],
- )
- validate_cliresult(result)
-
- # pio account destroy with linked resource
-
- package_url = "https://github.com/bblanchon/ArduinoJson/archive/v6.11.0.tar.gz"
-
- tmp_dir = tmpdir_factory.mktemp("package")
- fd = FileDownloader(package_url, str(tmp_dir))
- pkg_dir = tmp_dir.mkdir("raw_package")
- fd.start(with_progress=False, silent=True)
- with FileUnpacker(fd.get_filepath()) as unpacker:
- unpacker.unpack(str(pkg_dir), with_progress=False, silent=True)
-
- result = clirunner.invoke(cmd_package, ["publish", str(pkg_dir)],)
- validate_cliresult(result)
- try:
- result = receive_email(new_email)
- assert "Congrats" in result
- assert "was published" in result
- except: # pylint:disable=bare-except
- pass
-
- result = clirunner.invoke(cmd_account, ["destroy"], "y")
- assert result.exit_code != 0
- assert (
- "We can not destroy the %s account due to 1 linked resources from registry"
- % username
- )
-
- result = clirunner.invoke(cmd_package, ["unpublish", "ArduinoJson"],)
- validate_cliresult(result)
- finally:
- clirunner.invoke(cmd_account, ["destroy"], "y")
-
-
-@pytest.mark.skipif(
- not os.environ.get("TEST_EMAIL_LOGIN"),
- reason="requires TEST_EMAIL_LOGIN, TEST_EMAIL_PASSWORD environ variables",
-) # pylint:disable=too-many-arguments
-def test_org(clirunner, validate_cliresult, receive_email, isolated_pio_home):
- username = "test-piocore-%s" % str(random.randint(0, 100000))
- splited_email = os.environ.get("TEST_EMAIL_LOGIN").split("@")
- email = "%s+%s@%s" % (splited_email[0], username, splited_email[1])
- firstname = "Test"
- lastname = "User"
- password = "Qwerty123!"
-
- # pio account register
- result = clirunner.invoke(
- cmd_account,
- [
- "register",
- "-u",
- username,
- "-e",
- email,
- "-p",
- password,
- "--firstname",
- firstname,
- "--lastname",
- lastname,
- ],
- )
- validate_cliresult(result)
-
- # email verification
- result = receive_email(email)
- link = (
- result.split("Click on the link below to start this process.")[1]
- .split("This link will expire within 12 hours.")[0]
- .strip()
- )
- session = requests.Session()
- result = session.get(link).text
- link = result.split(' 0
+ assert result.exception
+ assert "You are not authorized! Please log in to PIO Account" in str(
+ result.exception
+ )
+
+ os.environ["PLATFORMIO_AUTH_TOKEN"] = token
+
+ result = clirunner.invoke(
+ cmd_account, ["token", "--password", password, "--json-output"],
+ )
+ validate_cliresult(result)
+ json_result = json.loads(result.output.strip())
+ assert json_result
+ assert json_result.get("status") == "success"
+ assert json_result.get("result") == token
+
+ os.environ.pop("PLATFORMIO_AUTH_TOKEN")
+
+ result = clirunner.invoke(cmd_account, ["login", "-u", username, "-p", password],)
+ validate_cliresult(result)
+
+
+def test_account_change_password(clirunner, validate_cliresult, isolated_pio_home):
+ new_password = "Testpassword123"
+ result = clirunner.invoke(
+ cmd_account,
+ ["password", "--old-password", password, "--new-password", new_password,],
+ )
+ validate_cliresult(result)
+ assert "Password successfully changed!" in result.output
+
+ clirunner.invoke(cmd_account, ["logout"])
+
+ result = clirunner.invoke(
+ cmd_account, ["login", "-u", username, "-p", new_password],
+ )
+ validate_cliresult(result)
+
+ result = clirunner.invoke(
+ cmd_account,
+ ["password", "--old-password", new_password, "--new-password", password,],
+ )
+ validate_cliresult(result)
+
+
+def test_account_update(
+ clirunner, validate_cliresult, receive_email, isolated_pio_home
+):
+ global username
+ global email
+ global firstname
+ global lastname
+
+ firstname = "First " + str(random.randint(0, 100000))
+ lastname = "Last" + str(random.randint(0, 100000))
+
+ username = "username" + str(random.randint(0, 100000))
+ email = "%s+new-%s@%s" % (splited_email[0], username, splited_email[1])
+ result = clirunner.invoke(
+ cmd_account,
+ [
+ "update",
+ "--current-password",
+ password,
+ "--firstname",
+ firstname,
+ "--lastname",
+ lastname,
+ "--username",
+ username,
+ "--email",
+ email,
+ ],
+ )
+ validate_cliresult(result)
+ assert "Profile successfully updated!" in result.output
+ assert (
+ "Please check your mail to verify your new email address and re-login. "
+ in result.output
+ )
+
+ result = receive_email(email)
+ link = (
+ result.split("Click on the link below to start this process.")[1]
+ .split("This link will expire within 12 hours.")[0]
+ .strip()
+ )
+ session = requests.Session()
+ result = session.get(link).text
+ link = result.split(' 0
+ assert result.exception
+ assert "You are not authorized! Please log in to PIO Account" in str(
+ result.exception
+ )
+
+ result = clirunner.invoke(cmd_account, ["login", "-u", username, "-p", password],)
+ validate_cliresult(result)
+
+
+def test_account_destroy_with_linked_resources(
+ clirunner, validate_cliresult, receive_email, isolated_pio_home, tmpdir_factory
+):
+ package_url = "https://github.com/bblanchon/ArduinoJson/archive/v6.11.0.tar.gz"
+
+ tmp_dir = tmpdir_factory.mktemp("package")
+ fd = FileDownloader(package_url, str(tmp_dir))
+ pkg_dir = tmp_dir.mkdir("raw_package")
+ fd.start(with_progress=False, silent=True)
+ with FileUnpacker(fd.get_filepath()) as unpacker:
+ unpacker.unpack(str(pkg_dir), with_progress=False, silent=True)
+
+ result = clirunner.invoke(cmd_package, ["publish", str(pkg_dir)],)
+ validate_cliresult(result)
try:
- # pio team create
- result = clirunner.invoke(
- cmd_team,
- [
- "create",
- "%s:%s" % (orgname, teamname),
- "--description",
- team_description,
+ result = receive_email(email)
+ assert "Congrats" in result
+ assert "was published" in result
+ except: # pylint:disable=bare-except
+ pass
+
+ result = clirunner.invoke(cmd_account, ["destroy"], "y")
+ assert result.exit_code != 0
+ assert (
+ "We can not destroy the %s account due to 1 linked resources from registry"
+ % username
+ )
+
+ result = clirunner.invoke(cmd_package, ["unpublish", "ArduinoJson"],)
+ validate_cliresult(result)
+
+
+def test_org_create(clirunner, validate_cliresult, isolated_pio_home):
+ result = clirunner.invoke(
+ cmd_org, ["create", "--email", email, "--displayname", display_name, orgname],
+ )
+ validate_cliresult(result)
+
+
+def test_org_list(clirunner, validate_cliresult, isolated_pio_home):
+ # pio org list
+ result = clirunner.invoke(cmd_org, ["list", "--json-output"])
+ validate_cliresult(result)
+ json_result = json.loads(result.output.strip())
+ assert json_result == [
+ {
+ "orgname": orgname,
+ "displayname": display_name,
+ "email": email,
+ "owners": [
+ {"username": username, "firstname": firstname, "lastname": lastname}
],
- )
- validate_cliresult(result)
+ }
+ ]
- # pio team list
- result = clirunner.invoke(cmd_team, ["list", "%s" % orgname, "--json-output"],)
- validate_cliresult(result)
- json_result = json.loads(result.output.strip())
- for item in json_result:
- del item["id"]
- assert json_result == [
- {"name": teamname, "description": team_description, "members": []}
- ]
- # pio team add (member)
- result = clirunner.invoke(
- cmd_team, ["add", "%s:%s" % (orgname, teamname), second_username],
- )
- validate_cliresult(result)
+def test_org_add_owner(clirunner, validate_cliresult, isolated_pio_home):
+ result = clirunner.invoke(cmd_org, ["add", orgname, second_username])
+ validate_cliresult(result)
- result = clirunner.invoke(cmd_team, ["list", "%s" % orgname, "--json-output"],)
- validate_cliresult(result)
- assert second_username in result.output
+ result = clirunner.invoke(cmd_org, ["list", "--json-output"])
+ validate_cliresult(result)
+ assert second_username in result.output
- # pio team remove (member)
- result = clirunner.invoke(
- cmd_team, ["remove", "%s:%s" % (orgname, teamname), second_username],
- )
- validate_cliresult(result)
- result = clirunner.invoke(cmd_team, ["list", "%s" % orgname, "--json-output"],)
- validate_cliresult(result)
- assert second_username not in result.output
+def test_org_remove_owner(clirunner, validate_cliresult, isolated_pio_home):
+ result = clirunner.invoke(cmd_org, ["remove", orgname, second_username])
+ validate_cliresult(result)
- # pio team update
- new_teamname = "new-" + str(random.randint(0, 100000))
- newteam_description = "Updated Description"
- result = clirunner.invoke(
- cmd_team,
- [
- "update",
- "%s:%s" % (orgname, teamname),
- "--name",
- new_teamname,
- "--description",
- newteam_description,
+ result = clirunner.invoke(cmd_org, ["list", "--json-output"])
+ validate_cliresult(result)
+ assert second_username not in result.output
+
+
+def test_org_update(clirunner, validate_cliresult, isolated_pio_home):
+ new_orgname = "neworg-piocore-%s" % str(random.randint(0, 100000))
+ new_display_name = "Test Org for PIO Core"
+
+ result = clirunner.invoke(
+ cmd_org,
+ [
+ "update",
+ orgname,
+ "--new-orgname",
+ new_orgname,
+ "--displayname",
+ new_display_name,
+ ],
+ )
+ validate_cliresult(result)
+
+ result = clirunner.invoke(cmd_org, ["list", "--json-output"])
+ validate_cliresult(result)
+ json_result = json.loads(result.output.strip())
+ assert json_result == [
+ {
+ "orgname": new_orgname,
+ "displayname": new_display_name,
+ "email": email,
+ "owners": [
+ {"username": username, "firstname": firstname, "lastname": lastname}
],
- )
- validate_cliresult(result)
+ }
+ ]
- result = clirunner.invoke(cmd_team, ["list", "%s" % orgname, "--json-output"],)
- validate_cliresult(result)
- json_result = json.loads(result.output.strip())
- for item in json_result:
- del item["id"]
- assert json_result == [
- {"name": new_teamname, "description": newteam_description, "members": []}
- ]
+ result = clirunner.invoke(
+ cmd_org,
+ [
+ "update",
+ new_orgname,
+ "--new-orgname",
+ orgname,
+ "--displayname",
+ display_name,
+ ],
+ )
+ validate_cliresult(result)
- result = clirunner.invoke(
- cmd_team,
- [
- "update",
- "%s:%s" % (orgname, new_teamname),
- "--name",
- teamname,
- "--description",
- team_description,
- ],
- )
- validate_cliresult(result)
- finally:
- clirunner.invoke(cmd_team, ["destroy", "%s:%s" % (orgname, teamname)], "y")
- clirunner.invoke(cmd_org, ["destroy", orgname], "y")
- clirunner.invoke(cmd_account, ["destroy"], "y")
+
+def test_team_create(clirunner, validate_cliresult, isolated_pio_home):
+ result = clirunner.invoke(
+ cmd_team,
+ ["create", "%s:%s" % (orgname, teamname), "--description", team_description,],
+ )
+ validate_cliresult(result)
+
+
+def test_team_list(clirunner, validate_cliresult, isolated_pio_home):
+ result = clirunner.invoke(cmd_team, ["list", "%s" % orgname, "--json-output"],)
+ validate_cliresult(result)
+ json_result = json.loads(result.output.strip())
+ for item in json_result:
+ del item["id"]
+ assert json_result == [
+ {"name": teamname, "description": team_description, "members": []}
+ ]
+
+
+def test_team_add_member(clirunner, validate_cliresult, isolated_pio_home):
+ result = clirunner.invoke(
+ cmd_team, ["add", "%s:%s" % (orgname, teamname), second_username],
+ )
+ validate_cliresult(result)
+
+ result = clirunner.invoke(cmd_team, ["list", "%s" % orgname, "--json-output"],)
+ validate_cliresult(result)
+ assert second_username in result.output
+
+
+def test_team_remove(clirunner, validate_cliresult, isolated_pio_home):
+ result = clirunner.invoke(
+ cmd_team, ["remove", "%s:%s" % (orgname, teamname), second_username],
+ )
+ validate_cliresult(result)
+
+ result = clirunner.invoke(cmd_team, ["list", "%s" % orgname, "--json-output"],)
+ validate_cliresult(result)
+ assert second_username not in result.output
+
+
+def test_team_update(clirunner, validate_cliresult, receive_email, isolated_pio_home):
+ new_teamname = "new-" + str(random.randint(0, 100000))
+ newteam_description = "Updated Description"
+ result = clirunner.invoke(
+ cmd_team,
+ [
+ "update",
+ "%s:%s" % (orgname, teamname),
+ "--name",
+ new_teamname,
+ "--description",
+ newteam_description,
+ ],
+ )
+ validate_cliresult(result)
+
+ result = clirunner.invoke(cmd_team, ["list", "%s" % orgname, "--json-output"],)
+ validate_cliresult(result)
+ json_result = json.loads(result.output.strip())
+ for item in json_result:
+ del item["id"]
+ assert json_result == [
+ {"name": new_teamname, "description": newteam_description, "members": []}
+ ]
+
+ result = clirunner.invoke(
+ cmd_team,
+ [
+ "update",
+ "%s:%s" % (orgname, new_teamname),
+ "--name",
+ teamname,
+ "--description",
+ team_description,
+ ],
+ )
+ validate_cliresult(result)
+
+
+def test_cleanup(clirunner, validate_cliresult, receive_email, isolated_pio_home):
+ result = clirunner.invoke(cmd_team, ["destroy", "%s:%s" % (orgname, teamname)], "y")
+ validate_cliresult(result)
+ result = clirunner.invoke(cmd_org, ["destroy", orgname], "y")
+ validate_cliresult(result)
+ result = clirunner.invoke(cmd_account, ["destroy"], "y")
+ validate_cliresult(result)
diff --git a/tests/conftest.py b/tests/conftest.py
index 9fa3578b..eda52184 100644
--- a/tests/conftest.py
+++ b/tests/conftest.py
@@ -79,7 +79,9 @@ def receive_email(): # pylint:disable=redefined-outer-name, too-many-locals
server.select("INBOX")
_, mails = server.search(None, "ALL")
for index in mails[0].split():
- _, data = server.fetch(index, "(RFC822)")
+ status, data = server.fetch(index, "(RFC822)")
+ if status != "OK" or not data or not isinstance(data[0], tuple):
+ continue
msg = email.message_from_string(
data[0][1].decode("ASCII", errors="surrogateescape")
)