---
- name: test listen with named handlers
  hosts: localhost
  gather_facts: false
  connection: local
  tasks:
    - name: test notify handlers listen
      command: uptime
      notify:
        - notify_listen
    - meta: flush_handlers
    - name: verify test notify handlers listen
      assert:
        that:
          - "notify_listen_ran_1_1 is defined"
          - "notify_listen_ran_1_2 is defined"
  handlers:
    - name: notify_handler_ran_1_1
      set_fact:
        notify_listen_ran_1_1: True
      listen: notify_listen
    - name: notify_handler_ran_1_2
      set_fact:
        notify_listen_ran_1_2: True
      listen: notify_listen

- name: test listen unnamed handlers
  hosts: localhost
  gather_facts: false
  connection: local
  pre_tasks:
    - name: notify some handlers
      command: echo foo
      notify:
        - notify_listen
  tasks:
    - meta: flush_handlers
    - name: assert all defined handlers ran without error
      assert:
        that:
          - "notify_listen_ran_1 is defined"
          - "notify_listen_ran_2 is defined"
  handlers:
    - set_fact:
        notify_listen_ran_1: True
      listen: notify_listen
    - set_fact:
        notify_listen_ran_2: True
      listen: notify_listen

- name: test with mixed notify by name and listen
  hosts: localhost
  gather_facts: false
  connection: local
  tasks:
    - name: test notify handlers names and identical listen
      command: uptime
      notify:
        - notify_listen
    - meta: flush_handlers
    - name: verify test notify handlers names and identical listen
      assert:
        that:
          - "notify_handler_name_ran_3 is defined"
          - "notify_handler_name_ran_3_1 is not defined"
          - "notify_listen_ran_3_2 is defined"
          - "notify_listen_ran_3_3 is defined"
          - "not_notify_listen_3_4 is not defined"
  handlers:
    - name: notify_listen
      set_fact:
        notify_handler_name_ran_3: True
    # this will not run as we have a handler with a identical name notified first
    - name: notify_listen
      set_fact:
        notify_handler_name_ran_3_1: True
    - name: notify_handler_ran_3_2
      set_fact:
        notify_listen_ran_3_2: True
      listen: notify_listen
    - name: notify_handler_ran_3_3
      set_fact:
        notify_listen_ran_3_3: True
      listen: notify_listen
    # this one is not notified
    - name: not_notify_listen_3_4
      set_fact:
        not_notify_listen_3_4: True
      listen: not_notified

- name: test listen in roles
  hosts: localhost
  gather_facts: false
  connection: local
  roles:
    - role: test_handlers_listen
  tasks:
    - name: test notify handlers listen in roles
      command: uptime
      notify:
        - notify_listen
    - meta: flush_handlers
    - name: verify test notify handlers listen in roles
      assert:
        that:
          - "notify_listen_ran_4_1 is defined"
          - "notify_listen_ran_4_2 is defined"
          - "notify_listen_ran_4_3 is defined"
          - "notify_listen_in_role_4 is defined"
          - "notify_listen_from_role_4 is defined"
  handlers:
    - name: notify_listen_ran_4_1
      set_fact:
        notify_listen_ran_4_1: True
      listen: notify_listen
    - name: notify_listen_ran_4_2
      set_fact:
        notify_listen_ran_4_2: True
      listen: notify_listen
    - name: notify_listen_from_role_4
      set_fact:
        notify_listen_from_role_4: True
      listen: notify_listen_from_role
