- block:
    - name: Create a group to chown to
      group:
        name: testgroup
      register: testgroup

    - name: Create a user to chown to
      user:
        name: testuser
        groups:
        - testgroup
      register: testuser

    - set_fact:
        outdir: '{{remote_tmp_dir}}/test-unarchive-{{ ext | replace(".", "_") }}'

    - debug:
        msg: Username test

    # username
    - name: create our unarchive destinations
      file:
        path: '{{outdir}}'
        state: directory

    - name: unarchive a file
      unarchive:
        src: '{{remote_tmp_dir}}/{{archive}}'
        dest: '{{outdir}}'
        list_files: True
        remote_src: yes
        owner: testuser

    - name: stat an output file
      stat:
        path: '{{outdir}}/{{testfile}}'
      register: stat

    - name: verify that the file has the right owner
      assert:
        that:
          - stat.stat.exists
          - stat.stat.pw_name == testuser.name
          - stat.stat.uid == testuser.uid

    - name: nuke destination
      file:
        path: '{{outdir}}'
        state: absent

    - debug:
        msg: uid test

    # uid
    - name: create our unarchive destinations
      file:
        path: '{{outdir}}'
        state: directory

    - name: unarchive a file
      unarchive:
        src: '{{remote_tmp_dir}}/{{archive}}'
        dest: '{{outdir}}'
        list_files: True
        remote_src: yes
        owner: '{{ testuser.uid }}'

    - name: stat an output file
      stat:
        path: '{{outdir}}/{{testfile}}'
      register: stat

    - name: verify that the file has the right owner
      assert:
        that:
          - stat.stat.exists
          - stat.stat.pw_name == testuser.name
          - stat.stat.uid == testuser.uid

    - name: nuke destination
      file:
        path: '{{outdir}}'
        state: absent

    - debug:
        msg: groupname test

    # groupname
    - name: create our unarchive destinations
      file:
        path: '{{outdir}}'
        state: directory

    - name: unarchive a file
      unarchive:
        src: '{{remote_tmp_dir}}/{{archive}}'
        dest: '{{outdir}}'
        list_files: True
        remote_src: yes
        group: testgroup

    - name: stat an output file
      stat:
        path: '{{outdir}}/{{testfile}}'
      register: stat

    - name: verify that the file has the right owner
      assert:
        that:
          - stat.stat.exists
          - stat.stat.gr_name == testgroup.name
          - stat.stat.gid == testgroup.gid

    - name: nuke destination
      file:
        path: '{{outdir}}'
        state: absent

    - debug:
        msg: gid test

    # gid
    - name: create our unarchive destinations
      file:
        path: '{{outdir}}'
        state: directory

    - name: unarchive a file
      unarchive:
        src: '{{remote_tmp_dir}}/{{archive}}'
        dest: '{{outdir}}'
        list_files: True
        remote_src: yes
        group: '{{ testgroup.gid }}'

    - name: stat an output file
      stat:
        path: '{{outdir}}/{{testfile}}'
      register: stat

    - name: verify that the file has the right owner
      assert:
        that:
          - stat.stat.exists
          - stat.stat.gr_name == testgroup.name
          - stat.stat.gid == testgroup.gid

    - name: nuke destination
      file:
        path: '{{outdir}}'
        state: absent

  always:
    - name: Remove testuser
      user:
        name: testuser
        state: absent
        remove: yes
        force: yes

    - name: Remove testgroup
      group:
        name: testgroup
        state: absent
