@@ -897,6 +897,87 @@ def test_ad_create_view(self):
897897 Advertisement .objects .filter (flight = self .flight , name = "New Name" ).exists ()
898898 )
899899
900+ def test_ad_delete_view (self ):
901+ url = reverse (
902+ "advertisement_remove" ,
903+ kwargs = {
904+ "advertiser_slug" : self .advertiser .slug ,
905+ "flight_slug" : self .flight .slug ,
906+ "advertisement_slug" : self .ad1 .slug ,
907+ },
908+ )
909+
910+ # Anonymous - no access
911+ response = self .client .get (url )
912+ self .assertEqual (response .status_code , 302 )
913+ self .assertTrue (response ["location" ].startswith ("/accounts/login/" ))
914+
915+ self .client .force_login (self .user )
916+
917+ # Make it a reporter who can't access
918+ member = UserAdvertiserMember .objects .get (user = self .user , advertiser = self .advertiser )
919+ member .role = UserAdvertiserMember .ROLE_REPORTER
920+ member .save ()
921+
922+ response = self .client .get (url )
923+ self .assertEqual (response .status_code , 403 )
924+
925+ member .role = UserAdvertiserMember .ROLE_MANAGER
926+ member .save ()
927+
928+ response = self .client .get (url )
929+ self .assertEqual (response .status_code , 200 )
930+ self .assertContains (response , "Remove advertisement" )
931+
932+ # Can remove ad1 - no impressions
933+ response = self .client .post (url , data = {}, follow = True )
934+ self .assertEqual (response .status_code , 200 )
935+ self .assertContains (response , "Successfully removed advertisement" )
936+
937+ self .assertFalse (
938+ Advertisement .objects .filter (pk = self .ad1 .pk ).exists ()
939+ )
940+
941+ def test_ad_delete_view_fail (self ):
942+ url = reverse (
943+ "advertisement_remove" ,
944+ kwargs = {
945+ "advertiser_slug" : self .advertiser .slug ,
946+ "flight_slug" : self .flight .slug ,
947+ "advertisement_slug" : self .ad1 .slug ,
948+ },
949+ )
950+
951+ self .client .force_login (self .user )
952+ member = UserAdvertiserMember .objects .get (user = self .user , advertiser = self .advertiser )
953+ member .role = UserAdvertiserMember .ROLE_MANAGER
954+ member .save ()
955+
956+ response = self .client .get (url )
957+ self .assertEqual (response .status_code , 200 )
958+ self .assertContains (response , "Remove advertisement" )
959+
960+ # Add an offer to ad1 so it can't be removed
961+ request = self .factory .get ("/" )
962+ self .ad1 .offer_ad (
963+ request = request ,
964+ publisher = self .publisher ,
965+ ad_type_slug = self .ad_type1 ,
966+ div_id = "foo" ,
967+ keywords = None ,
968+ )
969+
970+ response = self .client .get (url )
971+ self .assertEqual (response .status_code , 404 )
972+
973+ # Can't remove ad1 with a POST either
974+ response = self .client .post (url , data = {})
975+ self .assertEqual (response .status_code , 404 )
976+
977+ self .assertTrue (
978+ Advertisement .objects .filter (pk = self .ad1 .pk ).exists ()
979+ )
980+
900981 def test_ad_bulk_create_view (self ):
901982 url = reverse (
902983 "advertisement_bulk_create" ,
0 commit comments