@@ -1783,15 +1783,20 @@ def test_poll_feed_atom(self, mock_create_task, mock_get, _):
1783
1783
<content>I hereby ☕ post</content>
1784
1784
</entry>
1785
1785
"""
1786
- mock_get .return_value = requests_response (
1787
- feed , headers = {'Content-Type' : atom .CONTENT_TYPE })
1786
+ mock_get .return_value = requests_response (feed , headers = {
1787
+ 'Content-Type' : atom .CONTENT_TYPE ,
1788
+ 'Last-Modified' : 'Sat, 01 Jan 2024 01:02:03 GMT' ,
1789
+ 'ETag' : '"abc123"' ,
1790
+ })
1788
1791
1789
1792
got = self .post ('/queue/poll-feed' , data = {'domain' : 'user.com' })
1790
1793
self .assertEqual (200 , got .status_code )
1791
1794
1792
1795
user = self .user .key .get ()
1793
1796
self .assertEqual (NOW , user .last_polled_feed )
1794
1797
self .assertEqual ('https://user.com/post' , user .feed_last_item )
1798
+ self .assertEqual ('"abc123"' , user .feed_etag )
1799
+ self .assertEqual ('Sat, 01 Jan 2024 01:02:03 GMT' , user .feed_last_modified )
1795
1800
1796
1801
mock_get .assert_has_calls ((
1797
1802
self .req ('https://foo/feed' ),
@@ -2074,6 +2079,39 @@ def test_poll_feed_last_webmention_in_noop(self, mock_create_task, mock_get, _):
2074
2079
mock_create_task .assert_not_called ()
2075
2080
mock_get .assert_not_called ()
2076
2081
2082
+
2083
+ @patch ('oauth_dropins.webutil.appengine_config.tasks_client.create_task' )
2084
+ def test_poll_feed_etag_last_modified (self , mock_create_task , mock_get , _ ):
2085
+ common .RUN_TASKS_INLINE = False
2086
+ self .user .obj .mf2 = ACTOR_MF2_REL_FEED_URL
2087
+ self .user .obj .put ()
2088
+
2089
+ self .user .feed_etag = '"abc123"'
2090
+ self .user .feed_last_modified = 'Sat, 01 Jan 2024 01:02:03 GMT'
2091
+ self .user .put ()
2092
+
2093
+ mock_get .return_value = requests_response ('' , status = 304 , headers = {
2094
+ 'Last-Modified' : 'Sat, 99 Jan 2024 01:02:03 GMT' ,
2095
+ 'ETag' : '"def789"' ,
2096
+ })
2097
+
2098
+ got = self .post ('/queue/poll-feed' , data = {'domain' : 'user.com' })
2099
+ self .assertEqual (200 , got .status_code )
2100
+
2101
+ user = self .user .key .get ()
2102
+ self .assertEqual (NOW , user .last_polled_feed )
2103
+ self .assertEqual ('"def789"' , user .feed_etag )
2104
+ self .assertEqual ('Sat, 99 Jan 2024 01:02:03 GMT' , user .feed_last_modified )
2105
+
2106
+ mock_get .assert_has_calls ([self .req ('https://foo/feed' , headers = {
2107
+ 'If-None-Match' : '"abc123"' ,
2108
+ 'If-Modified-Since' : 'Sat, 01 Jan 2024 01:02:03 GMT' ,
2109
+ })])
2110
+
2111
+ expected_eta = NOW_SECONDS + web .MIN_FEED_POLL_PERIOD .total_seconds ()
2112
+ self .assert_task (mock_create_task , 'poll-feed' , '/queue/poll-feed' ,
2113
+ domain = 'user.com' , eta_seconds = expected_eta )
2114
+
2077
2115
def _test_verify (self , redirects , hcard , actor , redirects_error = None ):
2078
2116
self .user .has_redirects = False
2079
2117
self .user .put ()
0 commit comments