@@ -1089,3 +1089,102 @@ def test_set_state(self):
10891089 self .assertTrue ("wgchairman@ietf.org" in unicode (outbox [- 1 ]))
10901090 self .assertTrue ("wgdelegate@ietf.org" in unicode (outbox [- 1 ]))
10911091
1092+ class ChangeReplacesTests (TestCase ):
1093+ def setUp (self ):
1094+
1095+ make_test_data ()
1096+
1097+ mars_wg = Group .objects .get (acronym = 'mars' )
1098+
1099+ self .basea = Document .objects .create (
1100+ name = "draft-test-base-a" ,
1101+ time = datetime .datetime .now (),
1102+ type_id = "draft" ,
1103+ title = "Base A" ,
1104+ stream_id = "ietf" ,
1105+ expires = datetime .datetime .now () + datetime .timedelta (days = settings .INTERNET_DRAFT_DAYS_TO_EXPIRE ),
1106+ group = mars_wg ,
1107+ )
1108+
1109+ self .baseb = Document .objects .create (
1110+ name = "draft-test-base-b" ,
1111+ time = datetime .datetime .now ()- datetime .timedelta (days = 365 ),
1112+ type_id = "draft" ,
1113+ title = "Base B" ,
1114+ stream_id = "ietf" ,
1115+ expires = datetime .datetime .now () - datetime .timedelta (days = 365 - settings .INTERNET_DRAFT_DAYS_TO_EXPIRE ),
1116+ group = mars_wg ,
1117+ )
1118+
1119+ self .replacea = Document .objects .create (
1120+ name = "draft-test-replace-a" ,
1121+ time = datetime .datetime .now (),
1122+ type_id = "draft" ,
1123+ title = "Replace Base A" ,
1124+ stream_id = "ietf" ,
1125+ expires = datetime .datetime .now () + datetime .timedelta (days = settings .INTERNET_DRAFT_DAYS_TO_EXPIRE ),
1126+ group = mars_wg ,
1127+ )
1128+
1129+ self .replaceboth = Document .objects .create (
1130+ name = "draft-test-replace-both" ,
1131+ time = datetime .datetime .now (),
1132+ type_id = "draft" ,
1133+ title = "Replace Base A and Base B" ,
1134+ stream_id = "ietf" ,
1135+ expires = datetime .datetime .now () + datetime .timedelta (days = settings .INTERNET_DRAFT_DAYS_TO_EXPIRE ),
1136+ group = mars_wg ,
1137+ )
1138+
1139+ self .basea .set_state (State .objects .get (used = True , type = "draft" , slug = "active" ))
1140+ self .baseb .set_state (State .objects .get (used = True , type = "draft" , slug = "expired" ))
1141+ self .replacea .set_state (State .objects .get (used = True , type = "draft" , slug = "active" ))
1142+ self .replaceboth .set_state (State .objects .get (used = True , type = "draft" , slug = "active" ))
1143+
1144+ DocAlias .objects .create (document = self .basea ,name = self .basea .name )
1145+ DocAlias .objects .create (document = self .baseb ,name = self .baseb .name )
1146+ DocAlias .objects .create (document = self .replacea ,name = self .replacea .name )
1147+ DocAlias .objects .create (document = self .replaceboth ,name = self .replaceboth .name )
1148+
1149+ def test_change_replaces (self ):
1150+
1151+ url = urlreverse ('doc_change_replaces' , kwargs = dict (name = self .replacea .name ))
1152+ login_testing_unauthorized (self , "secretary" , url )
1153+
1154+ # normal get
1155+ r = self .client .get (url )
1156+ self .assertEquals (r .status_code , 200 )
1157+ q = PyQuery (r .content )
1158+ self .assertEquals (len (q ('form[class=change-replaces]' )), 1 )
1159+
1160+ # Post that says replacea replaces base a
1161+ self .assertEquals (self .basea .get_state ().slug ,'active' )
1162+ repljson = '{"%d":"%s"}' % (DocAlias .objects .get (name = self .basea .name ).id ,self .basea .name )
1163+ r = self .client .post (url , dict (replaces = repljson ))
1164+ self .assertEquals (r .status_code , 302 )
1165+ self .assertEqual (RelatedDocument .objects .filter (relationship__slug = 'replaces' ,source = self .replacea ).count (),1 )
1166+ self .assertEquals (Document .objects .get (name = 'draft-test-base-a' ).get_state ().slug ,'repl' )
1167+
1168+ # Post that says replaceboth replaces both base a and base b
1169+ url = urlreverse ('doc_change_replaces' , kwargs = dict (name = self .replaceboth .name ))
1170+ self .assertEquals (self .baseb .get_state ().slug ,'expired' )
1171+ repljson = '{"%d":"%s","%d":"%s"}' % (DocAlias .objects .get (name = self .basea .name ).id ,self .basea .name ,
1172+ DocAlias .objects .get (name = self .baseb .name ).id ,self .baseb .name )
1173+ r = self .client .post (url , dict (replaces = repljson ))
1174+ self .assertEquals (r .status_code , 302 )
1175+ self .assertEquals (Document .objects .get (name = 'draft-test-base-a' ).get_state ().slug ,'repl' )
1176+ self .assertEquals (Document .objects .get (name = 'draft-test-base-b' ).get_state ().slug ,'repl' )
1177+
1178+ # Post that undoes replaceboth
1179+ repljson = '{}'
1180+ r = self .client .post (url , dict (replaces = repljson ))
1181+ self .assertEquals (r .status_code , 302 )
1182+ self .assertEquals (Document .objects .get (name = 'draft-test-base-a' ).get_state ().slug ,'repl' ) # Because A is still also replaced by replacea
1183+ self .assertEquals (Document .objects .get (name = 'draft-test-base-b' ).get_state ().slug ,'expired' )
1184+
1185+ # Post that undoes replacea
1186+ url = urlreverse ('doc_change_replaces' , kwargs = dict (name = self .replacea .name ))
1187+ r = self .client .post (url , dict (replaces = repljson ))
1188+ self .assertEquals (r .status_code , 302 )
1189+ self .assertEquals (Document .objects .get (name = 'draft-test-base-a' ).get_state ().slug ,'active' )
1190+
0 commit comments