---
- name: Test automountmap
  hosts: "{{ ipa_test_host | default('ipaserver') }}"
  become: no
  gather_facts: no

  tasks:
  # setup environment
  - name: Ensure test maps are absent
    ipaautomountmap:
      ipaadmin_password: SomeADMINpassword
      name:
        - TestMap01
        - TestMap02
      location: TestLocation
      state: absent

  - name: Ensure location TestLocation is absent
    ipaautomountlocation:
      ipaadmin_password: SomeADMINpassword
      name: TestLocation
      state: absent

  - name: Ensure map TestMap is absent
    ipaautomountmap:
      ipaadmin_password: SomeADMINpassword
      name: TestMap
      location: TestLocation
      state: absent

  - name: Ensure location TestLocation is present
    ipaautomountlocation:
      ipaadmin_password: SomeADMINpassword
      name: TestLocation
      state: present

  # TESTS
  - name: Execute Automount Map tests
    block:
    - name: Ensure map TestMap is present
      ipaautomountmap:
        ipaadmin_password: SomeADMINpassword
        name: TestMap
        location: TestLocation
        desc: "this is a test map that should be deleted by the test"
      register: result
      failed_when: result.failed or not result.changed

    - name: Ensure map TestMap is present again
      ipaautomountmap:
        ipaadmin_password: SomeADMINpassword
        name: TestMap
        location: TestLocation
      register: result
      failed_when: result.failed or result.changed

    - name: Ensure map TestMap has a different description
      ipaautomountmap:
        ipaadmin_password: SomeADMINpassword
        name: TestMap
        location: TestLocation
        desc: "this is a changed description that should be deleted by the test"
      register: result
      failed_when: result.failed or not result.changed

    - name: Ensure map TestMap has a different description, again
      ipaautomountmap:
        ipaadmin_password: SomeADMINpassword
        name: TestMap
        location: TestLocation
        desc: "this is a changed description that should be deleted by the test"
      register: result
      failed_when: result.failed or result.changed

    - name: Ensure map TestMap has an empty description
      ipaautomountmap:
        ipaadmin_password: SomeADMINpassword
        name: TestMap
        location: TestLocation
        desc: ""
      register: result
      failed_when: result.failed or not result.changed

    - name: Ensure map TestMap has an empty description, again
      ipaautomountmap:
        ipaadmin_password: SomeADMINpassword
        name: TestMap
        location: TestLocation
        desc: ""
      register: result
      failed_when: result.failed or result.changed

    - name: Ensure map TestMap is removed
      ipaautomountmap:
        ipaadmin_password: SomeADMINpassword
        name: TestMap
        location: TestLocation
        state: absent
      register: result
      failed_when: result.failed or not result.changed

    - name: Ensure map TestMap has been removed
      ipaautomountmap:
        ipaadmin_password: SomeADMINpassword
        name: TestMap
        location: TestLocation
        state: absent
      register: result
      failed_when: result.failed or result.changed

    - name: Ensure map TestMap01 is present
      ipaautomountmap:
        ipaadmin_password: SomeADMINpassword
        name: TestMap01
        location: TestLocation
        desc: "this is a changed description that should be deleted by the test"
      register: result
      failed_when: result.failed or not result.changed

    - name: Ensure map TestMap02 is present
      ipaautomountmap:
        ipaadmin_password: SomeADMINpassword
        name: TestMap02
        location: TestLocation
        desc: "this is a changed description that should be deleted by the test"
      register: result
      failed_when: result.failed or not result.changed

    - name: Ensure TestMap01 and TestMap02 are both absent
      ipaautomountmap:
        ipaadmin_password: SomeADMINpassword
        name:
          - TestMap01
          - TestMap02
        location: TestLocation
        state: absent
      register: result
      failed_when: result.failed or not result.changed

    - name: Ensure TestMap01 and TestMap02 are both absent again
      ipaautomountmap:
        ipaadmin_password: SomeADMINpassword
        name:
          - TestMap01
          - TestMap02
        location: TestLocation
        state: absent
      register: result
      failed_when: result.failed or result.changed

    # CLEAN UP
    always:
    - name: Ensure test maps are absent
      ipaautomountmap:
        ipaadmin_password: SomeADMINpassword
        name:
          - TestMap01
          - TestMap02
        location: TestLocation
        state: absent

    - name: Ensure location TestLocation is absent
      ipaautomountlocation:
        ipaadmin_password: SomeADMINpassword
        name: TestLocation
        state: absent
