@@ -897,7 +897,7 @@ def build_buffer_item(self, **kwargs):
897897
898898 return buffermodel
899899
900- def make_buffer_post_request (self , buffers , expected_status = 201 , gzip = False ):
900+ def make_buffer_post_request (self , buffers , expected_status = 201 , gzip = False , pre_count = 0 ):
901901 serialized_recs = BufferSerializer (buffers , many = True )
902902
903903 # extract that data that is to be posted
@@ -911,9 +911,13 @@ def make_buffer_post_request(self, buffers, expected_status=201, gzip=False):
911911 headers ["content_type" ] = "application/gzip"
912912 headers ["format" ] = None
913913
914- # delete the records from the DB so we don't conflict when we POST
915- Buffer .objects .all ().delete ()
916- RecordMaxCounterBuffer .objects .all ().delete ()
914+ # delete the records to match pre_count if zero
915+ if pre_count == 0 :
916+ Buffer .objects .all ().delete ()
917+ RecordMaxCounterBuffer .objects .all ().delete ()
918+ else :
919+ self .assertEqual (Buffer .objects .count (), pre_count )
920+ self .assertEqual (RecordMaxCounterBuffer .objects .count (), pre_count * 3 )
917921
918922 response = self .client .post (reverse ("buffers-list" ), data , ** headers )
919923 self .assertEqual (response .status_code , expected_status )
@@ -964,6 +968,22 @@ def test_push_fails_for_pull_transfersession(self):
964968 rec_3 = self .build_buffer_item (transfer_session = rec_1 .transfer_session )
965969 self .make_buffer_post_request ([rec_1 , rec_2 , rec_3 ], expected_status = 403 )
966970
971+ def test_push_repeat_chunk (self ):
972+ rec_1 = self .build_buffer_item (push = True , filter = self .default_push_filter )
973+ transfer_session = rec_1 .transfer_session
974+ rec_2 = self .build_buffer_item (transfer_session = transfer_session )
975+ # need to create a third buffer so it doesn't mark the transfer complete after pushing 2
976+ self .build_buffer_item (transfer_session = transfer_session )
977+ self .assertEqual (transfer_session .records_transferred , 0 )
978+
979+ self .make_buffer_post_request ([rec_1 , rec_2 ], expected_status = 201 )
980+ transfer_session .refresh_from_db ()
981+ self .assertEqual (transfer_session .records_transferred , 2 )
982+
983+ self .make_buffer_post_request ([rec_1 , rec_2 ], expected_status = 201 , pre_count = 2 )
984+ transfer_session .refresh_from_db ()
985+ self .assertEqual (transfer_session .records_transferred , 2 )
986+
967987 def create_records_for_pulling (self , count = 3 , ** kwargs ):
968988
969989 assert count >= 1
@@ -1025,11 +1045,9 @@ def make_buffer_get_request(
10251045 transfer_session_id = t_id , model_uuid__in = model_uuids
10261046 ).delete ()
10271047
1028- # run the validation logic to ensure no errors were returned
1029- errors = validate_and_create_buffer_data (
1048+ validate_and_create_buffer_data (
10301049 data , TransferSession .objects .get (id = t_id )
10311050 )
1032- self .assertFalse (errors )
10331051
10341052 # check that the correct number of buffer items were created
10351053 self .assertEqual (
@@ -1061,6 +1079,13 @@ def test_pull_valid_buffer_list(self):
10611079
10621080 self .make_buffer_get_request (transfer_session_id = transfer_session_id )
10631081
1082+ def test_pull_repeat (self ):
1083+
1084+ transfer_session_id = self .create_records_for_pulling (count = 3 )
1085+
1086+ self .make_buffer_get_request (transfer_session_id = transfer_session_id , expected_count = 3 )
1087+ self .make_buffer_get_request (transfer_session_id = transfer_session_id , expected_count = 3 )
1088+
10641089 def test_pull_fails_when_transfer_session_id_not_specified (self ):
10651090
10661091 self .create_records_for_pulling ()
0 commit comments