Trigger on PostGIS line layer occurs twice
You are using an AFTER trigger - thus any action will have already taken place and the UPDATE will actually run twice: once the for the "original" statement and then again from within your trigger. 

It seems to be, you actually want a BEFORE trigger. And there you just assign values to the NEW row, rather than UPDATEing the table itself.

So I think what you are looking for is something like this: 

CREATE or REPLACE FUNCTION test.test_track_history_tracker() 
  RETURNS trigger AS
$new_test_track_history_tracker$
BEGIN
  -- INSERT

  IF (TG_OP = 'INSERT') THEN
     INSERT INTO test."Conduite_test_history"
        (diametre, type, materiau, origininfo, dtreno, dtpose, reparateur, dt_dmd, id_sig, gid_org, created, created_by, modified, etat, geom)
     VALUES
         (NEW.diametre, NEW.type, NEW.materiau, NEW.origininfo, NEW.dtreno, NEW.dtpose, NEW.reparateur, NEW.dt_dmd, NEW.id_sig, NEW.gid, current_timestamp,
         current_user, FALSE, 'CREATION', NEW.geom);
     raise notice 'Insert happened';

     -- continue with the INSERT
     RETURN NEW;

  -- UPDATE
  ELSEIF (TG_OP = 'UPDATE') THEN
     -- this IF is equivalent to your WHERE statement 
     IF new.deleted IS NULL THEN 
       new.deleted := current_timestamp;
       new.deleted_by := current_user;
       new.modified := true; 
       new.eta := 'MODIFICATION ARCHIVEE';
     END IF;

     INSERT INTO test."Conduite_test_history"
         (diametre, type, materiau, origininfo, dtreno, dtpose, reparateur, dt_dmd, id_sig, gid_org, created, created_by, modified, etat, geom)
     VALUES
         (NEW.diametre, NEW.type, NEW.materiau, NEW.origininfo, NEW.dtreno, NEW.dtpose, NEW.reparateur, NEW.dt_dmd, NEW.id_sig, NEW.gid, current_timestamp,
         current_user, FALSE, 'MODIFICATION COURANTE', NEW.geom);
     raise notice 'Update happened';

     RETURN NEW; -- continue with the UPDATE
  -- DELETE
  ELSEIF (TG_OP = 'DELETE') THEN

     -- this is correct: it will turn the DELETE into an UPDATE
     UPDATE test."Conduite_test_history"
        SET deleted = current_timestamp, deleted_by = current_user, etat = 'SUPPRESSION'
     WHERE deleted is NULL and gid_org = OLD.gid;
     raise notice 'Delete happened';

     RETURN NULL; -- this will prevent the actual DELETE in t
  END IF;
END;
$new_test_track_history_tracker$ 
LANGUAGE plpgsql;


And then create a BEFORE trigger using that trigger function:


--ADD TRIGGER
DROP TRIGGER IF EXISTS trg_test_track_history_tracker ON test."Conduite_test";
CREATE TRIGGER trg_test_track_history_tracker 
  BEFORE 
       INSERT OR UPDATE OR DELETE ON test."Conduite_test"
  FOR EACH ROW EXECUTE PROCEDURE test.test_track_history_tracker();