---
- name: tear down old users if they exist (Setup)
  ios_user:
    aggregate:
      - name: ansibletest1
      - name: ansibletest2
      - name: ansibletest3
    state: absent
    authorize: yes
  register: result

- name: Create user (SetUp)
  ios_user:
    name: ansibletest1
    privilege: 15
    role: network-operator
    state: present
    authorize: yes
  register: result

- assert:
    that:
      - 'result.changed == true'
      - 'result.commands == ["username ansibletest1 view network-operator", "username ansibletest1 privilege 15"]'

- name: Collection of users (SetUp)
  ios_user:
    aggregate:
      - name: ansibletest2
      - name: ansibletest3
    authorize: yes
    state: present
    view: network-admin
  register: result

- assert:
    that:
      - 'result.changed == true'
      - 'result.commands == ["username ansibletest2 view network-admin", "username ansibletest3 view network-admin"]'

- name: Add user again (Idempotent)
  ios_user:
    name: ansibletest1
    privilege: 15
    role: network-operator
    state: present
    authorize: yes
  register: result

- assert:
    that:
      - 'result.changed == false'
      - 'result.commands | length == 0'

- name: Add collection of users again (Idempotent)
  ios_user:
    aggregate:
      - name: ansibletest2
      - name: ansibletest3
    authorize: yes
    state: present
    view: network-admin
  register: result

- assert:
    that:
      - 'result.changed == false'
      - 'result.commands | length == 0'

- name: tearDown
  ios_user:
    aggregate:
      - name: ansibletest1
      - name: ansibletest2
      - name: ansibletest3
    state: absent
    authorize: yes
  register: result

- assert:
    that:
      - 'result.changed == true'
      - '"no username ansibletest1" in result.commands[0]'
      - '"no username ansibletest2" in result.commands[1]'
      - '"no username ansibletest3" in result.commands[2]'
