add promotion rule with unittest