Skip to content

Commit 309ec0b

Browse files
chore: addresses code organisation related comments
1 parent f2a3e2b commit 309ec0b

File tree

12 files changed

+134
-136
lines changed

12 files changed

+134
-136
lines changed

packages/cdk/resources/Functions.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ export class Functions extends Construct {
5656
stackName: props.stackName,
5757
functionName: `${props.stackName}-SlackBotFunction`,
5858
packageBasePath: "packages/slackBotFunction",
59-
handler: "app.main.handler",
59+
handler: "app.handler.handler",
6060
logRetentionInDays: props.logRetentionInDays,
6161
logLevel: props.logLevel,
6262
additionalPolicies: [props.slackBotManagedPolicy],

packages/slackBotFunction/app/core/config.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,5 +59,3 @@
5959
GUARD_VERSION = os.environ["GUARD_RAIL_VERSION"]
6060

6161
logger.info(f"Guardrail ID: {GUARD_RAIL_ID}, Version: {GUARD_VERSION}")
62-
63-
# event handlers will be registered in main.py to avoid circular imports
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@
99
from aws_lambda_powertools.utilities.typing import LambdaContext
1010

1111
from app.core.config import app, logger
12-
from app.util.slack_events import process_async_slack_event
13-
from app.util.slack_handlers import setup_handlers
12+
from app.slack.slack_events import process_async_slack_event
13+
from app.slack.slack_handlers import setup_handlers
1414

1515
# register event handlers with the app
1616
setup_handlers(app)
File renamed without changes.
File renamed without changes.
File renamed without changes.

packages/slackBotFunction/tests/test_async_processing.py

Lines changed: 31 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -17,16 +17,16 @@ def test_process_async_slack_event_success(mock_webclient, mock_boto_resource, m
1717
mock_client = Mock()
1818
mock_webclient.return_value = mock_client
1919

20-
if "app.util.slack_events" in sys.modules:
21-
del sys.modules["app.util.slack_events"]
20+
if "app.slack.slack_events" in sys.modules:
21+
del sys.modules["app.slack.slack_events"]
2222

23-
with patch("app.util.slack_events.query_bedrock") as mock_bedrock, patch(
24-
"app.util.slack_events.get_conversation_session"
23+
with patch("app.slack.slack_events.query_bedrock") as mock_bedrock, patch(
24+
"app.slack.slack_events.get_conversation_session"
2525
) as mock_get_session, patch("boto3.client"):
2626
mock_bedrock.return_value = {"output": {"text": "AI response"}}
2727
mock_get_session.return_value = None # No existing session
2828

29-
from app.util.slack_events import process_async_slack_event
29+
from app.slack.slack_events import process_async_slack_event
3030

3131
slack_event_data = {
3232
"event": {"text": "<@U123> test question", "user": "U456", "channel": "C789", "ts": "1234567890.123"},
@@ -57,10 +57,10 @@ def test_process_async_slack_event_empty_query(
5757
mock_client = Mock()
5858
mock_webclient.return_value = mock_client
5959

60-
if "app.util.slack_events" in sys.modules:
61-
del sys.modules["app.util.slack_events"]
60+
if "app.slack.slack_events" in sys.modules:
61+
del sys.modules["app.slack.slack_events"]
6262

63-
from app.util.slack_events import process_async_slack_event
63+
from app.slack.slack_events import process_async_slack_event
6464

6565
slack_event_data = {
6666
"event": {
@@ -96,19 +96,19 @@ def test_process_async_slack_event_error(mock_webclient, mock_boto_resource, moc
9696
mock_client = Mock()
9797
mock_webclient.return_value = mock_client
9898

99-
if "app.util.slack_events" in sys.modules:
100-
del sys.modules["app.util.slack_events"]
99+
if "app.slack.slack_events" in sys.modules:
100+
del sys.modules["app.slack.slack_events"]
101101

102-
if "app.util.slack_events" in sys.modules:
103-
del sys.modules["app.util.slack_events"]
102+
if "app.slack.slack_events" in sys.modules:
103+
del sys.modules["app.slack.slack_events"]
104104

105-
with patch("app.util.slack_events.query_bedrock") as mock_bedrock, patch(
106-
"app.util.slack_events.get_conversation_session"
105+
with patch("app.slack.slack_events.query_bedrock") as mock_bedrock, patch(
106+
"app.slack.slack_events.get_conversation_session"
107107
) as mock_get_session, patch("boto3.client"):
108108
mock_bedrock.side_effect = Exception("Bedrock error")
109109
mock_get_session.return_value = None # No existing session
110110

111-
from app.util.slack_events import process_async_slack_event
111+
from app.slack.slack_events import process_async_slack_event
112112

113113
slack_event_data = {
114114
"event": {"text": "test question", "user": "U456", "channel": "C789", "ts": "1234567890.123"},
@@ -141,19 +141,19 @@ def test_process_async_slack_event_with_thread_ts(
141141
mock_client = Mock()
142142
mock_webclient.return_value = mock_client
143143

144-
if "app.util.slack_events" in sys.modules:
145-
del sys.modules["app.util.slack_events"]
144+
if "app.slack.slack_events" in sys.modules:
145+
del sys.modules["app.slack.slack_events"]
146146

147-
if "app.util.slack_events" in sys.modules:
148-
del sys.modules["app.util.slack_events"]
147+
if "app.slack.slack_events" in sys.modules:
148+
del sys.modules["app.slack.slack_events"]
149149

150-
with patch("app.util.slack_events.query_bedrock") as mock_bedrock, patch(
151-
"app.util.slack_events.get_conversation_session"
150+
with patch("app.slack.slack_events.query_bedrock") as mock_bedrock, patch(
151+
"app.slack.slack_events.get_conversation_session"
152152
) as mock_get_session, patch("boto3.client"):
153153
mock_bedrock.return_value = {"output": {"text": "AI response"}}
154154
mock_get_session.return_value = None # No existing session
155155

156-
from app.util.slack_events import process_async_slack_event
156+
from app.slack.slack_events import process_async_slack_event
157157

158158
slack_event_data = {
159159
"event": {
@@ -189,19 +189,19 @@ def test_regex_text_processing(mock_webclient, mock_boto_resource, mock_get_para
189189
mock_client = Mock()
190190
mock_webclient.return_value = mock_client
191191

192-
if "app.util.slack_events" in sys.modules:
193-
del sys.modules["app.util.slack_events"]
192+
if "app.slack.slack_events" in sys.modules:
193+
del sys.modules["app.slack.slack_events"]
194194

195-
if "app.util.slack_events" in sys.modules:
196-
del sys.modules["app.util.slack_events"]
195+
if "app.slack.slack_events" in sys.modules:
196+
del sys.modules["app.slack.slack_events"]
197197

198-
with patch("app.util.slack_events.query_bedrock") as mock_bedrock, patch(
199-
"app.util.slack_events.get_conversation_session"
198+
with patch("app.slack.slack_events.query_bedrock") as mock_bedrock, patch(
199+
"app.slack.slack_events.get_conversation_session"
200200
) as mock_get_session, patch("boto3.client"):
201201
mock_bedrock.return_value = {"output": {"text": "AI response"}}
202202
mock_get_session.return_value = None # No existing session
203203

204-
from app.util.slack_events import process_async_slack_event
204+
from app.slack.slack_events import process_async_slack_event
205205

206206
# Test that mentions are properly stripped from messages
207207
slack_event_data = {
@@ -236,7 +236,7 @@ def test_process_async_slack_event_with_session_storage(
236236
mock_webclient.return_value = mock_client
237237

238238
# Clean up modules before import
239-
modules_to_clean = ["app.util.slack_events", "app.core.config"]
239+
modules_to_clean = ["app.slack.slack_events", "app.core.config"]
240240
for module in modules_to_clean:
241241
if module in sys.modules:
242242
del sys.modules[module]
@@ -248,7 +248,7 @@ def test_process_async_slack_event_with_session_storage(
248248
"sessionId": "new-session-123",
249249
}
250250

251-
from app.util.slack_events import process_async_slack_event
251+
from app.slack.slack_events import process_async_slack_event
252252

253253
slack_event_data = {
254254
"event": {"text": "test question", "user": "U456", "channel": "C789", "ts": "1234567890.123"},

packages/slackBotFunction/tests/test_bedrock_integration.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,10 @@ def test_get_bedrock_knowledgebase_response(
2121
mock_boto_client.return_value = mock_client
2222
mock_client.retrieve_and_generate.return_value = {"output": {"text": "bedrock response"}}
2323

24-
if "app.util.slack_events" in sys.modules:
25-
del sys.modules["app.util.slack_events"]
24+
if "app.slack.slack_events" in sys.modules:
25+
del sys.modules["app.slack.slack_events"]
2626

27-
from app.util.slack_events import query_bedrock
27+
from app.slack.slack_events import query_bedrock
2828

2929
result = query_bedrock("test query")
3030

packages/slackBotFunction/tests/test_coverage.py

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -27,24 +27,24 @@ def test_handlers_direct_call_coverage(
2727
mock_app_instance = Mock()
2828
mock_app_class.return_value = mock_app_instance
2929

30-
if "app.util.slack_handlers" in sys.modules:
31-
del sys.modules["app.util.slack_handlers"]
30+
if "app.slack.slack_handlers" in sys.modules:
31+
del sys.modules["app.slack.slack_handlers"]
3232

3333
# Import the module
34-
import app.util.slack_handlers
34+
import app.slack.slack_handlers
3535

3636
# Test handle_app_mention directly
3737
# Call the function directly from the module - this should execute without error
3838
try:
39-
assert hasattr(app.util.slack_handlers, "setup_handlers")
39+
assert hasattr(app.slack.slack_handlers, "setup_handlers")
4040
except Exception:
4141
# function exists and was called, that's what matters for coverage
4242
pass
4343

4444
# Test direct message functions
4545

4646
try:
47-
assert hasattr(app.util.slack_handlers, "setup_handlers")
47+
assert hasattr(app.slack.slack_handlers, "setup_handlers")
4848
except Exception:
4949
# function exists and was called, that's what matters for coverage
5050
pass
@@ -64,15 +64,15 @@ def test_handler_registration_coverage(mock_boto_resource, mock_get_parameter, m
6464
mock_app_instance = Mock()
6565
mock_app_class.return_value = mock_app_instance
6666

67-
if "app.main" in sys.modules:
68-
del sys.modules["app.main"]
67+
if "app.handler" in sys.modules:
68+
del sys.modules["app.handler"]
6969
if "app.core.config" in sys.modules:
7070
del sys.modules["app.core.config"]
71-
if "app.util.slack_handlers" in sys.modules:
72-
del sys.modules["app.util.slack_handlers"]
71+
if "app.slack.slack_handlers" in sys.modules:
72+
del sys.modules["app.slack.slack_handlers"]
7373

7474
# Import the module - this should trigger all the decorators and register handlers
75-
import app.main # noqa: F401
75+
import app.handler # noqa: F401
7676

7777
# Verify that the Slack app was initialized with correct parameters
7878
mock_app_class.assert_called_once_with(
@@ -115,15 +115,15 @@ def test_module_initialization_coverage(
115115
mock_app_instance = Mock()
116116
mock_app_class.return_value = mock_app_instance
117117

118-
if "app.main" in sys.modules:
119-
del sys.modules["app.main"]
118+
if "app.handler" in sys.modules:
119+
del sys.modules["app.handler"]
120120
if "app.core.config" in sys.modules:
121121
del sys.modules["app.core.config"]
122-
if "app.util.slack_handlers" in sys.modules:
123-
del sys.modules["app.util.slack_handlers"]
122+
if "app.slack.slack_handlers" in sys.modules:
123+
del sys.modules["app.slack.slack_handlers"]
124124

125125
# Import the module - this executes all top-level code
126-
import app.main # noqa: F401
126+
import app.handler # noqa: F401
127127

128128
# Verify logger initialization
129129
mock_logger_class.assert_called_with(service="slackBotFunction")

packages/slackBotFunction/tests/test_handlers.py

Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -14,15 +14,15 @@ def test_handler_normal_event(mock_boto_resource, mock_get_parameter, mock_app,
1414
]
1515
mock_boto_resource.return_value.Table.return_value = Mock()
1616

17-
if "app.main" in sys.modules:
18-
del sys.modules["app.main"]
17+
if "app.handler" in sys.modules:
18+
del sys.modules["app.handler"]
1919

20-
with patch("app.main.SlackRequestHandler") as mock_handler_class:
20+
with patch("app.handler.SlackRequestHandler") as mock_handler_class:
2121
mock_handler = Mock()
2222
mock_handler_class.return_value = mock_handler
2323
mock_handler.handle.return_value = {"statusCode": 200}
2424

25-
from app.main import handler
25+
from app.handler import handler
2626

2727
event = {"body": "test event"}
2828
result = handler(event, lambda_context)
@@ -34,7 +34,7 @@ def test_handler_normal_event(mock_boto_resource, mock_get_parameter, mock_app,
3434
@patch("slack_bolt.App")
3535
@patch("aws_lambda_powertools.utilities.parameters.get_parameter")
3636
@patch("boto3.resource")
37-
@patch("app.util.slack_events.process_async_slack_event")
37+
@patch("app.slack.slack_events.process_async_slack_event")
3838
def test_handler_async_processing(
3939
mock_process, mock_boto_resource, mock_get_parameter, mock_app, mock_env, lambda_context
4040
):
@@ -45,10 +45,10 @@ def test_handler_async_processing(
4545
]
4646
mock_boto_resource.return_value.Table.return_value = Mock()
4747

48-
if "app.main" in sys.modules:
49-
del sys.modules["app.main"]
48+
if "app.handler" in sys.modules:
49+
del sys.modules["app.handler"]
5050

51-
from app.main import handler
51+
from app.handler import handler
5252

5353
slack_event_data = {
5454
"event": {"text": "test", "user": "U123", "channel": "C456", "ts": "1234567890.123"},
@@ -76,10 +76,10 @@ def test_trigger_async_processing(mock_boto_client, mock_boto_resource, mock_get
7676
mock_lambda_client = Mock()
7777
mock_boto_client.return_value = mock_lambda_client
7878

79-
if "app.util.slack_handlers" in sys.modules:
80-
del sys.modules["app.util.slack_handlers"]
79+
if "app.slack.slack_handlers" in sys.modules:
80+
del sys.modules["app.slack.slack_handlers"]
8181

82-
from app.util.slack_handlers import trigger_async_processing
82+
from app.slack.slack_handlers import trigger_async_processing
8383

8484
event_data = {"test": "data"}
8585
trigger_async_processing(event_data)
@@ -99,10 +99,10 @@ def test_handle_app_mention(mock_boto_resource, mock_get_parameter, mock_app, mo
9999
]
100100
mock_boto_resource.return_value.Table.return_value = Mock()
101101

102-
if "app.util.slack_handlers" in sys.modules:
103-
del sys.modules["app.util.slack_handlers"]
102+
if "app.slack.slack_handlers" in sys.modules:
103+
del sys.modules["app.slack.slack_handlers"]
104104

105-
from app.util.slack_handlers import setup_handlers
105+
from app.slack.slack_handlers import setup_handlers
106106

107107
assert callable(setup_handlers)
108108

@@ -118,10 +118,10 @@ def test_handle_direct_message(mock_boto_resource, mock_get_parameter, mock_app,
118118
]
119119
mock_boto_resource.return_value.Table.return_value = Mock()
120120

121-
if "app.util.slack_handlers" in sys.modules:
122-
del sys.modules["app.util.slack_handlers"]
121+
if "app.slack.slack_handlers" in sys.modules:
122+
del sys.modules["app.slack.slack_handlers"]
123123

124-
from app.util.slack_handlers import setup_handlers
124+
from app.slack.slack_handlers import setup_handlers
125125

126126
assert callable(setup_handlers)
127127

@@ -137,10 +137,10 @@ def test_handle_app_mention_missing_event_id(mock_boto_resource, mock_get_parame
137137
]
138138
mock_boto_resource.return_value.Table.return_value = Mock()
139139

140-
if "app.util.slack_handlers" in sys.modules:
141-
del sys.modules["app.util.slack_handlers"]
140+
if "app.slack.slack_handlers" in sys.modules:
141+
del sys.modules["app.slack.slack_handlers"]
142142

143-
from app.util.slack_handlers import setup_handlers
143+
from app.slack.slack_handlers import setup_handlers
144144

145145
# Test that the setup function exists
146146
assert callable(setup_handlers)
@@ -157,10 +157,10 @@ def test_handle_direct_message_channel_type(mock_boto_resource, mock_get_paramet
157157
]
158158
mock_boto_resource.return_value.Table.return_value = Mock()
159159

160-
if "app.util.slack_handlers" in sys.modules:
161-
del sys.modules["app.util.slack_handlers"]
160+
if "app.slack.slack_handlers" in sys.modules:
161+
del sys.modules["app.slack.slack_handlers"]
162162

163-
from app.util.slack_handlers import setup_handlers
163+
from app.slack.slack_handlers import setup_handlers
164164

165165
# Test that the setup function exists
166166
assert callable(setup_handlers)
@@ -179,10 +179,10 @@ def test_handler_async_processing_missing_slack_event(
179179
]
180180
mock_boto_resource.return_value.Table.return_value = Mock()
181181

182-
if "app.main" in sys.modules:
183-
del sys.modules["app.main"]
182+
if "app.handler" in sys.modules:
183+
del sys.modules["app.handler"]
184184

185-
from app.main import handler
185+
from app.handler import handler
186186

187187
# Test async processing without slack_event - should return 400
188188
event = {"async_processing": True} # Missing slack_event

0 commit comments

Comments
 (0)