@@ -1110,3 +1110,90 @@ def test_changes_with_addtag(self):
11101110 self .assertEqual (rv .status , "200 OK" )
11111111 self .assertEqual (len (data ["changes" ]), 2 )
11121112 self .assertEqual (data ["changes" ], [c .json () for c in self .c .changes ])
1113+
1114+
1115+ class TestViewsTagChanges (ViewBaseTest ):
1116+ maxDiff = None
1117+
1118+ def setup_composes (self ):
1119+ User .create_user (username = "odcs" )
1120+ self .t = Tag .create (
1121+ db .session ,
1122+ "odcs" ,
1123+ name = "test-tag" ,
1124+ description = "A test tag" ,
1125+ documentation = "http://localhost/docs" ,
1126+ )
1127+
1128+ def test_initial_change (self ):
1129+ """After tag creation there is exactly one 'created' change record."""
1130+ with self ._test_request_context (user = "odcs" ):
1131+ rv = self .client .get ("/api/1/tags/test-tag/changes/" )
1132+ data = json .loads (rv .get_data (as_text = True ))
1133+ self .assertEqual (rv .status , "200 OK" )
1134+ self .assertEqual (len (data ["changes" ]), 1 )
1135+ self .assertEqual (data ["changes" ][0 ]["action" ], "created" )
1136+ self .assertEqual (data ["changes" ], [c .json () for c in self .t .changes ])
1137+
1138+ def test_initial_change_by_id (self ):
1139+ """The changes endpoint can also be addressed by numeric tag id."""
1140+ with self ._test_request_context (user = "odcs" ):
1141+ rv = self .client .get ("/api/1/tags/%d/changes/" % self .t .id )
1142+ data = json .loads (rv .get_data (as_text = True ))
1143+ self .assertEqual (rv .status , "200 OK" )
1144+ self .assertEqual (len (data ["changes" ]), 1 )
1145+ self .assertEqual (data ["changes" ], [c .json () for c in self .t .changes ])
1146+
1147+ def test_changes_after_add_tagger (self ):
1148+ """Adding a tagger appends an 'add_tagger' change record."""
1149+ self .t .add_tagger ("odcs" , username = "odcs" )
1150+ with self ._test_request_context (user = "odcs" ):
1151+ rv = self .client .get ("/api/1/tags/test-tag/changes/" )
1152+ data = json .loads (rv .get_data (as_text = True ))
1153+ self .assertEqual (rv .status , "200 OK" )
1154+ self .assertEqual (len (data ["changes" ]), 2 )
1155+ self .assertEqual (data ["changes" ][- 1 ]["action" ], "add_tagger" )
1156+ self .assertEqual (data ["changes" ], [c .json () for c in self .t .changes ])
1157+
1158+ def test_changes_after_remove_tagger (self ):
1159+ """Removing a previously-added tagger appends a 'remove_tagger' change record."""
1160+ self .t .add_tagger ("odcs" , username = "odcs" )
1161+ self .t .remove_tagger ("odcs" , username = "odcs" )
1162+ with self ._test_request_context (user = "odcs" ):
1163+ rv = self .client .get ("/api/1/tags/test-tag/changes/" )
1164+ data = json .loads (rv .get_data (as_text = True ))
1165+ self .assertEqual (rv .status , "200 OK" )
1166+ self .assertEqual (len (data ["changes" ]), 3 )
1167+ self .assertEqual (data ["changes" ][- 1 ]["action" ], "remove_tagger" )
1168+ self .assertEqual (data ["changes" ], [c .json () for c in self .t .changes ])
1169+
1170+ def test_changes_after_add_untagger (self ):
1171+ """Adding an untagger appends an 'add_untagger' change record."""
1172+ self .t .add_untagger ("odcs" , username = "odcs" )
1173+ with self ._test_request_context (user = "odcs" ):
1174+ rv = self .client .get ("/api/1/tags/test-tag/changes/" )
1175+ data = json .loads (rv .get_data (as_text = True ))
1176+ self .assertEqual (rv .status , "200 OK" )
1177+ self .assertEqual (len (data ["changes" ]), 2 )
1178+ self .assertEqual (data ["changes" ][- 1 ]["action" ], "add_untagger" )
1179+ self .assertEqual (data ["changes" ], [c .json () for c in self .t .changes ])
1180+
1181+ def test_changes_after_remove_untagger (self ):
1182+ """Removing a previously-added untagger appends a 'remove_untagger' change record."""
1183+ self .t .add_untagger ("odcs" , username = "odcs" )
1184+ self .t .remove_untagger ("odcs" , username = "odcs" )
1185+ with self ._test_request_context (user = "odcs" ):
1186+ rv = self .client .get ("/api/1/tags/test-tag/changes/" )
1187+ data = json .loads (rv .get_data (as_text = True ))
1188+ self .assertEqual (rv .status , "200 OK" )
1189+ self .assertEqual (len (data ["changes" ]), 3 )
1190+ self .assertEqual (data ["changes" ][- 1 ]["action" ], "remove_untagger" )
1191+ self .assertEqual (data ["changes" ], [c .json () for c in self .t .changes ])
1192+
1193+ def test_tag_not_found (self ):
1194+ """Requesting changes for a non-existent tag returns 404."""
1195+ with self ._test_request_context (user = "odcs" ):
1196+ rv = self .client .get ("/api/1/tags/no-such-tag/changes/" )
1197+ data = json .loads (rv .get_data (as_text = True ))
1198+ self .assertEqual (rv .status , "404 NOT FOUND" )
1199+ self .assertEqual (data ["status" ], 404 )
0 commit comments