Skip to content

Commit 4bcb9e2

Browse files
authored
Merge pull request #1091 from launchableinc/AIENG-204
Validate session flag format in subset command
2 parents ee4344a + 4e0e2ab commit 4bcb9e2

File tree

6 files changed

+28
-8
lines changed

6 files changed

+28
-8
lines changed

launchable/commands/helper.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
from ..app import Application
1111
from ..utils.launchable_client import LaunchableClient
12-
from ..utils.session import parse_session, read_build, read_session
12+
from ..utils.session import read_build, read_session, validate_session_format
1313

1414

1515
def require_session(
@@ -22,7 +22,7 @@ def require_session(
2222
See https://github.com/launchableinc/cli/pull/342
2323
"""
2424
if session:
25-
parse_session(session) # make sure session is in the right format
25+
validate_session_format(session)
2626
return session
2727

2828
session = read_session(require_build())
@@ -89,6 +89,7 @@ def find_or_create_session(
8989
from .record.session import session as session_command
9090

9191
if session:
92+
validate_session_format(session)
9293
_check_observation_mode_status(session, is_observation, tracking_client=tracking_client, app=context.obj)
9394
return session
9495

launchable/commands/record/attachment.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
@click.option(
1111
'--session',
1212
'session',
13-
help='Test session ID',
13+
help='In the format builds/<build-name>/test_sessions/<test-session-id>',
1414
type=str,
1515
)
1616
@click.argument('attachments', nargs=-1) # type=click.Path(exists=True)

launchable/commands/record/tests.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ def _validate_group(ctx, param, value):
5656
@click.option(
5757
'--session',
5858
'session',
59-
help='Test session ID',
59+
help='In the format builds/<build-name>/test_sessions/<test-session-id>',
6060
type=str,
6161
)
6262
@click.option(

launchable/commands/subset.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@
5858
@click.option(
5959
'--session',
6060
'session',
61-
help='Test session ID',
61+
help='In the format builds/<build-name>/test_sessions/<test-session-id>',
6262
type=str,
6363
)
6464
@click.option(

launchable/utils/session.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,11 +98,15 @@ def clean_session_files(days_ago: int = 0) -> None:
9898
remove_session()
9999

100100

101-
def parse_session(session: str):
101+
def validate_session_format(session: str):
102102
# session format:
103103
# builds/<build name>/test_sessions/<test session id>
104104
if session.count("/") != 3:
105105
raise ParseSessionException(session=session)
106106

107+
108+
def parse_session(session: str):
109+
validate_session_format(session)
110+
107111
_, build_name, _, session_id = session.split("/")
108112
return build_name, session_id

tests/test_session.py

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,9 @@
33
import tempfile
44
from unittest import TestCase
55

6-
from launchable.utils.session import (SESSION_DIR_KEY, clean_session_files, parse_session, read_build,
7-
read_session, remove_session, write_build, write_session)
6+
from launchable.utils.exceptions import ParseSessionException
7+
from launchable.utils.session import (SESSION_DIR_KEY, clean_session_files, parse_session, read_build, read_session,
8+
remove_session, validate_session_format, write_build, write_session)
89

910

1011
class SessionTestClass(TestCase):
@@ -44,3 +45,17 @@ def test_parse_session(self):
4445

4546
with self.assertRaises(Exception):
4647
parse_session("hoge/fuga")
48+
49+
def test_validate_session_format(self):
50+
# Test with a valid session format
51+
validate_session_format("builds/build-name/test_sessions/123")
52+
53+
# Test with invalid session formats
54+
invalid_sessions = [
55+
"123", # Only id
56+
"workspaces/mothership/builds/123/test_sessions/13" # Too many parts
57+
]
58+
59+
for invalid_session in invalid_sessions:
60+
with self.assertRaises(ParseSessionException):
61+
validate_session_format(invalid_session)

0 commit comments

Comments
 (0)