Skip to content

Commit 67ef02d

Browse files
feanilclaude
andcommitted
style: fix pylint and ruff issues in LTI nonce replay test
- Add missing class docstring to TimestampAndNonceValidatorTest (C0115) - Move time.time patch from class decorator into setUp/addCleanup to eliminate unused mock parameters in every test method (PT019) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent 0a92cf2 commit 67ef02d

1 file changed

Lines changed: 16 additions & 11 deletions

File tree

lms/djangoapps/lti_provider/tests/test_signature_validator.py

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -123,46 +123,51 @@ def test_verification_parameters(self, verify_mock):
123123
request.build_absolute_uri(), 'POST', body.encode('utf-8'), headers)
124124

125125

126-
@patch('lms.djangoapps.lti_provider.signature_validator.time.time', return_value=FIXED_TIMESTAMP)
127126
class TimestampAndNonceValidatorTest(CacheIsolationMixin, TestCase):
128-
ENABLED_CACHES = ['default']
129127
"""
130-
Tests for validate_timestamp_and_nonce. The clock is frozen via a class-level
131-
patch so every test method receives a consistent `time.time` return value.
128+
Tests for the validate_timestamp_and_nonce method in SignatureValidator.
132129
"""
133130

131+
ENABLED_CACHES = ['default']
132+
134133
def setUp(self):
135134
super().setUp()
135+
patcher = patch(
136+
'lms.djangoapps.lti_provider.signature_validator.time.time',
137+
return_value=FIXED_TIMESTAMP,
138+
)
139+
patcher.start()
140+
self.addCleanup(patcher.stop)
136141
self.validator = SignatureValidator(get_lti_consumer())
137142

138143
def _call(self, timestamp, nonce, client_key='Consumer Key'):
139144
return self.validator.validate_timestamp_and_nonce(
140145
client_key, str(timestamp), nonce, request=None,
141146
)
142147

143-
def test_valid_timestamp_and_new_nonce(self, _mock_time):
148+
def test_valid_timestamp_and_new_nonce(self):
144149
assert self._call(FIXED_TIMESTAMP, 'nonce-a')
145150

146-
def test_stale_timestamp_rejected(self, _mock_time):
151+
def test_stale_timestamp_rejected(self):
147152
assert not self._call(FIXED_TIMESTAMP - 301, 'nonce-b')
148153

149-
def test_future_timestamp_rejected(self, _mock_time):
154+
def test_future_timestamp_rejected(self):
150155
assert not self._call(FIXED_TIMESTAMP + 301, 'nonce-c')
151156

152-
def test_malformed_timestamp_rejected(self, _mock_time):
157+
def test_malformed_timestamp_rejected(self):
153158
assert not self.validator.validate_timestamp_and_nonce(
154159
'Consumer Key', 'not-a-number', 'nonce-d', request=None,
155160
)
156161

157-
def test_replay_rejected(self, _mock_time):
162+
def test_replay_rejected(self):
158163
assert self._call(FIXED_TIMESTAMP, 'nonce-e')
159164
assert not self._call(FIXED_TIMESTAMP, 'nonce-e')
160165

161-
def test_different_nonce_same_consumer_accepted(self, _mock_time):
166+
def test_different_nonce_same_consumer_accepted(self):
162167
assert self._call(FIXED_TIMESTAMP, 'nonce-f1')
163168
assert self._call(FIXED_TIMESTAMP, 'nonce-f2')
164169

165-
def test_same_nonce_different_consumer_accepted(self, _mock_time):
170+
def test_same_nonce_different_consumer_accepted(self):
166171
# Nonces are scoped per client_key; the same nonce string from two
167172
# different consumers must not block each other.
168173
assert self._call(FIXED_TIMESTAMP, 'nonce-g', client_key='Consumer Key')

0 commit comments

Comments
 (0)