@@ -258,7 +258,7 @@ func TestParseCSV_EntityDeduplication_DifferentGUIDs(t *testing.T) {
258258func TestRun_NoTargets (t * testing.T ) {
259259 mock := & mockNG {}
260260 var out bytes.Buffer
261- if err := Run (context .Background (), mock , nil , false , & out , strings .NewReader ("" )); err != nil {
261+ if err := Run (context .Background (), mock , nil , nil , false , & out , strings .NewReader ("" )); err != nil {
262262 t .Fatalf ("unexpected error: %v" , err )
263263 }
264264 if mock .callCount () != 0 {
@@ -272,7 +272,7 @@ func TestRun_DryRun(t *testing.T) {
272272 }
273273 mock := & mockNG {}
274274 var out bytes.Buffer
275- if err := Run (context .Background (), mock , targets , true , & out , strings .NewReader ("" )); err != nil {
275+ if err := Run (context .Background (), mock , nil , targets , true , & out , strings .NewReader ("" )); err != nil {
276276 t .Fatalf ("unexpected error: %v" , err )
277277 }
278278 if mock .callCount () != 0 {
@@ -289,7 +289,7 @@ func TestRun_WrongConfirmation(t *testing.T) {
289289 }
290290 mock := & mockNG {}
291291 var out bytes.Buffer
292- if err := Run (context .Background (), mock , targets , false , & out , strings .NewReader ("yes\n " )); err == nil {
292+ if err := Run (context .Background (), mock , nil , targets , false , & out , strings .NewReader ("yes\n " )); err == nil {
293293 t .Fatal ("expected error for wrong confirmation, got nil" )
294294 }
295295 if mock .callCount () != 0 {
@@ -303,7 +303,7 @@ func TestRun_CorrectConfirmation_NRQLCondition(t *testing.T) {
303303 }
304304 mock := & mockNG {}
305305 var out bytes.Buffer
306- if err := Run (context .Background (), mock , targets , false , & out , strings .NewReader ("delete 1 assets\n " )); err != nil {
306+ if err := Run (context .Background (), mock , nil , targets , false , & out , strings .NewReader ("delete 1 assets\n " )); err != nil {
307307 t .Fatalf ("unexpected error: %v" , err )
308308 }
309309 if mock .callCount () != 1 {
@@ -324,7 +324,7 @@ func TestRun_CorrectConfirmation_AlertPolicy(t *testing.T) {
324324 }
325325 mock := & mockNG {}
326326 var out bytes.Buffer
327- if err := Run (context .Background (), mock , targets , false , & out , strings .NewReader ("delete 1 assets\n " )); err != nil {
327+ if err := Run (context .Background (), mock , nil , targets , false , & out , strings .NewReader ("delete 1 assets\n " )); err != nil {
328328 t .Fatalf ("unexpected error: %v" , err )
329329 }
330330 vars := mock .callVars (0 )
@@ -342,7 +342,7 @@ func TestRun_CorrectConfirmation_WorkloadEntity(t *testing.T) {
342342 `{}` , // update response
343343 )
344344 var out bytes.Buffer
345- if err := Run (context .Background (), mock , targets , false , & out , strings .NewReader ("delete 1 assets\n " )); err != nil {
345+ if err := Run (context .Background (), mock , nil , targets , false , & out , strings .NewReader ("delete 1 assets\n " )); err != nil {
346346 t .Fatalf ("unexpected error: %v" , err )
347347 }
348348 if mock .callCount () != 2 {
@@ -362,7 +362,7 @@ func TestRun_CorrectConfirmation_WorkflowEntity(t *testing.T) {
362362 }
363363 mock := newMock (workflowFetchResp ("wf-1" , predicates ), workflowUpdateOKResp ())
364364 var out bytes.Buffer
365- if err := Run (context .Background (), mock , targets , false , & out , strings .NewReader ("delete 1 assets\n " )); err != nil {
365+ if err := Run (context .Background (), mock , nil , targets , false , & out , strings .NewReader ("delete 1 assets\n " )); err != nil {
366366 t .Fatalf ("unexpected error: %v" , err )
367367 }
368368 if mock .callCount () != 2 {
@@ -380,7 +380,7 @@ func TestRun_PartialFailure_ReportsError(t *testing.T) {
380380 }
381381 mock := & mockNG {err : errors .New ("API unavailable" )}
382382 var out bytes.Buffer
383- err := Run (context .Background (), mock , targets , false , & out , strings .NewReader ("delete 2 assets\n " ))
383+ err := Run (context .Background (), mock , nil , targets , false , & out , strings .NewReader ("delete 2 assets\n " ))
384384 if err == nil {
385385 t .Fatal ("expected error when deletions fail" )
386386 }
@@ -565,7 +565,7 @@ func TestRemoveWorkflowEntity_WorkflowNotFound(t *testing.T) {
565565
566566func TestDeleteAsset_UnsupportedType (t * testing.T ) {
567567 mock := newMock ()
568- err := deleteAsset (context .Background (), mock , Target {
568+ err := deleteAsset (context .Background (), mock , nil , Target {
569569 AssetType : "unsupported_type" ,
570570 AssetID : "123" ,
571571 })
@@ -635,7 +635,7 @@ func TestRun_CorrectConfirmation_SyntheticsMonitor(t *testing.T) {
635635 }
636636 mock := newMock (`{"syntheticsDeleteMonitor":{"deletedGuid":"MON-GUID-42"}}` )
637637 var out bytes.Buffer
638- if err := Run (context .Background (), mock , targets , false , & out , strings .NewReader ("delete 1 assets\n " )); err != nil {
638+ if err := Run (context .Background (), mock , nil , targets , false , & out , strings .NewReader ("delete 1 assets\n " )); err != nil {
639639 t .Fatalf ("unexpected error: %v" , err )
640640 }
641641 if mock .callCount () != 1 {
@@ -649,3 +649,84 @@ func TestRun_CorrectConfirmation_SyntheticsMonitor(t *testing.T) {
649649 t .Errorf ("expected OK in output, got: %q" , out .String ())
650650 }
651651}
652+
653+ // ── Legacy condition deletion tests ──────────────────────────────────────────
654+
655+ type mockRESTClient struct {
656+ calls []int
657+ err error
658+ }
659+
660+ func (m * mockRESTClient ) DeleteLegacyCondition (_ context.Context , conditionID int ) error {
661+ m .calls = append (m .calls , conditionID )
662+ return m .err
663+ }
664+
665+ func TestParseCSV_LegacyCondition (t * testing.T ) {
666+ csv := makeCSV (
667+ // migration-notice row (id_type empty) — should be matched
668+ configRow ("1" , "Prod" , "legacy_condition" , "10:55" , "Apdex" , "Legacy apm_app_metric condition" ),
669+ // entity-ID row (id_type non-empty) — should be skipped
670+ "1,Prod,legacy_condition,10:55,Apdex,,monitored entities list,appId,111111,false,,," ,
671+ )
672+ targets , err := ParseCSV (strings .NewReader (csv ), []string {"legacy_condition" })
673+ if err != nil {
674+ t .Fatalf ("unexpected error: %v" , err )
675+ }
676+ if len (targets ) != 1 {
677+ t .Fatalf ("got %d targets, want 1 (only migration-notice row)" , len (targets ))
678+ }
679+ if targets [0 ].AssetType != "legacy_condition" {
680+ t .Errorf ("AssetType = %q, want legacy_condition" , targets [0 ].AssetType )
681+ }
682+ if targets [0 ].AssetID != "10:55" {
683+ t .Errorf ("AssetID = %q, want 10:55" , targets [0 ].AssetID )
684+ }
685+ }
686+
687+ func TestDeleteLegacyCondition_Success (t * testing.T ) {
688+ rest := & mockRESTClient {}
689+ if err := deleteLegacyCondition (context .Background (), rest , "10:55" ); err != nil {
690+ t .Fatalf ("unexpected error: %v" , err )
691+ }
692+ if len (rest .calls ) != 1 || rest .calls [0 ] != 55 {
693+ t .Errorf ("expected DeleteLegacyCondition(55), got calls=%v" , rest .calls )
694+ }
695+ }
696+
697+ func TestDeleteLegacyCondition_NilRest (t * testing.T ) {
698+ if err := deleteLegacyCondition (context .Background (), nil , "10:55" ); err == nil {
699+ t .Fatal ("expected error when REST client is nil" )
700+ }
701+ }
702+
703+ func TestDeleteLegacyCondition_BadAssetID (t * testing.T ) {
704+ rest := & mockRESTClient {}
705+ if err := deleteLegacyCondition (context .Background (), rest , "no-colon" ); err == nil {
706+ t .Fatal ("expected error for malformed asset_id" )
707+ }
708+ if len (rest .calls ) != 0 {
709+ t .Errorf ("expected no REST calls on bad asset_id, got %d" , len (rest .calls ))
710+ }
711+ }
712+
713+ func TestRun_LegacyCondition (t * testing.T ) {
714+ targets := []Target {
715+ {AccountID : 1 , AccountName : "Prod" , AssetType : "legacy_condition" , AssetID : "10:55" , AssetName : "Apdex" },
716+ }
717+ ng := & mockNG {}
718+ rest := & mockRESTClient {}
719+ var out bytes.Buffer
720+ if err := Run (context .Background (), ng , rest , targets , false , & out , strings .NewReader ("delete 1 assets\n " )); err != nil {
721+ t .Fatalf ("unexpected error: %v" , err )
722+ }
723+ if ng .callCount () != 0 {
724+ t .Errorf ("expected 0 NerdGraph calls for legacy_condition, got %d" , ng .callCount ())
725+ }
726+ if len (rest .calls ) != 1 || rest .calls [0 ] != 55 {
727+ t .Errorf ("expected REST DeleteLegacyCondition(55), got calls=%v" , rest .calls )
728+ }
729+ if ! strings .Contains (out .String (), "OK" ) {
730+ t .Errorf ("expected OK in output, got: %q" , out .String ())
731+ }
732+ }
0 commit comments